¿Cómo crear una dirección Bech32 a partir de una clave pública?

¿Cuáles son los pasos para crear una dirección Bech32 a partir de una clave pública ECDSA? Bitcoin wiki tiene una buena guía paso a paso para crear una dirección a partir de una clave pública, pero ¿qué pasa con las direcciones Bech32? He leído BIP173 pero no entiendo qué dar como entrada.

@pors He visto este repositorio pero no sé qué ingresar. Entiendo que debo usar la función bech32_encode, pero ¿qué pongo allí? ¿La clave pública? ¿El hash160? el P2WSH? ¿Cómo creo eso?
¡Bienvenido a Bitcoin.SE! Para @pors, puede ayudar publicando sus comentarios ampliados como respuesta y posiblemente incluyendo alguna información de 'cómo usar'.
nullius ha creado una herramienta en diciembre, para jugar con direcciones bech32 en C. Fácil de usar, y el código también está documentado. Consulte aquí: bitcointalk.org/index.php?topic=2664728.msg27178628#msg27178628

Respuestas (1)

Ok, descubrí cómo hacerlo.

Necesita 3 piezas de información para construir la dirección bech32.

  • hrp: la parte legible por humanos. Esto es bcpara mainnet y tbtestnet
  • witver: la versión testigo. Esto 0por el momento está representado por el byte 0x00pero puede subir 16cuando agreguen más versiones.
  • witprog: el programa testigo. En caso de que desee una dirección Pay-to-witness-public-key (P2WPK), que es la más común, este es el hash160 de 20 bytes de la clave pública comprimidaripemd160(sha256(compressed_pub_key)) , es decir , . En caso de que desee una dirección Pay-to-witness-script-hash (P2WSH), esta es la sha256 de 32 bytes de scriptPubKey, que es la secuencia de comandos que deberá evaluarse como True para que alguien pueda gastar la salida. Más sobre esto en BIP141

Una vez que tenga esas 3 piezas, puede usar la función de codificación en una de las implementaciones de referencia

He reunido una pequeña biblioteca de Python puro para cualquier persona interesada en cómo funciona todo esto detrás del capó.

¿Puede agregar algunos vectores de texto aquí o señalar sus vectores de prueba?