Übertragen Sie ERC20-Token per Ruby

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, dataohne 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

  1. MethodID ist also eine verschlüsselte Funktion von 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?

  1. 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?

  2. Und der letzte Parameter ist die Menge. Was sollen wir tun, um 3 Token in 0000000000000000000000000000000000000000000000000000000000007530.

Antworten (1)

Die ersten vier Bytes des dataFelds 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.

  1. Es sieht so aus, als würden Sie SHA3 anstelle von Keccak-256 verwenden.
  2. Ich bin mir nicht sicher, was Ihre Frage hier ist.
  3. 0x7530 == 30000. Wenn das "3" Token sind, dann verwendet das Token vier Dezimalstellen. (3 * 10^4 == 30000 == 0x7530.)
Danke für die Antwort Kumpel. Und es tut mir leid, denn für mich gehört es immer noch zur Zauberkiste. Frage aktualisiert.
Bitte sehen Sie sich meine Bearbeitung an.
1. Es sollte gleich github.com/phusion/digest-sha3-ruby sein . Aber auf jeden Fall kann ich damit umgehen. 2-3. Ich habe Dezimalzahlen vergessen, nicht alles ist klar. Ich schätze deine Hilfe sehr.