Generar dirección SegWit de billetera de papel

Estoy tratando de generar la dirección de la billetera de papel SegWit desde WIF:

Mi WIF es L5mHKZsCLS27nSoGM3RdAwuxjvg7XhJdP25LgqdXe6zF11wpWdbT.

Estoy convirtiendo WIF en clave pública comprimida:

Clave pública comprimida:03fac6879502c4c939cfaadc45999c7ed7366203ad523ab83ad5502c71621a85bb

Estoy creando la dirección P2SH-P2WPKH siguiendo las instrucciones en Creación de la dirección P2SH-P2WPKH

utilizando el siguiente algoritmo:

  1. Calcular el RIPEMD160 del SHA256 de una clave pública:

SHA256 de clave pública:cfad24b0bc2bba2c8bb2c8d619dca2b74221930793bca50df73856f0bbba10c9

RIPEMD160 de hash SHA256:d5e5d05edfe2ed61099bf3f0d53be2775bbc6d0d

  1. Crear P2SH redimirScript como OP_PUSH publicKeyHash:

redimirScript:0014d5e5d05edfe2ed61099bf3f0d53be2775bbc6d0d

  1. Generar scriptPubKey comoOP_HASH160 hash160(redeemScript) OP_EQUAL

scriptPubKey:a914a19949e546c2f4d410cbb061c986b9ff3099ae7087

  1. Genere el hash RIPEMD160 de scriptPubKey:

picadillo:dc62e525af22d1f0f17cc2a091cf2c9fb36bf553

  1. Generar dirección con 0x05prefijo y doble suma de verificación hash SHA256:

resultado:3MnK46gvixm8hk7mJTQTAqenniSodjXPrJ

El resultado esperado según segwitaddress es:

33voQqbNAYyig272KjcX8GkucWn2x25WEg

¿Qué estoy haciendo mal?

Actualizar

Gracias a la respuesta aceptada, aquí hay pasos correctos para hacer esto:

Public key - compressed: 
03fac6879502c4c939cfaadc45999c7ed7366203ad523ab83ad5502c71621a85bb

SHA256(public key) =
cfad24b0bc2bba2c8bb2c8d619dca2b74221930793bca50df73856f0bbba10c9

RIPEMD160(SHA256(public key)) =
7646c030f7e75b80f0a31cdcab731e6f424f22b2

redeemScript (OP_0 pubkeyHash160):
00147646c030f7e75b80f0a31cdcab731e6f424f22b2

SHA256(redeemScript) =
a10e523968ba784d24ccd54e613d8f747d6649e42b1df4fdcec6658262620651

RIPEMD160(SHA256(redeemScript)) =
188ba16284702258959d8bb63bb9a5d979b57875

P2SH address base58(0x05 | hash | 4-byte sha256 checksum) =
33voQqbNAYyig272KjcX8GkucWn2x25WEg

Respuestas (1)

  1. Crear P2SH redimirScript como OP_PUSH publicKeyHash:

redimirScript:0014d5e5d05edfe2ed61099bf3f0d53be2775bbc6d0d

En realidad es `OP_0 pero de todos modos has dado como resultado lo correcto.

  1. Generar scriptPubKey comoOP_HASH160 hash160(redeemScript) OP_EQUAL

scriptPubKey:a914a19949e546c2f4d410cbb061c986b9ff3099ae7087

  1. Genere el hash RIPEMD160 de scriptPubKey:

picadillo:dc62e525af22d1f0f17cc2a091cf2c9fb36bf553

Estos pasos son incorrectos. Lo que se codifica para una dirección P2SH es el script de redimir, no el scriptPubKey. En lugar de hacer el paso 3, saltaría directamente al paso 4 y codificaría el script redimir en lugar de scriptPubKey.

Hola Andrés, esperaba que pudieras ayudar. Creo que no estoy generando la suma de comprobación correctamente. Antes de la codificación base58, esta es la cadena que tengo: 05188ba16284702258959d8bb63bb9a5d979b5787555c30444. Después de base58, eso es 33voQqbNAYyig272KjcX8GkucWn2uJk5WT. Los últimos 6 caracteres son incorrectos. ¿En qué parte me estoy equivocando?
@ user2298995 Su suma de verificación es incorrecta. El hexadecimal debe ser 05188BA16284702258959D8BB63BB9A5D979B57875BFE2FCFD
¡Muchas gracias por tu comentario! ¿Cómo se genera entonces la suma de comprobación? Tomé los 4 bytes de sha256(sha256(redeemScript)). ¿No es la forma adecuada?
No, son los primeros 4 bytes de sha256 (sha256 (carga útil)) donde la carga útil son los datos que está codificando con la codificación de verificación base58. En este caso, la carga útil es 05188BA16284702258959D8BB63BB9A5D979B57875
Oh muchas gracias. ¡Muy apreciado!