对于公有区块链来说,由于委员会成员会更迭,自然会有成员的退出和更新,本文介绍的是一种POS的实现,委员会之间的通信使用
Tendermint
,普通节点使用devp2p
会存在两个p2p连接。
选举
- 成员的产生可以通过随机数生成如
ETH2.0
- 通过从POW矿工中寻找满足一定算力的成员
混合共识
- 通过
Balance
质押量选择排行前20的成员
获取委员会信息
选举出了委员会成员后,一般只知道它的公钥
,并不知道它的IP
和端口
,如何实现委员会成员之间的互联呢。
//CommitteeNode contains main info of committee node
type CommitteeNode struct {
IP string
Port uint32
Port2 uint32
Coinbase common.Address //reward address
Publickey []byte
}
发送节点nodeinfo信息
将本节点信息用所有委员会成员
的公钥加密一遍,
for _, member := range committeeInfo.GetAllMembers() {
pubkey, _ := crypto.UnmarshalPubkey(member.Publickey)
encryptNode, err := ecies.E