Глоссарий / Узлы и ПО
Addrv2
- Что такое Addrv2?
- Addrv2 представляет собой одноранговое сообщение, которым узлы биткоина распространяют адреса пиров, которые старое сообщение addr выразить не может, причем каждый адрес помечен однобайтовым идентификатором сети для Tor v3, I2P или Cjdns.
Определено в BIP-155.
Старое сообщение addr несет фиксированное поле адреса размером 16 байт, в которое не помещается onion-адрес Tor v3 размером 32 байта. BIP-155 заменяет это поле однобайтовым идентификатором сети плюс адресом длиной до 512 байт, с ограничением в 1000 записей на сообщение. Запустите узел через Tor, чтобы ваши запасы не были связаны с домашним IP-адресом, и именно через addrv2 другие узлы узнают о его существовании.
Как это работает
Addrv2 сохраняет форму сообщения, на смену которому приходит, и переписывает одно поле.
Каждая запись несет пять элементов: метку времени Unix того момента, когда этот узел последний раз видели подключенным, поле битов служб, переведенное в кодировку CompactSize, чтобы оно больше не всегда занимало восемь байт, однобайтовый идентификатор сети, сам адрес и 16-битный порт, который должен быть нулевым там, где у сети его нет. BIP-155 резервирует семь идентификаторов: 0x01 IPv4 размером 4 байта, 0x02 IPv6 размером 16, 0x03 Tor v2 размером 10, 0x04 Tor v3 размером 32, 0x05 I2P размером 32, 0x06 Cjdns размером 16 и 0x07 Yggdrasil размером 16. Следует отклонять сообщение, несущее больше 1000 записей, адрес длиннее 512 байт или адрес, длина которого не совпадает с его идентификатором.
Два из этих идентификаторов требуют примечания. Tor v2 перестал работать: версия 2.0.0 BIP, датированная 2025-10-01, фиксирует, что клиенты больше не должны распространять или ретранслировать идентификатор 0x03 и должны игнорировать его при получении, а Bitcoin Core сохраняет этот номер в своем перечислении, документируя TORV2 как больше не поддерживаемый. Core вовсе не реализует седьмой идентификатор, поскольку это перечисление, BIP155Network в src/netaddress.h, идет от IPV4 = 1 до CJDNS = 6 и на этом останавливается, а MAX_ADDRV2_SIZE установлен в те же 512 байт, что называет спецификация.
Поддержка согласуется, а не предполагается. Узел объявляет о ней, отправляя sendaddrv2, и момент строгий: только после сообщения version от пира и до verack, что Core обеспечивает, отключая пира, который отправляет его позже. Если не отправить его никогда, пир продолжит использовать старый формат, молча отбрасывая все типы адресов, которые старое поле выразить не может. Версия 2.1.0, датированная 2026-08-03, закрыла связанный пробел, постановив, что адреса IPv4, обернутые в IPv6, диапазон ::ffff:0:0/96, не должны передаваться под идентификатором IPv6, потому что одна машина, приходящая под двумя идентификаторами, считается двумя отдельными пирами.
Где это видно
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 не могло бы закодировать, как бы ваш узел ни узнал о них впервые.
Случай onion показывает, как мало на самом деле передается. Адрес Tor v3 состоит из 56 символов base32 перед суффиксом .onion, кодирующих публичный ключ ed25519 размером 32 байта, двухбайтовую контрольную сумму SHA3-256 и однобайтовую версию. По сети передается только публичный ключ, а принимающий узел восстанавливает остальное, поскольку версия всегда равна 3, а контрольная сумма является функцией от того, что у него уже есть.
Для владельца это внутренняя механика с одним видимым следствием. Кошельки, которые по умолчанию направляют все через Tor, среди них Wasabi, и кошельки, которые обращаются к вашему собственному узлу через Tor, например Blockstream Green, все зависят от того, что onion-пиров вообще можно найти.
Addrv2 vs адрес биткоина
Адрес биткоина и адрес addrv2 совпадают тремя буквами и ничем больше. Запись addrv2 представляет собой местоположение в сети, ответ на вопрос, где находится машина, и сколько бы их ни было, получить на них средства нельзя. Вставьте onion-адрес в поле отправки кошелька, и он будет отклонен как некорректный, что и является правильным результатом.