Go-Ethereum

是否可以將專用網路硬分叉到君士坦丁堡?

  • July 15, 2019

我有一個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.gohttps://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(…) 時啟用重入攻擊。以前,這些函式被認為是可重入安全的,但它們不再是。

然後對於仍未啟用的鏈,ConstantinopleConstantinopleBlockPetersburgBlock是相同的塊號。

我們還需要在 genesis_alloc.go 中創建創世分配常量,也可以mkalloc像下面指南中的指南一樣執行。

https://github.com/ethereum/go-ethereum/blob/6bd896a97f0c86fdb6d0538f5f839d7ea104e888/core/mkalloc.go#L24

然後也修改下面這一行的預設創世塊

https://github.com/ethereum/go-ethereum/blob/6bd896a97f0c86fdb6d0538f5f839d7ea104e888/core/genesis.go#L317

您可以通過查看輸出日誌來進行完整性檢查;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}"

希望這會有所幫助!

引用自:https://ethereum.stackexchange.com/questions/72786