¿Cómo se haría para adquirir el HashofThingtoSign de esta antigua transacción?

¿Cómo se haría para adquirir el HashofThingToSign que se usa en la ecuación de "Generación de firmas" para esta transacción de ejemplo, de modo que también podría aplicarse fácilmente a cualquier otra transacción preexistente dada?

Transacción de ejemplo: 82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653

Encontrado en: https://blockchain.info/tx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653

Esto se hace de la transacción sin procesar:

0100000001b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c000000006b483045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d012103e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27feffffff027c8d3700000000001976a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388acc1bbe114000000001976a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88acb2480700

El guión de entrada es:

3045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d01 03e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27

Los scripts de salida son:

OP_DUP OP_HASH160 43bd19b0436db26d24c789bebaee9a3b1b73cdd3 OP_EQUALVERIFY OP_CHECKSIG

OP_DUP OP_HASH160 aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a OP_EQUALVERIFY OP_CHECKSIG

La transacción que le dio a esta billetera las monedas que estamos gastando en esta transacción es 6c002a15151a79d8163a03f4bc87b783a67bf0eeb18ff2b533e703317afdbbb1

Encontrado en https://blockchain.info/tx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653

Esta transacción anterior se realiza a partir de la transacción en bruto:

0100000001e9cb57de3eac7ce6c703f8525c8c7cf87b064a18d7c830bc08901f776ef81e28010000006a4730440220090e1e73bfc2f37073f80f680893013fa40833e7a9dc7ed1667f728be72a75d302200d1b20fc0f3424f2a1e95f6f9c75a09260d2c889ff179e6dc1ec23423fd329bb012102bbe30b55f53ce14af3f0e58a854941de58d91ad21da1169c6103327f4cd17ff9feffffff028af81915000000001976a9146ffdc2e9e69434a7832208db5a6148c67563e8ae88ac18176c00000000001976a91454abba8c9ffd25c9cf7c232bc3f3998a9c1fe4f388aca1470700

El script de entrada para esta transacción anterior es:

30440220090e1e73bfc2f37073f80f680893013fa40833e7a9dc7ed1667f728be72a75d302200d1b20fc0f3424f2a1e95f6f9c75a09260d2c889ff179e6dc1ec23423fd329bb01 02bbe30b55f53ce14af3f0e58a854941de58d91ad21da1169c6103327f4cd17ff9

El script de salida para esta transacción anterior es:

OP_DUP OP_HASH160 6ffdc2e9e69434a7832208db5a6148c67563e8ae OP_EQUALVERIFY OP_CHECKSIG

OP_DUP OP_HASH160 54abba8c9ffd25c9cf7c232bc3f3998a9c1fe4f3 OP_EQUALVERIFY OP_CHECKSIG

¿Cómo y cuál sería la ruta más fácil para determinar el HashofThingtoSign en esta transacción utilizando los datos proporcionados? (¿o necesitamos más datos?)

El último paso es obviamente un hash sha-256 de algo. ¿Cuál sería el texto completo de ese algo para esta transacción que podría simplemente pegarse en algo como http://www.movable-type.co.uk/scripts/sha256.html para producir el HashofThingToSign para esta transacción?

¿Cuál se supone que es el hash real de esta transacción como resultado del proceso explicado (para que uno pueda verificar su trabajo)?

¿Podemos siquiera determinar cuál era el hashofthingtosign en esta transacción sin la clave privada?

¿El "hashofthingtosign" utilizado en la generación de la firma es simplemente la transacción sin procesar completa "0100000001b1bbfd...7e6cd0100a88acb2480700" con SHA-256 dos veces, es decir, lo mismo que el ID de la transacción? ( 1ecc3ee8e17966d90250cfe86a4b8e7b17a310bc18813a07b3c3e00b9c8b‌​21b8para esta transacción)?

Se ha propuesto que esta pregunta es un duplicado de la pregunta y/o busca una respuesta duplicada de ¿ Cómo funciona el algoritmo de verificación ECDSA durante la transacción?. Lo estoy leyendo en un intento de discernir completamente si ese es el caso. La dificultad para darle sentido confirma que NO es una respuesta que aceptaría como válida (ya que incluso la persona original que hizo esa pregunta comentó que no estaba segura de que la respuesta fuera lo suficientemente clara como para poder entenderla). Puedo confirmar que tiene parte de la información. Como mínimo, puedo confirmar que, hasta el momento, parece que faltan los detalles de varios pasos (de donde provienen los datos), utiliza terminologías cuyo significado no puedo confirmar completamente en relación con la respuesta que he recibido. lejos (pueden ser términos demasiado avanzados o casuales utilizados por alguien con una comprensión muy avanzada de los mismos). Estoy tratando de combinar la información de esa pregunta, "¿Cómo canjear un TX básico?", Y la respuesta. se ha dado hasta ahora. Esta nueva respuesta puede contener las piezas que faltan en el rompecabezas, pero no es la respuesta definitiva. Si puedo darle sentido y producir una respuesta, ciertamente la proporcionaré, pero dudo que tenga éxito, ya que todavía creo que faltan demasiadas piezas.

