Script

為什麼這不返回 TRUE?

  • March 24, 2022
scriptSig: <pubKey>
scriptPubKey: <pubKey> OP_EQUALVERIFY

堆棧有 <pubKey>、<pubKey> 和 OP_EQUALVERIFY。那麼,為什麼即使堆棧中最近的兩個元素相等,它也不返回 TRUE 呢?

OP_EQUALVERIFY有兩種可能的結果:

  • 如果堆棧上的最後兩項不同,它將中止腳本執行。
  • 如果堆棧上的最後兩個項目相等,則兩者都被刪除。沒有任何東西放回堆棧。

要使腳本執行成功,它必須以一個非空堆棧結束,其頂部元素不為 0。在您的情況下,執行後堆棧為空,因此腳本執行被視為失敗。

您可能想要使用OP_EQUAL,它將 0 或 1 放在堆棧上(而不是中止或什麼都不做)。

Andreas Antonopoulos 在這裡討論了 VERIFY 後綴。

如果條件運算符的結果為 TRUE,則任何具有 VERIFY 的內容都只會繼續執行腳本,在這種情況下,它不會將該 TRUE 推回堆棧,它只會繼續執行。

這個 StackExchange文章也可能很有趣。

比特幣核心程式碼庫中 OP_EQUALVERIFY 的程式碼在這裡

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