Transactions
如何簽署具有多個輸入的交易?
我已經能夠在 python 中編寫一個應用程序來發送花費 1 個輸入的有效事務,但我真的無法讓它與 2 個或更多輸入一起工作。
所以我的問題是,必須為每個輸入簽名的雜湊究竟是如何計算的?
到目前為止,我一直在做的是,例如,如果我們有 2 個輸入,我們會生成一個只花費第一個輸入的交易,這就是必須為第一個輸入簽名的雜湊。與第二個輸入相同,我們生成一個只花費第二個輸入的交易。兩筆交易都需要有相同的輸出。
那是對的嗎?例如,我們想花費輸入aaaa:0和輸入bbbb:1,我們想將它們發送到某個地址:
為了計算第一個輸入必須簽名的雜湊,我們需要生成這個交易:
'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
併計算第二個輸入必須簽名的雜湊:
'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
我們對它們進行序列化,將它們添加 01000000 (SIGHASH_ALL),將其加倍 sha256,對其進行簽名,然後添加 01。這樣我們將分別獲得將在每個輸入上使用的兩個簽名。我的應用程序正是這樣做的,但不起作用。我錯過了什麼?
我找到了這樣做的方法,所以,如果有人有興趣,這裡是如何做到的:
當您有超過 1 個輸入時,您不必刪除不打算簽名的輸入,您只需刪除它們的腳本。因此,如果您想簽署問題中發布的交易,則第一個雜湊將按如下方式計算:
'version': 1, 'inputs': (2) { 'output_tx_hash': 'aaaa', 'output_position': 0, 'script': the original script, like: '76a914' + hash + '88ac', 'sequence': ffffffff, }, { 'output_tx_hash': 'bbbb', 'output_position': 1, 'script': '', # Nothing 'sequence': ffffffff, } 'outputs': (1) 'value' : 100000 'script' : '76a914' + hash of btc pub key + '88ac' 'locktime': 0
第二個雜湊:
'version': 1, 'inputs': (2) { 'output_tx_hash': 'aaaa', 'output_position': 0, 'script': '', # Nothing 'sequence': ffffffff, }, { 'output_tx_hash': 'bbbb', 'output_position': 1, 'script': the original script, like: '76a914' + hash + '88ac', 'sequence': ffffffff, } 'outputs': (1) 'value' : 100000 'script' : '76a914' + hash of btc pub key + '88ac' 'locktime': 0
希望它可以幫助任何人。