OP_CODESEPARATOR 是做什麼用的?
查看比特幣來源(特別是<https://github.com/bitcoin/bitcoin/blob/v0.9.3/src/script.cpp#L843-L847>),我遇到了
OP_CODESEPARATOR
. 我在解釋這段程式碼時是否正確,並不總是對整個 scriptPubKey 進行簽名,而實際上只是比最近的部分晚了OP_CODESEPARATOR
?如果 anOP_IF
導致 anOP_CODESEPARATOR
被跳過會怎樣?整個 scriptPubKey 並不是在所有情況下都用於簽名,這對我來說似乎很奇怪,所以我猜測有一些我沒有想到的案例。有誰知道這個案例是什麼?
我已經閱讀了這個 bitcointalk thread,但並沒有真正找到任何結論。
查看OP_CHECKSIG 步驟和比特幣腳本 wiki的圖表,OP_CODESEPARATOR 用於使 OP_CHECKSIG 僅檢查scriptPubKey 的一部分。本質上,只有最後一個 OP_CODESEPARATOR 之後的腳本用於簽署交易,因此由 OP_CHECKSIG 評估。
理論上,支出交易可以在輸入交易的最後一個 OP_CODESEPARATOR 之前更改 scriptPubKey 的一部分。
但是,有一個問題。由於 scriptPubKey 來自輸入交易,因此您實際上無法在不更改輸入交易雜湊的情況下修改 scriptPubKey 的任何部分(甚至是最後一個 OP_CODESEPARATOR 之前的部分)。更改輸入交易雜湊會破壞任何嘗試花費未花費輸入交易的輸出的交易的連結,使得在實踐中無法使用 OP_CODESEPARATOR。
我無法在實踐中找到任何人們成功地將 OP_CODESEPARATOR 用於有用目的的案例,儘管它確實出現在區塊鏈中。核心開發人員評論或討論 OP_CODESEPARATOR 的可能用途,請參閱this、this和this (以及您引用的執行緒)。