Ich habe nur eine halbautomatische Lösung gefunden , um Token von einer Brieftasche in eine andere zu übertragen.
Aber ich möchte das auf web3js- Weise auf Ruby Stack tun . Könntet ihr mir erklären, wie man genau Daten für das Feld eth_sendTransaction erhält, data
ohne web3js ( contract.transfer.getData("0xCb...", 10, {from: "0x26..."})
) zu verwenden?
UPD.
Ich habe den Punkt über die Komponenten von Daten verstanden.
Lassen Sie uns zum Beispiel die Transaktion 0xd21fa94958692c0aa3523ae9e8984067976483ec57642554a1dda0417e3337e2 abrufen
Eingabedaten:
MethodID: 0xa9059cbb [0]: 000000000000000000000000c1816acca0a3a120fc980c58cb485d41f2b30e8e 1 : 0000000000000000000000000000000000000000000000000000000000007530
keccak256
. Bis dahin versuche ich, dieses Ergebnis mit derselben Logik zu erhalten:Digest::SHA3.new(256).digest('transfer(address,uint256)') => "\xA9\x05\x9C\xBB*\xB0\x9E\xB2\x19X?JY\xA5\xD0b:\xDE4m \x96+\xCDNF\xB1\x1D\xA0G\xC9\x04\x9B"
Warum erhalte ich unterschiedliche Ergebnisse?
Der zweite Parameter ist die Adresse ( 000000000000000000000000c1816AcCA0a3A120fc980c58CB485D41F2B30E8e
). Original ist 0xc1816AcCA0a3A120fc980c58CB485D41F2B30E8e
. Als nächstes trimmen wir ein paar Hex-Zeichen und was sollten wir als nächstes tun, um das gleiche Ergebnis zu erzielen?
Und der letzte Parameter ist die Menge. Was sollen wir tun, um 3 Token in 0000000000000000000000000000000000000000000000000000000000007530
.
Die ersten vier Bytes des data
Felds sollten der Funktionsselektor sein . Der Funktionsselektor sind die ersten vier Bytes des Keccak-256-Hashes der kanonischen Funktionssignatur. In diesem Fall keccak256("transfer(address,uint256)")
( 0xa9059cbb
).
Die nächsten 32 Bytes sollten die Adresse (links aufgefüllt) sein, an die Sie übertragen, und die 32 Bytes danach sollten der Betrag sein.
BEARBEITEN
Basierend auf weiteren Fragen in der bearbeiteten Frage.
Doniv
Benutzer19510
Doniv