0%

evm | mempool 简介

需要明白 EVMmempool 的概念才能更好的写代码。


参考资料


这个其实没啥好说的,可以参考下面的博文进行尝试。

Geth 称其为 「交易池」;Parity 将其称为 「事务队列」。无论名称如何,它都是位于内存中等待包含在块中的交易池。把它想象成一个 「等待区」,让交易被接受到一个区块中。

发送到以太坊节点的有效交易应进入内存池。但实际上并没有一个内存池。相反,每个节点都有自己的内存池,试图通过以太坊网络与其他节点(对等节点)保持同步。由于网络通信并不总是可靠或及时的,因此每个节点都有一个稍微(或有时显着)不同的内存池。此外,节点对他们接受哪些交易有不同的规则(例如最低gas价格和内存池大小限制)。

理想情况下,交易会离开节点的内存池,因为它们包含在一个块中。但是它们也可以离开,因为它们通过加速/取消被替换,或者由于节点的内存池配置而被丢弃。

典型的交易流程包括以下步骤:

  • 首先,用户从 Dapp 或钱包发起交易,例如向另一个账户或合约发送资金
  • 然后用户用他们的钱包签署该交易
  • 钱包将签名的交易发送到一个节点,通常称为网关节点,以进入以太坊网络(想想 InfuraPocket
  • 该节点将验证交易是否有效并将其添加到其内存池
  • 由于节点连接到一组对等节点,因此它将事务广播到其他节点。
  • 这些对等节点将接收交易,对其进行验证,将其移动到自己的内存池中,并向其他对等节点广播,实质上是通过网络复制交易
  • 矿工作为一种特定类型的节点,也从对等节点接收交易,对其进行验证,并尝试将其添加到区块中
  • 最终,成功的矿工将带有交易的区块添加到链中
  • 新区块通过网络广播
  • 当所有节点从他们的对等节点接收到新块时,他们会看到包含的交易并将其从他们的内存池中删除
请我喝杯咖啡吧~