WATS Wallet logoWATS Wallet
技术8 分钟阅读

加密钱包报错信息详解:Execution Reverted、Nonce Too Low、Blockhash Not Found(EVM、Solana、TON)

查询“execution reverted”、“nonce too low”、“Blockhash not found”、AA21 和 TON 退出码 37:每种 EVM、Solana 和 TON 错误是什么意思,这次尝试是否花了网络手续费,以及如何修复。

作者:Alltoscan LLC,WATS Wallet 背后的公司 编辑政策

发布于 更新于

截至 2026 年 10 月,大多数钱包错误可以分为两类。在交易被打包进区块之前出现的错误,例如“nonce too low”、“replacement transaction underpriced”、“insufficient funds for gas * price + value”,或 Solana 的“Transaction simulation failed: Blockhash not found”,意味着链上没有记录任何东西,也没有花掉网络手续费。被打包之后的失败,例如 EVM 交易回滚(reverted)或 gas 耗尽、Solana 交易带着错误上链,或 TON 的计算阶段失败,仍然会为已完成的工作消耗手续费。请在下面的表格中找到你的确切字符串,查看它的含义和修复方法。

失败的交易花了手续费吗?先检查这一条规则

失败的交易只有在失败之前已被打包进区块时,才会花掉网络手续费。

一笔交易可能在两个时刻失败:

  • 被打包之前:钱包的模拟、RPC 节点或内存池(mempool)拒绝了它。没有任何东西进入区块,所以没有花掉网络手续费。
  • 被打包之后:交易进入区块,它的代码运行并失败。已完成工作的手续费被花掉。Etherscan 表示,失败的交易仍会因所用的计算而扣除 gas,Solana 的手续费文档也表示,如果交易失败,手续费仍会被收取。

要分辨你属于哪种情况,请在区块浏览器上搜索交易哈希或签名。几分钟后仍无记录,通常意味着它从未上链,也没有花费任何东西;Pending 状态表示它尚未被打包。标记为 Failed 或 Reverted,或带有非零退出码的记录,则意味着它已上链且手续费已被花掉。

哪些 EVM 错误表示“nonce too low”、“underpriced”或“out of gas”?

这些是 go-ethereum 客户端源代码中的确切字符串,其中大多数意味着交易在进入区块之前就被拒绝了。

确切错误含义花了网络手续费?该怎么办
“nonce too low”带有这个编号的交易已经确认;钱包状态已过期否重新同步钱包并查看区块浏览器;只有在你想做的操作尚未发生时才重新发送
“replacement transaction underpriced”加速或取消时,手续费上调幅度太小否上调更多;Geth 默认要求 10%
“max fee per gas less than block base fee”你的最高手续费低于当前的 base fee否提高最高手续费
“insufficient funds for gas * price + value”原生币无法同时覆盖金额和最大 gas否补充原生币;参见有代币却没有 gas 代币
“already known”同一笔交易已经在内存池中否等待;它无害
“out of gas”执行超出了 gas 上限;改动被撤销是用更高的 gas 上限重试

“execution reverted”是什么意思?

“Execution reverted”意味着智能合约拒绝了该操作,并撤销了它所做的每一项改动。它出现在两个时点,而手续费情况不同。

如果它出现在钱包发送前的预估阶段,则什么都没有发出,也没有花掉手续费。如果交易已经上链,Etherscan 会将其显示为 Fail 或 Reverted,而且按 Alchemy 的说法,发送方仍需为已用的 gas 付费。冒号后面的文字才是真正的原因。常见的有:

  • “UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT”:从你签名到被打包之间,价格的变动超出了你的滑点上限。
  • “ERC20: insufficient allowance”:代币授权额度小于要花费的数量。它的姊妹错误“ERC20: transfer amount exceeds balance”则意味着你持有的该代币少于你试图转移的数量。

这两个 ERC-20 字符串来自 OpenZeppelin v4 合约;较新的版本使用名称不同的自定义错误。

ERC-4337 的 AA 代码和 EIP-7702 错误是什么意思?

