以太坊交易有时看起来是成功的,但背后可能隐藏着问题。
根据 GitHub 上的草案拉取请求 #36084,一名 Geth 开发者提出了对该客户端 Gas 估算机制的修复方案。该补丁针对当前估算器中的一个问题:由于来自一个智能合约对另一个智能合约的内部调用失败被忽略,可能导致 Gas 上限估算错误。
尽管交易本身仍可能完成,但并没有证据表明用户原本想执行的操作实际上已经发生。
Gas 估算问题是什么?
问题出在这样一种机制:一个智能合约调用另一个智能合约,在捕获错误后继续执行退款、记录失败,或者干脆跳过某个项目。从技术上说,这笔交易是成功的,但对用户而言,结果却不同。
这可能导致钱包给出的 Gas 上限建议,足以让交易结束,却不足以完成交易内部真正要做的工作。该开发者还指出,EIP-8037 可能会让这种情况更常见,因为失败的内部执行所返还的 Gas,可能帮助为后备流程提供资金。
Geth 的拉取请求 #36084 改了什么?

根据该拉取请求,这项改动为 Gas 估算中的“成功”给出了更严格的定义。这个版本的 Geth 将改进其处理内部失败的方式:不再只检查交易是否完成,而是把失败的内部调用和合约创建也计入考量。
即便交易完成了,如果它产生的内部失败次数多于在更高 Gas 上限下进行的一次参考执行,那么这次估算也会被拒绝。
不过,这名开发者强调,一个总是失败的内部调用,不应当让估算值无限上升。参考执行的作用,是让估算器保留原本就存在的失败,同时不允许因为 Gas 不足而新增失败。该提案还引入了一个单独的 Amsterdam 参考,以防止仅仅为了访问状态 Gas 储备而出现不必要的上调。
开发者表示,他们已经按照 Amsterdam 更新后的新规则,回放了 432 笔以太坊主网交易,建议中的改动修复了 67 个案例中的 64 个。
Gas 上限提高了 4%。另外有 254 个额外估算结果未受影响,因为这些案例并不存在上述问题;还有 3 个案例未被检测出来。
对于普通投资者而言,这项拟议中的改动应能提高钱包估算的可靠性,并减少那些虽然完成了交易、却没有实现预期结果的情况,尽管在某些案例中会带来更高的 Gas 上限。幸运的是,目前没有证据表明更高的 Gas 上限与更高的手续费之间存在已被证实的联系。












