Ich weiß, dass die "internen Transaktionen" nicht in der Blockchain enthalten sind und nur abgerufen werden können, indem die Transaktionen wiedergegeben und CALL
, CALLCODE
und andere ähnliche Opcodes angehört werden. Sowohl Parity als auch Geth stellen hierfür Mittel bereit .
Ich habe jedoch Probleme, eine vollständige Synchronisierung von Geth / Parity durchzuführen. Geth brauchte über einen Monat zum Synchronisieren, verwendet ~800 GB und will seit gestern nicht mehr laufen, weil es mit Fatal: Error starting protocol stack: missing block number for head header hash
. Ich konnte keine Lösung finden, da Resync für mich nicht wirklich eine Option ist. Auf der anderen Seite habe ich vor etwa einer Woche mit der Synchronisierung von Parity begonnen, und der Prozess, der zunächst schnell war, verlangsamte sich bei etwa Block # 2393000 zu einem Kriechen.
Soweit ich weiß, kann ich Warp / Fast Sync nicht verwenden, wenn ich interne Transaktionen erhalten möchte. Außerdem kann ich Infura nicht verwenden, da es keine geeignete JSON-RPC-Schnittstelle bietet. Ich könnte Etherscan verwenden, aber das scheint Betrug zu sein - was bringt ein dezentrales System, wenn Sie Ihre Daten von einem zentralen Endpunkt abrufen? Ich muss es vielleicht verwenden, wenn alles andere fehlschlägt, aber ich würde mich über einige Hinweise freuen. Ich bin mir sicher, dass ich nicht der Einzige bin, der das versucht.
TL;DR: Was ist der schnellste Weg, Knoten zu synchronisieren, damit ich die internen Transaktionen von ihnen abrufen kann? Wenn dies nicht möglich ist, welche anderen Möglichkeiten gibt es, um diese Daten zu erhalten?
Es stellt sich heraus, dass die Parität auf der SSD-Festplatte viel schneller synchronisiert wird .
EDIT : ... ist es, aber das Abrufen interner Transaktionen ist sehr langsam. Kürzlich kam Geth 1.8.0 heraus, das schneller zu synchronisieren scheint (obwohl es auf der Festplatte immer noch sehr langsam ist) und Tracer unterstützt . Wir werden sehen, wie das geht.
Schön,
Gemäß dem Geth-Hilfedokument gibt es drei Möglichkeiten, wie Sie eine Synchronisierung mit dem Netzwerk durchführen können:
--syncmode full: Geth-Client lädt Blockheader + Blockdaten + vollständige Validierung herunter [Wird eth full node genannt]
--syncmode fast: Der Geth-Client lädt Block-Header + Blockdaten + Validierung für die letzten 1.000 Transaktionen herunter.
--syncmode light: Der Geth-Client lädt den aktuellen Status herunter + fragt die Knoten nach Bedarf ab. [Light node [Es wird fehlende Blöcke von vollständigen Knoten anfordern]
Sie können den Syncmode ändern, indem Sie --syncmode zusammen mit der Eingabeaufforderung angeben. schnell ist gut. Aber wenn Sie keine Zeit und keinen Platz haben, versuchen Sie, Licht zu verwenden.
syncmode full
die internen Transaktionen abrufen und suche nach einem schnelleren Weg, dies zu erreichen, da syncmode full
er sehr langsam ist.
Nulik
Johndodo
SELFDESTRUCT
! Ich mache mir keine Sorgen um den Explorer selbst, ich benutze dafür eine Python-App und Neo4j. Das Abrufen der internen TXS aus der Blockchain ist jedoch ... langsam, zumindest über JSON RPC. Wird Ihr Explorer in der Lage sein, interne TXs irgendwie schneller zu bekommen? Wenn ja, würde mich wirklich interessieren, wie...Nulik
geth
, also ist es schnell, obwohl ich mich noch nicht auf die Code-Optimierung konzentriert habe. Die Verarbeitung des Genesis-Blocks mit 8893-Konten dauert einige Minuten, hauptsächlich weil jedes INSERT separat ist und Lookups durchgeführt werden, da ich Adressen durchuint
IDs ersetze, um Platz zu sparen und die Leistung zu steigern. Ich habe mit Neo4j gearbeitet, es ist schnell, aber es macht keinen Sinn, Daten von einem NoSQL-Format (LevelDB) in ein anderes NoSQL-Format wie Neo4j zu exportieren. Der Schlüssel ist, es in SQL zu exportieren, da es viel flexibler ist als NoSQL.Böser Jordan
Thomas JayRush
Johndodo