Home » Bitcoin » Fullnode schneller syncen mit UTXO Snapshots

Fullnode schneller syncen mit UTXO Snapshots

Fullnode schneller syncen mit UTXO Snapshots! Mit der Veröffentlichung von Bitcoin Core v28 wurde eine spannende neue Funktion eingeführt, die fünf Jahre in der Entwicklung war: AssumeUTXO. Ursprünglich 2019 von James O’Beirne vorgeschlagen, ermöglicht diese Funktion Full Nodes, die Verifizierung der alten Blockchain-Geschichte zu verschieben. Stattdessen wird ein aktueller Snapshot des UTXO-Sets (Unspent Transaction Output) bei einer bestimmten Blockhöhe geladen, und die Node synchronisiert sich von dort aus zum aktuellen Stand (Chain Tip).

Dies bedeutet, dass Wallets und andere Software, die auf der Full Node laufen, innerhalb von Minuten mit dem Senden und Empfangen von Transaktionen beginnen können. Die bisher übliche Wartezeit von Stunden oder Tagen, um die Blockchain ab dem Genesis-Block vollständig zu synchronisieren und zu validieren, entfällt.

Wie funktioniert AssumeUTXO

Wenn AssumeUTXO genutzt wird, startet die Node die Synchronisation vom Snapshot bis zum Chain Tip. Parallel dazu wird die alte Blockchain-Geschichte im Hintergrund heruntergeladen und verifiziert. Sobald dies abgeschlossen ist, verifiziert die Node den initial geladenen UTXO-Zustand und erreicht somit dieselbe vertrauenswürdige Sicherheit wie eine Node, die ohne AssumeUTXO synchronisiert wurde. Bis jetzt ist der einzig erlaubte UTXO Snapshot in Bitcoincore hardkodiert und akzeptiert nur Snapshots bis zu einer Höhe von Block 840000.

Schritt-für-Schritt-Anleitung: UTXO-Snapshots nutzen

  1. UTXO-Snapshot-Datei herunterladen
    Ladet eine Snapshot-Datei herunter. Einen Snapshot für die maximal mögliche Höhe von Block 840.000 gibt es beispielsweise bei uns am Ende des Beitrags zu finden. Ihr könnt den Snapshot auf einen USB Stick Speichern und zum Beispiel an euren Raspiblitz hängen. Vergesst nicht, den Stick zu mounten.
  2. Bitcoin Core v28 (oder neuer) herunterladen und installieren
    Ladet die neueste Version von Bitcoin Core von der offiziellen Webseite herunter und installiert sie.
    Auf dem Raspiblitz updated ihr euren Blitz einfach im Menu UPDATE --> BITCOIN --> BITCOINCORE 28.0
  3. Bitcoin Core starten bitcoind -daemon (Auf dem Raspiblitz automatisch)
  4. Synchronisation der Blockheader abwarten
    Dies dauert nur ein bis zwei Minuten.
  5. Snapshot laden bitcoin-cli loadtxoutset /pfad/zum/utxo-snapshot-height-840000.dat Je nach Geschwindigkeit des Systems kann dieser Schritt einige Minuten bis Stunden dauern.
  6. Synchronisation abschließen
    Nach Abschluss des Befehls springt die Synchronisationshöhe eurer Node zur Blockhöhe des Snapshots und fährt von dort mit der normalen Synchronisation fort.
  7. Hintergrund-Synchronisation des Genesis-Blocks
    Sobald die Node den Chain Tip erreicht, startet sie im Hintergrund die Verifizierung der Blockchain ab dem Genesis-Block. Während dieser Zeit bleibt die Node jedoch vollständig nutzbar.
Raspiblitz Update auf Bitcoincore 28.0

Häufige Fragen zu AssumeUTXO

1. Ist es wichtig, woher ich die Snapshot-Datei beziehe?
Nein. Bitcoin Core lädt nur Snapshots, deren UTXO-Hash mit einem übereinstimmt, der fest in Bitcoin Core kodiert ist.

2. Kann ich meine eigenen Snapshots erstellen?
Ja, Snapshots können mit dem Befehl dumptxoutset oder einem Hilfsskript erstellt werden. Allerdings können nur Snapshots bei festgelegten Blockhöhen geladen werden. Derzeit ist nur die Blockhöhe 840.000 unterstützt.

3. Kann ich diese Funktion für pruned Nodes verwenden?
Ja.

4. Kann ich diese Funktion mit aktivierten Indexen nutzen?
Ja, allerdings beschleunigt dies die Erstellung der Indexe nicht. Diese müssen weiterhin linear ab dem Genesis-Block erstellt werden.

Wie viel schneller ist die Synchronisation

In einem Benchmark-Test wurden zwei Synchronisationen mit Bitcoin Core v28 durchgeführt:

  • Die erste Synchronisation begann klassisch ab dem Genesis-Block.
  • Die zweite verwendete einen Snapshot.

Ergebnisse:

  • Mit Snapshot: 10 Minuten für das Laden des Snapshots + 84 Minuten, um den Chain Tip zu erreichen.
  • Ohne Snapshot: 659 Minuten für eine vollständige Synchronisation ab Genesis im Clearnet bei nicht limitierender Bandbreite

Die Geschwindigkeit ist also um ein Vielfaches höher!

