Prefijo de versión utilizado para direcciones Bech32
Estaba compilando una tabla para el prefijo de versión (hexadecimal) y el prefijo del resultado Base-58 para diferentes tipos de direcciones de Bitcoin.
Encontré el contenido aquí: https://en.bitcoin.it/wiki/List_of_address_prefixes, que no contiene información sobre Decimal , prefijo Hex para direcciones Bech32 (supongo que también llamaron dirección SegWit, ¿verdad?)
Entonces, revisé esta tabla aquí: https://en.bitcoin.it/w/images/en/4/48/Address_map.jpgpero no entiendo el significado de " x03x03x00x02x03 ".
- Si x00 es igual a 0x00 en hexadecimal y x80 es igual a 0x80 en hexadecimal, ¿cómo debo interpretar x03x03x00x02x03?
- ¿Cuál es el prefijo de versión para las direcciones Bech32 (direcciones bc1)?
Respuestas
Esos bytes (x03x03x00x02x03 o mejor mostrado como 0x0303000203) son la parte legible por humanos expandida. Puede encontrar el código en BIP-173 .
def bech32_hrp_expand(s):
return [ord(x) >> 5 for x in s] + [0] + [ord(x) & 31 for x in s]
Sin embargo, el problema es que, a diferencia de la codificación Base58, esos bytes solo se utilizan en el cálculo de la suma de comprobación, no como bytes iniciales. Lo que hace que la imagen sea engañosa en mi opinión.
La codificación Bech32 es muy diferente de la codificación Base58 ya que no hay un "prefijo de versión". Hay un Hrp, una versión de testigo, un dato (hash) y una suma de comprobación. Witness version | hashson los datos que se codifican y expanded_hrp | datase utilizan en el cálculo de la suma de comprobación ( |es la concatenación).