Clique POA已签署,必须等待其他人。

8
这是我第一次在这里,希望有人能理解我的语法和问题。 我使用puppeth创建了2个节点,并选择Clique作为我的私有以太坊。 两个节点都是密封者(在两个节点上使用clique.getSigners()进行验证),并且两个节点都可以看到彼此作为同行(使用admin.peers进行验证)。 当我开始使用下面的代码为两个节点挖掘时,两个节点都停留在“Signed recently, must wait for others”状态。
geth personal.unlockAccount(eth.coinbase)
geth eth.defaultAccount = eth.coinbase geth miner.start()

Screenshot for both nodes

以下是创建节点1的步骤(已使用puppeth创建创世区块):
  1. geth --datadir "文件夹" init "genesis.json"
  2. geth --datadir "文件夹" --networkid [提供的网络] –nodiscover
  3. 单独的控制台 - geth attach ipc:\.\pipe\geth.ipc
  4. admin.addPeer(节点2的enode)
以下是创建节点2的步骤(已使用puppeth创建创世区块):
  1. geth --datadir "文件夹" init "genesis.json"
  2. geth --datadir "文件夹" --networkid [提供的网络] –nodiscover
  3. 单独的控制台 - geth attach ipc:\.\pipe\geth.ipc
  4. 获取enode admin.nodeInfo.enode并在节点1中使用admin.addPeer
检查签名者 - clique.getSigners - 两个帐户都出现
检查两个节点的对等点 - admin.peers - 都正常
然后两个节点都使用以下代码进行挖矿:
geth personal.unlockAccount(eth.coinbase)
geth eth.defaultAccount = eth.coinbase

geth miner.start()


1
你检查过你的网络中是否有其他节点吗?因为Clique需要至少50%+1的投票才能封存。 - Marcos Martínez
4个回答

5

我之前也遇到过同样的问题。我的解决办法是终止节点2,然后再重新运行。


2
使用引导节点来协助对等连接可能是一个好主意。(在开始使用之前,我也对这个想法有些怀疑,但它可以通过监控所有节点的活动来显著降低出错的几率。) 它非常容易使用,并且可以轻松扩展。
无论如何,关于您的问题:它们肯定在不同的网络上(看到他们都在封闭第二个块,因此它们在不同的网络上)。检查端口rpc端口是否不同,networkid是否相同。
我总是先检查以下一些常见问题:
- 网络上的不同节点将始终具有不同的端口和rpc端口。 - 引导节点用作不同网络上的同行附加节点(或者甚至在同一网络上,如果你想的话)。因此,在调用添加的对等点时,最好知道托管引导节点的机器的IP地址并引用它。 - Genesis文件应始终相同,即使在不同节点上也是如此。您可以在Genesis文件中声明所有签名者,甚至在在其他机器上启动节点之前就可以进行投票。 - 所有对等节点的networkid也应该相同!
此外,我并不是要挑剔,只是为了我们可以使用适当的语言,不会在不同的共识协议中混淆。虽然Geth命令是相同的(mine),但在PoA共识中不存在挖矿的概念。块是铸造的,因此签名节点(由Genesis块确定或之后投票确定)只收集待处理交易、验证它们并封闭一个新块,并将其广播给其他节点。此外,Clique不使用投票系统,正如我们的同事Marcos上面所说的,像BFT协议一样。Clique纯粹使用PoA,其中签名者封闭块并将其添加到链中。
很高兴进一步讨论,因为我非常热衷于这些应用!
敬请关注!
祝好,

1

我认为你需要在geth中添加--syncmode "full",也许问题还在于节点启动得太接近了。尝试在miner.start()之间添加延时。


1

使用 admin.addPeer() 将 node1 添加 node2 的 enode 地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接