When verifying a transaction, a Bitcoin node rebuilds the hash-preimage used to create every signature.
After serializing the hash-preimage for every enter, the following step is to double-hash it and confirm the signature for every enter utilizing the corresponding public key.
My query is: what’s the precise serialized hash-preimage for every enter? I have never discovered clear steering on how this must be constructed.
For instance, take this transaction:
https://mempool.house/es/tx/592ea2010ec259252959b6047e227ceac6ffd0dbbe20bad71248960c18a5d890
This transaction makes use of the SIGHASH_ALL flag, which means that every signature indicators all inputs and outputs.
Ought to the hash-preimage embrace the scriptPubKey of each enter, or solely the scriptPubKey of the enter being signed, leaving the opposite inputs with an empty script (0x00)?
Instance of My Try:
Right here is my try and assemble the hash-preimage for signing each inputs:
01000000 - Model
02 - Variety of inputs
19f4d40cb4204ad8429ec3d98d240661593edcfcfb8efcb3b684141ceb0df2e4 - First UTXO txid
00000000 - First UTXO output index
1976a914d52c9ce97c8dea0b71df687659a847a62c37732c88ac - scriptPubKey of first UTXO
ffffffff - Sequence for first enter
22d07db06b68e4c15154db0ce0dd9c9dcd683a60a5117490451e0b52743492ca - Second UTXO txid
00000000 - Second UTXO output index
1976a91497ccdcca4f494b1bd652ad8f9d816b4bbb1108ac88ac - scriptPubKey of second UTXO
ffffffff - Sequence for second enter
01 - Variety of outputs
c047bfe54d000000 - Quantity in satoshis
1976a91492512166101806dd6a695cbe56f883c3bea2a7e488ac - Output's scriptPubKey
00000000 - Locktime
01000000 - SIGHASH_ALL flag
When I attempt to assemble the preimage for only one enter (with the second enter’s scriptSig set to 0x00):
01000000 - Model
02 - Variety of inputs
19f4d40cb4204ad8429ec3d98d240661593edcfcfb8efcb3b684141ceb0df2e4 - First UTXO txid
00000000 - First UTXO output index
1976a914d52c9ce97c8dea0b71df687659a847a62c37732c88ac - scriptPubKey of first UTXO
ffffffff - Sequence for first enter
00 - Empty scriptSig for second enter (set to 0x00)
ffffffff - Sequence for second enter
01 - Variety of outputs
c047bfe54d000000 - Quantity in satoshis
1976a91492512166101806dd6a695cbe56f883c3bea2a7e488ac - Output's scriptPubKey
00000000 - Locktime
01000000 - SIGHASH_ALL flag
Am I appropriately understanding easy methods to set the scriptPubKey for non-signed inputs within the hash-preimage? Ought to I be clearing the scriptSig of different inputs as 0x00?
Thanks for any steering!
When verifying a transaction, a Bitcoin node rebuilds the hash-preimage used to create every signature.
After serializing the hash-preimage for every enter, the following step is to double-hash it and confirm the signature for every enter utilizing the corresponding public key.
My query is: what’s the precise serialized hash-preimage for every enter? I have never discovered clear steering on how this must be constructed.
For instance, take this transaction:
https://mempool.house/es/tx/592ea2010ec259252959b6047e227ceac6ffd0dbbe20bad71248960c18a5d890
This transaction makes use of the SIGHASH_ALL flag, which means that every signature indicators all inputs and outputs.
Ought to the hash-preimage embrace the scriptPubKey of each enter, or solely the scriptPubKey of the enter being signed, leaving the opposite inputs with an empty script (0x00)?
Instance of My Try:
Right here is my try and assemble the hash-preimage for signing each inputs:
01000000 - Model
02 - Variety of inputs
19f4d40cb4204ad8429ec3d98d240661593edcfcfb8efcb3b684141ceb0df2e4 - First UTXO txid
00000000 - First UTXO output index
1976a914d52c9ce97c8dea0b71df687659a847a62c37732c88ac - scriptPubKey of first UTXO
ffffffff - Sequence for first enter
22d07db06b68e4c15154db0ce0dd9c9dcd683a60a5117490451e0b52743492ca - Second UTXO txid
00000000 - Second UTXO output index
1976a91497ccdcca4f494b1bd652ad8f9d816b4bbb1108ac88ac - scriptPubKey of second UTXO
ffffffff - Sequence for second enter
01 - Variety of outputs
c047bfe54d000000 - Quantity in satoshis
1976a91492512166101806dd6a695cbe56f883c3bea2a7e488ac - Output's scriptPubKey
00000000 - Locktime
01000000 - SIGHASH_ALL flag
When I attempt to assemble the preimage for only one enter (with the second enter’s scriptSig set to 0x00):
01000000 - Model
02 - Variety of inputs
19f4d40cb4204ad8429ec3d98d240661593edcfcfb8efcb3b684141ceb0df2e4 - First UTXO txid
00000000 - First UTXO output index
1976a914d52c9ce97c8dea0b71df687659a847a62c37732c88ac - scriptPubKey of first UTXO
ffffffff - Sequence for first enter
00 - Empty scriptSig for second enter (set to 0x00)
ffffffff - Sequence for second enter
01 - Variety of outputs
c047bfe54d000000 - Quantity in satoshis
1976a91492512166101806dd6a695cbe56f883c3bea2a7e488ac - Output's scriptPubKey
00000000 - Locktime
01000000 - SIGHASH_ALL flag
Am I appropriately understanding easy methods to set the scriptPubKey for non-signed inputs within the hash-preimage? Ought to I be clearing the scriptSig of different inputs as 0x00?
Thanks for any steering!