Server-Leistung

Aktualisiert: 1 Feb, 2022

Sparrow Wallet nutzt das Electrum-Serverprotokoll für die Verwaltung der Transaktionsdaten.

Dieses Dokument enthält aktuelle Leistungs-Benchmarks für verschiedene Electrum-Server-Implementierungen mit vollem Index auf Standard-Hardware und erörtert zwei unterschiedliche Implementierungsansätze auf der Grundlage dieser Ergebnisse.

Hintergrund

Ein Electrum-Server fungiert als Bitcoin-Adressindex, der es den Benutzern ermöglicht, die mit einer bestimmten Adresse verbundenen Transaktionen abzurufen. Im Gegensatz zur Bitcoin-Referenzimplementierung, der diese Funktion fehlt, bieten Electrum-Server diese Funktionalität. Während kompakte Blockfilter ähnliche Informationen liefern können, unterstützen sie keine Mempool-Transaktionen und sind weniger effizient.

Das Electrum-Serverprotokoll ist das am weitesten verbreitete Bitcoin-Adressindexprotokoll. Dieser Benchmark konzentriert sich auf vollständige Adressindizes, die für den Datenschutz entscheidend sind, da sie keine spezifischen Wallet-Details auf dem Server speichern. Für eine optimale Cold-Storage-Sicherheit sollten alle Wallet-Informationen in der Wallet-Datei enthalten sein und nach dem Schließen der Wallet vom Server entfernt werden. Dieser Ansatz schließt Projekte wie BWT und EPS aus, die die Speicherung von Wallet-Adressen auf dem Server erfordern.

MotivationPermalink

Dieser Benchmark baut auf dem Leistungsbericht von Jameson Lopp vom Juli 2020 auf, wobei es zwei wesentliche Unterschiede gibt:

  1. Es verwendet einen Raspberry Pi 4 anstelle eines AWS-Servers und ist damit eher für Heimanwender geeignet.
  2. Es verwendet aktuelle Builds der Projekte und testet sie nach wesentlichen Änderungen erneut.

Diese Aktualisierungen machen die Benchmarks besonders nützlich für Sparrow-Benutzer, die ihren eigenen Electrum-Server auf einem Einplatinencomputer betreiben wollen, und ermöglichen ihnen, verschiedene Implementierungen zu vergleichen und diejenige zu wählen, die ihren Bedürfnissen am besten entspricht. Die Ergebnisse bieten praktische Einblicke für Benutzer, die einen Electrum-Server in einer Heimumgebung selbst hosten wollen.

Hardware

Dieser Benchmark verwendet Hardware, die für datenschutzbewusste Sparrow-Nutzer typisch ist: einen Raspberry Pi 4 (8GB-Modell) mit dem 64-Bit-Betriebssystem Ubuntu 21.10. Zur Datenspeicherung wird eine externe USB-SSD mit 1 TB verwendet, die aufgrund der Größe der Bitcoin-Blockchain und der zugehörigen Indizes (ca. 0,5 TB) HDDs vorgezogen wird. Dieses Setup spiegelt gängige Konfigurationen für Heimanwender wider und liefert relevante Leistungsdaten für diejenigen, die einen Electrum-Server auf ähnlichen Einplatinencomputern selbst hosten wollen.

Projekte

ElectrumX

ElectrumX, der Nachfolger des ursprünglichen Electrum-Serverprojekts, wurde 2017 angenommen. Nachdem der ursprüngliche Autor die Unterstützung der Bitcoin-Blockchain eingestellt hat, haben die Electrum-Entwickler das Projekt gegabelt, das nun unter https://github.com/spesmilo/electrumx.

Eine große Herausforderung bei ElectrumX ist die anfängliche Indexerstellung, die auf der Testhardware etwa eine Woche dauert. Die Nutzer können den Index jedoch auch auf einer leistungsfähigeren Maschine erstellen und ihn auf einen Einplatinencomputer übertragen. Die wichtigsten Punkte:

  • Aktuelle Datenbankgröße: 75 GB
  • Erfordert die Aktivierung von txindex auf Bitcoin Core
  • Keine vorkompilierten Binärdateien verfügbar
  • Getestete Version: ElectrumX 1.16

Der Index von ElectrumX kann auf leistungsfähigere Hardware aufgebaut und übertragen werden und bietet damit Flexibilität für Nutzer mit begrenzten Computerressourcen.

Kursteilnehmer

