所有的核心引擎接口都定义在/protocol下,目前是/v2
core_interface下面是核心引擎的接口定义
这里有三个主要的结构,
BlockCommitter //区块提交,写入已经验证好的区块
BlockProposer //发起区块提议,其中start开启一个区块提议
BlockVerifier //区块验证
首先我们来看start,这里有两个模式的实现,一个是syncMode(同步模式,对应共识算法主要是raft和pbft等),一个是maxbftMode(流水线模式),我们首先看看sync模式
mock是自动生成的代码,主要用于测试
进入后,我们可以看到,这里开启了一个开启区块提议的循环,触发条件有两个:一个是超过提案间隔时间,一个是交易池满了
!(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20231023140347907.png)
满足条件且通过校验后,开始proposeBlock
关于subscriber注册某个topic
notify会调用对应模块处理消息的OnMessage方法.这边我们继续看关于区块提案的部分
然后有一个查看本地是否有旧提案,如果有则会进入旧提案的处理
从这里的注释
// when this block has some wrong tx and could not to reach an agreement.
// we need to clear the old proposal cache when the old block's tx timeout.
// we need to remove these txs from tx pool.
可以发现,这里如果一致性校验不通过,会清除旧提案,删除错误交易,然后重新打包交易,当然会过滤掉错误交易