首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哈德福克斯。考虑到"geth genesis.json init“重新启动块链,Ethereum硬叉如何更新而不是从头开始重新启动?

哈德福克斯。考虑到"geth genesis.json init“重新启动块链,Ethereum硬叉如何更新而不是从头开始重新启动?
EN

Ethereum用户
提问于 2023-02-06 07:21:45
回答 1查看 25关注 0票数 0

硬叉子是怎么制成的?

我认为有必要更新genesis.json文件来定义发生hardofrks的块(例如Constantinople: 7 080 000)。但是,如果我们输入“-datadir has newgenesis.json init”,就会产生一个问题,因为块链已经用另一个成因文件初始化了。在论坛中,据说会删除文件夹并从零开始重新启动区块链。但这意味着重新启动块链,这与升级和准备硬叉非常不同。

考虑到这些限制,Ethereum节点如何更新它们的块链?什么是最好的方式来规划硬叉子对以太硬叉子?

非常感谢!

EN

回答 1

Ethereum用户

回答已采纳

发布于 2023-02-07 17:44:51

不,没有必要将硬叉号放在成因文件中,实际上它们不是从genesis.json文件中读取的。它们是从源代码中读取的,使用成因的hash作为查找值。因此,它读取您的成因散列,并使用if语句加载与您的网络(MainNet、Rposten等)对应的配置文件。

您可以修改geth源代码以添加您自己的成因散列,它将查找您的特定ChainConfig,如下所示:

代码语言:javascript
复制
func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig {
    switch {
    case g != nil:
        return g.Config
    case ghash == params.MainnetGenesisHash:
        return params.MainnetChainConfig
    case ghash == params.RopstenGenesisHash:
        return params.RopstenChainConfig
    case ghash == params.SepoliaGenesisHash:
        return params.SepoliaChainConfig
    case ghash == params.RinkebyGenesisHash:
        return params.RinkebyChainConfig
    case ghash == params.GoerliGenesisHash:
        return params.GoerliChainConfig
    default:
        return params.AllEthashProtocolChanges
    }
}

例如,您可以使用成因散列或您自己的私有网络来代替GoerliGenesisHash。(或添加另一条case语句)

此函数位于以下位置:https://github.com/ethereum/go-ethereum/blob/31d401ea687066465846ec4a0d2388ef80e4b0cc/core/genesis.go#L420

考虑到这些限制,Ethereum节点如何更新它们的块链?

使用更新的配置使您的自定义geth源,并在您的私有节点用户之间分发。这就是我的方法

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/144358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档