Respuestas (1)

Los pasos para generar el mensaje para firmar se dan en la respuesta aceptada aquí: ¿ Cómo canjear un Tx básico? - en concreto, del paso 1 al 14.

El hash de la transacción (txid) no es lo mismo que el mensaje a firmar, porque el hash se toma de la transacción firmada , incluido el scriptSig (que obviamente no puede firmarse a sí mismo), por lo que tenemos que hacer algunas pequeñas modificaciones en el transacción para ponerla en el formato para firmar

Obtengamos la transacción sin procesar que proporcionó en su pregunta y desglosémosla:

0100000001b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c000000006b483045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d012103e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27feffffff027c8d3700000000001976a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388acc1bbe114000000001976a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88acb2480700

Puede obtener datos de transacciones sin procesar de blockchain utilizando la palabra clave rawtx y agregar "format=hex": https://blockchain.info/rawtx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653?format=hex

Tenga en cuenta que el siguiente desglose es una descripción de los datos en esa transacción sin procesar, las únicas modificaciones necesarias están en negrita . Los pasos 1 y 2 son iguales, tenemos la 01000000versión y el 01número de entradas. El paso 3 utiliza:

b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c

Cuál es el hash 6c002a15151a79d8163a03f4bc87b783a67bf0eeb18ff2b533e703317afdbbb1(observe que los bytes están en orden inverso) de la transacción anterior cuya salida está gastando ( https://blockchain.info/tx-index/269874933/0 ).

Entonces tenemos el índice de salida 0 de esa transacción, es decir 00000000, para el paso 4. Esto se puede ver mirando la transacción anterior que estamos gastando y viendo el índice de la salida que estamos gastando.

Ahora, para los pasos 5 y 6, la transacción anterior contiene scriptSig, comenzando con 6bpara indicar que scriptSig tiene 107 bytes de largo, y luego los 107 bytes de sign, 483...27. La respuesta de Pieter Wuille aquí: ¿Cuáles son las partes de un script de "Entrada" de transacción de Bitcoin? es extremadamente bueno para explicar cuáles son las partes del script de entrada. Pero para firmar, bitcoin usa scriptPubKey de la salida que se está gastando, por lo que tenemos que reemplazar ese scriptSig (eliminar los datos de scriptSig de la transacción e insertarlos en su lugar) 19para indicar 25 bytes y luego el76a9146ffdc2e9e69434a7832208db5a6148c67563e8ae88acscriptPubKey de la salida anterior, muy similar a los bytes usados ​​en los pasos 5 y 6 porque ambas son salidas P2PKH. Una vez más, este scriptPubKey se puede encontrar mirando la transacción anterior que estamos gastando.

En el paso 7, esta transacción usa los bytes feffffffque es el número hexadecimal 0xffffffffe. Este número de secuencia se usa según BIP 125 , lo que significa que la transacción no opta por ser reemplazable, pero aún usa el tiempo de bloqueo.

Entonces tenemos 02que decir que hay 2 salidas en esta transacción:

  1. El primero gasta 7c8d370000000000, es decir, 0x378d7c = 3640700 satoshis, tiene un 19script de bytes, que es76a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388ac

  2. El segundo gasta c1bbe11400000000, es decir, 0x14e1bbc1 = 350337985 satoshis, también tiene un 19script de bytes, que es76a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88ac

Finalmente, tenemos el tiempo de bloqueo de b2480700, es decir, 0x748b2 = número de bloque 477362.

Para firmar, debemos agregar 01000000 SIGHASH_ALL al final

Esto da

0100000001b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c000000001976a9146ffdc2e9e69434a7832208db5a6148c67563e8ae88acfeffffff027c8d3700000000001976a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388acc1bbe114000000001976a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88acb248070001000000

Que cuando se codifica dos veces es 6823ba9770a496269a8f5368beec5ccb7b22ecd626265140be38aba1c8a25388(tenga en cuenta que aún no he verificado que esto sea correcto, pero debería serlo)

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .