(并发处理)区块链共识与执行的并行处理方法
1. 技术背景
在区块链技术中,共识至少可以包含两层语义:
1、完成交易定序;
2、对最新状态达 成共识。
对于采用账户模型的区块链来说,交易中只包含事件,状态是在交易执行完之后生 成。为了实现对最新状态的共识,常用的办法是:共识节点在打包区块之前执行完区块中的所有交易,将计算出的最新状态保存到待打包的区块的块头中。包含最新状态的区块达成 共识后,区块中的交易完成了定序,同时最新状态亦完成了共识。任何其它共识节点可以重放区块中的交易验证状态的正确性。 [0003] 然而,这种处理方法制约了共识算法的交易处理能力。例如,当高度为h的区块B (h)达成共识后,高度为h+1的共识节点(也称为leader节点)打包并执行B(h+1)后才能广播 B(h+1),其它共识节点收到B(h+1)后必须再执行B(h+1)以验证其正确性。在整个共识过程 中,这两次串行的区块执行过程(先执行交易,再共识结果)拖慢了共识效率。
2. 存在痛点
效率慢
3. 区块链共识和交易并行的处理办法
- 区块链共识与执行的并行处理方法
批量交易打包,并对打包得到的一个交易集合进行共识。在大成共识后,将已经定序的交易集合添加到顶设缓冲队列。依次执行所述预设缓冲队列中每个交易集合内的交易。在所述任意交易集合内的交易全部执行完成后,将已经被执行的交易集合的执行结果作为最新状态返回。
- 区块链共识与执行并行处理装置
共识模块:用于批量打包交易,并对打包得到的一个交易集合进行共识。在达成共识后,将已经定序的交易集合添加到执行模块的预设缓冲队列。
执行模块:用于依次执行所述预设缓冲队列中每个交易集合内的交易。用于在交易集合内的交易全部执行完成后,将已经被执行的交易集合的执行结果作为最新状态返回给所述共识模块。
4. 具体实施
目前存在的一种改进办法是: 排序节点在打包区块的时候,并不直接立即执行该区块中的交易,而是先对该区块进行共识,待大成共识后,共识节点才执行该区块生成新状态。下一个高度的排序节点将新状态携带在下一个区块中进行共识。这种办法省掉了一次区块执行过程,代价是增加的一个区块的确认时间。当然,从更加微观的角度来分析,这种改进方案,发现任何一个共识节点的共识模块和执行模块在整个共识过程中都是串行的。这就意味着针对多个共识节点,当任意共识节点的共识模块在对区块进行共识时候,执行模块始终是空闲的。
为了解决共识与执行串行处理二导致的共识效率较低的问题,便提出了并行方案,主要核心事项在于解耦交易定序与状态共识。
4.1 交易流程
- 批量打包交易,并对打包得到的一个交易集合进行共识。将接收到的交易批量打包,形成一个交易集合。对该交易集合中的交易进行共识。
- 达成共识后,将已定序的交易集合添加到预设缓冲队列。预设缓冲队列可以是一个缓存空间,主要用于缓存已定序的交易集合。在达成共识之后,将已经定序的一个个交易集合一次添加到预设缓冲队列中,以等待依次被执行。
- 依次执行所述预设缓冲队列中每个交易集合内的交易。
- 在所述任意交易集合内的交易全部执行完成后,将已经被执行的交易集合的执行结果作为最新状态返回。
- 每执行完成一个交易集合中的所有交易,就将被执行的交易集合发送给共识模块。以便在排序节点打包交易的时候获取到最新状态参与共识。
- 由此可见,在一个区块被处理时候,实现交易共识与执行的并行处理。以及在相邻区块的交易共识与执行的并行处理,保证在整个共识过程中,交易共识与执行始终在执行,切存在并行处理的情况,从而提高共识效率。
![]()
注:摘自 杭州秘猿科技有限公司的专利 《区块链共识与执行的并行处理方法、装置和 电子设备》,只做个人学习使用。