Después de la creación, ¿qué tengo que hacer con una transacción de coinbase?

Creé una transacción de coinbase con éxito con el comando:

createrawtransaction '[{"txid":"0000000000000000000000000000000000000000000000000000000000000000","vout":0}]' '{"12Evb28oMpkP76HRS2CZ7VjNMD25B84VMv":12.5}'

lo que da una cadena hexadecimal para la transacción. Pero cuando intento signrawtransactionme sale este error:

{
  "hex": "...",
  "complete": false,
  "errors": [
    {
      "txid": "0000000000000000000000000000000000000000000000000000000000000000",
      "vout": 0,
      "scriptSig": "",
      "sequence": ...,
      "error": "Input not found or already spent"
    }
  ]
}

con sendrawtransactionstengo:

Missing inputs (code -25)

¿Qué tengo que hacer con esta transacción después de crearla?

Respuestas (1)

Una transacción de coinbase no es aquella que se firma o transmite a la red. Más bien, debería ser la primera transacción en el bloque que está extrayendo. Además, los primeros 4 bytes de scriptSig deben ser la altura del bloque (1 byte para pushdata 3 bytes para la altura).

El resultado del comando anterior createrawtransaction es una cadena hexadecimal. Para crear el bloque que quiero transmitir, ¿creo que necesito una identificación de transacción (txid)? ¿O me equivoco? Si no lo soy, ¿cómo obtengo el txid para la transacción de coinbase?
El txid es el hash de los bytes de la transacción, por lo que primero debe hacer que la cadena hexadecimal sea una matriz de bytes y luego hacer un hash con sha256d. El bloque también contiene esa transacción, no el txid (el txid es solo una parte de la raíz de merkle), por lo que su bloque, cuando lo transmite, también debe contener la transacción en sí.
¿Sabe cómo empaquetar la transacción para agregarla al bloque? ¿Simplemente cree una matriz con cada campo y luego haga un hash con sha256d?
El hash no está incluido en el bloque. Solo se usa para crear la raíz de merkle. La transacción es la cadena hexadecimal que le proporciona createrawtransaction. Tendrás que modificarlo ligeramente. Esa cadena hexadecimal es una representación de cadena de los bytes, por lo que deberá convertirla en una matriz de bytes. Cada dos caracteres es un byte.
No la transacción de coinbase, quiero decir. Cómo empaquetar las transacciones en el bloque: las devueltas por el getblocktemplatecomando. Ya sé cómo recuperar los datos de la interfaz json-rpc. Para calcular la raíz de Merkle, creo una matriz con todos los txid. ¿Qué otros datos disponibles necesito usar para construir la lista de transacciones para el nuevo bloque?
Solo necesita el hexadecimal de la transacción que puede obtener usando getrawtransaction.