如何调试待处理的以太坊交易

  • Alchemy
  • 发布于 2024-02-16 13:14
  • 阅读 10

本文深入探讨了以太坊交易的生命周期,从用户发送交易到交易被完全确认的过程。文章详细解释了 mempool 的作用、交易流程的各个步骤,以及可能导致交易失败的常见问题,例如 mempool 已满、参数无效、gas 价格过低和 nonce 不正确等。此外,文章介绍了 Alchemy 提供的 Mempool Watcher 和 Explorer 等工具,可以帮助开发者更好地监控和管理交易。

0%

首页 博客 学习

如何调试待处理的以太坊交易

如何调试待处理的以太坊交易

作者: Alchemy Team

审阅者: Brady Werkheiser


上次更新时间:2024 年 2 月 15 日,阅读时长 8 分钟

当你向以太坊区块链发送交易时,它会去哪里? 什么是待处理交易,在交易被挖矿之前会发生什么? 什么是 mempool? 为什么我的一些交易成功,而另一些交易失败?

我们将深入研究以太坊网络上交易的流程,从你点击“发送”的那一刻到交易被完全挖矿的那一刻。 我们将讨论可能出现的问题,以及 Alchemy 的开发者工具套件如何帮助你调试并了解此过程。

虽然本指南是专门针对以太坊的,但核心原则基本上适用于所有区块链!

什么是以太坊交易?

最简单的形式,以太坊交易是用户将新信息编码到区块链永久状态的请求。此请求的内容通常采用以下几种形式之一:

  1. 从用户的公共账户到另一方的简单价值转移(例如,向商家发送 ETH)

  2. 将新的智能合约编码到公共区块链上,供其他第三方访问(例如,启动新的彩票智能合约)

  3. 将信息发送到现有的智能合约以与合约交互(例如,将你的姓名和资金输入到彩票智能合约中)

什么是 Mempool?

在我们了解以太坊中的交易流程之前,首先我们需要了解什么是 mempoolMempool 是以太坊节点中用于未确认交易的等候室,专门配置为充当临时区域。 根据你使用的客户端,它也可能被称为 TX-POOL 或 TX-QUEUE。

发送到节点的交易将首先进入 mempool,并将保留在那里,直到它们被网络完全确认。 Mempool 处理该过程的几个关键步骤,包括:

  1. 运行一系列验证测试,以确保交易在提交给矿工后能够成功。 节点可能执行的一些验证包括:是否有可用资金来支付 gas 费用? 交易签名是否有效? 此给定发送者地址的 nonce 是否按顺序排列?

  2. 根据 gas 价格对要处理的交易列表进行排序。 更高的 gas 价格意味着矿工可能会优先处理该交易。

  3. 与对等节点的 mempool 共享待处理的交易,然后继续转发到其他 mempool,从而允许整个网络查看待处理的交易列表。 当一个区块被挖出时,整个网络中 gas 价格最高的交易将被确认。

以太坊交易流程是怎样的?

现在我们已经介绍了 mempool,那么在将交易从用户发送到永久存储在区块链上涉及哪些步骤?

  1. 用户生成一个新的交易,用他们的私钥签署交易,并通过调用 eth_sendTransactioneth_sendRawTransaction 方法将其发送到区块链上的一个节点,这些方法通常通过像 Alchemy 的 Supernode API 这样的服务公开。

  2. 交易被发送到节点的 mempool

  3. Mempool 运行一系列验证测试。 如果交易通过这些验证,它将进入待处理状态。

  4. 节点会将交易广播到区块链中的其他节点,最终进入它们相应的 mempool

  5. 一旦区块链上的一个节点挖出了一个新的区块,gas 价格最高的约 200 个待处理交易将被包含到区块链上的下一个区块中。 这些交易将从 mempool 中移除,并且新的区块和 mempool 状态将在网络中传播。

  6. 在确认了 5 - 7 个区块后,区块链重新组织以遵循另一个区块分支(具有不同组的确认交易)的可能性变得非常小。 此时,可以安全地假设该交易已永久存在于区块链上。

以太坊交易流程以太坊交易流程

待处理的以太坊交易可能出现什么问题?

1. Mempool 可能已满

让我们从简单的开始。 Mempool 的大小受到限制(除非你正在使用像 Alchemy 这样的工具!),包括整个节点和节点中每个地址的限制。 通常对于 Geth 来说,它是 4096 个待处理交易,Geth 会删除较旧的待处理交易,而支持较新的。

2. 你的参数可能无效

当你进行交易时,你需要包含各种相关的参数,例如:

  • 发送地址和目标地址是什么?

  • 要转移的价值是多少?

  • 我愿意为交易使用多少 gas

  • 我交易的当前 nonce 应该是什么?

如果你在输入这些时犯了错误,节点通常会返回一个错误代码来解释问题。 如果你无法理解错误消息或通过 Google 找到答案,请随时在 Discord 上给我们发送消息,我们会尽力帮助你!

3. 你的 Gas 价格可能太低

