Saltar al contenido
buybitcoinsmart

Glosario / Direcciones y claves

Bech32m

¿Qué es Bech32m?
Bech32m corrige un defecto de bech32 cambiando una constante de la suma de comprobación, y toda dirección Taproot que empieza por bc1p lo usa en lugar de la codificación original.

Se especifica en el BIP-350.

El defecto es acotado pero real. Siempre que una cadena bech32 termina en el carácter "p", insertar o borrar cualquier número de caracteres "q" justo antes de esa última letra deja válida la suma de comprobación, así que una dirección alterada puede superar la comprobación. El BIP-350 cierra el agujero combinando 0x2bc830a3 con la suma de comprobación donde bech32 combinaba el valor 1.

Cómo funciona

Bech32m es bech32 con un número cambiado. El codificador expande el prefijo legible por humanos, añade los datos, aplica el mismo polinomio BCH al resultado y solo difiere en el último paso, donde ese resultado se combina con 0x2bc830a3 en lugar de con 1. Todo lo que un lector puede ver sigue igual: el mismo alfabeto de 32 caracteres, el mismo separador "1", los mismos seis caracteres de suma de comprobación y el mismo límite de 90 caracteres.

Cambiar la constante no es un efecto secundario. Es el mecanismo. Como los dos esquemas no coinciden, una cadena bech32m no supera una prueba de suma de comprobación bech32 y una cadena bech32 no supera una de bech32m, así que el software antiguo rechaza de plano las direcciones nuevas en lugar de entenderlas a medias. El BIP-350 lo describe como una ruptura deliberada de la compatibilidad, elegida frente a la opción de parchear en silencio el propio bech32.

La línea divisoria es la versión de testigo. La versión de testigo 0, es decir, las direcciones bc1q de una sola clave y de script, conserva bech32. Las versiones de testigo de la 1 a la 16 usan bech32m. Hoy solo está definida la versión 1, como Taproot, así que en la práctica bech32m significa bc1p. La regla se escribió para cubrir versiones que todavía no existen, y por eso una billetera correcta comprueba el número de versión y no el prefijo de la dirección.

Dónde aparece

Una dirección de recepción bc1p es bech32m, tiene 62 caracteres y codifica una clave de 32 bytes. En las redes de pruebas, las mismas salidas aparecen como tb1p. Las salidas Taproot pasaron a ser gastables en el bloque 709.632, el 14 de noviembre de 2021, que es el momento a partir del cual las direcciones bech32m empezaron a llevar valor real en la mainnet.

Bitcoin Core implementó el BIP-350 en la versión 22.0, y desde esa versión toda llamada a procedimiento remoto que recibe una dirección exige bech32m para la versión de testigo 1 y superiores. La versión 23.0 fue más allá: las billeteras de descriptores recién creadas reciben automáticamente un descriptor tr(), así que entregan direcciones bc1p sin que se les pida.

La fricción práctica aparece en la pantalla de retiro. Algunas plataformas todavía rechazan los destinos bc1p porque su validador de direcciones entiende bech32 pero no la constante más reciente. En ese caso su billetera no tiene ningún problema, y una dirección bc1q de la misma semilla deja las monedas en la misma billetera.

Bech32m frente a P2TR

Bech32m es una codificación y P2TR es un tipo de salida, y hoy coinciden solo por una casualidad de calendario. Bech32m dice cómo escribir como texto cualquier programa de testigo de versión 1 o superior. P2TR dice qué significa un programa de versión 1: una clave pública ajustada (tweak) de 32 bytes que se puede gastar con una firma Schnorr o revelando un script. Toda dirección bech32m en circulación codifica una salida P2TR, pero eso deja de ser cierto en el momento en que la versión de testigo 2 se asigne a algo, ya que esas direcciones también serían bech32m y no serían Taproot.

No confundir con

Preguntas frecuentes

¿Tengo que hacer algo con respecto a bech32m?

No. Su billetera se encarga de la codificación. El único lugar donde se vuelve visible es un servicio que rechaza destinos bc1p, y la respuesta en ese caso es retirar a una dirección bc1q de la misma billetera.

¿Por qué crear un segundo formato en lugar de corregir bech32?

Porque una corrección silenciosa dejaría al software antiguo y al nuevo en desacuerdo sobre qué direcciones son válidas. Cambiar la constante de la suma de comprobación hace que las dos codificaciones sean mutuamente inválidas, así que las billeteras no actualizadas rechazan de plano una dirección bech32m en lugar de leerla mal.

Para seguir leyendo

Términos relacionados

Más en la sección Direcciones y claves

Leer esta página en inglés