Skip to content

Latest commit

 

History

History
69 lines (38 loc) · 2.85 KB

长安链代码解读--区块提案.md

File metadata and controls

69 lines (38 loc) · 2.85 KB

长安链代码解读--区块提案

​ 所有的核心引擎接口都定义在/protocol下,目前是/v2

image-20231023135658592

​ core_interface下面是核心引擎的接口定义

image-20231023135755489

​ 这里有三个主要的结构,

BlockCommitter   //区块提交,写入已经验证好的区块
BlockProposer    //发起区块提议,其中start开启一个区块提议
BlockVerifier    //区块验证

​ 首先我们来看start,这里有两个模式的实现,一个是syncMode(同步模式,对应共识算法主要是raft和pbft等),一个是maxbftMode(流水线模式),我们首先看看sync模式

​ mock是自动生成的代码,主要用于测试

image-20231023140126462

​ 进入后,我们可以看到,这里开启了一个开启区块提议的循环,触发条件有两个:一个是超过提案间隔时间,一个是交易池满了

!image-20231023140434693(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20231023140347907.png)

满足条件且通过校验后,开始proposeBlock

image-20231023142539866

关于subscriber注册某个topic

image-20231030110251087

image-20231030110258717

image-20231030110351768

notify会调用对应模块处理消息的OnMessage方法.这边我们继续看关于区块提案的部分

image-20231101205510279

然后有一个查看本地是否有旧提案,如果有则会进入旧提案的处理

image-20231101210645913

从这里的注释

// 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.

可以发现,这里如果一致性校验不通过,会清除旧提案,删除错误交易,然后重新打包交易,当然会过滤掉错误交易

image-20231101210829925