Transactions

如何從這筆舊交易中獲得 HashofThingtoSign?

  • February 23, 2018

如何獲取用於此範例交易的“簽名生成”等式中使用的 HashofThingToSign,以便它也可以輕鬆地應用於任何其他給定的預先存在的交易?

交易範例:82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653

見於:https ://blockchain.info/tx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653

這是由原始交易組成的:

0100000001b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c000000006b483045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d012103e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27feffffff027c8d3700000000001976a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388acc1bbe114000000001976a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88acb2480700

輸入腳本是:

3045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08bf810e9d42d01 bbef69824b9b926f34cb

輸出腳本是:

OP_DUP OP_HASH160 43bd19b0436db26d24c789bebaee9a3b1b73cdd3 OP_EQUALVERIFY OP_CHECKSIG

OP_DUP OP_HASH160 aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a OP_EQUALVERIFY OP_CHECKSIG

給這個錢包的交易是 6c002a15151a79d8163a03f4bc87b783a67bf0eeb18ff2b533e703317afdbbb1

發現於<https://blockchain.info/tx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653>

之前的交易是由原始交易組成的:

0100000001e9cb57de3eac7ce6c703f8525c8c7cf87b064a18d7c830bc08901f776ef81e28010000006a4730440220090e1e73bfc2f37073f80f680893013fa40833e7a9dc7ed1667f728be72a75d302200d1b20fc0f3424f2a1e95f6f9c75a09260d2c889ff179e6dc1ec23423fd329bb012102bbe30b55f53ce14af3f0e58a854941de58d91ad21da1169c6103327f4cd17ff9feffffff028af81915000000001976a9146ffdc2e9e69434a7832208db5a6148c67563e8ae88ac18176c00000000001976a91454abba8c9ffd25c9cf7c232bc3f3998a9c1fe4f388aca1470700

先前交易的輸入腳本是:

30440220090e1e73bfc2f37073f80f680893013fa40833e7a9dc7ed1667f728be72a75d302200d1b20fc0f3424f2a1e95f6f9c75a09260d2c889ff1359e6dc1ec203dbe41

先前交易的輸出腳本是:

OP_DUP OP_HASH160 6ffdc2e9e69434a7832208db5a6148c67563e8ae OP_EQUALVERIFY OP_CHECKSIG

OP_DUP OP_HASH160 54abba8c9ffd25c9cf7c232bc3f3998a9c1fe4f3 OP_EQUALVERIFY OP_CHECKSIG

使用提供的數據確定此交易中的 HashofThingtoSign 的最簡單方法是什麼?(或者我們需要更多數據嗎?)

最後一步顯然是某個東西的 sha-256 散列。該交易的完整文本是什麼,可以簡單地粘貼到諸如<http://www.movable-type.co.uk/scripts/sha256.html>之類的東西中以生成該交易的 HashofThingToSign?

作為解釋過程的結果,該交易的實際雜湊應該是什麼(以便人們可以檢查自己的工作)?

我們甚至可以在沒有私鑰的情況下確定此交易中的 hashofthingtosign 是什麼嗎?

簽名生成中使用的“hashofthingtosign”是否只是整個原始交易“0100000001b1bbfd…7e6cd0100a88acb2480700”用 SHA-256 雜湊兩次,即與交易 ID 相同?(1ecc3ee8e17966d90250cfe86a4b8e7b17a310bc18813a07b3c3e00b9c8b‌​21b8對於本次交易)?

