Bitcoind

無法使用非標準兌換腳本 (OP_CSV) 花費輸入

  • March 7, 2021

我正在玩 OP_CHECKSEQUENCEVERIFY。

這是我要花費的交易:

<https://tchain.btc.com/e79d469698915aa6724288ae3a4141a31706d081f39fb7fd0b956a73a9044b22>

其中有以下兌換腳本:

2 OP_CHECKSEQUENCEVERIFY f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG

但是當我廣播它時出現錯誤(在兩個塊確認之後):

mandatory-script-verify-flag-failed (Non-canonical DER signature) (code 16)

如果我:

  1. 只需指定2 CHECKLOCKTIMEVERIFY(可以花任何人)
  2. 使用標準交易HASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

但沒有一個與它們的組合。這是一個簽名的交易:

0200000001224b04a9736a950bfdb79ff381d00617a341413aae884272a65a919896469de7000000006b4830450221008801d7f0e402724b090133ec01a817e993675a44a871f1a3afc0dba730e24ea4022044097be610bece524e90a743fa9d060cd194079105e6f6d150265a1164e722c3012103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef020000000120a107000000000017a914f45d94733d430261962932e0c847075195916a048700000000

有人可以解釋我做錯了什麼嗎?

PS 使用以下兌換腳本(添加了 OP_DROP)

<https://tchain.btc.com/022d42355ac90e63f2667208112cf22471397dd2812645b5571da2d212596932>

2 OP_CHECKSEQUENCEVERIFY OP_DROP f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG

我有另一個錯誤

(Script evaluated without error but finished with a false/empty top stack element) (code 16)

[更新]:

<https://tchain.btc.com/46894d9dd5e20147826523b1a3ac8e8c5c64603338430d04bd6f5846af2bb9b4>

3 OP_CHECKSEQUENCEVERIFY OP_DROP OP_HASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

然後嘗試廣播此 tx:

0200000001b4b92baf46586fbd040d43383360645c8c8eaca3b12365824701e2d59d4d8946000000006a47304402205649f715d2553cc4a66dd36a61b3c1b187d19f585bd40427d795c600373a45ab02203325ef44a3aae191ed3f2a90efe382d7992712c03f249f8dd61d8a30997806dc012103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef0300000001e00f97000000000017a914f45d94733d430261962932e0c847075195916a048700000000

我有

error code: -26
error message:
mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element) (code 16)

這是一個私鑰

cUB1iazKDHngknjpTHUfKtH9zNRvHn1aBMPJbK2s913zUegjkeNn

有人可以花嗎?

您必須提供一個scriptSig,當執行scriptPubKey結果在堆棧上為真(或任何非零項)時(並通過所有驗證操作)。

scriptPubKey您需要滿足(使用 a )scriptSig是:

2 OP_CHECKSEQUENCEVERIFY f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG 

(注意這不是redeemScript

主要問題是:

OP_CHECKSIG正在尋找一個公鑰,但您提供了一個腳本雜湊:f45d94733d430261962932e0c847075195916a04。這永遠不會得到滿足,所以這個交易輸出是不可花費的。

如果您想像redeemScript以前一樣使用,您可能需要以下內容scriptPubKey

2 OP_CHECKSEQUENCEVERIFY OP_DROP HASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

請注意,OP_DROP因為OP_CHECKSEQUENCEVERIFY2 留在堆棧上。

為了花費這個,您必須提供任何簽名以及redeemScript其雜湊等於f45d94733d430261962932e0c847075195916a04

更新

redeemScript還是錯的。而不是03e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef,嘗試0014e17bbad678e82f8188099a351170c3e0efd4011b。這是P2WPKH您之前在<https://tchain.btc.com/46894d9dd5e20147826523b1a3ac8e8c5c64603338430d04bd6f5846af2bb9b4>中使用的腳本。另請注意,這是一個隔離見證腳本,因此它將在見證數據中查找簽名和公鑰:https ://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#p2wpkh

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