Wie kann ich Transaktionsinformationen wie Gaslimit und Gaspreis von Etherscan abrufen?

Dieser Link zeigt die letzten 500.000 Transaktionen, und wenn Sie auf jede einzelne klicken, öffnet sich eine Seite mit ihren Informationen, einschließlich Gaslimit, Gaspreis, Gebrauchtgas usw.

https://etherscan.io/txs

Wie kann ich die Informationen für alle 500.000 automatisch abrufen, da dies mühsam und nicht praktikabel ist, dies manuell zu tun.

Etherscan bietet dem zugrunde liegenden Knoten eine Proxy-API. Die TX-Quittung gibt Ihnen die von Ihnen aufgelisteten Informationen: etherscan.io/apis#proxy
Beachten Sie, dass die API auf 5 Anfragen/Sekunde begrenzt ist. Wenn Sie wirklich die Details aller 500.000 Transaktionen benötigen, brauchen Sie fast 28 Stunden, um ihre API zu hämmern ... (Das ist, nachdem Sie irgendwie eine Liste der Transaktionen erhalten haben, die in die API eingespeist werden sollen.)
Danke für deine Antwort; Ich verstehe nicht wirklich, wie es funktioniert. Könnten Sie zB ein Beispiel zeigen, um die ersten 1.000 Transaktionen abzurufen? Ich würde das zu schätzen wissen

Antworten (1)

Die API von Etherscan hat keine Methoden, um eine Liste der letzten N Transaktionen zu erhalten. Die Lösung besteht darin, die Blöcke (mit den Transaktionen) herunterzuladen und die Daten daraus zu lesen.

Unter der Annahme von durchschnittlich 250 Transaktionen pro Block (Quelle: https://bitinfocharts.com/ethereum/ ) mit 5 Anfragen pro Sekunde erhalten Sie die Daten in ein paar Stunden.

Dies kann einfach mit Python durchgeführt werden und Sie können diese Tools verwenden:

https://github.com/corpetty/py-etherscan-api

oder

https://github.com/jfdelgad/etherscanAPI in diesem letzten können Sie einfach tun:

aus etherscanAPI importiere etherscan

apikey = 'yourAPIkey'
myapi = etherscan(apikey, 'mainnet')

currentblock = myapi.getBlockNumber()
txlist = []
i = 0
txcount = 0;
while txcount < 1000:
    block = myapi.getBlockByNumber(int(currentblock,16)-i)
    txlist.append(block['transactions'])
    txcount = txcount + len(block['transactions'])
    i = i + 1
    print(txcount)

txlist = [i for sublist in txlist for i in sublist]

dann txlistwird eine Liste von Wörterbüchern angezeigt, die alle Daten der letzten (>) 1000 Transaktionen enthält.

Beispielsweise wird txlis[0] ein Wörterbuch haben:

{'blockHash': '0x60265fe6cffcbd2dc5f3872c4eb151e17919296270210985df3ef2249d99171c',
 'blockNumber': '0x63973b',
 'from': '0x5e032243d507c743b061ef021e2ec7fcc6d3ab89',
 'gas': '0xafc8',
 'gasPrice': '0xcce416600',
 'hash': '0x940cdd338b4ec8f9b2b63c01a88683f8658f9a388d79873c6bb913b34e579dd8',
 'input': '0x',
 'nonce': '0x193dd',
 'r': '0xcffe406e06ac7f5049798785d1ead4d9420aa763838592e275b997d6efb411d7',
 's': '0x5db6e46eae1dae407b4e54c49e50ccb17a41a6569cb848aae021f06d4d7fb450',
 'to': '0xf67fa6500b490a05c29a47b40a9e3b72e3044a15',
 'transactionIndex': '0x0',
 'v': '0x26',
 'value': '0x4563918244f40000'}

und Sie können die Parameter zum Beispiel tun: txlist[0]['gas']

hoffe das hilft

Danke! Ich habe den Fehler TypeError: getBlockNumber() es fehlt 1 erforderliches Positionsargument: 'self'. Welche Attribute hat txlist, die ich ausdrucken kann?
Sie haben Recht, ich habe den Code aktualisiert, um den Fehler zu beheben, ich führe ihn aus und er funktioniert jetzt. Auch die Liste verfügt über Wörterbücher, mit denen beispielsweise die gasTransaktion iin der Liste abgerufen werden kanntxlist[i]['gas']
Hallo Jaime.. Ich frage mich, warum API nicht "Gas used by transaction" druckt, wie hier etherscan.io/tx/… ?
Dies liegt daran, dass der Code die Transaktionen liest und (wenn ich mich nicht irre) der Wert des tatsächlich verbrauchten Gases in der Quittung der Transaktion verfügbar ist. Sie können die aufgerufene API-Methode verwenden, myapi.getTransactionReceipt(txhash)wobei txhash der Hash der Transaktion ist, dann erhalten Sie die Quittung, die den verbrauchten Gaswert enthält.
Im Anschluss daran, Wie kann ich die Transaktionseingabe dekodieren, um zu wissen, welche Methode aufgerufen wurde und welche Argumente (und Argumenttypen) übergeben wurden?
Ich denke, du solltest eine neue Frage stellen. Lassen Sie es mich wissen und ich werde versuchen, es zu beantworten. Das Schreiben von Code in die Kommentare ist nicht einfach.
bitte, siehe meine Frage hier ethereum.stackexchange.com/questions/68225/… . Danke