区块链 Mempool 完全指南:它是如何工作的?

  • cyfrin
  • 发布于 2024-11-25 19:34
  • 阅读 19

这篇文章详细介绍了区块链 mempool 的概念、工作原理以及如何在以太坊和比特币等不同链上表现不同。文章探讨了如何将交易放入 mempool,交易的传播方式,以及使用私有 mempool 来减少 MEV 攻击的风险。内容结构清晰,适合对区块链相关知识有一定了解的读者。

什么是区块链 Mempool 及其工作原理?

了解什么是以太坊和比特币上的区块链 mempool,它是如何工作的,以及什么是私有 mempools。

当你将交易发送到区块链时,它实际上要去哪里?交易在“进行中”时,通常被称为“在 mempool 中”,你在 Metamask 中会看到熟悉的“待处理”文本。

显示因为卡住在区块链 mempool 中而待处理的 metamask 钱包交易的图片

mempool 作为区块链交易的入口。在交易可以记录到区块之前,它必须先通过 mempool。

在本指南中,你将学习 什么是区块链 mempool,它是如何工作的,以及在诸如 以太坊比特币 等链中的不同之处。

让我们开始吧。

什么是 mempool?

mempool 是“内存池”的简写,指的是一个交易在区块链节点的内存中存在但尚未被写入区块链的状态。

你可以把 mempool 想象成一个等待的地方或队列,在每笔交易被包含到区块链之前。处于 mempool 中的交易正在等待一个节点抓取该交易并将其包含在一个区块中。

显示以太坊区块链 mempool 是什么以及如何工作的图片

这个术语最初来源于比特币生态系统,不同的区块链节点对此有不同的称谓。

在比特币世界中,mempool 中的交易等待节点挖掘一个包含该交易的区块。在以太坊中,mempool 中的交易等待节点验证并将其包含在一个区块中。

交易如何进入 Mempool?

以下是交易如何进入区块链 mempool、被同步、验证、验证并在区块链节点之间传播的过程:

  • 最初,用户从 Dapp 或钱包启动交易。这可能是将资金发送到另一个账户或合约。
  • 用户然后使用他们的钱包 签署交易
  • 钱包将签名的交易转发 到节点或 RPC 提供商,如 Alchemy 或 Pocket,以便在区块链网络中包含。
  • 节点验证交易的有效性 并将其添加到其 mempool 中。
  • 由于该节点是一个对等组的一部分,它会 广播交易 给其他节点。
  • 这些对等节点接收、验证并 将交易添加到他们的 mempool 中。然后他们 将其广播给更多对等节点,将交易传播到网络中。
  • 矿工或验证者,一种特定的节点类型,也会从对等节点接收交易。他们将其验证并尝试将其添加到一个区块中。
  • 最终,成功的矿工或验证者将包含交易的区块添加到链上
  • 这个新区块随后在网络中广播。
  • 当所有节点从对等节点接收新块时,他们看到包含的交易并 将其从他们的 mempool 中移除

有多少个 mempool 就有多少个节点

我们称之为“内存池”,因为交易存在于节点的内存中。从技术上讲,区块链中的每个节点都有自己的内存池。一个单一节点的 mempool 本质上只是一个待处理交易的列表。

通常,当人们提到 mempool 时,他们 指的是所有节点的所有 mempool;我们将进一步解释原因。

显示以太坊节点的 mempool 的图片

在实践中,当提到区块链 mempool 时,我们指的是区块链生态系统中任何节点的所有待处理交易。这是因为,大多数时候,拥有 mempool 中交易的节点会将这些排队交易发送到其他节点,希望其中一个节点被选为构建区块并能包含该交易。

当你通过 Metamask、Trezor 或任何钱包向一个节点发送交易时,你是将那笔交易发送给一个单一节点。如果打开你的 Metamask 或浏览器钱包,你会看到一个指向单一节点的 API(URL)。这个节点就是你发送交易的唯一节点,它将在其 mempool 中存储该交易。

显示以太坊节点如何共享交易信息以保持区块链 mempools 同步的图片

一个节点不必将其待处理交易列表散发到其他节点,但为了增加交易被包含的机会,他们通常会这样做。挖掘或验证区块可能需要耗时,涉及计算能力或需要一个节点被选为区块构建者。因此,如果一个节点从未将其待处理交易列表发送到其他节点,那么该交易可能需要很长时间才能被包含!

