用語集 / ノードとソフトウェア
Addrv2
- Addrv2とは?
- Addrv2は、ビットコインのノードがピアのアドレスを伝播するために使うピアツーピアメッセージで、旧来のaddrメッセージでは表現できないアドレスを扱え、各アドレスにはTor v3、I2P、Cjdns用の1バイトのネットワークIDが付きます。
BIP-155で規定されています。
旧来のaddrメッセージは固定の16バイトのアドレスフィールドを持ち、32バイトのTor v3オニオンアドレスを格納できません。BIP-155はこのフィールドを、1バイトのネットワークIDと最大512バイトのアドレスに置き換え、1メッセージあたり1,000件を上限とします。自宅のIPアドレスから保有資産を切り離すためにTor経由でノードを運用すると、addrv2はそのノードの存在を他のノードが知る手段となります。
仕組み
Addrv2は、それが後継するメッセージの形を保ち、1つのフィールドだけを書き換えます。
各エントリは5つの要素を持ちます。そのノードが最後に接続されているのを確認した時刻のUnixタイムスタンプ、常に8バイトのコストがかからないようCompactSizeエンコーディングに移されたサービスビットフィールド、1バイトのネットワークID、アドレスそのもの、そしてネットワークにポートがない場合はゼロでなければならない16ビットのポートです。BIP-155は7つのIDを予約しています。0x01は4バイトのIPv4、0x02は16のIPv6、0x03は10のTor v2、0x04は32のTor v3、0x05は32のI2P、0x06は16のCjdns、0x07は16のYggdrasilです。1,000件を超えるエントリを含むメッセージ、512バイトを超えるアドレス、長さがIDと一致しないアドレスは、いずれも拒否されるべきです。
このうち2つのIDには補足が必要です。Tor v2は機能しなくなりました。2025-10-01付のBIPバージョン2.0.0は、クライアントがID 0x03を伝播も中継もしてはならず、受信時には無視しなければならないと記録しており、Bitcoin Coreはその番号をenumに残しつつ、TORV2をサポート対象外として記述しています。Coreは7番目のIDをまったく実装していません。そのenumであるsrc/netaddress.h内のBIP155NetworkはIPV4 = 1からCJDNS = 6までで終わり、MAX_ADDRV2_SIZEは仕様が示すのと同じ512バイトに設定されています。
対応は前提とされるのではなく交渉されます。ノードはsendaddrv2を送ることで対応を告知し、タイミングは厳格です。ピアのversionメッセージの後、verackの前のみであり、Coreは遅れて送ったピアを切断することでこれを強制します。一度も送らなければ、ピアは従来の形式を使い続け、旧フィールドで表現できないあらゆるアドレスタイプを黙って破棄します。2026-08-03付のバージョン2.1.0は、IPv6でラップされたIPv4アドレス、すなわち::ffff:0:0/96の範囲が、IPv6のIDで送られてはならないと定めることで、関連する欠落を埋めました。1台のマシンが2つのIDで届くと、2つの別々のピアとして数えられるためです。
どこで見られるか
Addrv2はBitcoin Coreでは、直接読むものとしてではなく、ネットワークのラベルとして現れます。
getpeerinfo呼び出しは各接続にネットワーク名を付け、getnodeaddressesはそれを引数として取ります。src/rpc/net.cppのヘルプテキストは、getnodeaddresses 4 "i2p"と-named getnodeaddresses network=onion count=12を例として使っています。getaddrmaninfo呼び出しはさらに踏み込み、保存されたアドレスプールをネットワークごとにnew、tried、totalの件数で分類し、最後にall_networksの合計を加えます。ipv4とipv6以外の行には、addrメッセージではエンコードできなかったアドレスが入っており、あなたのノードがそれらを最初にどう知ったかは問いません。
オニオンの例は、実際に流れる情報がどれほど少ないかを示します。Tor v3アドレスは.onion接尾辞の前に56文字のbase32があり、32バイトのed25519公開鍵、2バイトのSHA3-256チェックサム、1バイトのバージョンをエンコードしています。ネットワーク上を流れるのは公開鍵だけで、受信側のノードが残りを再構築します。バージョンは常に3であり、チェックサムはすでに保持している内容の関数だからです。
保有者にとって、これは目に見える結果が1つあるだけの内部機構です。すべてをデフォルトでTor経由にするウォレット(Wasabiなど)や、Tor経由で自分のノードに接続するウォレット(Blockstream Greenなど)は、いずれもオニオンピアがそもそも見つかることに依存しています。
Addrv2 vsビットコインアドレス
ビットコインアドレスとaddrv2アドレスは3文字を共有するだけで、他に共通点はありません。addrv2のエントリはネットワーク上の位置、つまりマシンがどこにあるかへの答えであり、どれだけ集めてもコインを受け取ることはできません。オニオンアドレスをウォレットの送金欄に貼り付ければ、形式が不正として拒否されます。これが正しい結果です。