Script
如果堆棧中有多個項目,腳本是否可以使用?
TRUE
如果堆棧中剩下的頂部項目評估為“ ”,並且這是堆棧中唯一剩下的項目,那麼腳本是否可以使用?換句話說,可以將多個項目留在堆棧上嗎?
例如,
如果在腳本完成執行後堆棧頂部留下了一個(或任何其他內容或任何內容),則
scriptPubKey
+是可以使用的。scriptSig``OP_1``OP_0
scriptPubKey: OP_DUP OP_HASH160 <pubkeyhash> OP_EQUALVERIFY OP_CHECKSIG scriptSig: <signature> <pubkey>
如果
<pubkey>
散列到<pubkeyhash>
,並且<signature>
對應於<pubkey>
,那麼OP_CHECKSIG
最終將在堆棧上留下以下內容:stack: OP_1
但是,如果您有以下
scriptPubKey
+scriptSig
:scriptPubKey: OP_2 OP_3 scriptSig: OP_1
這將留下以下堆棧:
stack: OP_1 OP_2 OP_3
這會評估
TRUE
並意味著腳本是可使用的嗎?我收到一個
non-mandatory-script-verify-flag (Extra items left on stack after execution) (code 64)
錯誤,我想知道這是否是問題所在。
是的,這就是問題所在。
在隔離見證之前,Bitcoin Core 中有一個標準規則,即在執行後僅需要堆棧上的單個元素。
在 P2WSH 中,這是共識規則的一部分。
這樣做的原因是,如果沒有這樣的規則,任何交易都是微不足道的:只需在 scriptSig 前面加上額外的垃圾元素,鎖定腳本永遠不會檢查這些元素,因此只是通過了。