我有一个由Proof-of-Authority引擎创建的具有Byzantium EVM版本的D1专用Ethereum网络。我有一个矿工有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: DAOSupport: false EIP150: 2
EIP155: 3 EIP158: 3 Byzantium: 4 Constantinople:
Petersburg: Engine: clique}"我假设,由于配置文件中的Constantinople: ,而且我不能更改自定义配置文件,所以我无法硬分私有链。
配置是通过代码中的常量来固定的(参见ChainConfig)。可以在成因规范文件中提供自定义配置,但是,这仅适用于设置新链时。因此,目前在专用网络中制造硬分叉的唯一方法是确保所有参与者在预定义的时隙中关闭/升级/重新启动。
//我已经更新了geth版本,但总的来说,我不确定是否更新了私有链。
<#>我想知道,是否有可能将具有与Constantinople EVM不同版本的私有链硬分叉?
发布于 2019-07-13 12:51:15
简单地说,我们需要为你们链上的网络做同样的事情。
我们有两个选择:
1。首先是像这样回答
如何设置专用ethereum链的constantinople叉
修改源代码中的配置,如下所示:
在以下文件中更新与您的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 Fix,这是因为下面链接上的查不安全性发现了Constantinople的安全漏洞。
https://medium.com/chainsecurity/constantinople-enables-new-reentrancy-attack-ace4088297d9
即将到来的君士坦丁堡对ethereum网络的升级为某些SSTORE业务带来了更低的天然气成本。作为一个不想要的副作用,这使重入攻击时使用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: DAOSupport: false EIP150: 2
EIP155: 3 EIP158: 3 Byzantium: 4 Constantinople:
Petersburg: Engine: clique}"希望这能帮上忙!
https://ethereum.stackexchange.com/questions/72786
复制相似问题