智能合约账户通过 bundler 发送一个 UserOperation,而不是普通交易,EIP-4337 规范规定,EntryPoint 的错误信息以 AA## 形式的代码开头。

代码含义花了网络手续费?
AA21 didn't pay prefund没有使用 paymaster,且账户在 EntryPoint 中的存款无法覆盖最大 gas否
AA23 reverted账户的验证代码拒绝了该操作否
AA33 revertedpaymaster 的验证拒绝了该操作否
AA95 out of gas该 bundle 的 gas 上限对该操作或某个子调用来说太低通常不会;handleOps 回滚

EIP-4337 规范规定,bundler 必须丢弃模拟时回滚的操作,因此验证失败(AA2x 和 AA3x)通常不会在链上留下任何东西。如果一个操作被打包,而它的主调用回滚了,gas 仍会由账户,或为其代付的 paymaster 在链上支付。Alchemy 指出,AA95 通常意味着 gas 上限设得太低;handleOps 回滚,所以请用更高的 gas 上限重试(这是 bundler 或 SDK 的设置)。

EIP-7702 增加了一个你可能从节点看到的错误:“in-flight transaction limit reached for delegated accounts”(Geth 的交易池对这样的账户只接受一笔待处理的可执行交易,所以请等待它完成)。链 ID 或 nonce 错误的授权会被静默跳过,因此交易可能成功,但委托并没有生效。如果你并没有主动委托过你的账户,请检查并撤销该委托:意外出现的委托是钱包盗取程序(drainer)的信号。

Solana 的“Blockhash not found”和“block height exceeded”是什么意思?

“Block height exceeded”意味着 blockhash 已过期,而“Blockhash not found”意味着节点不认识该 blockhash(通常是已过期,有时是节点滞后)。这两种情况下,交易通常都没有被处理。根据 Solana 的确认指南,blockhash 大约在 151 个区块内有效,约 60 到 90 秒,过期的交易无法再被处理。

确切错误含义花了网络手续费?该怎么办
“Transaction simulation failed: Blockhash not found”Blockhash 太旧,或模拟的节点还没见过它否重试以获取新的 blockhash
“block height exceeded”(TransactionExpiredBlockheightExceededError)它在 blockhash 过期之前没有上链否,除非它恰好在过期前上链;请检查签名在区块浏览器上检查签名,然后重试
“Transaction simulation failed: Error processing Instruction N: custom program error: 0x...”程序预判会失败,例如兑换滑点否,如果在发送前的模拟中被拦下;如果钱包或应用跳过模拟,交易可能以 Failed 状态上链,并花掉手续费阅读原因;调整滑点或金额
“Attempt to debit an account but found no record of a prior credit.”付款账户里完全没有 SOL否用 SOL 为它充值
“Transaction results in an account (0) with insufficient funds for rent”发送会让某个账户低于租金豁免的最低余额否,如果在模拟中被拦下;如果跳过模拟,它可能以 Failed 状态上链并花掉手续费少发一点;参见 Solana 租金
区块浏览器显示“Failed”它已上链,程序返回了错误是阅读区块浏览器上的日志,修复后重新发送

Solana 的手续费始终以 SOL 支付,所以“Insufficient funds for fee”和“insufficient funds for rent”意味着你需要 SOL。代币转账时出现单独的“insufficient funds”或“custom program error: 0x1”,意味着你持有的该代币少于你试图发送的数量。

应该在 Solana 上提高优先费(priority fee)吗?

只有当交易在拥堵期间不断过期时才提高优先费,出现模拟错误时则不用。

根据 solana.com 的手续费文档,Solana 的手续费由每个签名 5,000 lamports 的基础费(50% 销毁,50% 给验证者)加上可选的优先费构成:优先费是计算单元价格(以 micro-lamports 计)乘以计算单元上限,再除以 1,000,000 并向上取整到整数 lamports,全部归验证者。更高的优先费能提高繁忙的 leader 调度你交易的几率。它无法修复滑点、租金或缺少 SOL 的错误,而且如果交易上链后失败,它仍然会被收取。如果出现模拟错误,请修复其原因。

