Mein Bitcoin-Client hatte sich vor kurzem strikt geweigert, neue Blöcke der Blockchain zu akzeptieren. Was natürlich auch dazu führte, dass ich Transaktionen nicht mehr verfolgen konnte geschweige denn mit der Währung zu handeln. Da mir kein Update in den Sinn kam, welches diesen Fehler verursachen hätte können, habe ich kurzerhand einen Bitcoin Node auf meinem Server eingerichtet um der Sache auf den Grund zu gehen.

Selbstverständlich passierte dann genau das, womit ich nicht gerechnet habe: Beide Clients blieben stehen, der neu aufgesetzte Node auf dem Server bei Block #322082, der lokale Client um den Block #338200 herum. Das machte mich natürlich etwas skeptisch, schließlich waren hier unterschiedliche Betriebssysteme und Versionen des Clients im Spiel. War das Netzwerk etwa kompromittiert, wurde es (wie auch immer) heruntergefahren, möglicherweise das Experiment Bitcoin nun offiziell beendet? Nach längerer Suche führte mich dann letztlich ein Bugreport zum Übeltäter: Das jüngste Update von OpenSSL hat sowohl auf dem Server als auch bei meiner lokalen Instanz den Indexierungsvorgang, wie soll man sagen, kaputtgemacht. Grund ist eine Inkompatibilität des OpenSSL-Updates und gewissen Versionen des Bitcoin Cores, welchen ich verwende.

Die zwischenzeitliche Lösung, bis aktualisierte Versionen von OpenSSL oder des Clients in den Repositories landen, ist denkbar einfach: Den Index neu generieren lassen (wobei das wohl nicht immer funktioniert). Da hierbei knapp 6 Jahre an (Transaktions-) Daten verarbeitet werden müssen dauert das natürlich eine Weile. Zumindest zeigt der Client den aktuellen Stand sauber an:

2015-03-01_ein-bitcoin-node-wallet
Reindexierung mittels „bitcoin-qt -reindex“

Soviel zur Vorgeschichte. Nun aber weiter mit dem eigentlichen Thema.

Was ist ein Bitcoin Node?

Bitcoin Nodes sind – neben Minern – die wichtigsten Instanzen um das Bitcoin-Netzwerk am Leben zu erhalten. Die Nodes selbst sind reguläre Bitcoin-Clients, welche unter anderem folgende Funktionen erfüllen:

  • Eine vollständige Kopie der Blockchain bereithalten
  • Transaktionen im Netzwerk weiterleiten
  • Neue Blöcke verifizieren
  • Und diese auch wieder verteilen

Bitcoin Nodes stellen somit, sofern man davon sprechen kann, das Backend des Bitcoin-Netzwerkes dar und dienen zu dessen Erhaltung.

Einrichtung eines Bitcoin Nodes

Ob man einen Bitcoin-Node auf einem Ubuntu Server laufen lassen will muss jeder für sich entscheiden. Problematisch ist, dass man hierzu (sofern man sich nicht selbst um Updates kümmern will), eine Fremdquelle in das System einbinden muss. Die Gefahren hierbei sollten jedem bewusst sein. Nichtsdestotrotz hier eine kurze Anleitung.

Zuerst bindet man die Fremdquelle in das System ein, aktualisiert die Paketlisten und installiert anschließend den Bitcoin-Client:

# add-apt-repository ppa:bitcoin/bitcoin 
# apt-get update
# apt-get install bitcoind

Die Einrichtung des Dienstes erfolgt über die Datei ~/.bitcoin/bitcoin.conf. Diese wird beim ersten Start des Dienstes automatisch erzeugt:

$ bitcoind

Mittels Strg+C kann der Prozess abgebrochen werden um die Einstellungen in besagter Datei vorzunehmen. Einstellungen die geändert werden sollten sind unter anderem:

[…]
maxconnections=128
[…]
server=1
[…]
rpcuser=<username>
rpcpassword=<password>

Das rpcpassword muss übrigens nur gesetzt werden, wird aber später nicht mehr gebraucht. Es empfiehlt sich also eine möglichst lange, zufällige Zeichenfolge (wobei der bitcoin-Daemon dieses beim ersten Start sowieso automatisch generiert).

Achtung!

Eine Bitcoin-Wallet hat auf einem Node, wegen der Gefahr von Angriffen, nichts verloren! Im ungünstigsten Fall verliert man den Zugriff auf seine Bitcoins!

Den Bitcoin Node starten

Der Bitcoin Node wird mittels „bitcoind --daemon“ gestartet und läuft anschließend im Hintergrund. Die Administration, sofern man davon sprechen kann, läuft über ein RPC-Interface welches von bitcoin-cli bereitgestellt wird. Damit eine Verbindung hergestellt werden kann emfpiehlt es sich beim Start den Parameter „-rpcwait“ zu übergeben (bei den folgenden Befehlen ist dies dann nicht mehr nötig). Letztlich sieht das dann so aus:

$ bitcoin-cli -rpcwait <command>

Als command kann unter anderem übergeben werden:

  • getinfo
  • getnetworkinfo
  • stop

Zurückgegeben wird (in der Regel) ein Text im JSON-Format, welcher dadurch auch bequem in Skripten ausgewertet werden kann.

Wie aus dem Client ein Node wird

Da man für Nodes die gleiche Software verwendet wie für normale Clients stellt sich natürlich die Frage, wie aus einem Client ein Node wird. Im Prinzip hängt dies lediglich von der Laufzeit sowie der maximalen Anzahl an gleichzeitigen Verbindungen ab. Ich habe letzteres testweise über mehrere Tage protokollieren lassen und tatsächlich dauert es etwa 24 Stunden, bis der Client vollständig als Node fungiert. Die blaue Linie kennzeichnet die Anzahl simultaner Verbindungen, die rote Linie gibt den Mittelwert gemessen über einen Monat an.

2015-03-01_ein-bitcoin-node-client2node

Aber Bitcoin verschmutzt die Umwelt und tötet Babykätzen

Ja, zu blöd. Aber ernsthaft: Theoretisch könnte man das komplette Bitcoin-Netzwerk inklusive Minern auf ein paar hundert bis tausend Raspberry Pis laufen lassen und damit im Vergleich zur aktuellen Rechenleistung enorm viel Energie einsparen, doch wir begegnen hier einem Problem welches bisher noch nicht gelöst werden konnte: Der menschlichen Gier.

Das Bitcoin-Protokoll wurde so entwickelt, dass es sich dynamisch innerhalb von etwa 14 Tagen der verfügbaren Rechenleistung des Netzwerks anpassst. Die Menge der Bitcoins, welche alle 10 Minuten an Miner verteilt wird, ist daher bereits von Anfang an festgelegt. Mit höherer Rechenleistung erreicht man also nicht, dass insgesamt mehr Bitcoins generiert werden, sondern lediglich, dass der Anteil der Bitcoins die man erhält im Schnitt steigt.

Das hat unter den Minern selbstverständlich zu einem Wettlauf gefüllt, da jeder von den generierten Bitcoins einen möglichst großen Anteil haben wollte. Zuerst ließ man die Software hierfür auf CPUs laufen, anschließend auf den geeigneteren GPUs. Mittlerweile ist man bei spezielle ASICs angelangt, welche teilweise ausschließlich Bitcoins generieren können.

Man sollte trotzdem im Hinterkopf behalten, dass Bitcoin das bisher erfolgreichste Experiment seiner Art und bezüglich (Krypto-) Währungen wohl auch das am weitesten entwickelte darstellt.