Tendermint阅读IX
文章目录
我们现在要啃一个硬骨头了,共识模块。在开始之前,我们先看一下EvidencePool模块,一个合法证据池模块。
先看一下证据池
|
|
跟我们自己想的结果差不多,需要验证节点集合验证证据,存到证据库里面。 新建函数很简单。这个证据池的函数也不是太多,主要就几个,我们来主要关注下添加证据和移除证据。
|
|
首先是验证证据是否正确,回到了我们之前看到的State模块
|
|
首先保证证据足够的新,不是很旧的节点产生的同意提案,然后这个证据是针对本区块高度,一个合理的验证者产生的 验证通过之后,就需要存到数据库中,以及添加到证据库中。 怎么移除的呢?
|
|
就是如果区块已经被提交,或者这个证据太旧了,就移除就可以了。但是,注意,只从证据库里面移除,不从数据库中移除。 evidencestore是和数据库打交道的,提供了各种所需要的功能,我们就不进去细看了。 最后,我们再来看下reactor。
|
|
这个reacotr就是处理证据池的证据的,再peer之间广播,把证据推给证据池,来进行处理。 这个类没有实现start,我们就先看一看Receive函数吧。
|
|
首先验证消息是否正确,正确的话就添加到证据库中。否则有问题就停止发过来证据的peer。 我们再看一个函数,addPeer,因为这个会在其他的地方被调用到。
|
|
可以看到,添加一个peer后,只要自己有证据,就会发送给其他人。 这个evidence模块感觉还不是太复杂,因此,我们就等着看consensus模块吧。