Netzwerk

Bitcoin-Netzwerk ist ein Peer-to-Peer-Zahlungsnetzwerk, das nach einem kryptographischen Protokoll arbeitet. Benutzer senden und empfangen Bitcoins, die Währungseinheiten, durch Senden digital signierter Nachrichten an das Netzwerk mithilfe der Bitcoin Cryptocurrency-Wallet-Software. Transaktionen werden in einer verteilten, replizierten öffentlichen Datenbank, der sogenannten Blockchain, aufgezeichnet. Der Konsens wird durch ein Proof-of-Work-System (Mining) erzielt. Satoshi Nakamoto, der Entwickler von Bitcoin, behauptete, dass das Design und die Codierung von Bitcoin 2007 begann. Das Projekt wurde 2009 als Open-Source-Software veröffentlicht.

Das Blockchain-Netzwerk erfordert die minimale Struktur, um Transaktionen gemeinsam zu nutzen. Ein dezentrales Ad-hoc-Netzwerk von Freiwilligen ist ausreichend. Nachrichten werden nach besten Kräften gesendet, und Knoten können das Netzwerk nach Belieben verlassen und wieder anschließen. Bei der Wiederverbindung lädt ein Knoten neue Blöcke von anderen Knoten herunter und überprüft sie, um die lokale Kopie der Blockchain zu vervollständigen.

Das Bitcoin-Netzwerk wird als einfaches Rundfunknetzwerk verwendet, um Transaktionen und Blöcke zu verbreiten. Die gesamte Kommunikation erfolgt über TCP. Bitcoin kann andere Ports als 8333 über den Parameter -port verwenden. IPv6 wird mit Bitcoind/Bitcoin-Qt v0.7 unterstützt.

Bitcoin-Netzwerkmeldungen

  • version – Informationen zur Programmversion und zur Blockanzahl. Beim ersten Verbindungsaufbau ausgetauscht.
  • verack – Wird als Antwort auf eine Versionsnachricht gesendet, um zu bestätigen, dass wir bereit sind, eine Verbindung herzustellen.
  • addr – Liste einer oder mehrerer IP-Adressen und Ports.
  • inv – „Ich habe diese Blöcke / Transaktionen: …“ Wird normalerweise nur gesendet, wenn ein neuer Block oder eine neue Transaktion weitergeleitet wird. Dies ist nur eine Liste, nicht die tatsächlichen Daten.
  • getdata – Fordert einen einzelnen Block oder eine einzelne Transaktion per Hash an.
  • getblocks – Fordern Sie eine Inv aller Blöcke eines Bereichs an.
  • getheaders – Fordern Sie eine Header-Nachricht an, die alle Block-Header eines Bereichs enthält.
  • tx – Eine Transaktion senden. Dies wird nur als Antwort auf eine Getdata-Anfrage gesendet.
  • block – Senden Sie einen Block. Dies wird nur als Antwort auf eine Getdata-Anfrage gesendet.
  • headers – Senden Sie bis zu 2.000 Blocküberschriften. Nicht-Generatoren können die Header von Blöcken anstelle von ganzen Blöcken herunterladen.
  • getaddr – Fordern Sie eine addr-Nachricht an, die eine Reihe von bekannten aktiven Peers enthält (für Bootstrapping).
  • Submit Order, Checkorder und Reply – Wird bei einer IP-Transaktion verwendet.
  • alert – Senden Sie einen Bitcoin-Netzwerk-Alarmschlüssel.
  • ping – Tut nichts. Wird verwendet, um zu überprüfen, ob die Verbindung noch online ist. Ein TCP-Fehler tritt auf, wenn die Verbindung unterbrochen wurde.
  • Weitere Informationen und detaillierte technische Informationen finden Sie in der Bitcoin Network Protocol-Spezifikation

Blockchain-Netzwerkverbindung

Um eine Verbindung zu einem Peer herzustellen, senden Sie eine Versionsnachricht mit Ihrer Versionsnummer, Blockanzahl und der aktuellen Uhrzeit. Der Remote-Peer sendet eine Verack-Nachricht und seine eigene Versionsnachricht zurück, wenn er Verbindungen von Ihrer Version akzeptiert. Wenn Sie Verbindungen von seiner Version akzeptieren, antworten Sie mit Ihrem eigenen Verack.

Die Zeitdaten aller Ihrer Kollegen werden erfasst, und der Median wird von Bitcoin für alle Netzwerkaufgaben verwendet, die die Zeit verwenden (außer für andere Versionsnachrichten).

Sie tauschen dann getaddr- und addr-Nachrichten aus und speichern alle Adressen, die Sie nicht kennen. Adr-Nachrichten enthalten oft nur eine Adresse, manchmal aber bis zu 1000. Dies ist am häufigsten zu Beginn eines Austauschs.

Standard-Weiterleitung

Wenn jemand eine Transaktion sendet, sendet er eine Inv-Nachricht an alle seine Kollegen. Ihre Kollegen fordern die vollständige Transaktion mit getdata an. Wenn die Transaktion nach Erhalt der Transaktion als gültig angesehen wird, wird die Transaktion auch an alle ihre Peers mit einer Inv gesendet und so weiter. Peers fragen oder leiten Transaktionen nur dann weiter, wenn sie noch nicht vorhanden sind. Ein Peer sendet niemals eine Transaktion erneut, von der er bereits weiß, obgleich Transaktionen letztendlich vergessen werden, wenn sie nach einiger Zeit nicht in eine Blockade geraten. Der Sender und der Empfänger der Transaktion werden jedoch erneut gesendet.

