Datenarchitektur der Libra Blockchain – Teil 1

Über die Libra-Initiative von Facebook wurde in den letzten Wochen in den Medien breit informiert. Ein Grossteil der Beiträge hat dabei die angekündigte Krypto-Währung Libra kommentiert, machmal verbunden mit düsteren Prophezeiungen über den baldigen Untergang der traditionellen Banken. Die technische Plattform, die Facebook und Partner mit der Bezeichnung Libra Blockchain aufbauen, fand zumindest in den Publikumsmedien weniger Beachtung.

In diesem und folgenden Blogeinträgen werfen wir einen Blick auf die Datenarchitektur dieser neuen Plattform: Welche Datenbestände bewirtschaftet die Libra Blockchain und wie sind sie organisiert?

Man kann in der Datenarchitektur der Libra Blockchain zwei Ebenen unterscheiden:

In der rohen Persistenzschicht folgt die Libra Blockchain zwei Konventionen.

Zum einen hat der Schlüssel eines Schlüssel/Wert-Paares immer 32 Bytes (entspricht 256 Bits). Die Libra Blockchain folgt dieser Konvention aus praktischen Gründen. Sie verwendet kryptographische Hashfunktionen, die Hash-Werte mit einer Länge von 256 Bits generieren, namentlich die Funktion SHA-3. Solche Hash-Werte verwendet sie im grossen Stil um Datenobjekte zu identifizieren. Jeder account ist zum Beispiel eindeutig durch eine Sequenz von 32 Bytes identifiziert, die gerade dem SHA-3-Hash des Validierungs-Schlüssels (validation key oder public key) dieses accounts entsprechen. Es ist unter diesen Rahmenbedingungen konsequent, auch die Werte der Schlüssel/Wert-Paare in der rohen Persistenzschicht immer unter einem Schlüssel mit 256 Bits zu speichern.

Zum anderen besteht der Wert eines Schlüssel/Wert-Paares immer aus einer rohen Byte-Sequenz (fast) beliebiger Länge, einem sogenannten blob. Die rohe Persistenzschicht weiss nichts über die Datenobjekte der logischen Schicht, die in diesem blob enthalten sind. Die blobs werden auf der Ebenen der logischen Datenobjekte erstellt, indem diese in eine Byte-Sequenz umgeformt (serialisiert) werden. Auf dieser Ebenen werden sie auch aus blobs der rohen Persistenzschicht wiederhergestellt (deserialisiert).

Die rohe Persistenzschicht besteht also aus einem key value store mit maximal bis zu 2256 Schlüssel/Wert-Paaren. Diese riesige Zahl (rund 1078) ist deutlich höher als die Zahl der Atome im Universum (geschätzt 1068) und die Libra Blockchain wird auch in hunderten von Jahren nur einen verschwindend kleinen Teil des theoretisch adressierbaren Raums ihres key value stores nutzen. Der key value store ist (und bleibt) dünn (oder sparse) belegt, obschon nie etwas aus diesem Datenbestand gelöscht wird. Wir werden in einem späteren Blog-Beitrag darauf zurückkommen, wenn wir einen Blick auf den Sparse Merkle Tree werfen, den Libra nutzt, um den ledger state auf der Ebenen der logischen Datenobjekte zu bewirtschaften.

Den key value store der Libra Blockchain auf der rohen Persistenzschicht haben die Facebook-Ingenieure mit RocksDB aufgebaut, einem Standard-Softwareprodukt das für den gleichen Zweck auch in anderen Projekten eingesetzt wird, namentlich in der horizontal und global skalierbaren SQL-Datenbank cockroachdb.