Blockchain-Parser mit 300 Zeilen in Python

Bild

Im Jahr 2015, als Kryptowährungen in der Öffentlichkeit nicht so viel Beachtung fanden wie heute, kam mir der Gedanke, herauszufinden, was Blockchain, Kryptowährungen und Bitcoin im Besonderen sind.

Versuche, eine detaillierte Analyse des Quellcodes des Bitcoin Core-Projekts durchzuführen, blieben erfolglos, da ich mir zunächst strenge Bedingungen stellte, um zu sagen: "Ja, jetzt weiß ich, was es ist und wie es funktioniert", und eine Vielzahl von Quellcodezeilen Code, der verstanden werden musste, um das erzielte Ergebnis zu berücksichtigen.

Ich musste nach anderen Wegen suchen. Außerdem war die Blockchain zum Zeitpunkt dieser Entscheidung bereits vollständig auf meinem lokalen Computer geladen. Und heute ist es nicht mehr so ​​schnell wie damals.

Und so. Der offizielle Bitcoin Core-Client hat die gesamte Blockchain in einen Ordner auf dem lokalen Computer hochgeladen. Dies waren einige Dateien, die, wie in den offiziellen Dokumenten angegeben, alles enthielten, was als Bitcoin bezeichnet wird. Am interessantesten für mich waren die sogenannten RAW-Blockchain-Datendateien (blk00000.dat ... blk01234.dat usw. aus dem Bitcoin / blocks-Ordner), nämlich die Blockchain-Datenbankdateien in ihrer ursprünglichen Form.

Der Rest des Kataloginhalts ist ein Index einer Rohdatenbank, Daten für die korrekte Abrechnung nicht ausgegebener Ausgaben, Einstellungen und eine persönliche Brieftasche.

Um einen Einblick zu gewinnen, schien es naheliegend, herauszufinden, in welcher Quellendatenbank sie gespeichert ist, auf deren Grundlage das lokale System alle weiteren erforderlichen Schritte ausführt, um das Funktionieren der Blockchain dieser Kryptowährung sicherzustellen. Ein Teil der Netzwerktechnologie wurde in diesem Artikel nicht behandelt. Absichtlich beschränkte ich mich auf den lokalen Teil und auf die Dateien, in denen die Blöcke gespeichert sind.

Die Spezifikation des Formats von Blöcken und Transaktionen ist in Form von separaten Beschreibungen dieser Strukturen in offenen Quellen verfügbar. Es konnte jedoch nichts gefunden werden, das eine vollständige Vorstellung davon geben könnte, wie die in den Dateien dieser sehr "rohen" Blockchain-Datenbank (RAW-Blockchain-Datenbank) gespeicherten Daten zu interpretieren sind.

Meiner Meinung nach bestand die einzige Möglichkeit darin, die lineare Struktur der Dateien zu analysieren und in Form einer lesbaren Struktur darzustellen, die ein vollständiges Verständnis der Art von Bitcoin-Früchten vermitteln sollte.

Das Ergebnis ist ein in Python geschriebenes Skript mit ~ 300 Zeilen, das die lokal gespeicherten "Roh" -Datendateien blkXXXXX.dat in ein Nur-Text-Format umwandelt und angibt, was dort enthalten ist und welche Bedeutung jedes Datenfeld hat. Die resultierenden Textdateien eignen sich zur Weiterverarbeitung und Extraktion von beispielsweise allen Block-Hashes, Transaktions-Hashes, Adressen, Transaktionsbeträgen usw. zu Analysezwecken und noch viel mehr zu welchem ​​Zweck ...

Die Bequemlichkeit und Transparenz der Verwendung des Parsers wird meiner Meinung nach durch die Implementierung durch sequentielle Byte-Lesedaten-Konvertierung bei maximaler Sichtbarkeit sichergestellt.

In der Natur vorhandene Blockchain-Parser haben viele Funktionen, aber keine funktionieren direkt mit den Dateien der Datenbank. Aus diesem Grund habe ich mich nicht auf die Umsetzung irgendwelcher Interessen konzentriert, wie beispielsweise das Erhalten einer Liste von Adressen mit Salden oder dergleichen, sondern mich auf die naheliegendste und einfachste Umsetzung der direkten Konvertierung von Dateien vom internen Format in eine universelle Textansicht beschränkt. Darüber hinaus wurden viele Goodies, wie die Bildung des UTXO-Sets (ein Set von nicht ausgegebenen Ausgaben) oder die Bildung einer Adressliste mit Salden, von mir bereits für eine Reihe von Projekten implementiert.

Ein wesentlicher Bestandteil dieser Arbeit ist es, den Beteiligten das Erlernen der Blockchain-Technologie zu erleichtern.

Ja, wie sich herausstellte, ist das Skript auch für die meisten anderen Kryptowährungen geeignet, wie Dash, Dogecoin, Bitcoin Cash, Litecoin und andere Altcoins. Dafür müssen Sie jedoch einige Tricks ausführen. Dieser Artikel hatte nicht vor, diese Tricks zu enthüllen.

Sie können den Blockchain-Parser-Parser vom Github herunterladen .

Source: https://habr.com/ru/post/de482978/


All Articles