Estoy buscando, específicamente, una transacción de ejemplo paso a paso de envío de Bitcoin que utiliza una transacción real ( How To Redeem A Basic Txn , de hace unos años, hace un gran trabajo al describir la mayoría de los pasos para enviar un txn sin procesar, pero no no use un TxID real ).
He jugado con la biblioteca Python pybitcointools, la biblioteca SX y la salida JSON del cliente Bitcoin Core (Bitcoin-QT, Bitcoin-cli, Bitcoin daemon) pero aún tengo que encontrar una guía real paso a paso usando la salida de transacciones sin procesar ( entrada única/salida única Bitcoin txn, es decir, no multisig).
Con suerte, la recompensa traerá una transacción de ejemplo paso a paso (con claves privadas para la dirección de envío) que traerá una respuesta que muestre cómo se hace y, específicamente:
EDITAR: Creo que el mejor recurso son los Bitcoins de Ken Shirriff de la manera difícil: usando el protocolo de Bitcoin sin procesar , pero nuevamente, no hay una sola fuente en línea que responda a mi pregunta sin pasar por alto áreas como scriptPubKey, firma, etc.
Cuando active la recompensa, si puede responder a esto, consulte este Tx , ya que puede servir como ejemplo real (es decir, proporcionaré ~ $ 1 en BTC y claves privadas para 1From/1MBngSqZbMydscpzSoehjP8kznMaHAzh9y si está interesado)
EDIT 2: The RoyalFork Blog: Deconstructing Txns proporciona una referencia increíblemente buena para la creación interactiva de Txn
Descripción paso a paso:
Comenzamos a crear una nueva transacción que procesamos y firmamos.
01000000
01
be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396
00000000
19
76 a9 14 dd6cce9f255a8cc17bda8ba0373df8e861cb866e 88 ac
(mire la línea inferior en https://blockchain.info/tx/96534da2f213367a6d589f18d7d6d1689748cd911f8c33a9aee754a80de166be?show_adv=true )ffffffff
01
23ce010000000000
19
76 a9 14 a2fd2e039a86dbcf0e1a664729e09e8007f89510 88 ac
(esto es transferir fondos a la dirección 1FromKBPAS8MWsk1Yv1Yiu8rJbjfVioBHc)00000000
01000000
bien, el resultado es
01000000
01
be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396
00000000
19 76 a9 14 dd6cce9f255a8cc17bda8ba0373df8e861cb866e 88 ac
ffffffff
01
23ce010000000000
19 76 a9 14 a2fd2e039a86dbcf0e1a664729e09e8007f89510 88 ac
00000000
01000000
Ahora duplicamos el hash SHA256 de toda esta estructura, lo que produce el hash1cde0239b55717cca8003104abc2ec2673d4f6fabea0b74351940e382e88486f
Ahora debemos crear la firma ECDSA... 1MBngSqZbMydscpzSoehjP8kznMaHAzh9y
es una billetera cerebral de "mrbubbymrbubbymrbubby!" , que simplemente codifica una dirección que comienza en 'MB' (haciendo que vincular los 2 sea bastante fácil; consulte el comentario de @WizardOfAussie a continuación para conocer los orígenes de la frase). Clave privada en WIF:5HvofFG7K1e2aeWESm5pbCzRHtCSiZNbfLYXBvxyA57DhKHV4U3
En hexadecimal, la clave privada es 0ecd20654c2e2be708495853e8da35c664247040c00bd10b9b13e5e86e6a808d
. Hay un método de signo (clave, resumen) en cada biblioteca criptográfica. Devolverá una matriz de bytes. Esta matriz no tendrá más de 72 bytes y comenzará con el código hexadecimal 30. Imaginemos que la firma es 3046022100cf4d7571dd47a4d47f5cb767d54d6702530a3555726b27b6ac56117f5e7808fe0221008cbb42233bb04d7f28a715cf7c938e238afde90207e9d103dd9018e12cb7180e
A esta firma le agregamos el tipo de código hash de un byte: 01
. La clave pública para 1MBngSqZbMydscpzSoehjP8kznMaHAzh9y es:042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9
scriptSig será
49 3046022100cf4d7571dd47a4d47f5cb767d54d6702530a3555726b27b6ac56117f5e7808fe0221008cbb42233bb04d7f28a715cf7c938e238afde90207e9d103dd9018e12cb7180e 01
41 042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9
la primera línea es 'push signature concatenada con 01', la segunda línea es 'push pubkey'. La longitud de scriptSig es de 140 bytes (0x8c en hexadecimal)
Luego reemplazamos el campo de longitud variable de un byte del paso 5 con la longitud de los datos del paso 16. La longitud es de 140 bytes, o 0x8C bytes:8c
Y reemplazamos el scriptSig real con la estructura de datos construida en el paso 16.
Terminamos eliminando el tipo de código hash de cuatro bytes que agregamos en el paso 13 y terminamos con la siguiente secuencia de bytes, que es la transacción final:
01000000 01 be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396 00000000 8c 49 3046022100cf4d7571dd47a4d47f5cb767d54d6702530a3555726b27b6ac56117f5e7808fe0221008cbb42233bb04d7f28a715cf7c938e238afde90207e9d103dd9018e12cb7180e 01 41 042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9 ffffffff 01 23ce010000000000 19 76 a9 14 a2fd2e039a86dbcf0e1a664729e09e8007f89510 88 ac 00000000
Esta es una excelente respuesta de amaclin y Wizard of Ozzie. Me gustaría agregar más detalles sobre la transacción del Mago de Ozzie en blockchain.info .
La entrada correcta al proceso de firma para esta transacción es
01000000
01
be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396
00000000
19 76 a9 14 dd6cce9f255a8cc17bda8ba0373df8e861cb866e 88 ac
ffffffff
01
23ce010000000000
19 76 a9 14 2bc89c2702e0e618db7d59eb5ce2f0f147b40754 88 ac
00000000
01000000
El hash doble-SHA256 de esto se calcula bx
como
d304448dff517bcf677cd36f3491e9ef2ccfdf40fb63af5782d9b768640af130
pero esto está escrito en orden "inverso" por alguna razón histórica peculiar (he oído que era compatible con M*soft CRAPi). Entonces, cuando use esto con los sign(key, digest)
kits de herramientas criptográficos más sensibles, es posible que deba revertir el valor hash al orden "adecuado" paraSHA256(SHA256(m))
30f10a6468b7d98257af63fb40dfcf2cefe991346fd37c67cf7b51ff8d4404d3
Los datos de entrada anteriores se validarán con la firma dada en la transacción real de la cadena de bloques.
3045022100da43201760bda697222002f56266bf65023fef2094519e13077f777baed553b102205ce35d05eabda58cd50a67977a65706347cc25ef43153e309ff210a134722e9e
usando la clave pública dada
042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9
Para generar una firma reproducible sobre los mismos datos, se ha realizado la siguiente firma por el método determinista de RFC6979 .
30450220587ce0cf0252e2db3a7c3c91b355aa8f3385e128227cd8727c5f7777877ad772022100edc508b7c14891ed15ab38c687019d7ebaf5c12908cf21a83e8ae57e8c47e95c
utilizando la clave privada coincidente proporcionada por Wizard of Ozzie
0ecd20654c2e2be708495853e8da35c664247040c00bd10b9b13e5e86e6a808d
Esta firma también valida los datos proporcionados utilizando la clave pública y debe ser reproducible.
Nick ODell
codificador morse
mago de ozzie
mago de ozzie
codificador morse
mago de ozzie
mago de ozzie
David A. Harding
k
) y un método para generar un valor secreto es un número aleatorio único. Si desea pasos perfectamente reproducibles, debe especificar quek
se proporcione el valor de en las instrucciones o que se utilice la generación determinista de RFC6979k
.