Wie parse ich Blöcke mit Python?

Ich baue ein grundlegendes Analyse-Framework für die Ethereum-Blockchain auf. Als ersten Schritt muss ich die Daten extrahieren und ich möchte dies in Python tun. Ich habe Geth als Client unter OSX verwendet, und so weit ich verstehe, wird die Blockchain lokal ~/Library/Ethereum/chaindatain LevelDB gespeichert, dh in Binärdateien wie 496355.ldb.

  1. Wie parse ich die .ldbDateien? Gibt es eine Python-Bibliothek, die ich dafür verwenden kann? Ich habe mir Pyethereum angesehen, bin mir aber nicht sicher, wo ich suchen soll, da die Dokumentation ziemlich spärlich ist.

  2. Ich kann die etherchain.org-API verwenden , aber dies würde viele API-Aufrufe beinhalten und wahrscheinlich die guten Leute bei etherchain.org unglücklich machen. Aus diesem Grund ziehe ich es vor, die Blockchain so zu analysieren, wie sie lokal auf meinem Computer gespeichert ist. Aber abgesehen von diesem Problem für einen Moment, kennt jemand eine kurze Anleitung zum Ergebnis eines API-Aufrufs für Transaktionsdaten, der zu Daten wie diesen führt:

{'accountNonce': '200642',
   'Betrag': 2678970350000000000,
   'blockHash': '0x47525d00eab0dcd87e9f8b0e9de2fe9f553f72576ef4f892ace49b2832e985bd',
   'block_id': 1039153,
   'gasLimit': 21000,
   'Hash': '0x41bb75d8b20ae7e23fa7457d21a30a4007d0eb97fdb887caac834b759eeb3572',
   'isContractTx': Keine,
   'neuer Vertrag': 0,
   'parentHash': '0x41bb75d8b20ae7e23fa7457d21a30a4007d0eb97fdb887caac834b759eeb3572',
   'Preis': 50000000000,
   'Empfänger': '0x30906581413d556de1a018adbe6cc63c88d58512',
   'Absender': '0x2a65aca4d5fc5b5c859090a6c34d164135398226',
   'Zeit': '2016-02-21T18:53:56.000Z',
   'txIndex': Keine}

Ich glaube, ich verstehe die meisten dieser Daten, würde aber wirklich mehr Informationen schätzen, um die Lücken meines Verständnisses zu schließen.

Antworten (3)

Ich habe einen Bitcoin-Blockchain-Parser implementiert, nachdem ich diesem Blogbeitrag gefolgt bin . Ich habe nicht versucht, es so zu ändern, dass es mit der Ethereum-Blockchain funktioniert, aber vielleicht kann es Ihnen eine Anleitung geben. Hier ist ein Parser, der in Go implementiert ist, um Ihnen hoffentlich einige Ethereum-spezifische Beispiele zu geben, von denen Sie ausgehen können.

Ich hatte zuvor Ihre Blog-Beiträge und Ihr E-Book zum Analysieren von Bitcoin-Blogs gesehen und viel daraus gelernt!
Der Link zum Blogbeitrag funktioniert nicht mehr :-(

Ihr Geth-Knoten fungiert auch als JSON-RPC-Server. Sie können die APIs -Wiki-Seite verwenden , um die Blockchain zu crawlen und Blockdaten zu extrahieren. Hier ist ein interessantes Git-Repo , das Sie forken könnten. Es ist jedoch ein bisschen Show und erfordert einige Codeänderungen, da der Besitzer es nicht mehr pflegt. In diesem Repository finden Sie eine Pull-Anforderung, die wesentlich schneller ausgeführt wird, jedoch mehr Änderungen erfordert, um zu funktionieren.

Da Sie die Ergebnisse in Python möchten, können Sie sich mit web3.py * über IPC mit Ihrer Geth-Instanz verbinden . Es würde in etwa so aussehen :

>>> from web3.auto import w3

>>> w3.eth.getBlock(2000000)
AttributeDict({
    'difficulty': 49824742724615,
    'extraData': '0xe4b883e5bda9e7a59ee4bb99e9b1bc',
    'gasLimit': 4712388,
    'gasUsed': 21000,
    'hash': '0xc0f4906fea23cf6f3cce98cb44e8e1449e455b28d684dfa9ff65426495584de6',
    'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
    'miner': '0x61c808d82a3ac53231750dadc13c777b59310bd9',
    'nonce': '0x3b05c6d5524209f1',
    'number': 2000000,
    'parentHash': '0x57ebf07eb9ed1137d41447020a25e51d30a0c272b5896571499c82c33ecb7288',
    'receiptRoot': '0x84aea4a7aad5c5899bd5cfc7f309cc379009d30179316a2a7baa4a2ea4a438ac',
    'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
    'size': 650,
    'stateRoot': '0x96dbad955b166f5119793815c36f11ffa909859bbfeb64b735cca37cbf10bef1',
    'timestamp': 1470173578,
    'totalDifficulty': 44010101827705409388,
    'transactions': ['0xc55e2b90168af6972193c1f86fa4d7d7b31a29c156665d15b9cd48618b5177ef'],
    'transactionsRoot': '0xb31f174d27b99cdae8e746bd138a01ce60d8dd7b224f7c60845914def05ecc58',
    'uncles': [],
})

* Testen Sie die Beta-Version (v4), installiert mit:

pip install --pre web3