Script

帶有在 btcdeb 中執行正常的腳本的非強制腳本驗證標誌(未知錯誤)

  • January 4, 2022

在學習了很多關於腳本的知識(並在測試網上與他們一起玩)之後,我製作了一個更長的腳本。

$ btc decodescript 7455886f94935688789352885279935b88946e935b88945187
{
 "asm": "OP_DEPTH 5 OP_EQUALVERIFY OP_3DUP OP_SUB OP_ADD 6 OP_EQUALVERIFY OP_OVER OP_ADD 2 OP_EQUALVERIFY 2 OP_PICK OP_ADD 11 OP_EQUALVERIFY OP_SUB OP_2DUP OP_ADD 11 OP_EQUALVERIFY OP_SUB 1 OP_EQUAL",
 ...
 "segwit": {
   ...
   "address": "tb1q2c0uglp5tg2dhnr3ejuwppalp9urdfu4cxnl2sc495vlzmjy2ggs2wk7ry",
   ...
 }
}

該腳本的解決方案是6 9 4 2 0.

但是,當從 p2wsh 地址兌換 1000 sat 時,它給了我錯誤:

$ bitcoin-cli -testnet sendrawtransaction 010000000001019f084303418f25b5a77f36b95f293b052e9d885d98020be3f66fb223939bbbe00000000000ffffffff018c030000000000001600140f4eb1382443259e6d295d8ddf1ade059e4b1f8c0601060109010401020100197455886f94935688789352885279935b88946e935b8894518700000000
error code: -26
error message:
non-mandatory-script-verify-flag (unknown error)

我在比特幣 se 上搜尋了一下,我能找到的唯一有用的東西是一個抱怨的文章OP_PICK。有人知道如何解決這個問題嗎?

PS:我真的不在乎 1000 次測試,但我只是想解決這個問題以從中學習 :)

此錯誤是由與解鎖 P2WSH 問題相同的問題(最小編碼)引起的。Andrew Chow 給我的解決方案在這裡也對我有用。

我是那個問另一個問題的人。在我的情況下,問題是操作留下了一個不干淨的堆棧,這在技術上是可以的,因為堆棧不是空的。但如果我是正確的,它是一個非標準的交易,不會被節點中繼。

就我而言,我必須以一個元素結束,而不是 0。這在我的腳本中是不可能的。

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