Electrs, das eher für den persönlichen Gebrauch als für öffentliche Server konzipiert ist, bietet im Vergleich zu ElectrumX geringere Speicheranforderungen, aber eine höhere CPU-Auslastung. Es wird gewartet bei https://github.com/romanz/electrs.

Der Hauptvorteil von Electrs ist die kürzere Indexerstellungszeit, die auf der Testhardware nur 12-24 Stunden beträgt. Diese Effizienz hat ihn zur bevorzugten Wahl für die meisten vorgefertigten Knotenpakete gemacht. Wichtige Punkte:

  • Aktuelle Datenbankgröße: 32 GB
  • Benötigt kein txindex auf Bitcoin Core
  • Keine vorkompilierten Binärdateien verfügbar
  • Getestete Version: Electrs 0.9.4

Die deutlich kürzere Indexaufbauzeit und die geringere Datenbankgröße machen Electrs zu einer attraktiven Option für den persönlichen Gebrauch, insbesondere auf Hardware mit begrenzten Ressourcen.

Fulcrum

Fulcrum, eine moderne C++-Implementierung, bietet eine hohe Leistung trotz eines größeren Speicherplatzbedarfs. Gepflegt bei https://github.com/cculianu/FulcrumSie schafft ein Gleichgewicht zwischen Indizierungsgeschwindigkeit und Betriebsleistung.

Die Indizierung von Fulcrum dauert auf der Testhardware 2-3 Tage und liegt damit in der Entwicklungszeit zwischen Electrs und ElectrumX. Nach der Indizierung liefert es eine außergewöhnliche Leistung. Die wichtigsten Punkte:

  • Aktuelle Datenbankgröße: 102 GB
  • Erfordert die Aktivierung von txindex auf Bitcoin Core
  • Vorkompilierte Binärdateien für Linux (x86_64 und arm64) und Windows verfügbar
  • Getestete Version: Fulcrum 1.6.0

Fulcrums Kombination aus angemessener Indizierungszeit und hervorragender Betriebsleistung macht es zu einer überzeugenden Option, insbesondere für Benutzer, die einen größeren Speicherbedarf haben.

Electrs-esplora

Electrs-esplora, ein Fork von Electrs, erstellt zusätzliche Indizes für eine verbesserte Unternehmensleistung. Aufgrund seiner hohen Datenanforderungen (ca. 800 GB) ist es jedoch für die Testhardware ungeeignet. Wichtige Punkte:

  • Extrem großer Speicherbedarf (~800 GB)
  • Kann ausgeführt werden mit --lightmode Flagge, die den Speicherplatz um die Hälfte reduziert
  • Selbst im Light-Modus erschöpft sie zusammen mit der ~420GB großen Blockchain fast eine 1TB-Festplatte.

Der umfangreiche Speicherbedarf dieser Implementierung übersteigt den eines typischen Einplatinencomputers, so dass sie für die meisten Privatanwender unpraktisch ist. Sie bietet zwar Leistungsvorteile für den Einsatz in Unternehmen, aber der Ressourcenbedarf schränkt die Anwendbarkeit im privaten oder kleinen Rahmen ein.

addrindexrs

addrindexrs ist ein weiterer Electrs-Fork, der vom Dojo-Backend für die Abfrage historischer Transaktionsdaten verwendet wird. Er weist keine signifikanten leistungsbezogenen Änderungen auf, die seine Einbeziehung als separate Implementierung in diesen Benchmark rechtfertigen würden. Dieser Fork weist ähnliche Eigenschaften wie das ursprüngliche Electrs-Projekt auf, so dass er für Leistungsvergleiche in diesem Zusammenhang überflüssig ist.

Indizierung

Die Indizierungsleistung variiert erheblich zwischen den drei Implementierungen:

ElectrumX: Langsamste Indexierung (1 Woche), aufgrund des Single-Threading von Python und des langsameren Block-Parsing. Sein umfassender Index ermöglicht jedoch skalierbarere Serverantworten ohne häufige Bitcoin Core Abfragen. Ein 64-Bit-Betriebssystem ist entscheidend für eine optimale Leistung.

Gewählt: Schnellste Indexierung (1 Tag), zurückzuführen auf den kleineren, einfacheren Index und die optimierte Blockabfrage und -analyse. Diese Geschwindigkeit hat ihren Preis: Blöcke müssen während des Betriebs neu geordnet werden, was sich bei tieferen Geldbörsen auf die Leistung auswirken kann.

