Confundido por varias apis scriptPubKey

Estoy realmente confundido y tengo problemas incluso para hacer esta pregunta de manera coherente (ya que estoy tratando de describir cosas que otras personas han renombrado varias veces en diferentes instancias), así que tengan paciencia conmigo...

Estoy tratando de crear una transacción usando cada API que encuentro, así que estoy normalizando la estructura de la respuesta de cada llamada de API en

Formato esperado de bitcores para las salidas no gastadas:

[
    {
      "address": "2Mwswt6Eih28xH8611fexpqKqJCLJMomveK",
      "scriptPubKey": "a91432d272ce8a9b482b363408a0b1dd28123d59c63387",
      "txid": "2ac165fa7a3a2b535d106a0041c7568d03b531e58aeccdd3199d7289ab12cfc1",
      "vout": 1,
      "amount": 1.0,
      "confirmations":7
    }
    , { ... }
]

de: https://blog.bitpay.com/transactionbuilder/

Pero diferentes apis están devolviendo diferentes partes de datos

webbtc.com/address api no gastado solo tiene scriptPubKey

"scriptPubKey": "OP_DUP OP_HASH160 cba5f746dc1e41a932a7d38be7aba95944619ee8 OP_EQUALVERIFY OP_CHECKSIG"

mientras que toshi.io api no gastado tiene

"script":"OP_DUP OP_HASH160 cba5f746dc1e41a932a7d38be7aba95944619ee8 OP_EQUALVERIFY OP_CHECKSIG",
"script_hex":"76a914cba5f746dc1e41a932a7d38be7aba95944619ee888ac",

api de smartbit tiene

"script_pub_key":{
    "asm":"OP_DUP OP_HASH160 cba5f746dc1e41a932a7d38be7aba95944619ee8 OP_EQUALVERIFY OP_CHECKSIG",
    "hex":"76a914cba5f746dc1e41a932a7d38be7aba95944619ee888ac"}

Todas las apis llaman a estas dos cosas por nombres diferentes y algunas apis incluyen ambas/una/o-la-otra


Solo tendría sentido presentar información útil en estas API. Entonces, ¿significa que puedo usar la que tiene todo el material OP_ para scriptPubKey en bitpay.com/transactionbuilder si falta la otra?

¿Por qué a veces me dan uno y no el otro?

¡Hubiera pensado que si diferentes apis proporcionaran diferentes partes de esta información, tal vez Ether podría usarse para construir una transacción!

Por ejemplo, podría eliminar OP_DUP OP_HASH160 OP_EQUALVERIFY... cualquier cosa que comience con OP_ (si el que solo tiene la cadena alfanumérica no está solo, quiero decir)

Lo que realmente me confundió y es la razón principal:

bitpay en su ejemplo anterior "scriptPubKey": "a91432d272ce8a9b482b363408a0b1dd28123d59c63387"es solo una cadena hexadecimal, mientras que webbtc tiene exactamente el mismo nombre "scriptPubKey": "OP_DUP OP_HASH160 cba5f746dc1e41a932a7d38be7aba95944619ee8 OP_EQUALVERIFY OP_CHECKSIG"pero tiene todas las cosas OP_ allí

Respuestas (1)

Estos son nombres de API y scripts de visualización en su forma codificada o decodificada. Lo que desea construir una transacción es el formulario codificado como el devuelto por toshi (script_hex) o smartbit (hexadecimal).

Un script es una secuencia de instrucciones que comienza con OP_ (OP_DUP, etc...) y datos hexadecimales. Puede leer más sobre el lenguaje de script aquí .

En el nivel de protocolo, todas las instrucciones y los datos se concatenan para formar un único blob hexadecimal (codificado) del script:

76a914cba5f746dc1e41a932a7d38be7aba95944619ee888ac

Esto es lo que firma el generador de transacciones. Sin embargo, no es realmente inteligible para nosotros los humanos. Es por eso que estas API decodifican el hexágono en la secuencia de instrucciones que codifican:

OP_DUP (0x76)
OP_HASH160 (0xa9)
(0x14 means 20 bytes of data are next)
cba5f746dc1e41a932a7d38be7aba95944619ee8
OP_EQUALVERIFY (0x88)
OP_CHECKSIG (0xac)

La forma tradicional de mostrar este script decodificado es:

OP_DUP OP_HASH160 cba5f746dc1e41a932a7d38be7aba95944619ee8 OP_EQUALVERIFY OP_CHECKSIG
Entonces, con webbtc "scriptPubKey"(¡estos son datos de script de nivel de protocolo!), ¿Debo cifrar o firmar los datos con mi clave privada para crear el blob hexadecimal del script?
No usted directamente, ese es el rol del generador de transacciones de Bitpay. Siempre que le proporcione las claves que bloquean las salidas, hará todas las firmas necesarias para que la transacción sea válida.