TON 的退出码和退回消息是什么意思?

一笔 TON 交易分阶段运行(存储、入账、计算、动作、退回),根据 docs.ton.org,退出码 0 和 1 表示成功,其他一律表示失败。如果计算阶段失败,动作阶段会被跳过,对于可退回的入站消息,会生成一条退回消息;手续费是逐阶段扣除的,所以较早阶段的费用已经花掉。手续费以 GRAM 支付(前身为 Toncoin;参见更名带来了什么变化)。

信号含义花了网络手续费?该怎么办
退出码 13 或 -14计算阶段 gas 耗尽是,按已用的 gas附带更多 GRAM
退出码 9Cell underflow:合约试图读取的数据超过一个 cell 所含,通常是因为载荷与合约的预期不符是检查载荷或备注是否适合该合约
退出码 37动作阶段:“Not enough GRAMs”,不足以发送出站消息是附带更多 GRAM
计算阶段被跳过该消息附带的 GRAM 太少,不足以支付执行没有 gas;存储阶段仍会运行附带更多 GRAM 再发送
退回的消息目标失败或不存在是,已扣除手续费退回的价值需扣除消息费和 gas 费

WATS Wallet 与这些错误有什么关系

WATS Wallet 由 Alltoscan LLC 开发,是一款面向 EVM 网络、Solana 和 TON 的非托管钱包(Chrome 扩展和 iOS/Android 应用),你自己持有密钥和助记词。本指南中的错误信息是这些链所定义的网络层错误,而不是 WATS 特有的代码。

在 Solana 上,网络手续费以 SOL 支付,所以 Solana 的“insufficient funds”一行直接适用:保留少量 SOL 余额即可避免它。TON 的各行描述的是协议层面的错误;在 WATS Wallet 中,TON 上的手续费以 ATS 支付。在 EVM 网络上,WATS Wallet 通过 ERC-4337 paymaster,以 ATS 从 BNB Chain 上的一份 ATS 余额中计收网络手续费;ATS 手续费的运作方式另有专文说明。

常见问题

加密交易失败时我会亏钱吗?

这取决于它是在什么时候失败的。如果它在被打包之前被拒绝(模拟、节点或内存池错误,如“nonce too low”、“replacement transaction underpriced”或“Blockhash not found”),则没有任何东西上链,也没有花掉网络手续费。如果它上链后失败(EVM 回滚或 out of gas、Solana 区块浏览器上的“Failed”、TON 的非零退出码),已完成工作的手续费就被花掉了,但你试图发送的金额仍留在你的账户中,TON 的退回消息会退回扣除手续费后的价值。请在区块浏览器上查看哈希或签名,以确认属于哪种情况。

我没有待处理的交易,为什么钱包提示“nonce too low”?

nonce 是账户的交易计数器,“nonce too low”意味着带有该编号的交易已经确认。常见原因有:在另一个钱包应用或设备上使用了同一个账户、一笔“卡住”的交易其实已经确认,或者钱包缓存的状态已过期。请在区块浏览器上查看你想做的付款或操作是否已经完成;如果已完成,不要重新发送;如果没有,请重新同步钱包再发送。被拒绝的那次尝试本身没有花手续费。如果确实有一笔交易待处理,请参阅<a href="/blog/speed-up-or-cancel-stuck-transaction">如何加速或取消待处理的交易</a>。

在 Solana 上出现“block height exceeded”或“Blockhash not found”后重试安全吗?

通常安全。“Block height exceeded”意味着 blockhash 已过期(约 151 个区块,大约 60 到 90 秒),而“Blockhash not found”意味着节点不认识它,通常是因为它已过期。过期的交易无法再被处理,所以它之后不可能上链并与新的那笔重复;不过仍请先在 Solana 区块浏览器上查询签名,然后用新的 blockhash 重试。除非它在过期前上链(区块浏览器查询会显示这一点),否则过期的那次尝试不会被收取手续费;如果它在拥堵期间不断过期,适度提高优先费会有帮助。