Fulcrum: Mäßige Indizierungszeit (2-3 Tage), Aufbau eines etwas größeren Index als ElectrumX, aber viel schneller. Der ressourcenintensive Prozess profitiert von der Low-Level-Sprachimplementierung. Die schnelle Synchronisation kann die Indizierungsgeschwindigkeit weiter verbessert werden. Der daraus resultierende umfassende Index führt zu einer hervorragenden Betriebsleistung.

Jede Implementierung stellt einen Kompromiss zwischen Indizierungszeit, Indexgröße und Betriebseffizienz dar und ist auf unterschiedliche Anwendungsfälle und Hardwarekapazitäten zugeschnitten.

Der Test

Dieser Benchmark evaluiert zwei gängige Serverlasten von Sparrow unter Verwendung einer großen Wallet (~3000 verwendete Adressen):

  1. Anfängliches Laden der Brieftasche: Konzentriert sich auf Adressabonnements, die es Sparrow ermöglichen, Updates für Adresstransaktionen zu erhalten. Wichtig ist, dass jede Abonnementanfrage einen Hash aller Transaktions-IDs und Blockhöhen zurückgibt, die diese Adresse betreffen. Der Test misst die Zeit, die benötigt wird, um alle Brieftaschenadressen zu abonnieren.
  2. Wallet Refreshing: Simuliert das Abrufen aller Wallet-Daten (Transaktionen und Blöcke) während eines manuellen Refreshs, der notwendig ist, wenn Kommunikationsprobleme zu schlechten Daten führen. Für diesen Test sind bereits Adressabonnements vorhanden.

Wichtige Testparameter:

  • Große Brieftasche mit ~3000 verwendeten Adressen
  • Stapelseitengröße von 50 für alle Server
  • Misst die Abonnementzeit für das erste Laden
  • Messung der Datenabrufzeit für die Aktualisierung der Brieftasche

Dieser Ansatz bietet einen umfassenden Leistungsvergleich zwischen verschiedenen Electrum-Server-Implementierungen und konzentriert sich auf reale Nutzungsszenarien in Sparrow Wallet.

Test 1: Erstes Laden (Adressabonnement)

Test Kaltstart Lauf 1 Lauf 2 Lauf 3
ElectrumX 52655 ms 40721 ms 54143 ms 49011 ms
Kursteilnehmer 322386 ms 393303 ms 384036 ms 427722 ms
Fulcrum 2333 ms 1413 ms 1472 ms 1413 ms
  • Fulcrum: Am schnellsten (durchschnittlich ~1660 ms)
  • ElectrumX: Mäßig (Durchschnitt ~49,133 ms)
  • Elektronen: Am langsamsten (durchschnittlich ~381,862 ms)

Fulcrum übertrifft ElectrumX um das 22-fache und Electrs um das ~300-fache beim anfänglichen Laden der Brieftasche.

Test 2: Aktualisierung der Brieftasche (Datenabruf)

Test Kaltstart Lauf 1 Lauf 2 Lauf 3
ElectrumX 114466 ms 66175 ms 80133 ms 75489 ms
Kursteilnehmer 17562 ms 11621 ms 11219 ms 11521 ms
Fulcrum 14152 ms 7854 ms 7382 ms 7442 ms
  • Fulcrum: Am schnellsten (Durchschnitt ~9.208 ms)
  • Elektrs: Sekunde (durchschnittlich ~12.981 ms)
  • ElectrumX: Am langsamsten (Durchschnitt ~84,066 ms)

Fulcrum ist 8x schneller als ElectrumX und 1,5x schneller als Electrs, wenn es um die Aktualisierung der Brieftasche geht.

Fulcrum zeigt in beiden Tests durchgängig eine überlegene Leistung, mit deutlichen Vorteilen beim anfänglichen Laden und einem Vorsprung beim Aktualisieren der Brieftasche. ElectrumX schneidet beim Laden mäßig ab, hat aber Probleme beim Aktualisieren. Electrs ist zwar beim anfänglichen Laden langsam, zeigt aber eine konkurrenzfähige Leistung beim Aktualisieren.

Diskussion

Sparrow Wallet basiert auf dem Electrum-Serverprotokoll für die Verwaltung von Transaktionsdaten. Dieses Dokument vergleicht die Leistung von Electrum-Server-Implementierungen mit vollem Index auf Standard-Hardware, wobei der Schwerpunkt auf Raspberry Pi 4 mit 8 GB RAM und 1 TB externer USB-SSD liegt. Es untersucht ElectrumX-, Electrs- und Fulcrum-Implementierungen.

