Sie verfolgen Transfer
die Ereignisse, die von diesem Smart Contract ausgegeben werden. Höchstwahrscheinlich zeichnen sie sie in einer SQL-Datenbank auf und führen ein Hauptbuch, das auf diesen Ereignissen basiert. Das Ereignis ist im ERC20 https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md definiert
Es gibt keine Möglichkeit, diese Informationen direkt aus dem Smart Contract nachzuschlagen. Obwohl die balances
Variable öffentlich ist, unterstützt der mapping
Datentyp in Solidity das Aufzählen der Schlüssel nicht. Das Lesen der Low-Level-Datenbank eines Ethereum-Clients würde auch nicht helfen, da alle Speicherschlüssel gehasht werden, bevor sie persistiert werden.
Ich habe ein eigenständiges Tool erstellt, das dasselbe tut.
Nehmen Sie eine Token-Vertragsadresse
Iterieren Sie alle Transfer
Ereignisse für Token mithilfe eth_getLogs
der JSON-RPC-API
Erstellen Sie eine lokale Datenbank dieser Ereignisse
Ermöglichen Sie die Verwendung von SQL zur Abfrage jedes Kontostands zu jedem Zeitpunkt (Blocknummer)
Die Befehlszeilenanwendung zum Erstellen der Datenbank finden Sie hier
Die Python-Kernlogik ist hier .
Hier und da gibt es einige Macken: Zum Beispiel ist das Erkennen von Mint- / Erstellungsereignissen für einige Token nicht einfach. Daher werden Sie möglicherweise einen negativen Saldo auf dem Konto erhalten, das die anfängliche Gesamtlieferung erhält, wenn Sie sich Transfer
nur auf das Ereignis verlassen.
Da die ERC20-Token-Verteilung in einer Variablen innerhalb des Token-Smart-Contracts gespeichert wird balances
und als Variable öffentlich ist, können Sie durch Auflisten der Transaktionen in
alle out
Adressen der haltenden Token kennen. Da das Lesen eines variablen Zustands kein Gas kostet, können Sie dies fast kostenlos durchführen (abgesehen von der Energie, die Sie zum Durchführen der Überprüfungen benötigen).
Eine andere Lösung besteht darin, einen synchronisierten Knoten zu hosten, in dem Sie dann den Zustand des balances
Inneren der EVM überprüfen können.
Es gibt einen kostenlosen API-Anbieter, der diese Informationen enthält (kostenloser API-Schlüssel erforderlich): https://ethplorer.io/ https://github.com/EverexIO/Ethplorer/wiki/Ethplorer-API#get-token-info
Linmao-Lied
Hossein
medwedew1088
ein Bett
gute Stimmung
Transfer
jedes Mal ein Ereignis ausgeben sollten, wenn Sie diebalanceOf
Zuordnung ändern (und selbst wenn dies der Fall wäre, gibt es keine praktische Möglichkeit, dies zu erzwingen). Das Aussenden dieses Ereignisses liegt in der Verantwortung des Programmierers. Ein guter Programmierer würde es in jeder Funktion hinzufügen, die das Mapping ändert, und ein schlechter Programmierer könnte es sogar bei jeder dieser Funktionen weglassen.flcoder
transfer
auchtransferFrom
intern anrufen ,_transfer
was dasTransfer
Ereignis ausgibt.