Script

如果堆棧中有多個項目,腳本是否可以使用?

  • December 1, 2019

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 前面加上額外的垃圾元素,鎖定腳本永遠不會檢查這些元素,因此只是通過了。

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