Zum Beispiel speichert der Vertrag die Adresse, wenn der Token erstellt wird, aber danach könnte der Token-Inhaber den Token oder alle Token an eine andere Brieftasche senden.
Kann ich alle Wallet-Adressen von Token-Inhabern finden, die durch meinen Vertrag erstellt wurden?
Alle Token-Transfers werden durch Aufrufen von Methoden in Ihrem Vertrag durchgeführt - so kann Ihr Vertrag Salden und Konten auf beliebige Weise verfolgen. Wenn Sie die Standardanordnung der Verwendung eines Solidity verwenden mapping
, müssen Sie auch eine separate Liste bekannter Konto-IDs in einem Array führen, damit Sie sie durchlaufen können.
Ich habe ein eigenständiges Open-Source-Tool erstellt, das dasselbe tut.
Nehmen Sie eine Token-Vertragsadresse
Iterieren Sie alle ERC-20- Transfer
Ereignisse für Token mithilfe eth_getLogs
der JSON-RPC-API
Erstellen Sie eine lokale Datenbank dieser Ereignisse
Sie können SQL verwenden, um jeden Kontostand zu jedem Zeitpunkt abzufragen (Blocknummer) - beachten Sie, dass einige Salden möglicherweise Null geworden sind
Die Befehlszeilenanwendung zum Erstellen der Datenbank finden Sie hier
Die zentrale Python-Logik 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.
Sie können das Ereignis beobachten, während es innerhalb einer App passiert, oder innerhalb des Token-Vertrags selbst verwenden:
mapping (uint => mapping (address => uint)) mappedAccounts;
mapping (address => uint)
und dann mapping (uint => address)
, um Adressen zu verfolgen, wie Nick Johnson sagte.
Benutzer3252381