主页 > imtoken苹果版官网下载 > 以太坊内存 什么是 MemPool 以及它是如何工作的?

以太坊内存 什么是 MemPool 以及它是如何工作的?

imtoken苹果版官网下载 2023-02-01 07:06:08

什么是 MemPool 以及它是如何工作的?

以太坊区块链是一种分布式账本,与比特币区块链一样,以智能合约的形式提供计算能力。 在其最基本的形式中,它是一系列相互连接的区块,每个区块都包含改变区块链状态的交易。

组成以太坊网络的节点维护着区块链的一个副本,并负责向其中添加新的交易,确保其一致性和有效性。

节点如何向区块链添加交易?

这个过程很容易解释:节点从钱包/用户接收签名交易,如果交易有效,节点将它们添加到区块链。

问题是节点可能会收到数以千计的交易并且块以准恒定的速率(每隔几秒)添加到区块链,节点也可能会从不同的用户接收数据,并且它们连接到的其他节点会收到不同的交易。 ..我们需要某种缓冲区来存储所有这些传入的、尚未验证的交易...这就是内存池“MemPool”发挥作用的地方,我将尝试用一般术语描述它是什么,它是如何工作的有效以及它们可能有什么“副作用”。

img

什么是 MemPool 以及它是如何工作的?

我们如何向区块链添加新交易? 假设有人想将一些代币发送到另一个帐户? 那么,这个人应该做的第一件事就是生成交易:

除其他事项外,该交易至少包含:

交易准备就绪后,需要将其包含在未来的区块中才能被网络接受。

完成此操作的方法是将已签名的交易广播到构成区块链网络的一个(或多个)节点。

节点接收您的交易并检查它的有效性和真实性,然后再将其转发到网络中的其他节点(它们检查发送者是否有足够的资金,更重要的是检查签名是否正确)。

检查交易后,节点会将其添加到他们的内存池中。 将区块添加到网络后,节点将重新检查其内存池中的所有交易,因为该区块可能包含使内存池中的某些交易无效的交易。

内存池基本上是节点的 RAM 内存,它们保存所有“到目前为止”已验证的交易,即已收到但尚未添加到区块链的交易。

img

事实上,根据区块链的不同,每隔几秒或几十秒就会产生一个区块,而区块的最大大小是有限的,也就是说一个区块只能承载有限数量的交易。

如果用户向区块链发送交易的速度快于区块链添加区块的速度,那么许多交易将不得不在节点内存池中等待。

值得注意的是,由于其去中心化的特性,节点的内存池可能随时不同,它们可能持有不同的交易。 同样重要的(也是需要注意的),您的交易也可能在任何时间点存在于多个节点的内存池中。

有时我们将内存池称为单个实体/位置,但实际上它是时间 T 存在的所有内存池的集合。

img

节点会从他们的内存池中挑选交易打包到区块链中,但节点不会遵循先进先出的政策,他们会挑选他们认为最方便的交易,基本上是那些支付最高费用的交易,因为这样他们的利润就会最大化。

img

一旦矿工最终从其内存池中挑选出一笔交易并将其添加到区块中,其内存池中具有相同交易的所有其他节点将继续删除它,因为同一笔交易无法在中间两次添加到区块链中。

每个节点的 mempool 就像是火车站的候车区,乘客在这里等待下一班火车的到来,只有愿意出钱最多的人才能上车。 一个乘客可以同时在多个火车站有一个特点,他或她进入一列火车的那一刻,他或她从所有其他火车站消失!

交易额外行动取消交易

节点是不受信任的代理人,因为他们总是以自己的最大利益行事,正如已经描述的那样,他们将首先选择那些支付最多费用的交易以太坊内存,这实际上是我们可以利用的 A 行为,基于它将使我们有可能在需要时取消交易(当然是尚未添加到区块链的交易!)。

为了取消之前的交易,我们需要从同一个账户向网络提交一个新交易,使用相同的随机数,但 gas price 更高。

节点将收到您的新交易,并且由于它比以前的交易支付更高的费用,因此它们将首先将其添加到区块链中。 特定帐户的交易随机数只能使用一次,这意味着当他们将新交易添加到区块链时,旧交易将失效并从内存池中删除。

交易高峰

由于节点在将交易添加到区块链之前将交易保存在内存池中以太坊内存,因此它们可以访问交易内容并可以提前检查它们将对区块链产生什么影响(状态变化)。

这对你的 dapp 来说可能是个问题,假设你为第一个提交特定值的帐户提供某种奖励,该值被散列为存储在智能合约中的值。 如果有人将正确答案提交给某个节点,那么该节点将有机会获得这个值,并且可以非常轻松地生成自己的交易,复制交易内容,并首先将其添加到区块链中,从而获得更多诚实用户的信任. 在那里“偷”奖励。

这只是交易抢先的一个例子,但在很多情况下,交易添加到区块链的“速度”或“顺序”会对你的 dapp 逻辑产生影响,你应该始终牢记这是可能破坏。

原版的:

本文参与登联社区写作激励计划,好文章好收益,欢迎正在阅读的你加入。