无法添加以太坊对等点。对等列表为空

Posted

技术标签:

【中文标题】无法添加以太坊对等点。对等列表为空【英文标题】:Unable to add ethereum peer. Peer list is empty 【发布时间】:2017-03-12 18:10:21 【问题描述】:

我正在尝试建立一个私有以太坊网络。我在同一台机器(Windows 7)的两个不同端口上启动了两个节点。

我无法将一个节点添加为另一个节点的对等节点。到目前为止我所做的就是这个。

启动两个具有相同网络ID、不同数据目录和不同端口的节点。

找到一个节点的节点地址。

> admin.nodeInfo.enode
"enode://5d272e8bee6d29dfff6313999a4a2c3d8109ae6f3eb103480f4536c0542549b9fa12a8d8ae5ebee9c4db55cab553693b04eedbc9b29f35bbc0af1956231b42b4@0.0.0.0:30303"

将该节点添加到另一个对等节点。

> admin.addPeer("enode://5d272e8bee6d29dfff6313999a4a2c3d8109ae6f3eb103480f4536c0542549b9fa12a8d8ae5ebee9c4db55cab553693b04eedbc9b29f35bbc0af1956231b42b4@192.168.1.5:30303")

true

但是,如果我检查第二个peer的peer信息,它表明它没有任何peer。

> admin.peers

[]

另外,我尝试通过将节点地址添加到 data/static-nodes.json 来将第一个节点添加为第二个节点的静态节点,但 admin.peers 仍然返回一个空列表。

有谁知道如何解决这个问题?

【问题讨论】:

最好在ethereum.stackexchange.com上提问 【参考方案1】:

有很多原因可能会阻止节点同步。

系统时钟不同步

最常见但难以找到的原因之一是设备的系统时钟不同步。即使时钟仅相差 12 秒,节点也不会同步。

来自https://github.com/ethereum/wiki/wiki/Mining:

难度动态调整,使整个网络平均每 12 秒产生一个区块(即 12 秒的区块时间)。这种心跳基本上会打断系统状态的同步,并保证除非攻击者拥有超过一半的网络挖矿能力(所谓的 51% 攻击),否则无法维持分叉(允许双花)或重写历史记录。

可以通过在所有设备上使用相同的 NTP 服务器(最好在地理位置上靠近网络)来解决该问题。

网络 ID 不匹配

通过在命令行中使用--networkid 12345 选项,网络的网络ID 设置为12345。请确保所有节点的设置相同,并且该值是一个随机的无符号正数 32 位数字(即 1 ~ 2147483647)。不要使用12345,因为可能使用的人太多。

防火墙配置不正确

以太坊默认使用 TCP UDP 端口30303 相互通信。请确保both 30303/TCP 30303/UDP 未被设备上的防火墙阻止。

【讨论】:

【参考方案2】:

上一个答案中缺少的另一个选项,这里是 genesis.json:它应该在所有节点上都相同。

【讨论】:

【参考方案3】:

如其他答案中所述,有一些问题可能导致它。 可能是您只配置一个端口,而不是两者。您需要同时设置端口和 rpcport。 Ipc 路径也需要启用或禁用 --ipcpath 或 --ipcdisable。

问题很可能出在您初始化节点的方式上,这是我的经验。

除此之外,请确保您使用来自两者的相同创世块,看起来应该像这样


 "alloc": ,
 "coinbase"   : "0x0000000000000000000000000000000000000000",
 "difficulty" : "0x20000",
 "extraData"  : "",
 "gasLimit"   : "0x2fefd8",
 "nonce"      : "0x0000000000000042",
 "mixhash"    : 
 "0x0000000000000000000000000000000000000000000000000000000000000000",
 "parentHash" : 
 "0x0000000000000000000000000000000000000000000000000000000000000000",
 "timestamp"  : "0x00"

您可能还想使用如下所示的 discport 指定您的 UDP 端口,并使用 --bootnodes 参数。引导节点的说明在我链接的以下两个资源中。

    >admin.addPeer("enode://90b7cbbaee94ab6e5bc7c5e8080bf8e2dfed5047b7c19ac61ee82511bef40faf9be2066258228ce7a71ab97b508dbef3c8f50fcf31dedfd43f2f0abd7f618db9@172.129.23.46:30303?discport=0")
true

这是您可以比较初始化的两个演练。

https://github.com/ethereum/go-ethereum/wiki/Setting-up-private-network-or-local-cluster https://ethereum.stackexchange.com/questions/13547/how-to-set-up-a-private-network-and-connect-peers-in-geth/15638

【讨论】:

【参考方案4】:
geth --datadir datadir2 **--networkid 123456** --rpc --rpcport "8549"  --rpccorsdomain "*"  --port 30304 --nodiscover --rpcapi="admin,db,eth,debug,miner,net,shh,txpool,personal,web3"

两个节点中的networkid 应该相同。这里是123456。尝试在另一个节点中使用相同的网络 ID,然后在该节点上。

【讨论】:

欢迎使用 ***,请考虑澄清您的答案。您可以对语法进行改进,使其成为更好的答案。

以上是关于无法添加以太坊对等点。对等列表为空的主要内容,如果未能解决你的问题,请参考以下文章

F3D系统开发以太坊Fomo3D区块链模式

Web 应用程序无法与通过 Truffle 部署的以太坊智能合约正确通信

区块链3.0下一个爆发点:以太坊版闪电网络

什么是以太币/以太坊ETH?

ETH以太坊怎样进行一键发币?

eth是啥意思