无法添加以太坊对等点。对等列表为空
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,然后在该节点上。
【讨论】:
欢迎使用 ***,请考虑澄清您的答案。您可以对语法进行改进,使其成为更好的答案。以上是关于无法添加以太坊对等点。对等列表为空的主要内容,如果未能解决你的问题,请参考以下文章