内存池 Mempool
内存池是一个内存缓冲区,用于保存等待执行的交易。
准入控制(AC)模块将交易发送到内存池(Mempool)。在共识模块提交之前,内存池将会把交易保留一段时间。当有新交易添加时,内存池会与系统中的其他验证程序(验证器节点)共享此交易。内存池是一个“共享的内存池”,因为这些内存池之间的交易与其他验证器共享。这有助于维护一个伪全局排序(pseudoglobal ordering)。
当验证器从另一个内存池接收到一个交易时,该交易在被添加到接收者验证器有些队列时,同样会排序。为了减少共享内存池中的网络消耗,每个验证器负责处理自己的交易。我们不会重复广播来自对等验证器的交易。
我们只广播有可能包含在下一个块中的交易。这意味着要么交易的序列号(sequence number)是发起人帐户的下一个序列号,或者是顺延的。例如,如果帐户的当前序列号为2且本地内存池中包含序列号为2,3,4,7,8的交易,则仅广播交易2,3和4。
共识模块从内存池获取交易,内存池不会将交易推向共识。这样在交易达成共识前,还可以:
内存池可以继续基于gas对交易排序;
共识模块可以允许交易在内存池中建立。
这允许将交易分组为单个共识区块,并按gas价格划分优先级。
内存池不会跟踪发送到共识模块的交易。在每个get_block请求上(去内存池中提取一个交易块),共识模块发送一组从内存池中提取但未提交(committed)的交易。这让内存池对不同的共识模块提议分支保持不可知。
当交易完全执行并写入存储时,共识模块通知内存池。然后,内存池将此交易从其内部状态中删除。
Last updated