Glossar / Nodes und Software
Addrv2
- Was ist Addrv2?
- Addrv2 ist die Peer-to-Peer-Nachricht, mit der Bitcoin-Nodes Adressen anderer Peers weitergeben, die die ältere addr-Nachricht nicht ausdrücken kann, jeweils versehen mit einer ein Byte großen Netzwerk-ID für Tor v3, I2P oder Cjdns.
Spezifiziert im BIP-155.
Die ältere addr-Nachricht enthält ein festes Adressfeld von 16 Bytes, das keine 32 Byte große Tor-v3-Onion-Adresse aufnehmen kann. BIP-155 ersetzt dieses Feld durch eine ein Byte große Netzwerk-ID plus eine Adresse von bis zu 512 Bytes, begrenzt auf 1.000 Einträge pro Nachricht. Betreiben Sie einen Node über Tor, damit Ihr Bestand nicht mit der IP-Adresse Ihres Zuhauses verknüpft wird, und addrv2 ist der Weg, über den andere Nodes erfahren, dass es ihn gibt.
So funktioniert es
Addrv2 behält die Form der Nachricht, an deren Stelle es tritt, und schreibt ein einziges Feld um.
Jeder Eintrag trägt fünf Dinge: einen Unix-Zeitstempel dafür, wann dieser Node zuletzt als verbunden gesehen wurde, ein Dienst-Bit-Feld, das auf die CompactSize-Kodierung umgestellt wurde, sodass es nicht mehr immer acht Bytes kostet, eine ein Byte große Netzwerk-ID, die Adresse selbst und einen 16 Bit großen Port, der null sein muss, wo das Netzwerk keinen hat. BIP-155 reserviert sieben IDs: 0x01 IPv4 mit 4 Bytes, 0x02 IPv6 mit 16, 0x03 Tor v2 mit 10, 0x04 Tor v3 mit 32, 0x05 I2P mit 32, 0x06 Cjdns mit 16 und 0x07 Yggdrasil mit 16. Eine Nachricht mit mehr als 1.000 Einträgen, eine Adresse länger als 512 Bytes oder eine Adresse, deren Länge nicht zu ihrer ID passt, sollten alle zurückgewiesen werden.
Zwei dieser IDs brauchen eine Fußnote. Tor v2 funktioniert nicht mehr: Version 2.0.0 des BIP, datiert auf den 2025-10-01, hält fest, dass Clients die ID 0x03 nicht mehr weitergeben oder weiterleiten dürfen und sie beim Empfang ignorieren müssen, und Bitcoin Core behält die Nummer in seinem Enum bei und dokumentiert TORV2 zugleich als nicht mehr unterstützt. Core implementiert die siebte ID überhaupt nicht, da dieses Enum, BIP155Network in src/netaddress.h, von IPV4 = 1 bis CJDNS = 6 läuft und dort endet, wobei MAX_ADDRV2_SIZE auf dieselben 512 Bytes gesetzt ist, die die Spezifikation nennt.
Unterstützung wird ausgehandelt und nicht vorausgesetzt. Ein Node kündigt sie an, indem er sendaddrv2 sendet, und der Zeitpunkt ist streng: erst nach der version-Nachricht des Peers und vor verack, was Core durchsetzt, indem er einen Peer trennt, der sie zu spät sendet. Wird sie nie gesendet, verwendet der Peer weiterhin das alte Format und verwirft stillschweigend jeden Adresstyp, den das alte Feld nicht ausdrücken kann. Version 2.1.0, datiert auf den 2026-08-03, schloss eine verwandte Lücke, indem sie festlegte, dass in IPv6 verpackte IPv4-Adressen, der Bereich ::ffff:0:0/96, nicht unter der IPv6-ID übertragen werden dürfen, weil eine Maschine, die unter zwei IDs ankommt, als zwei getrennte Peers gezählt wird.
Wo es auftaucht
Addrv2 erscheint in Bitcoin Core als Netzwerkbezeichnung und nicht als etwas, das Sie direkt lesen.
Der Aufruf getpeerinfo versieht jede Verbindung mit einem Netzwerknamen, und getnodeaddresses nimmt einen als Argument: Der Hilfetext in src/rpc/net.cpp verwendet getnodeaddresses 4 "i2p" und -named getnodeaddresses network=onion count=12 als Beispiele. Der Aufruf getaddrmaninfo geht weiter und schlüsselt den gespeicherten Adresspool nach Netzwerk auf, mit Zählungen für new, tried und total, bevor er eine Gesamtsumme all_networks anhängt. Die Zeilen jenseits von ipv4 und ipv6 enthalten Adressen, die keine addr-Nachricht hätte kodieren können, ganz gleich, wie Ihr Node zuerst von ihnen erfahren hat.
Der Onion-Fall zeigt, wie wenig tatsächlich übertragen wird. Eine Tor-v3-Adresse besteht aus 56 Base32-Zeichen vor dem Suffix .onion, die einen 32 Byte großen öffentlichen ed25519-Schlüssel, eine zwei Byte große SHA3-256-Prüfsumme und eine ein Byte große Version kodieren. Nur der öffentliche Schlüssel geht über die Leitung, und der empfangende Node baut den Rest neu auf, da die Version immer 3 ist und die Prüfsumme eine Funktion dessen ist, was er bereits hat.
Für einen Halter ist das unsichtbare Technik mit einer sichtbaren Folge. Wallets, die standardmäßig alles über Tor leiten, darunter Wasabi, und Wallets, die Ihren eigenen Node über Tor erreichen, wie Blockstream Green, hängen alle davon ab, dass Onion-Peers überhaupt auffindbar sind.
Addrv2 vs. eine Bitcoin-Adresse
Eine Bitcoin-Adresse und eine addrv2-Adresse teilen drei Buchstaben und sonst nichts. Ein addrv2-Eintrag ist ein Ort in einem Netzwerk, eine Antwort darauf, wo eine Maschine sitzt, und keine noch so große Anzahl davon kann Coins empfangen. Fügen Sie eine Onion-Adresse in das Senden-Feld einer Wallet ein, wird sie als fehlerhaft zurückgewiesen, was das richtige Ergebnis ist.