Wie listet man alle Verträge auf, die sich derzeit in der Blockchain befinden?

Ich kenne eine Möglichkeit, mit Verträgen zu interagieren, indem Sie in der Geth-Schnittstelle den Befehl verwenden:eth.contract(ABI).at(Address)

Dafür muss ich aber vorher ABI und Adresse des Vertrages wissen. Was ist, wenn ich die Verträge durchsuchen möchte, die sich derzeit in der Blockchain befinden (wie das Durchsuchen der Apps im Play-Store)?

Antworten (2)

BEARBEITEN: Diese Antwort erklärt, warum Sie den Quellcode aller Verträge nicht auflisten und anzeigen können. Die Antwort von @Xeenych ist, wie man die Gesamtzahl der Verträge zählt.

Einige Blockchain-Explorer zeigen einige Verträge: Beispiel mit ABI und Quellcode , und Beispiel ohne Quelle (die „Wertübertragungen“ herausfiltern).

Die Blockchain hat nur EVM-Bytecode. In der Regel benötigen Sie den Quellcode des Vertrags, um die ABI zu erhalten, oder der Vertragsautor muss ihn Ihnen zur Verfügung stellen. Siehe Benötige ich einen zusammengestellten Vertrag, nur um die ABI-Definition zu erhalten?

Danke für die Antwort. Aber denken Sie nicht, dass es nicht nur ein nützliches, sondern notwendiges Feature ist? Wird Ethereum diese Funktion jemals haben oder ist diese Funktion nicht möglich? Entschuldigung, wenn es eine dumme Frage ist, ich bin neu in der Blockchain-Technologie.
Dieses "Feature" ist in Ethereum verfügbar: Wenn Sie einen Vertrag schreiben, können Sie seinen Quellcode in den "App Store" hochladen, in dem Sie ihn angezeigt haben möchten , ähnlich wie Sie es mit bestehenden "App Stores" tun müssen. Sie können Ihren Quellcode auch auf Ethereum hochladen, aber etwas wie Swarm ist besser zum Speichern zusätzlicher Daten.
Danke für die nützlichen Links! Ist eine vollständige/anfängliche Blockchain-Synchronisierung eine Möglichkeit, alle Vertragserstellungen zu verfolgen?
Sie können den Quellcode von den Blockchain-Explorern über ihre API herunterladen.

Es gibt zwei Arten von Verträgen:

  1. Verträge, erstellt von gewöhnlichen Adressen
  2. Verträge, erstellt durch andere Verträge

Und es gibt drei Möglichkeiten, Typ-2-Verträge zu finden:

  1. Überprüfen Sie jeden Block und jede Transaktion in einem Block. Nehmen Sie das „to“-Feld einer Transaktion. Holen Sie sich den Code unter der Adresse „to“. Wenn der Code nicht leer ist, handelt es sich um einen Vertrag. Fügen Sie es der Datenbank hinzu, falls noch nicht vorhanden. Das Feld „Von“ sollte immer die gewöhnliche Adresse enthalten. (Es ist interessant zu prüfen, ob dies der Fall ist. Wenn dies nicht der Fall ist, ist es jemandem gelungen, einen privaten Schlüssel eines Vertrags zu erhalten). Daher werden wir nur solche Verträge vom Typ 2 finden, die Transaktionen von gewöhnlichen Adressen hatten.
  2. Jede Transaktion sollte über EVM (Ethereum Virtaul Machine) nachverfolgt und auf Vertragserstellung geprüft werden. Dazu müssen Sie einen speziell gepatchten Geth- oder Paritätsknoten erstellen.
  3. Direktes Lesen der Datenbank des Knotens. Das Datenbankformat wird im Quellcode von geth oder parity angegeben. Es ist LevelDB oder RocksDB. Daran bin ich zunächst gescheitert. Irgendwie wurde meine Datenbank beschädigt und es dauerte mehrere Tage, sie wieder aufzubauen. Aber die Arbeit in dieser Richtung geht weiter.

Zum jetzigen Zeitpunkt (Block ~ 5250000) gibt es ~2350000 Kontrakte in der Ethereum-Blockchain. Mein Suchprogramm funktionierte etwa eine Woche lang.

Hast du callTracer github.com/ethereum/go-ethereum/pull/15516 ausprobiert ? Es ermöglicht das Abrufen aller internen Vertragserstellungen. Der Vorteil ist, dass Sie weder geth patchen noch die db direkt lesen müssen. Ich bin mir nicht sicher, wie schnell es ist, ich denke, mit dem IPC-Abonnement, wie in der PR beschrieben, sollte es ziemlich schnell sein.
Soweit ich weiß, erfordert der API-Aufruf debug_traceTransaction einen vollständigen Geth-Knoten. Nie probiert. Das Synchronisieren des vollständigen Knotens erfordert zu viel Zeit.
Dies ist die eigentliche Antwort.
@mikezter Stimme zu, aber hauptsächlich für den Anwendungsfall, die Anzahl der Verträge zu zählen. Die Frage nach „Durchsuchen der Verträge“ deutete darauf hin, dass sie mehr über die Verträge sehen wollten.