ElectrumX, verwaltet unter https://github.com/spesmilo/electrumxbenötigt etwa eine Woche, um seinen 75 GB großen Index auf Testhardware aufzubauen und erfordert die Aktivierung von txindex auf Bitcoin Core. Electrs, entwickelt für den persönlichen Gebrauch https://github.com/romanz/electrsbaut einen 32GB-Index in 12-24 Stunden auf, ohne txindex zu benötigen. Fulcrum https://github.com/cculianu/Fulcrum baut einen 102 GB großen Index in 2-3 Tagen auf, benötigt txindex und bietet vorkompilierte Binärdateien.

Bei den Tests wurde eine große Geldbörse (~3000 Adressen) verwendet, um das anfängliche Laden (Adressabonnements) und die Aktualisierung der Geldbörse (Datenabruf) zu messen. Die Ergebnisse zeigen, dass Fulcrum beim anfänglichen Laden 22x schneller als ElectrumX und ~300x schneller als Electrs ist, und beim Auffrischen 8x schneller als ElectrumX und 1,5x schneller als Electrs.

Der Leistungsunterschied zwischen Fulcrum und Electrs beim anfänglichen Laden (1,4 Sekunden gegenüber 6 Minuten) ist auf ihre unterschiedlichen Datenspeicheransätze zurückzuführen. Electrs speichert nur minimale Daten, so dass bei jedem Laden der Brieftasche ein umfangreiches Abrufen und Parsen von Blöcken erforderlich ist. Für die Test-Wallet bedeutete dies eine wiederholte Verarbeitung von 3,5 GB an Blöcken, was zu einer hohen CPU-Belastung und potenziellen Antwortausfällen auf Einplatinencomputern führte. ElectrumX und Fulcrum unterhalten umfassende Adressindizes, die einen effizienten Datenabruf ermöglichen. Dieser Ansatz, kombiniert mit dem Transaktionsindex von Bitcoin Core, ermöglicht die überlegene Leistung von Fulcrum.

Die C++17-Implementierung von Fulcrum bietet eine konsistente Geschwindigkeit auf allen Plattformen, während die Python-basierte Architektur von ElectrumX eine uneinheitliche Leistung und eine höhere CPU-Auslastung aufweist. Diese Ergebnisse verdeutlichen die Kompromisse zwischen Indexgröße, Abfragegeschwindigkeit und Ressourcennutzung bei Electrum-Serverimplementierungen, wobei Fulcrum für die meisten Benutzer das beste Gleichgewicht bietet.

Schlussfolgerung

Dieser Benchmark zeigt, dass Fulcrum die optimale Electrum-Server-Implementierung für Sparrow Wallet-Benutzer ist.

Trotz einer etwas längeren anfänglichen Indizierungszeit im Vergleich zu Electrs bietet der umfassende Index von Fulcrum eine überlegene Skalierbarkeit und Leistung.

Da die Tiefe der Wallets zunimmt und die Speicherkosten sinken, überwiegen die Vorteile von Fulcrum in Bezug auf Abfragegeschwindigkeit, Zuverlässigkeit und Langlebigkeit der Hardware den größeren Speicherplatzbedarf.

Während Electrs sich für Szenarien mit sehr begrenztem Festplattenplatz und kleinen Geldbörsen eignet, wird Fulcrum als idealer Server für Sparrow empfohlen, da er für die meisten Benutzer das beste Gleichgewicht aus Leistung und Ressourcennutzung bietet.

Technische Anmerkung
Eine effiziente Adressindizierung in Electrum-Servern erfordert strategische Datenspeichertechniken. Fulcrum und ElectrumX verwenden Skript-Hash-Schlüssel (32 Byte bzw. 11 Byte), um Transaktionsnummern zuzuordnen (tx_num). Diese tx_num steht für die Reihenfolge einer Transaktion in der Blockchain und dient als kompakter Bezeichner. Die Systeme führen eine Datei mit txids angeordnet von tx_numund ermöglicht eine schnelle txid Abruf. Außerdem wird ein speicherinternes Array vorgehalten, das die Blockhöhen den kumulativen Transaktionszahlen zuordnet und so ein schnelles Nachschlagen der Blockhöhe ermöglicht. Dieser Ansatz bietet mehr Speicherplatz (z. B. die zusätzlichen 21 GB von ElectrumX für txid Lookup) für eine deutlich verbesserte Abfrageleistung im Vergleich zu Electrs minimaler Speichermethode. Dieses Design veranschaulicht das Gleichgewicht zwischen Speichereffizienz und Abfragegeschwindigkeit in der Datenbanktechnik, wobei Fulcrum und ElectrumX der Leistung Vorrang vor der Speicherökonomie einräumen.