Error al cifrar scriptPubKey en testnet

Tengo la siguiente dirección de billetera de testnet:

2MsQEtPJ6JJZszMYrD6udjUyTDFLczWQrv9

Que estoy tratando de codificar como pubkeyhash para coinbase TX en testnet. Cuando ejecuto decode58, obtengo esto

C401B47E5722F808856A308FA043CCF28323F51711E8165536

Elimino el prefijo del byte de la versión y el sufijo de la suma de comprobación, y obtengo:

01B47E5722F808856A308FA043CCF28323F51711

Entonces el scriptPubKey debería ser

76a91401b47e5722f808856a308fa043ccf28323f5171188ac which is OP_DUP OP_HASH160 01b47e5722f808856a308fa043ccf28323f51711 OP_EQUALVERIFY OP_CHECKSIG

Pero como prueba de unidad de cordura, lo verifico vs. la consola de depuración

decodescript 76a91401b47e5722f808856a308fa043ccf28323f5171188ac

Pero la consola de depuración me da esto:

  "asm": "OP_DUP OP_HASH160 01b47e5722f808856a308fa043ccf28323f51711 OP_EQUALVERIFY OP_CHECKSIG",
  "reqSigs": 1,
  "type": "pubkeyhash",
  "addresses": [
    "mffyC9xbwyBQUWhV8SbYWpqaiNSSWR2vpo"
  ],
  "p2sh": "2ND12E9b9oa9hvTTckXwNaSJiRZ39eRFWSJ"

Entonces, ¿por qué obtengo la dirección "mffyC9xbwyBQUWhV8SbYWpqaiNSSWR2vpo" y no "2MsQEtPJ6JJZszMYrD6udjUyTDFLczWQrv9" como esperaba?

Respuestas (1)

En primer lugar, las scriptPubKeys no están encriptadas y lo que está haciendo no es encriptación. Esto es codificación.

El problema es que está intentando codificar una dirección P2SH como un scriptPubKey P2PKH. Las direcciones P2SH son diferentes de las direcciones P2PKH y tienen códigos de operación diferentes. Puede identificarlos mirando el número de versión de la dirección que no está haciendo. El número de versión en realidad tiene un significado, no se puede ignorar. Su scriptPubKey en realidad debería ser

OP_HASH160 01b47e5722f808856a308fa043ccf28323f51711 OP_EQUAL
¡Gracias!, así que si el byte de la versión es "0xc4", entonces puedo decir que es una dirección P2SH... Ahora obtengo en.bitcoin.it/wiki/Base58Check_encoding . Lo que ahora deseo entender es por qué el código de operación es diferente en las direcciones P2SH en las transacciones de coinbase
No son necesariamente P2SH. Probablemente los estés confundiendo con otra cosa.