我已经使用自定义的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?
发布于 2018-08-08 14:10:52
eth/config.go & params/config.go中编辑D5&D6,永远解决这个问题,不再需要在命令行上指定network id。geth在我告诉您的文件中硬编码了值1,所以这就是为什么会出现这些问题。chain id现在是事务的一部分,这是EIP改进建议(EIP) #155的结果,所以显示invalid sender是因为chain id是不同的。您可以使用EIP155BlockNum禁用此功能,但如果使用多个网络(例如testnet ),则很容易受到重放攻击。chain id不是块哈希的一部分,因此在成因文件中指定它是无用的。相反,您需要做的是在源代码中指定chainID或使用命令行参数。https://ethereum.stackexchange.com/questions/56038
复制相似问题