Was ist der Sinn des von Geth zurückgegebenen „Vertrags“-Hashs?

Grundfrage:

Wenn ich das tue myContract = eth.contract([abi goes here]), dann bekomme ich Folgendes:

var contract = myContract.new(
  /* args */,
  {
    from: eth.accounts[0],
    data: compiledContract,
    gas: 1000000
  }
)

Ich bekomme zurück:

fullhash=0x830e6922af1008... 
contract=0xA94C943B7b...

Wofür wird dieser contractHashwert eigentlich verwendet?

Antworten (3)

Das könnte helfen

Tatsächlich führt die Erstellung eines Vertrags zu einem vollständigen Hash, der die Absenderadresse und Nonce enthält; die contractAdresse wird dann genommen, 0xgefolgt von den letzten 20 Bytes dieses Hashs. Dies ist sofort bei Vertragserstellung bekannt, da es nur von der Absenderadresse und Nonce abhängt, und wird in die Blockchain aufgenommen, sobald die Transaktion erfolgreich abgebaut wurde.

durch Weglassen des bis-Felds wird ein Vertrag erstellt. Doch wie wird die Vertragsadresse ermittelt? Nehmen Sie zum Beispiel diese Transaktion

console.log(web3.eth.getTransactionReceipt('0x77a4f46ff7bf8c084c34293fd654c60e107df42c5bcd2666f75c0b47a9352be5').contractAddress);
//0x950041c1599529a9f64cf2be59ffb86072f00111

Die Vertragsadresse ist der letzte 160-Bit-Hash der Absenderadresse und seine Nonce kann vorher bestimmt werden. Für diese Transaktion können Absender und Nonce gefunden werden

var contractTx = web3.eth.getTransaction('0x77a4f46ff7bf8c084c34293fd654c60e107df42c5bcd2666f75c0b47a9352be5');
console.log(contractTx.from);
//0x84f9d8b0e74a7060e20b025c1ea63c2b171bae6f
console.log(contractTx.nonce);
//0

Also die Vertragsadresse ist

console.log('0x' + util.bufferToHex(util.rlphash(['0x84f9d8b0e74a7060e20b025c1ea63c2b171bae6f', 0])).slice(26));
//0x950041c1599529a9f64cf2be59ffb86072f00111

https://medium.com/@codetractio/inside-an-ethereum-transaction-fa94ffca912f

Das bedeutet, dass wir für eine bestimmte Absenderadresse wissen können, was die zukünftigen Adressen für alle von ihr bereitgestellten Verträge sein werden, solange sie sie in der richtigen Reihenfolge (d. h. mit der richtigen Nonce) bereitstellen. Es gibt einige interessante Möglichkeiten, die dies ermöglicht, wie z. B. das Senden von Ether an eine leere Adresse, um einen Vertrag vorzufinanzieren, der später bereitgestellt wird – achten Sie nur darauf, nicht die Gelegenheit zu verpassen, den Vertrag an diese bestimmte Adresse zu senden, oder es würde eine geben keine Chance, es zurückzubekommen - siehe "Verstecken vor aller Augen" hier für weitere Informationen

Das ist im Grunde eine Vertragsadresse, die verwendet wird, wenn Sie mit dem bereitgestellten Vertrag interagieren möchten. Um mit dem bereits bereitgestellten Vertrag zu interagieren, benötigen Sie dessen ABI und Adresse.

Derselbe Vertrag kann mehrmals bereitgestellt werden und kann daher dieselbe ABI haben, aber die Vertragsadresse ist jedes Mal anders. Die Vertragsadresse ist also ein eindeutiges Eigentum des Vertrags.

Die Kontaktadresse wird nicht erstellt, sobald der Vertrag bereitgestellt wird. Es wird erstellt, sobald Sie eine Transaktion zum Erstellen eines Vertrags senden. Sind Sie sicher, dass dies nicht die Vertragsadresse ist? Sie können Ihren Vertrag auf testnet bereitstellen und diese Vertragsadresse mit der Adresse vergleichen, sobald der Vertrag abgeschlossen ist successfully deployed. Ich denke die müssen gleich sein.

Die Vertragsadresse wird zum Zeitpunkt der Vertragsübergabe an das Netzwerk generiert. Die Vertragserstellung ist auch eine Transaktion, daher generiert eth einen Transaktionshash. In Ethereum ist Vertrag ein unüberschaubares Konto.

Der Algorithmus zur Generierung von Ethereum-Vertragsadressen lautet:

Ersteller (Sender) und wie viele Transaktionen der Ersteller gesendet hat (Nonce). Der Absender und die Nonce werden RLP-codiert und dann mit Keccak-256 gehasht.

Weitere Einzelheiten finden Sie unter dem folgenden Link: http://martin.swende.se/blog/Ethereum_quirks_and_vulns.html

Wenn Sie einen Vertrag in Geth bereitgestellt haben, erstellt eth ein Vertragsobjekt. Wenn Sie auf den bereitgestellten Vertrag zugreifen möchten, benötigen Sie eine Identität. Hier ist die Vertragsidentität die Vertragsadresse. Und vollständiger Hash ist Transaktionshash. ABI ist eine JSON-Datei zum einfachen Laden von Methoden, die der bereitgestellte Vertrag enthält. Verwenden Sie also web3js oder einen anderen Client, um diese Methoden aufzurufen. bin sind aktuelle Vertragsanweisungen oder Opcodes.