是否可以將專用網路硬分叉到君士坦丁堡?
我有一個
Proof-of-Authority
私有的乙太坊網路,它有Byzantium EVM
版本並由clique
引擎創建。我有一個擁有 Geth 版本的礦工:v1.8.27
.{ "config": { "chainId": 23422, "homesteadBlock": 1, "eip150Block": 2, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "eip155Block": 3, "eip158Block": 3, "byzantiumBlock": 4, "clique": { "period": 15, "epoch": 30000 } }, }
請看我的配置文件:custom.json。
當我開始 geth 我得到以下輸出:
INFO [07-10|13:46:36.647] Initialised chain configuration config="{ChainID: 23422 Homestead: 1 DAO: <nil> DAOSupport: false EIP150: 2 EIP155: 3 EIP158: 3 Byzantium: 4 Constantinople: <nil> Petersburg: <nil> Engine: clique}"
我假設因為
Constantinople: <nil>
在配置文件中並且我無法更改自定義配置文件,所以我無法硬分叉私有鏈。配置是通過程式碼中的常量固定的(參見 ChainConfig)。可以在創世規範文件中提供自定義配置,但這僅適用於設置新鏈時。
因此,目前在專用網路中進行硬分叉的唯一方法是確保所有參與者在預定義的時間段內關閉/升級/重啟。
// 我已經更新了geth版本,但一般我不確定是否檢查私有鍊是否更新。
**$$ Q $$**我想知道,是否可以硬分叉具有不同 EVM 版本的私有鏈
Constantinople EVM
?
簡而言之,我們需要為您鏈上的網路做與乙太坊一樣的事情。
我們有兩個選擇:
1.首先是喜歡這個答案
2.修改原始碼中的config,步驟如下
在下面的文件中更新與您的 config.json 文件相關的配置
config.go
在 https://github.com/ethereum/go-ethereum/blob/49a7ee460e839499ef41f5110b219ec8c8edc5e8/params/config.go#L66中更新在您的情況下,
config.go
應該如下所示// MainnetChainConfig is the chain parameters to run a node on the main network. MainnetChainConfig = &ChainConfig{ ChainID: big.NewInt(23422), HomesteadBlock: big.NewInt(1), DAOForkBlock: nil, DAOForkSupport: true, EIP150Block: big.NewInt(2), EIP150Hash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), EIP155Block: big.NewInt(3), EIP158Block: big.NewInt(3), ByzantiumBlock: big.NewInt(4), ConstantinopleBlock: big.NewInt(xxxxxx), PetersburgBlock: big.NewInt(xxxxxx), Clique: &CliqueConfig{ Period: 15, Epoch: 30000, }, }
xxxxxx
是你想要在你的私有鏈上進行硬分叉的未來塊號。此外,君士坦丁堡修復
PetersburgBlock
是否是由於以下連結上的鏈安全詳細資訊發現的安全漏洞Constantinople
https://medium.com/chainsecurity/constantinople-enables-new-reentrancy-attack-ace4088297d9
即將到來的乙太坊網路君士坦丁堡升級為某些 SSTORE 操作引入了更便宜的 gas 成本。作為一個不需要的副作用,這會在 Solidity 智能合約中使用 address.transfer(…) 或 address.send(…) 時啟用重入攻擊。以前,這些函式被認為是可重入安全的,但它們不再是。
然後對於仍未啟用的鏈,
Constantinople
和ConstantinopleBlock
將PetersburgBlock
是相同的塊號。我們還需要在 genesis_alloc.go 中創建創世分配常量,也可以
mkalloc
像下面指南中的指南一樣執行。然後也修改下面這一行的預設創世塊
您可以通過查看輸出日誌來進行完整性檢查;
Constantinople
並且Petersburg
必須顯示我們在config.go
INFO [07-10|13:46:36.647] Initialised chain configuration config="{ChainID: 23422 Homestead: 1 DAO: <nil> DAOSupport: false EIP150: 2 EIP155: 3 EIP158: 3 Byzantium: 4 Constantinople: <xxxxxx> Petersburg: <xxxxxx> Engine: clique}"
希望這會有所幫助!