为了确定优先处理哪些交易,必须以 gas 价格提交以太坊交易。 就像普通的拍卖一样,更高的 gas 价格意味着你的交易更有可能被包含到下一个区块中——而太低的 gas 价格意味着你可能永远无法进入区块链。

由于 gas 价格在一天的过程中会根据需求快速且不可预测地波动,因此正确设置此字段非常重要。 你有几个选择:

  • 如果你手动发送单个交易,你可以访问 ETH Gas Station 网站 以查看最新的 gas 价格并相应地设置你的价格。

  • 如果你将请求发送到像 Alchemy 这样的节点提供商,以太坊 JSON-RPC 规范公开了一个名为 eth_estimateGas 的端点,它可以让你估计你的交易需要多少 gas 才能被挖出! 你可以使用它以编程方式自动设置 gas 价格。

  • 如果你希望在 gas 价格上涨或下跌到某个价格时收到推送通知,我们提供了一个名为 Alchemy Notify 中的 Gas 价格通知 的工具,可以在这些情况下专门提醒你! 因为它是一个 webhook,所以很容易集成到你的代码中,以便在 gas 价格较低时自动发送交易。

4. 你的 Nonce 可能不正确

啊,每个人脑海中燃烧的问题 - nonce 到底是什么,为什么我需要它?? 完全有效的问题,我们很高兴你问了。

很简单,nonce 是从给定地址发送的交易数量。 如果你已成功确认了五个交易(nonce 0-4),则你的下一个待处理交易的 nonce 将为 5。

Nonce 遵循以下几个规则:

  • Nonce 必须按顺序出现。 Nonce 为 4 的交易将严格发生在 Nonce 为 5 的交易之前。

  • Nonce 不能重复或跳过 - 每个成功的交易只有一个 Nonce。 如果你没有 Nonce 为 5 的交易,则不能提交 Nonce 为 6 的交易。 类似地,你不能提交两个 Nonce 为 5 的交易 - 只有一个会通过。

为什么我们需要它们? 从加密角度来看,Nonce 是必要的,以确保来自给定地址的交易按照你发送它们的顺序发生,并且你的交易受到双重支出问题的保护。

在实践中,nonce 只是你在创建交易时必须设置的参数。 这使你可以精细地手动控制交易的顺序。

举一个现实生活中的例子,假设你想从市场上购买一个 NFT,然后向 Bob 发送一小笔“发现费”,以感谢他帮助你发现了它。 在这种情况下,你只想在成功购买 NFT 后才向 Bob 付款。 如果没有 nonce,你将无法提交这两个交易,并确保它们以特定的顺序发生。 使用 nonce,你可以简单地将一个交易标记为 nonce N,另一个交易标记为 nonce N + 1!

但是,这种精细的控制意味着你每次都需要以正确的 nonce 提交你的交易! 如果你的交易被卡住,你需要检查你的 nonce 以确保它按照上述规则正确设置。

5. 你的区块可能会被分叉

你会喜欢这个的:即使你的交易成功地被挖出,你也 仍然 没有摆脱困境 😡 。

因为区块链是去中心化的,所以网络中不同的节点集可能对网络有不同的看法。 特别是,有时两个矿工会大约在同一时间挖掘出一个新的区块,并且对等节点会以相同的速度跳到两条新的链上。 在这种情况下,两条新的链将并行增长 - 但最终其中一条链将获得更多的共识!

当整个网络切换到其中一条链并放弃第二条链时,已经在旧链上“挖出”的交易将被分叉,因此无效。 分叉的区块也称为“叔叔区块”。

这意味着即使在你挖出交易后,它仍然可能因区块分叉而失效! 你可以在 Etherscan 上查看分叉区块的历史记录。 幸运的是,在以太坊主网上,它们不是很常见,通常深度小于 5 个区块,但这就是为什么你的交易在至少 5 - 7 个区块确认之前永远不会被 DeFi 交易协议“完全”确认的原因。

我可以使用哪些工具来管理我的 Mempool 和以太坊待处理交易?

Alchemy Mempool Watcher

假设你四十分钟前向节点的 mempool 发送了一个交易,但你还没有看到它在区块链上得到确认。 你想了解其当前状态、你发送时使用的 gas 价格以及 nonce 以进行再次检查。 你该怎么办?

访问你的 mempool 交易的状态曾经(并且仍然是)一团糟。 因为进入你的 mempool 状态的唯一接口是通过以太坊 JSON-RPC API,所以开发人员花费数小时查询他们发送交易的各种节点,合并和筛选页面日志,并尝试手动重建其 mempool 的整个状态 - 所有这些都只为了一个查询。

这是调用繁忙的 mempool 的平均样子:

// 有趣的是阅读这团乱麻。

有趣的是阅读这团乱麻。有趣的是阅读这团乱麻。

更糟糕的是,当开发人员开始将他们的请求发送到多个节点以进行扩展时,会出现严重的加粗一致性问题 - 因为交易源自单个节点,所以对特定交易的请求需要以粘性方式路由到每次与之交互时的同一节点。

为了应对这些挑战,我们构建了 Mempool Watcher - 一个简化了许多复杂性的工具。 首先,我们处理所有节点路由,因此即使你可能正在利用数十个节点的规模,你的 mempool 始终显示为单个实体 - mempool 请求已正确路由到我们基础设施中的正确节点。