Jeder, der generiert, sammelt gültige empfangene Transaktionen und arbeitet daran, sie in einen Block aufzunehmen. Wenn jemand einen Block findet, sendet er eine Invs an alle seine Kollegen, wie oben beschrieben. Es funktioniert genauso wie Transaktionen.

Jeder sendet alle 24 Stunden eine Addr mit eigener IP-Adresse. Knoten leiten diese Nachrichten an einige ihrer Kollegen weiter und speichern die Adresse, wenn sie neu für sie ist. Durch dieses System hat jeder ein einigermaßen klares Bild davon, welche IPs momentan mit dem Netzwerk verbunden sind. Nachdem Sie sich mit dem Netzwerk verbunden haben, werden Sie aufgrund Ihrer ursprünglichen Addr fast sofort in die Adressdatenbank aller Benutzer aufgenommen.

Blockchain Network-Warnungen werden mit Warnmeldungen gesendet. Es wird kein inv-ähnliches System verwendet. diese enthalten die gesamte Warnung. Wenn eine empfangene Warnung gültig ist (von einem der Personen mit dem privaten Schlüssel signiert), wird sie an alle Peers weitergeleitet. Solange ein Alarm noch aktiv ist, wird er zu Beginn jeder neuen Verbindung erneut gesendet.

Erster Block-Download

Beim Start einer Verbindung senden Sie eine getblocks-Nachricht mit dem Hash des neuesten Blocks, den Sie kennen. Wenn Bitcoin p2p nicht der Meinung ist, dass dies der letzte Block ist, wird eine Inv gesendet, die bis zu 500 Blöcke vor dem von Ihnen aufgelisteten Block enthält. Sie fordern dann alle diese Blöcke mit getdata an, und der Peer sendet sie mit Blocknachrichten an Sie. Nachdem Sie alle diese Blöcke heruntergeladen und verarbeitet haben, senden Sie weitere Getblöcke usw., bis Sie über alle Blöcke verfügen.

Thin SPV-Clients

Mit BIP 0037 wurde die Unterstützung für Thin- und Lite-Kunden über die Simple Payment Verification eingeführt. SPV-Clients müssen nicht den gesamten Blockinhalt herunterladen, um das Vorhandensein von Geldern in der Blockchain zu überprüfen, sondern verlassen sich auf die Kette von Blockheadern und Bloom-Filtern, um die benötigten Daten von anderen Knoten zu erhalten. Diese Methode der Client-Kommunikation ermöglicht eine vertrauenswürdige, hochsichere Kommunikation mit vollständigen Knoten, ist jedoch für den Datenschutz etwas kostspieliger, da die Peers daraus ableiten können, über welche Adressen der SPV-Client Informationen sucht.

MultiBit und Bitcoin Wallet arbeiten auf diese Weise mit der Bibliothek bitcoinj als Grundlage.

Bootstrapping

Sie wählen die Peers aus, zu denen eine Verbindung hergestellt werden soll, indem Sie Ihre Adressdatenbank nach der Zeit sortieren, seit Sie die Adresse zuletzt gesehen haben, und dann ein wenig Randomisierung hinzufügen.

Bitcoin bietet drei Methoden zum Finden von Kollegen.

Addr

Die oben beschriebenen addr-Meldungen erzeugen einen ähnlichen Effekt wie die IRC-Bootstrapping-Methode. Sie wissen einigermaßen schnell, wann immer ein Peer beitritt, obwohl Sie für eine Weile nicht wissen, wann sie gehen.

Bitcoin wird mit einer Liste von Adressen geliefert, die als „Seed Nodes“ bezeichnet werden. Wenn Sie keine Verbindung zu IRC herstellen können und noch nie eine Verbindung zum Netzwerk hergestellt haben, aktualisiert der Client die Adressdatenbank, indem Sie eine Verbindung zu einem der Knoten dieser Liste herstellen.

Mit der Befehlszeilenoption -addnode können Sie einen Knoten manuell hinzufügen. Die Option -connect kann Bitcoin dazu zwingen, nur eine Verbindung zu einem bestimmten Knoten herzustellen.

DNS

Bitcoin sucht die IP-Adressen mehrerer Hostnamen und fügt sie der Liste der möglichen Adressen hinzu. Dies ist der Standard-Seeding-Mechanismus ab Version 0.6.x und höher.

IRC

IRC-Bootstrapping ist ab Version 0.6.x des Bitcoin-Clients standardmäßig nicht mehr aktiviert. Die folgenden Informationen sind für die meisten früheren Versionen richtig.

Bitcoin verbindet einen zufälligen Kanal zwischen #bitcoin00 und #bitcoin99 auf irc.lfnet.org. Ihr Nick ist auf eine verschlüsselte Form Ihrer IP-Adresse eingestellt. Durch die Dekodierung aller Kerben aller Benutzer im Kanal erhalten Sie eine Liste aller IP-Adressen, die aktuell mit Bitcoin verbunden sind.

Für Hosts, die keine ausgehenden Verbindungen an Port 6667 herstellen können, überwachen die Lfnet-Server auch Port 7777.

Siehe auch

Ressourcen