Netidee Blog Bild
Unsere Datenstruktur
Wie sieht die Datenbank hinter blockninjas aus? (09.07.2019)
Förderjahr 2017 / Project Call #12 / ProjektID: 2200 / Projekt: BlockNinjas

Wir wollen hier einen Einblick in die Datenbankstruktur hinter blockninjas geben. Bereits in einem vergangenen Post haben wir beschrieben, wie die Daten in der Bitcoin Blockchain aufgebaut sind. Diese Daten dienen uns als Grundlage. Wir erweitern und verändern diese Struktur allerdings um einen optimierten Zugriff darauf zu bekommen.

Grundsätzlich orientiert sich unser Modell an dem von Bitcoin selbst. Allerdings haben wir aufgrund von Performancegründen einige Daten zusätzlich in Tabellen ausgelagert. Um nun zu den einzelnen Tabellen zu kommen:

ER Diagramm

blk_files

Diese Tabelle beschreibt, welche .blk-Dateien von den Bitcoin Rohdaten eingelesen wurden.

 

blocks

Wie der Name schon sagt, werden hier die Blöcke, aus der die Blockchain besteht, gespeichert.

 

transactions

Hier werden die Transaktionen, welche vom Bitcoin Netzwerk generiert werden, gespeichert. 

 

inputs

Da jede Transaktion einen oder mehrere Inputs enthält, werden diese natürlich in eine neue Tabelle gespeichert. 

 

outputs

Analog zu den Inputs gibts auch die Tabelle “outputs”. 

 

script_witness_items

Wichtig zu wissen ist, dass seit der Einführung von SegWit Transaktionen, zusätzliche Daten in der Blockchain gespeichert werden. Diese s.g. Witness-Daten speichern wir in dieser Tabelle. 

 

output_addresses

Wie schon oftmals erwähnt, muss die Bitcoin-Adresse aus den Daten, die im Feld outputs.script gespeichert sind, berechnet werden. Diese Adresse, die berechnet wird, ist im s.g. Base58Check Format. Diese wird hier in dieser Tabelle gespeichert. Anzumerken ist, dass diese Adresse lediglich ein Hashwert ist, der base58 encodiert wird. Der zugrundeliegenden Hash wird ebenfalls in dieser Tabelle gespeichert.

 

addresses

Um nun einen performanten Zugriff auf Adressen zu gewährleisten, speichern wir alle Adressen ebenfalls in diese Tabelle. Im Gegensatz zu output_addresses, kommt in dieser jede Adresse nur genau einmal vor.

 

address_tags

Da es unsere Software ermöglicht, zu Adressen Tags zu vergeben, speichern wir diese ebenfalls ab. Durch das Attribut “priority” wird definiert, wie wichtig der Tag für diese Adresse ist.

 

resolved_inputs (view)

Es ist wichtig zu wissen, dass in der Datenstruktur von Bitcoin, keine speichertechnische Relation von Inputs und Outputs gibt. Allerdings ist es so, dass das Feld inputs.previous_tx_hash gemeinsam mit inputs.previous_tx_output_index auf einen spezifischen Output in einer Transaktion referenziert. Da die Blockchaindaten allerdings “sehr groß” sind, kann eine Abfrage, welche diese Relation auflöst, doch etwas länger dauern. Daher haben wir diese View eingeführt. Sie ermöglicht einen raschen Lookup dieser Relation mit weiteren relevanten Daten.

Erhard Dinhobl

Profile picture for user erhard.dinhobl

Skills:

Software Engineering
,
Machine Learning
,
blockchain
,
Bitcoin
,
C++
,
C
,
Python
,
Java
CAPTCHA
Diese Frage dient der Überprüfung, ob Sie ein menschlicher Besucher sind und um automatisierten SPAM zu verhindern.
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.

    Weitere Blogbeiträge