首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Geth参数"networkid“与成因块"chainId”配置?

Geth参数"networkid“与成因块"chainId”配置?
EN

Ethereum用户
提问于 2018-08-07 14:46:14
回答 1查看 4.3K关注 0票数 7

我已经使用自定义的chainId (例如,genesis.json文件的配置部分中指定的67890)建立了一个专用的genesis.json网络,完成了geth init genesis.json,并启动并运行了私有网络。但是,我注意到一些奇怪的事情,比如web3 sendTransaction不能工作,因为它说发送方无效,只有在事务jsonto67890中显式指定chainId之后,它才能正确地发送事务。

所以我尝试了一些测试,发现当我运行web3.eth.net.getNetworkType()时,它返回privatenet,但是当我运行web3.eth.net.getId()时,它返回1。经过一些摸索之后,我发现需要在geth命令行参数中添加一个-networkid 67890,以便web3.eth.net.getId()返回正确的值67890。

所以我的问题是,在geth命令行中指定网络in与在chainId中指定genesis.json有什么区别?我认为networkid和chainId是一一对应的,web3似乎使用networkid的值作为事务chainId的默认值,但是当我在没有显式networkid参数的情况下启动geth时,它将忽略chainId配置,仍然使用1作为缺省值,从而导致与chainId不同的网络in。

因此,对于really块链来说,网络it和chainId之间的区别真的有意义吗?还是说是某种bug?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-08-08 14:10:52

  1. 网络id和链id是一回事。
  2. 您可以在eth/config.go & params/config.go中编辑D5&D6,永远解决这个问题,不再需要在命令行上指定network id
  3. Ethereum的geth在我告诉您的文件中硬编码了值1,所以这就是为什么会出现这些问题。
  4. chain id现在是事务的一部分,这是EIP改进建议(EIP) #155的结果,所以显示invalid sender是因为chain id是不同的。您可以使用EIP155BlockNum禁用此功能,但如果使用多个网络(例如testnet ),则很容易受到重放攻击。
  5. chain id不是块哈希的一部分,因此在成因文件中指定它是无用的。相反,您需要做的是在源代码中指定chainID或使用命令行参数。
票数 7
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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