本文へスキップ
buybitcoinsmart

用語集 / ノードとソフトウェア

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のエントリはネットワーク上の位置、つまりマシンがどこにあるかへの答えであり、どれだけ集めてもコインを受け取ることはできません。オニオンアドレスをウォレットの送金欄に貼り付ければ、形式が不正として拒否されます。これが正しい結果です。

混同しやすい用語

よくある質問

ノードでaddrv2を有効にする必要はありますか?

いいえ。Bitcoin Coreがsendaddrv2メッセージを代わりに送信します。BIP-155が要求する期間内、すなわちピアのversionメッセージの後かつverackの前であり、交渉されたプロトコルバージョンが70016以上の場合に限られます。古いソフトウェアは未知のメッセージタイプを拒否する可能性があるためです。応答として一度も返さないピアは、引き続き旧来のaddr形式を受け取ります。

addrv2はノードの通信を暗号化しますか?

いいえ。Addrv2が変えるのは、ノードがどのアドレスについて話せるかだけで、接続自体がどう保護されるかではありません。接続の暗号化は別の交渉であり、BIP-324が定義するv2トランスポートで、Bitcoin Coreは独自のサービスビットでこれを通知します。

BIP-155がTor v2用のネットワークIDを今も記載しているのはなぜですか?

idは表に残りますが、使用されなくなったものとして印が付けられています。2025-10-01日付のBIPのバージョン2.0.0には、Tor v2がもはや稼働しておらず、クライアントはid 0x03の伝播も中継もしてはならず、受信時には無視しなければならないことが記録されています。Bitcoin CoreはBIP155Network enumにTORV2 = 3を維持し、そのidをサポートされなくなったものとして文書化しています。

次に読む

関連用語

ノードとソフトウェアのその他の用語

このページを英語で読む