Glosario / Nodos y software
Addrv2
- ¿Qué es Addrv2?
- Addrv2 es el mensaje entre pares que usan los nodos de bitcoin para propagar direcciones de pares que el antiguo mensaje addr no puede expresar, cada una etiquetada con un ID de red de un byte para Tor v3, I2P o Cjdns.
Se especifica en el BIP-155.
El antiguo mensaje addr lleva un campo de dirección fijo de 16 bytes, que no puede contener una dirección onion de Tor v3 de 32 bytes. BIP-155 reemplaza ese campo por un ID de red de un byte más una dirección de hasta 512 bytes, con un tope de 1.000 elementos por mensaje. Si ejecuta un nodo por Tor para que sus tenencias no queden asociadas a la dirección IP de su casa, addrv2 es la forma en que otros nodos se enteran de que existe.
Cómo funciona
Addrv2 conserva la forma del mensaje al que sucede y reescribe un solo campo.
Cada elemento lleva cinco cosas: una marca de tiempo Unix del último momento en que se vio conectado ese nodo, un campo de bits de servicio que pasó a la codificación CompactSize para que ya no cueste siempre ocho bytes, un ID de red de un byte, la propia dirección y un puerto de 16 bits que debe ser cero cuando la red no tiene ninguno. BIP-155 reserva siete ID: 0x01 IPv4 con 4 bytes, 0x02 IPv6 con 16, 0x03 Tor v2 con 10, 0x04 Tor v3 con 32, 0x05 I2P con 32, 0x06 Cjdns con 16 y 0x07 Yggdrasil con 16. Un mensaje con más de 1.000 elementos, una dirección de más de 512 bytes o una dirección cuya longitud no concuerde con su ID deberían rechazarse en todos los casos.
Dos de esos ID necesitan una nota al pie. Tor v2 dejó de funcionar: la versión 2.0.0 del BIP, con fecha 2025-10-01, deja constancia de que los clientes ya no deben propagar ni retransmitir el ID 0x03 y deben ignorarlo al recibirlo, y Bitcoin Core conserva el número en su enum a la vez que documenta TORV2 como ya no admitido. Core no implementa en absoluto el séptimo ID, ya que ese enum, BIP155Network en src/netaddress.h, va de IPV4 = 1 a CJDNS = 6 y se detiene ahí, con MAX_ADDRV2_SIZE establecido en los mismos 512 bytes que nombra la especificación.
La compatibilidad se negocia en lugar de darse por supuesta. Un nodo la anuncia enviando el mensaje sendaddrv2, y el momento de enviarlo es estricto: solo después del mensaje version del par y antes del mensaje verack, algo que Core hace cumplir desconectando a un par que lo envíe tarde. Si no se envía nunca, el par sigue usando el formato heredado (legacy) y descarta en silencio todos los tipos de dirección que el campo antiguo no puede expresar. La versión 2.1.0, con fecha 2026-08-03, cerró una laguna relacionada al establecer que las direcciones IPv4 envueltas en IPv6, el rango ::ffff:0:0/96, no deben viajar con el ID de IPv6, porque una misma máquina que llega con dos ID se cuenta como dos pares distintos.
Dónde aparece
Addrv2 aparece en Bitcoin Core como una etiqueta de red y no como algo que se lea directamente.
La llamada RPC getpeerinfo etiqueta cada conexión con un nombre de red, y la llamada RPC getnodeaddresses acepta uno como argumento: el texto de ayuda de src/rpc/net.cpp usa como ejemplos getnodeaddresses 4 "i2p" y -named getnodeaddresses network=onion count=12. La llamada RPC getaddrmaninfo va más allá y desglosa por red la reserva de direcciones almacenadas, con recuentos new, tried y total, antes de añadir un total all_networks. Las filas que van más allá de ipv4 e ipv6 contienen direcciones que ningún mensaje addr podría haber codificado, sin importar cómo se enteró de ellas su nodo por primera vez.
El caso de las direcciones onion muestra lo poco que viaja en realidad. Una dirección Tor v3 tiene 56 caracteres base32 antes del sufijo .onion, que codifican una clave pública ed25519 de 32 bytes, una suma de comprobación SHA3-256 de dos bytes y una versión de un byte. Solo la clave pública viaja por la red, y el nodo que la recibe reconstruye el resto, ya que la versión es siempre 3 y la suma de comprobación es una función de lo que ya tiene.
Para un tenedor, esto es maquinaria interna con una sola consecuencia visible. Las billeteras que enrutan todo por Tor de forma predeterminada, entre ellas Wasabi, y las billeteras que llegan por Tor al nodo que usted mismo ejecuta, como Blockstream Green, dependen todas de que, para empezar, se puedan encontrar pares onion.
Addrv2 frente a una dirección de bitcoin
Una dirección de bitcoin y una dirección addrv2 comparten tres letras y nada más. Un elemento addrv2 es una ubicación en una red, una respuesta a dónde está una máquina, y ninguna cantidad de ellos puede recibir monedas. Si se pega una dirección onion en el campo de envío de una billetera, se rechazará por estar mal formada, lo cual es el resultado correcto.