Opcodes

OP_DROP 的目的是什麼

  • December 17, 2019

據我所知, OP_DROP 是一種將非驗證數據儲存在 tx 中的方法(與在 OP_RETURN 之後使用數據分開)。

但是在bip199描述的這個解鎖腳本中,超時塊和超時操作在OP_DROP之前,這意味著它們會在驗證期間被丟棄?OP_DROP 無法描述之後發生的事情,因為那應該是支付路徑驗證 - 並且因為 afaik 比特幣腳本是基於堆棧的。

OP_DROP 的意義何在?它如何應用於以下腳本?

OP_IF
   [HASHOP] <digest> OP_EQUALVERIFY OP_DUP OP_HASH160 <seller pubkey hash>            
OP_ELSE
   <num> [TIMEOUTOP] OP_DROP OP_DUP OP_HASH160 <buyer pubkey hash>
OP_ENDIF
OP_EQUALVERIFY
OP_CHECKSIG

兩者OP_CHECKSEQUENCEVERIFYOP_CHECKLOCKTIMEVERIFY都是OP_NOP通過軟分叉重新定義為目前定義的操作碼。操作碼的存在OP_NOP對堆棧沒有任何作用(它既不彈出項目也不驗證任何內容。)

軟分叉只能限制定義,不能擴展。當OP_NOP重新定義操作碼以滿足 TIMEOUT 的新條件時,如果不滿足 TIMEOUT 條件,則限制是使事務無效。

但是,OP_NOP在堆棧上什麼都不做的屬性不能改變,因為這意味著擴大它的定義範圍。OP_CLTV因此,即使在驗證之後,在或OP_CSV繼續保留在堆棧上的數字(塊或秒) 。必須手動刪除此數字以使腳本正確執行下一項(如 ECDSA 簽名驗證),這就是我們使用OP_DROP操作碼的原因。

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