有人提出此問題與該問題重複,或者從ECDSA 驗證算法在交易期間如何工作?. 我正在閱讀它以試圖完全辨別是否是這種情況。理解它的困難證實它不是我認為有效的答案(因為即使是最初提出這個問題的人也評論說他們不確定答案是否足夠清楚以至於他們可以理解它)。我可以確認它有一些資訊。至少,我可以確認,到目前為止,它似乎缺少各個步驟的細節(數據來自哪裡),使用了我無法完全確認它們的含義與我收到的答案相關的術語,所以far(可能是對其有非常深刻理解的人使用的過於高級或隨意的術語)。我正在嘗試結合該問題中的資訊,“如何兌換基本 TX?”,以及我的答案 到目前為止已經給出了。這個新答案可能包含拼圖缺失的部分,但它不是最終答案。如果我能理解並給出答案,我肯定會提供,但我懷疑我是否會成功,因為我仍然認為缺失的部分太多。

此處接受的答案中給出了生成簽名消息的步驟: 如何兌換基本 Tx?- 具體來說,步驟 1 至 14。

交易雜湊 (txid) 與要簽名的消息不同,因為雜湊是從已簽名的交易中提取的,包括 scriptSig(顯然不能自己簽名),所以我們必須對交易以將其轉換為簽名格式

讓我們獲取您在問題中提供的原始交易並將其分解:

0100000001b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c000000006b483045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d012103e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27feffffff027c8d3700000000001976a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388acc1bbe114000000001976a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88acb2480700

您可以使用 rawtx 關鍵字從區塊鏈獲取原始交易數據並添加“format=hex”:https ://blockchain.info/rawtx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653?format=hex

請注意,以下細分是對該原始事務中數據的描述,唯一需要的修改是粗體。步驟 1 和 2 相同,我們有01000000版本和01輸入數量。第 3 步使用:

b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c

這是您花費其輸出的上一個交易的雜湊6c002a15151a79d8163a03f4bc87b783a67bf0eeb18ff2b533e703317afdbbb1(注意字節順序相反)(<https://blockchain.info/tx-index/269874933/0>)。

然後我們從該交易中得到輸出索引 0,即00000000步驟 4。這可以通過查看我們正在花費的上一個交易並查看我們正在花費的輸出的索引來看到。

現在對於第 5 步和第 6 步,上面的交易包含 scriptSig,首先6b表示 scriptSig 的長度為 107 字節,然後是 107 字節的 sig 本身483...27。Pieter Wuille 的回答在這裡: 比特幣交易“輸入”腳本的組成部分是什麼?非常適合解釋輸入腳本的各個部分。但是對於簽名,比特幣使用輸出中的 scriptPubKey 被花費,所以我們必須替換那個 scriptSig(從交易中刪除 scriptSig 數據並插入)19來表示 25 個字節,然後76a9146ffdc2e9e69434a7832208db5a6148c67563e8ae88acscriptPubKey 本身來自上一個輸出,與第 5 步和第 6 步中使用的字節非常相似,因為它們都是 P2PKH 輸出。通過查看我們花費的上一筆交易,可以再次找到這個 scriptPubKey。

在第 7 步中,該事務使用feffffff十六進制數 0xffffffffe 字節。此序列號按照BIP 125使用,這意味著事務未選擇可替換,但仍使用鎖定時間。

那麼我們不得不02說這個交易有2個輸出:

  1. 第一個花費7c8d370000000000,即 0x378d7c = 3640700 satoshis,有一個19字節腳本,即76a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388ac
  2. 第二個花費c1bbe11400000000,即0x14e1bbc1 = 350337985 satoshis,也有一個19字節腳本,即76a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88ac

最後,我們有鎖定時間b2480700,即 0x748b2 = 塊號 477362。

對於簽名,我們必須將 SIGHASH_ALL附加 01000000到末尾

這給

0100000001b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c000000001976a9146ffdc2e9e69434a7832208db5a6148c67563e8ae88acfeffffff027c8d3700000000001976a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388acc1bbe114000000001976a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88acb248070001000000

當雜湊兩次是6823ba9770a496269a8f5368beec5ccb7b22ecd626265140be38aba1c8a25388(注意我還沒有驗證這是正確的,但它應該是)

引用自:https://bitcoin.stackexchange.com/questions/57656