¿Cómo generar una dirección Segwit nativa y una dirección Segwit P2SH desde un WIF estándar?

¿Puedo tener los pasos para generar una dirección Segwit nativa desde un WIF estándar? ¿Y los pasos para generar una dirección P2SH Segwit desde el mismo WIF?

¿En qué se diferencian estos dos formatos y por qué hay dos? He visto que la versión P2SH es compatible con clientes más antiguos, ¿no son direcciones nativas de Segwit?

Respuestas (1)

wif -> clave privada

  • Use base58-decode para convertir la cadena base58 en bytes
  • Quite el primer byte (byte de red) y los últimos 4 bytes (suma de comprobación). El resto es la clave.
  • Verifique que los primeros 4 bytes de sha256 (sha256 (byte de red || clave)) sean iguales a la suma de verificación
  • Si la clave termina con 0x01(comprimido) elimine el último byte. Te queda la clave privada

clave privada -> clave pública

  • Convertir la clave privada como un número entero
  • Multiplique con el punto generador secp256k1 para obtener un Punto (x, y) en la curva. Esta es tu clave pública

  • Codifique su clave pública en un formato comprimido. Byte 0x03(si y es impar) o 0x02(si y par) seguido de x como un entero de 256 bits

Clave pública -> dirección P2WPKH

  • Cree el programa testigo = ripemd160(sha256(public key))
  • Codifique en bech32 proporcionando el programa testigo, bccomo la parte legible por humanos y 0como versión testigo

Clave pública -> dirección P2SH-P2WPKH

  • Cree el programa testigo = ripemd160(sha256(public key))
  • Cree el script de canje = 0x0014<witness program>= versión testigo + push20 + programa testigo
  • Calcula el hash160 = ripemd160(sha256(script))
  • Anteponga el hash con el byte de versión0x05
  • Calcule la suma de comprobación = sha256(sha256(versión byte || scripthash))
  • Base58-encode (byte de versión || scripthash || primeros 4 bytes de suma de comprobación)

¿En qué se diferencian estos dos formatos y por qué hay dos? He visto que la versión P2SH es compatible con clientes más antiguos, ¿no son direcciones nativas de Segwit?

Los clientes antiguos no pueden enviar a direcciones segwit, pero pueden enviar a direcciones P2SH y, por extensión, a P2SH-P2WPKH

¿Hay alguna herramienta que pueda usar para verificar que mis direcciones de segwit sean correctas durante la prueba?
@arshbot Estoy usando esta biblioteca de Python (descargo de responsabilidad: la escribí) github.com/mcdallas/cryptotools y también existe esta herramienta en línea, pero no es compatible con segwit gobittest.appspot.com