Script
為什麼這不返回 TRUE?
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 的程式碼在這裡。