Holen Sie sich eine große Anzahl von Blöcken mit web3 (nodejs)

Ich schreibe ein nodejs-Programm, das eine große Anzahl von Blöcken (> 100.000) erhält und jede Transaktion darin betrachtet, um die Daten zu filtern / zu analysieren.

Ich verwende derzeit die getBlock- Funktion von web3 (v1):

eth.getBlock(i, true, handleFunction)

Obwohl die handleFunction asynchron aufgerufen wird, sprengt mein Programm (wenn es nicht manuell gedrosselt wird) 100.000 Anfragen und überhitzt den Infura-Websocket, denke ich ...

Ich habe manuell eine Drosselung vorgenommen, um nur 10 Anfragen zu stellen und zu warten, bis alle bearbeitet sind, und dann mit den nächsten 10 fortzufahren.

Meine Frage: Ich kann mir vorstellen, dass viele Leute mit demselben Problem konfrontiert sind. Gibt es also eine Methode von web3, die besser geeignet ist, um mehrere Blöcke anzufordern? Oder gibt es einen Designaspekt, den ich verbessern kann?

Kommt das Betreiben eines eigenen Light Nodes nicht in Frage?

Antworten (1)

Entschuldigen Sie die Eigenwerbung, aber Sie können QuickBlocks verwenden, um dasselbe viel effektiver zu tun, da es die Blöcke zusätzlich lokal zwischenspeichert, sodass das nächste Mal, wenn Sie dieselbe (oder ähnliche) Abfrage durchführen, die Blöcke lokal sind und daher viel schneller. Wir arbeiten an einem Wrapper für QuickBlocks, der von node.js aufgerufen werden kann, aber das ist noch nicht fertig. Es funktioniert derzeit als Befehlszeile.

Ja, ich habe mir das angesehen, aber ich müsste auf die nodejs-Version warten ... Ich habe ein Setup, in dem ich die Ergebnisse selbst lokal speichere und Dinge wie das Extrahieren bestimmter Felder in eine CSV-Datei usw. usw. mache. Grundsätzlich wäre es viel einfacher, wenn nur etherscan.io mehr Daten exportieren / über ihre API erhalten würde, aber sie haben so strenge Grenzen ...