内存池 Mempool

内存池是一个内存缓冲区,用于保存等待执行的交易。

准入控制(AC)模块将交易发送到内存池(Mempool)。在共识模块提交之前,内存池将会把交易保留一段时间。当有新交易添加时,内存池会与系统中的其他验证程序(验证器节点)共享此交易。内存池是一个“共享的内存池”,因为这些内存池之间的交易与其他验证器共享。这有助于维护一个伪全局排序(pseudoglobal ordering)。

当验证器从另一个内存池接收到一个交易时,该交易在被添加到接收者验证器有些队列时,同样会排序。为了减少共享内存池中的网络消耗,每个验证器负责处理自己的交易。我们不会重复广播来自对等验证器的交易。

我们只广播有可能包含在下一个块中的交易。这意味着要么交易的序列号(sequence number)是发起人帐户的下一个序列号,或者是顺延的。例如,如果帐户的当前序列号为2且本地内存池中包含序列号为2,3,4,7,8的交易,则仅广播交易2,3和4。

共识模块从内存池获取交易,内存池不会将交易推向共识。这样在交易达成共识前,还可以:

内存池可以继续基于gas对交易排序;

共识模块可以允许交易在内存池中建立。

这允许将交易分组为单个共识区块,并按gas价格划分优先级。

内存池不会跟踪发送到共识模块的交易。在每个get_block请求上(去内存池中提取一个交易块),共识模块发送一组从内存池中提取但未提交(committed)的交易。这让内存池对不同的共识模块提议分支保持不可知。

当交易完全执行并写入存储时,共识模块通知内存池。然后,内存池将此交易从其内部状态中删除。

Last updated