Transactions

錯誤:嘗試廣播已簽名的 Segwit 交易時出現非規範 DER 簽名

  • October 23, 2020

我正在嘗試以程式方式建構本機 Segwit 事務,但是,每當我嘗試廣播事務時,它都會返回此錯誤: non-mandatory-script-verify-flag (Non-canonical DER signature)

我的原始未簽名 tx (testnet) 在這裡:

0200000001fd45159c94d5dcf0804e7aba6e5862445a3c41fb5ec21184fe3a41a1a6dbb5b40000000000ffffffff02a351000000000000160014d1ca74222bb5a5c1b43fae117e811b2320a286a66500000000000000160014d1ca74222bb5a5c1b43fae117e811b2320a286a600000000

我在這裡簽名的交易:

02000000000101fd45159c94d5dcf0804e7aba6e5862445a3c41fb5ec21184fe3a41a1a6dbb5b40000000000ffffffff02a351000000000000160014d1ca74222bb5a5c1b43fae117e811b2320a286a66500000000000000160014d1ca74222bb5a5c1b43fae117e811b2320a286a6024630440220465c93c725454f7bda3e3453ce09e99f7636560935be9377c3ae1138cfa0bb4702206f45290b2c06fc7e2298c6778fbccd1a805e34535247c49e098bc7229e74533421034ac1bb1bc5fd7a9b173f6a136a40e4be64841c77d7f66ead444e101e0134812700000000

兩個解碼對我來說看起來都不錯,所以我認為是 sighash 或 sighash 的簽名出了問題。我得到的無符號 tx 的 sighash,因為唯一的輸入是: e54c499bfef6f5f0b12b819de82220aa7de532f9b72ae0f74638a647e147f884

這是使用創建的: https ://docs.rs/bitcoin/0.25.1/bitcoin/util/bip143/struct.SigHashCache.html#method.signature_hash

使用SigHashType::All傳遞 pubKeyScript 和值 (22,000)

在簽署 sighash 時,我得到: 30440220465c93c725454f7bda3e3453ce09e99f7636560935be9377c3ae1138cfa0bb4702206f45290b2c06fc7e2298c6778fbccd1a805e34535247c49e098bc7229e745334

我完全堅持下一步要嘗試什麼。任何方向將不勝感激。

您缺少簽名末尾的 sighash 標誌字節。

比特幣腳本中的“簽名”對象包含實際的 DER 編碼的 ECDSA 簽名,以及 sighash 類型字節(在您的情況下,0x01 表示 SIGHASH_ALL)。

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