Wie kann man den Hex-Code kennen, der in Daten verwendet werden soll, um eine bestimmte Vertragsfunktion aufzurufen?

Auf der BAT ico-Site können Sie beispielsweise die Crowdsale-Vertragsadresse , die ABI und auch eine Zeichenfolge sehen, die Sie im Datenteil Ihrer Transaktion verwenden können, wenn Sie die Vertragsfunktion nicht mit der ABI aufrufen möchten.

Die in die Transaktion einzufügenden Daten sind 0xb4427263, was der Funktion createTokens() entspricht.

Wie haben sie es geschafft, diesen 0xb4427263-Hex-Wert zu erhalten? Mussten sie zuerst eine Transaktion mit dem ABI durchführen und dann die Daten aus der Transaktion abrufen, oder gibt es eine direkte Möglichkeit, den Wert zu erhalten, ohne eine Transaktion zu senden?

Diese Informationen befinden sich in dieser Frage ethereum.stackexchange.com/questions/234/…

Antworten (1)

Für dieses spezielle Beispiel nehmen Sie die Methodensignatur createToken()und berechnen ihren SHA3-Hash 0xb4427263722d66ea37c3d76cba9c56b0f1a7d6e049effc1f9f75567547fd47eb, dann nehmen Sie die ersten 4 Bytes (8 Hexadezimalzeichen) davon und Sie haben 0xb4427263. Da es keine zu übergebenden Argumente gibt, sind das alle Daten.

web3.sha3("createTokens()").substr(0,10)

Die vollständigen Spezifikationen für diese Kodierung finden Sie unter https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI