如何在不知道创世文件的情况下将以太坊节点添加到已经存在的区块链中?

问题描述

我是新的区块链 目标:我想向已经运行的区块链中添加新节点。

正确,如果我在向网络添加节点时出错。两个节点应具有相同的起源块。 如果创世块的值不同,那么新设置的节点将无法从已运行的区块链中挖掘交易。

问题: 我没有gensis.json用于在新节点上创建相同的gensis块。

已尝试: 我尝试设置gensis块,但实时区块链gensis块的值与本地系统上的新设置不同。 通过连接到geth控制台并在控制台中运行以下命令进行检查。

admin.nodeInfo

因此,当我使用以下命令添加对等项时,它会返回true。

admin.addPeer("endoevaluefromec2instance")

当我在ec2实例上列出同级时,它显示计数为0。

0

注意:我能够使用web3模块连接到区块链,所以我不认为存在连接问题 问题:

  1. 如何从已经运行的以太坊实例创建gensis.json文件
  2. 还有其他方法可以将节点添加到已运行的实例中或挖掘事务吗?
  3. 我该如何备份已经运行的区块链并在系统上还原?

解决方法

由于您可以访问现有节点并假定它们正在运行类似的客户端,因此您实际上可以将chaindata文件夹复制到新节点,然后指定新节点的datadir

例如:

如果geth datadir文件夹位于/root/.ethereum,则将整个chaindata从现有节点复制到新节点。 如果您的新节点没有geth文件目录,则可以复制../geth目录而不是../geth/chaindata

然后使用这样的geth参数运行--datadir客户端

$ geth --datadir /root/.ethereum/

然后您可以admin.addPeer,并且应该正确同步。