Wie finde ich alle Token-Inhaber?

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?

sehr cool .. Irgendein Beispiel für 'IDS IN ARRAY' zusammen mit der Get-Funktion, um sie zu sehen? Ich bin nicht so vertraut mit Mapping, kann mich nicht wirklich damit auskennen.

Antworten (3)

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.

Wie komme ich an einen Außenvertrag?

Ich habe ein eigenständiges Open-Source-Tool erstellt, das dasselbe tut.

  • Nehmen Sie eine Token-Vertragsadresse

  • Iterieren Sie alle ERC-20- TransferEreignisse für Token mithilfe eth_getLogsder 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 Transfernur auf das Ereignis verlassen.

Ich frage mich, ob dies immer noch funktioniert, da ich sehe, dass die Dokumentseite jetzt 404 gibt, docs.tokenmarket.net/erc-20-holders.html ?

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;
Das ist keine Event-Definition oder ein Event-Emitter. Ihre Antwort ist verwirrend. Vielleicht könnten Sie weitere Informationen hinzufügen.
Ich denke, er beabsichtigte eine Art umgekehrten Index wie mapping (address => uint)und dann mapping (uint => address), um Adressen zu verfolgen, wie Nick Johnson sagte.