其次,我们为你提供了一些非常好的工具来提供你的交易状态的实时视图。 交易被标记为已挖出、待处理或已删除。 每个交易记录包括交易花费的待处理时间、所需的 gas 量以及对其他详细信息的访问权限。

这是你使用我们的工具查看 mempool 的方式!这是你使用我们的工具查看 mempool 的方式!

Alchemy Explorer

如果你通过脚本同时向一个节点发送了 20 个不同的交易,但你发现其中一些甚至无法到达该节点怎么办? 你如何跟踪失败的响应并找到模式以确定原因?

与上述类似,通常作为开发人员,你需要浏览页面日志以确定模式。 作为回应,我们构建了一个请求/响应浏览器工具,可让你跟踪通过我们的 API 发送的 JSON-RPC 请求的状态!

Alchemy ExplorerAlchemy Explorer

我们的 Alchemy Explorer 允许你搜索 1 秒到 7 天前通过我们的基础设施发送的历史请求和响应! 无需再进行日志搜索 - 你触手可及的是现代技术。

在这些请求中,你可以按各种类型的参数过滤查询,例如方法类型、HTTP 响应或节点特定的错误! 你可以根据时间戳、请求持续时间以及更多选项查看请求。

为什么我应该使用 Alchemy 来管理我的交易?

Alchemy 是一个节点提供商,这意味着我们管理与向以太坊区块链(以及其他一些区块链!)发送和接收请求相关的所有基础设施。 以下是一些关于为什么你需要节点提供商的信息。

一旦你通过我们的系统发送请求,你将获得我们上面讨论的所有待处理交易的好处:可扩展的 mempool、仪表板工具、gas 价格 webhook

最重要的是,我们将为你提供:

  • 访问 Supernode,我们专有的节点基础设施,可解决困扰区块链的可扩展性和一致性问题。

  • 访问我们的仪表板,该仪表板通过提供探索你请求的工具(如上面讨论的那些)来帮助你构建和监视应用程序。

  • 访问 Alchemy Notify,该工具提供事件(例如区块链上发生的交易)的推送通知 (webhook)。

  • 访问我们增强的 API,该 API 允许你从区块链发出计算成本高昂或不可能发出的请求。

  • 还有更多,包括跨各种链(例如 FlowCrypto.org)以及 L2(例如 PolygonOptimismArbitrum)访问这些功能!

开始使用 Alchemy

解锁 Alchemy 的 Supernode 和开发者工具非常简单 - 实际上,它应该只是一行代码! 如果你一直在使用 web3.js 或 ethers.js,那么只需免费创建一个 Alchemy 帐户、生成一个 API 密钥,然后将实例化替换为类似以下内容:

const web3 = createAlchemyWeb3("https://eth-mainnet.alchemyapi.io/");

如果你想要完整的教程,请查看我们的入门使用 Alchemy 文档! 最后,我们始终可以在我们的 Alchemy Discord 上 24/7 提供帮助。 顺便过来打个招呼 - 我们很乐意帮助你进行区块链开发之旅!

增压版 | Alchemy | Substack

Logo

增压版

来自 web3 领先的开发者平台的最新消息

作者:Alchemy · 超过 110,000 名订阅者

订阅

通过订阅,你同意 Substack 的使用条款我们的隐私政策我们的信息收集通知

Substack

注册 Alchemy University 并开始免费学习 Solidity 开发 立即注册

📚 目录


  • 什么是以太坊交易?
  • 什么是 Mempool?
  • 以太坊交易流程是怎样的?
  • 待处理的以太坊交易可能出现什么问题?
  • 我可以使用哪些工具来管理我的 Mempool 和以太坊待处理交易?
  • 为什么我应该使用 Alchemy 来管理我的交易?
  • 开始使用 Alchemy

分享:

博客文章页面相关文章背景装饰性以太坊徽标装饰性立方体图形

相关文章

EIP-7702 升级 EOA 钱包以具有智能功能\ \ 学习\ \ EIP-7702 对 MetaMask 和其他钱包的意义 \ \ 了解 EIP-7702 将如何在 2025 年影响钱包提供商、用户期望的功能以及成功的推荐实现。 EIP-7702 以太坊 Pectra 升级\ \ 学习\ \ EIP-7702 以及你应如何为 Pectra 硬分叉做好准备 \ \ 以太坊正处于一项重要升级的边缘,EIP-7702 计划在未来几个月内作为 Pectra 硬分叉的一部分推出。 培育开放生态系统\ \ 学习\ \ 培育开放生态系统 \ \ Alchemy 的使命是让下一个 10 亿用户加入链上。 实现这一目标需要一个快速增长的项目生态系统,这些项目致力于构建 web3 的未来。

桌面部分背景图片

构建区块链魔法

Alchemy 结合了最强大的 web3 开发者产品和工具,以及资源、社区和传奇支持。

获取你的 API 密钥

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

0 条评论

请先 登录 后评论
Alchemy
Alchemy
江湖只有他的大名,没有他的介绍。