Script

比特幣 0.3.7 真的是硬分叉嗎?

  • January 22, 2022

閱讀 wiki (bitcoin.it 共識版本),我注意到版本 0.3.7(“ scriptSig+scriptPubKey評估分離”)被列為硬分叉更改。在 BitMEX對共識分叉的描述中,相同的版本被描述為“潛在的非確定性硬分叉”。我想了解這種描述的基本原理。

在 0.3.7 之前的版本中,scriptSig連接到scriptPubKey, 並且還允許可執行操作碼(例如OP_RETURN, 在它完成腳本執行而沒有失敗時,允許存在OP_1 OP_RETURN錯誤)。可以在此處找到包含更改的送出。

我想禁用OP_RETURN可以被認為是軟分叉,因為以前有效的交易現在無效。但是我想不出任何交易的例子,以前是無效的,在分離scriptSigand的評估後會變得有效scriptPubKey。我想出的最好的(OP_RETURN記住舊的含義)是:

scriptSig: OP_2 (push the next 2 bytes to the stack)
scriptPubKey: OP_1 OP_RETURN OP_FALSE

一起評估,OP_1 OP_RETURN將作為數據推送到堆棧而不是評估,因此在OP_FALSE. 但是,當單獨評估時,scriptPubKey將作為有效傳遞(…但不是scriptSig, 因為不提供要推送的數據?)。

謝謝

是的。一個無效的參數對CHECKSIG可以在分叉後變為有效。這是因為scriptSig也被評估了。

scriptPubKey: OP_TRUE
scriptSig: <sig> <pubkey> OP_CHECKSIGVERIFY

在分叉之前,sig 使用包含、 a和scriptCode的串聯的a 進行檢查。 在 fork 之後,將使用僅包含自身的 a進行檢查。scriptSig``CODESEPARATOR``scriptPubKey
sig scriptCode``scriptSig

因此,雜湊值不同,並且簽名在分叉之後可能有效,而之前則無效。

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