在阅读本篇之前, 请先查看
泰岳链使用rust-libp2p实现节点同步(一)
新区块缓存
同步的启动策略一般是当本地高度和对方节点上链高度相差一定高度常量
,才会启动。
想象一下,握手时对方高度是100
,当你同步完这些区块时,对方节点已经到120
了,对方发送的区块121
,收到后是无法上链的,而同步高度常
量是50
,只能等到150才能再次启动同步。
解决这个问题需要引入区块缓存。
新区块gossip通知
每产生一个区块,区块生产者
都会通过gossip
发送到订阅这个topic
的节点,gossip为libp2p实现,内部维护节点管理。
// create the network topic to send on
let topic = GossipTopic::MapBlock;
let message = PubsubMessage::Block(bincode::serialize(&data).unwrap());
self.network_send
.try_send(NetworkMessage::Publish {
topics: vec![topic.into()],
message,