如果ETH节点A拥有交易T,而他们不将T发送到其他节点,那么ETH节点A将不得不等待他们成为区块构建者时才能包含该交易!如果你查看任何 信标链 上的节点,你会注意到可能要等待几个月才会选中一个节点作为区块构建者!想象一下,等待几个月你的交易被处理。这就是大多数节点将他们的 mempool(队列交易列表)共享给其他节点的原因 → 以增加将交易放入区块的可能性。

MEV 和私有区块链 Mempools

基于上述声明,你可能认为 大多数区块链节点应始终共享他们的交易列表,在大多数情况下,你说得对。然而,如果你的交易携带 敏感信息你可能不想这样做

如果你共享mempool中的数据,你就是在 告诉其他节点你想发送的交易!这可能给其他节点或恶意用户提供可以用来对付你的信息,并窃取资金、访问权限或其他恶意行为!一个“构建” 区块的节点可以查看传入的交易 并利用这些信息来获取利益。

利用信息和交易排序以获得货币利益的过程被称为 MEV 或“最大可提取价值”,以前称为“矿工可提取价值”。好消息是有解决方案:用户可以使用称为私有区块链 mempools 的东西发送“秘密”交易到区块链。

在深入了解私有 mempools 以及如何帮助保护我们的资产之前,让我们快速看看一种流行的 MEV 方法,称为“前置跑”。

最大可提取价值:前置跑

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

contract FrontRan {
    error BadWithdraw();

    bytes32 public s_secretHash;

    event success();
    event fail();

    constructor(bytes32 secretHash) payable {
        s_secretHash = secretHash;
    }

    function withdraw(string memory password) external payable {
        if (keccak256(abi.encodePacked(password)) == s_secretHash) {
            (bool sent,) = msg.sender.call{value: address(this).balance}("");
            if (!sent) {
                revert BadWithdraw();
            }
            emit success();
        } else {
            emit fail();
        }
    }

    function balance() external view returns (uint256) {
        return address(this).balance;
    }
}

这个智能合约有一个叫作 withdraw 的函数,如果用户传入正确的密码,智能合约将解码密码并将合约余额发送给输入密码的人。密码以哈希形式存储在链上,存储变量为 s_secretHash,如果没有密码,破解是非常困难的。

这个合约的理念是,谁被告知密码,谁将获得资金。然而,MEV 使得恶意节点或区块构建者可以成为获取资金的人!

一个恶意节点或 “MEV Bot” 可以在 mempool 中看到某人使用正确密码调用 withdraw,复制出确切的交易,并使其交易优先通过!他们利用从 mempool 中获取的信息 窃取 FrontRan 合约的资金

在 Solodit 的“MEV”或“ 前置跑”中,我们经常看到这种攻击向量,这是每个协议构建者在建立协议时必须考虑的事情。

你可以查看 sc-exploits-minimized 存储库中的 MEV 最小化示例,该存储库来自 Cyfrin Updraft 安全和审计课程。

什么是私有区块链 mempool?

私有区块链 mempools 将我们的 交易发送给一小群承诺不查看交易细节并影响交易排序的节点

使用这种服务的好处是你不必处理 MEV 的问题。缺点是你必须信任这些节点不会进行 MEV,并且由于参与包含交易的节点较少,可能需要更长的时间才能将你的交易包含在内。

有几种方法可以发送交易而不让其进入 mempool,使用的服务包括:

使用私有 mempools 的优缺点

使用私有区块链 mempool 的好处

  • 提高隐私:私有区块链 mempools 不会广泛公开你的交易详情,从而为你的交易提供更高的隐私性。
  • 降低 MEV 攻击风险:通过保持交易详情的私密性,MEV(最大可提取价值)攻击的风险显著降低。
  • 改善交易排序控制:私有 mempools 提供了更好的交易处理顺序控制。

使用私有 mempools 的缺点

  • 安全性胜于速度:尽管由于参与过程的节点更少,交易确认可能会有所延迟,但私有 mempools 提供的增强的安全性和隐私性通常会超过这一小小的不便。

总结:什么是区块链 mempool?

mempool 是待纳入区块链区块的交易的待处理队列。它很重要,因为每个节点通常会将其待处理交易的列表与其他节点共享,这可能导致 MEV(最大可提取价值)攻击。

  • 原文链接: cyfrin.io/blog/what-is-a...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
cyfrin
cyfrin
Securing the blockchain and its users. Industry-leading smart contract audits, tools, and education.