Quelle: https://blog.lopp.net/

Lohnt sich AssumeUTXO

Die Entscheidung hängt von mehreren Faktoren ab:

  • Dringlichkeit: Wie schnell müsst ihr eure Node verwenden können?
  • Hardware-Leistung: Auf leistungsstarken Systemen, die die Blockchain in weniger als einem Tag synchronisieren können, sind die zusätzlichen Schritte möglicherweise nicht erforderlich. Für langsamere Systeme wie einen Raspberry Pi ist AssumeUTXO jedoch ein großer Vorteil.

UTXO Snapshot selber erstellen

Mit diesem Script erstellt ihr selber einen UTXO Snapshot. Anmerkungen dazu:

Das Skript utxo_snapshot.sh dient dazu, einen Snapshot des UTXO-Sets (Unspent Transaction Output) zu einer bestimmten Blockhöhe in Bitcoin Core zu erstellen. Es ermöglicht entweder die Erstellung einer Datei mit dem Snapshot oder die Ausgabe des Hash-Werts des UTXO-Sets. Im Detail funktioniert es wie folgt:

Schlüsselaufgaben des Skripts

  1. Parameter validieren:
    • Der Script erwartet drei Argumente:
      • generate-at-height: Die Blockhöhe, für die der UTXO-Snapshot erstellt werden soll. Muss 840000 sein!
      • snapshot-out-path: Der Ausgabepfad für die Snapshot-Datei (oder - für keine Datei, nur den Hash ausgeben). (Pfad eurer Wahl)
      • bitcoin-cli-call: Der Befehl zum Aufruf von bitcoin-cli, z. B. inklusive -datadir-Angabe.
        (Zum beispiel ./src/bitcoin-cli -datadir=/data/bitcoin)
    • Gibt eine Fehlermeldung aus, wenn die Parameter nicht korrekt sind.
  2. Prüfen des Pruning-Status:
    • Liest die Blockhöhe, bis zu der die Blockchain beschnitten (pruned) ist.
    • Beendet das Skript mit einer Fehlermeldung, falls die angegebene generate-at-height unterhalb der pruned Blockhöhe liegt (da die Blockchain-Daten fehlen).
  3. Existenzprüfung für den Ausgabepfad:
    • Verhindert, dass ein vorhandener Ausgabepfad überschrieben wird.
    • Überprüft, ob das Zielverzeichnis existiert.
  4. Netzwerkaktivität deaktivieren (optional):
    • Fragt den Benutzer, ob die Netzwerkaktivität der Node deaktiviert werden soll. Dies dient dazu, Konflikte bei der Synchronisation zu vermeiden, während der Snapshot erstellt wird.
  5. Blockchain zurücksetzen und Snapshot erstellen:
    • Invalide erklärt (rewindet) den Block unmittelbar nach der gewünschten Höhe (generate-at-height + 1), um den Zustand der Blockchain an dieser Höhe wiederherzustellen.
    • Führt entweder einen der beiden folgenden Schritte aus:
      • Gibt den Hash des UTXO-Sets aus, wenn snapshot-out-path - ist.
      • Erstellt eine UTXO-Snapshot-Datei mit dem Befehl dumptxoutset.
  6. Cleanup-Prozess:
    • Stellt die Blockchain wieder auf den ursprünglichen Zustand zurück, indem der invalide Block wieder berücksichtigt wird (reconsiderblock).
    • Aktiviert die Netzwerkaktivität, falls sie deaktiviert wurde.
  7. Unterbrechungsbehandlung:
    • Fängt Ctrl-C (SIGINT) ab, führt den Cleanup-Prozess aus und beendet das Skript sauber.

Der vollständige Befehl um den Script zum Beispiel wäre auf dem Raspiblitz:

./utxo_snapshot.sh 840000 utxo.dat ./src/bitcoin-cli -datadir=/mnt/hdd/bitcoin

Zukunftsperspektiven

Während AssumeUTXO derzeit vor allem von technisch versierten Node-Betreibern genutzt wird, könnte Bitcoin Core in Zukunft eine Funktion anbieten, die Snapshots automatisch beim Start lädt. Dies würde die Nutzung auch für weniger erfahrene Nutzer vereinfachen.

  • Sicherheitsaspekt: Auch wenn die initiale Synchronisation durch AssumeUTXO verkürzt wird, bleibt die vertrauenswürdige Sicherheit langfristig erhalten, da die vollständige Verifizierung im Hintergrund erfolgt.
  • Energieeffizienz: Gerade für Nodes mit geringem Energieverbrauch, wie auf einem Raspberry Pi oder in einer Cloud-Umgebung, kann diese Funktion nicht nur Zeit, sondern auch Ressourcen sparen.

AssumeUTXO ist ein bedeutender Schritt in Richtung einer benutzerfreundlicheren Bitcoin-Infrastruktur und zeigt, wie kontinuierliche Innovation die Barrieren für den Betrieb von Full Nodes senken kann.

Download UTXO Snapshot

https://cloud.yourdevice.ch/s/JaHSXwcBFgNN8P5

Weitere Möglichkeiten die Node zu Syncen mit älteren Bitcoincore Versionen

Vollständige Kopie der Blockchain erstellen.

Blockchain über das Clearnet syncen.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert