ERC20-Token-Transaktionsverlauf vom Ethereum-Knoten

Ich habe einen Paritätsknoten. Darauf habe ich eine web3.js- Schnittstelle entwickelt.

Ich habe APIs, deren Aufgabe es ist, die Salden und Transaktionen von Adressen abzurufen.

Beispielantwort der Transaktions-API:

{ tx_hash: '0xc4a2db4211686f740885ad72ef5d424f5ba6d953d583ef39382e7c1c594ecab7',
  nonce: 0,
  block_hash: '0xf2b173625cf874387302295f408ef0876c04e5778e6ccacec63fe28ff268f9a3',
  block_number: 5955478,
  transaction_index: 184,
  from: '0xAcc7662daDfCE9dA2C0d8ef7867C15A262c762D7',
  to: '0x3495Ffcee09012AB7D827abF3E3b3ae428a38443',
  value: '0',
  time: '1531467099 Fri, 13 Jul 2018 07:31:39 GMT',
  gas_price: '5000000000',
  gas: 37351,
  input: '0xa9059cbb000000000000000000000000c5c813994f9142d11d73b47e1437c81e27b4dae3000000000000000000000000000000000000000000000000b469471f80140000' }

Wertschlüssel ist nur für Ether/Wei-Transfers.

Für ERC20-Token:

  • Ich hole die toAdresse und vergleiche sie mit einer Liste unterstützter erc20-Vertragsadressen.
  • Wenn es eine Übereinstimmung gibt, war der Transaktionsaufruf an den erc20-Vertrag und es wurde in die Blockchain geschrieben ( contract.send())
  • An diesem Punkt bin ich verloren. Wie finde ich heraus, welche Funktion des ERC20-Standardvertrags aufgerufen wurde?
  • Wie kann ich abrufen, wie viele Token übertragen wurden und an welche Adresse in diesem Aufruf?

Vielen Dank für das Lesen meiner Anfrage. Jede Hilfe wäre wirklich toll. Sie können das verlinkte Git-Projekt frei verwenden.

AKTUALISIEREN

Wenn wir getPastEventsdie Funktion von web3.js verwenden und alle Ereignisse abrufen, kann ein Abgleich aller Transaktionen durchgeführt werden, und ich kann irgendwie herausfinden, wie viele Token wann geliefert wurden.

Dies wird jedoch ein komplizierter Ablauf sein und auf Vertragsbasis erfolgen. Irgendetwas, das das Aufrufen von Ereignissen vermeiden und die Details der erc20-Transaktionen herausfinden kann? Was wäre, wenn der Vertrag kein Ereignis vorsähe?

Wenn ein erc20 während einer Übertragung kein Übertragungsereignis protokolliert, ist es kein erc20. Ein Teil der Spezifikation ist, dass das Token zum Protokollieren dieses Ereignisses erforderlich ist, sodass Sie sich darauf verlassen können, dass es vorhanden ist.

Antworten (1)

mit ethersjs. Dadurch werden alle Übertragungsprotokolle für alle Token im Netzwerk zurückgegeben.

Unter der Haube nimmt es die Signatur des Ereignisses aus dem ABI , das das erste Element ist, das im Themen-Array benötigt wird (die verbleibenden optionalen Argumente sind die indizierten Argumente des Ereignisses).

Anschließend führt er einen RPC-Aufruf für diese Ereignisse an den Knoten durch, den Sie beim Erstellen des Anbieters angegeben haben.

Bei erfolgreicher Antwort parst es die empfangenen Hex-codierten Daten zurück in menschenlesbare Daten, indem es die Typen von der ABI liest.

const provider = new providers.JsonRpcProvider('http...')
const event = (new Interface(StandardToken.abi)).events.Transfer
const topics = [event.topics[0]]
let logs = await provider.getLogs({
  fromBlock: 1,
  toBlock: 'latest',
  topics: topics
})

logs =  logs.map(log => event.parse(log.topics, log.data))