13
4
I have been able to program an application in python that sends valid transactions that spend 1 input, but I really can't get it to work with 2 or more inputs.
So my question is, how exactly is the hash that has to be signed for each input calculated?
What I have been doing so far, is, for example, if we have 2 inputs, we generate a transaction that spends only that first input, and thats the hash that has to be signed for the first input. And the same with the second input, we generate a transaction that only spends that second input. Both transactions need to have the same outputs.
Is that correct? For example, we want to spend input aaaa:0 and input bbbb:1 and we want to send them to some address:
To calculate the hash that the first input has to sign, we need to generate this transaction:
'version': 1,
'inputs': (1)
'output_tx_hash': 'aaaa',
'output_position': 0,
'script': the original script, like: '76a914' + hash + '88ac',
'sequence': ffffffff,
'outputs': (1)
'value' : 100000
'script' : '76a914' + hash of btc pub key + '88ac'
'locktime': 0
And to calculate the hash that the second input has to sign:
'version': 1,
'inputs': (1)
'output_tx_hash': 'bbbb', # this changes
'output_position': 1, # this changes
'script': the original script, like: '76a914' + hash + '88ac',
'sequence': ffffffff,
'outputs': (1)
'value' : 100000
'script' : '76a914' + hash of btc pub key + '88ac'
'locktime': 0
We serialize them, add them 01000000 (SIGHASH_ALL), double sha256 that, sign it, and add 01. That way we get the two signatures that we will use on each input respectively. My application does exactly that and doesn't work. What am I missing?
Perhaps take a look at python-bitcoinlib.
– Anonymous – 2015-11-03T21:51:46.067The exact procedure is documented in this question: http://bitcoin.stackexchange.com/questions/3374/how-to-redeem-a-basic-tx
– Jimmy Song – 2015-11-04T03:30:32.0971That procedure shows how to sign a transaction with only one input. Thats the answer I used to learn how to sign 1 input, and I achieved it, but with 2 or more inputs I just can't make it work, and that answer doesn't say how it should be done. – Nathan Parker – 2015-11-04T13:08:48.960