Script
比特幣 0.3.7 真的是硬分叉嗎?
閱讀 wiki (bitcoin.it 共識版本),我注意到版本 0.3.7(“
scriptSig
+scriptPubKey
評估分離”)被列為硬分叉更改。在 BitMEX對共識分叉的描述中,相同的版本被描述為“潛在的非確定性硬分叉”。我想了解這種描述的基本原理。在 0.3.7 之前的版本中,
scriptSig
連接到scriptPubKey
, 並且還允許可執行操作碼(例如OP_RETURN
, 在它完成腳本執行而沒有失敗時,允許存在OP_1 OP_RETURN
錯誤)。可以在此處找到包含更改的送出。我想禁用
OP_RETURN
可以被認為是軟分叉,因為以前有效的交易現在無效。但是我想不出任何交易的例子,以前是無效的,在分離scriptSig
and的評估後會變得有效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
因此,雜湊值不同,並且簽名在分叉之後可能有效,而之前則無效。