Rufen Sie alle Konten ab, die mit dem Vertrag interagiert haben

Abgesehen davon, dass jede Transaktion durchlaufen wird, seit der Vertrag abgebaut wurde, gibt es eine Möglichkeit, jedes Konto, das mit einem Vertrag interagiert hat (oder eine Transaktion an eine Adresse gesendet hat), bequem über die Standard-Web3-API abzurufen, die für alle Browser funktioniert (Mist/Metamask /Parität)?

Antworten (1)

Ich hatte genau das gleiche Problem und die einfachste Lösung, die ich gefunden habe, war die Verwendung der Paritätsfunktion trace :

web3.trace.filter({"fromBlock": "STARTING_BLOCK_NUMBER", "toAddress": [YOUR_CONTRACT_ADDRESS]}

Denken Sie daran, die Parität in einem Archivmodus zu starten, um die Vorteile der zusätzlichen Speicherindizierung nutzen zu können:

parity --tracing on --pruning archive
Okay, aber gibt es eine Möglichkeit, dies mit der Standard-API zu tun, die auch mit Metamask/Mist funktioniert?
Ja, aber es ist sehr ineffizient, da es das Durchsuchen aller Transaktionen erfordert. Aus diesem Grund hat die Parität die Indizierung im Ablaufverfolgungsmodus hinzugefügt, um die Suche zu beschleunigen.
Das habe ich befürchtet, es wäre großartig, wenn diese Funktionalität der allgemeinen API hinzugefügt würde.
@SamuelBarnes Jakub hat Grund, dass die allgemeine API wirklich ineffizient ist und Sie viele Probleme mit den asynchronen Funktionen und den Filterfunktionen der API haben werden. Versuchen Sie es zu verwenden oder verwenden Sie eine andere externe API wie etherscan.io
@Gawey Zentralisierte APIs sind nicht gut, die Frage fragt, ob es einen Weg ohne Schleifen gibt. Wir verstehen, dass es das nicht gibt. Ich habe für meinen Anwendungsfall eine Lösung gefunden, die eine Änderung des Vertragsdesigns beinhaltet, aber leider eine vertragsspezifische Lösung ist.