SignRawTransaction - ¿Qué es scriptPubKey y redimirScript? [SOLUCIONADO] [cerrado]

Permítanme hablar sobre cómo llegué a la situación en la que estoy ahora. Estoy usando PHP y la biblioteca JSON para controlar bitcoind. Y al hacerlo.....

Creé una dirección de firma múltiple que requiere 2 de 3 firmas con createmultisig.

Luego envié fondos a la dirección multifirma y pude confirmar las transacciones enviadas a esta dirección usando getrawtransaction y decoderrawtransaction.

Luego, quería liberar esos fondos a una dirección específica (porque controlo todas las claves, esto es solo una prueba)

Así que creé una transacción sin procesar en la que ingresé el ID de transacción que usé para una de las transacciones para enviar fondos a la billetera de firmas múltiples. También agregué la dirección deseada y la cantidad. Después de esto, escupió un maleficio de transacción sin procesar.

Mi siguiente paso es firmar la transacción sin procesar. Aquí es donde estoy atascado.

Los parámetros para signrawtransaction son confusos para mí y necesito que me los expliquen como si tuviera 5 años.

hexstring - assuming this is the hex string that createrawtransaction spit out

transaction id - is this the transaction id from when I transferred in the amount to the multisig wallet?

scriptPubKey - no idea what this is

redeemScript - no idea what this is

Tomé scriptPubKey y redimíScript de la transacción que usé para transferir fondos a la billetera multisig, pero el resultado fue la entrada exacta de la cadena hexadecimal, por lo que obviamente no la está firmando correctamente. No estoy seguro de cuáles son estos 2 parámetros.

Puede alguien ayudarme con esto. Necesito que me lo expliquen como si fuera retrasado porque ninguna de las explicaciones que he leído en línea me ha ayudado.

Gracias.

EDITAR a RE: Jonathan

Esto es lo que he hecho hasta ahora.

1) Creé una dirección multisig usando 3 claves públicas que generé. También tomé nota de las claves privadas y de la dirección multisig (ABC) y el script de redimir (redeem1) generados.

2) Envió monedas a la dirección multisig y al buscar a través de la cadena de bloques encontró que las transacciones existen. Tenía varias identificaciones de transacción para enviar a esta dirección, pero me estoy enfocando en una que estoy tratando de usar como salida. Lo llamaremos (txid1). En txid1, cuando llamé a getrawtransaction, también tenía un pubkey hexadecimal de 46 bytes adjunto a la salida, lo llamaré (pubkey1)

3) A continuación, creé una transacción sin procesar que incluía los parámetros;

txid1, vout=0, dirección (dirección para gastar) y cantidad (coincide con la misma cantidad transferida a la dirección multisig con txid1) y escupe una cadena hexadecimal, que llamaré (hexadecimal1)

4) SignRawTransaction: aquí es donde estoy atascado. Los parámetros que pide son;

[{"txid":txid,"vout":n,"scriptPubKey":hex, "redeemScript":hex},...] [,...]

Así que estoy ingresando signrawtransaction(hex1, ["txid"=>txid1, "vout"=>0, "scriptPubKey"=>pubkey1, "redeemScript"=>redeem1, array(oneofmyprivatekeys))

Pero la salida resultante es solo el hex1, sin un solo cambio. No recibo ningún mensaje de error, solo una cadena de salida idéntica a hex1.

¿Puedes darme una idea de lo que estoy haciendo mal? ¡Muchas gracias!

El problema es que estaba usando el script de canje incorrecto. Había creado dos direcciones de firma múltiple con nombres similares y las confundí
StackExchange no es un foro, no agregue "[SOLUCIONADO]" "etiquetas" a los títulos de las preguntas. Vea las entradas del centro de ayuda para cuando alguien responde y/o para auto-responder .

Respuestas (1)

En primer lugar, eche un vistazo a https://gist.github.com/gavinandresen/3966071 . Ese es un script que crea dos transacciones sin procesar: una para financiar una dirección multisig y otra para gastar los fondos. Muestra cada uno de los pasos necesarios para crear y gastar desde una dirección multisig. Desafortunadamente, el script no explica bien de dónde provienen los parámetros. Intentaré explicarte los parámetros que necesitas.

Como habrás adivinado, hexstring es el resultado de createrawtransaction, y la identificación de la transacción es la identificación de la transacción que envió las monedas a la dirección multisig. redimirScript es fácil. Cuando generó por primera vez la dirección multigrado, el comando devolvió tanto la dirección como el script de redimir. Si no tiene ese valor, puede volver a crear la dirección multisig con las mismas claves públicas y lo verá en la salida. scriptPubKey es el que no estoy seguro. Creo que sé lo que es, pero no tengo bitcoind delante de mí, así que no puedo estar seguro. Si decodifica la transacción sin procesar que envía monedas a la dirección multigrado, verá una o dos salidas, una de las cuales envía monedas a la dirección multigrado. (La otra salida envía el resto de las monedas a una dirección de cambio). Habrá una sección scriptPubKey en esa salida.

Una vez que tenga esos parámetros, puede firmar la transacción sin procesar y enviarla. Si no funciona, deja un comentario aquí e intentaré solucionarlo cuando llegue a casa.

gracias por aclarar, edité la publicación original para aclarar los pasos que tomé y, aunque estaba usando el script de redimido incorrecto, todavía no obtengo el resultado deseado.