When Specifications Meet Reality: Uncovering API Inconsistencies in Ethereum Infrastructure

本文提出了首个规范引导的差分测试框架 APIDiffer,通过结合规范引导的测试输入生成与大模型辅助的误报过滤,在以太坊客户端生态中自动检测出 72 个 API 不一致漏洞,显著提升了代码覆盖率并降低了误报率。

Jie Ma, Ningyu He, Jinwen Xi, Mingzhe Xing, Liangxin Liu, Jiushenzi Luo, Xiaopeng Fu, Chiachih Wu, Haoyu Wang, Ying Gao, Yinliang Yue

发布于 Mon, 09 Ma
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文讲述了一个关于**以太坊(Ethereum)基础设施“体检”与“纠错”的故事。为了让你更容易理解,我们可以把以太坊想象成一个巨大的、由11 个不同语言翻译的“银行”**组成的金融系统。

🏛️ 背景:11 个翻译官,同一个账本

想象一下,以太坊是一个全球通用的超级账本,里面存着价值 3800 多亿美元的资产。为了安全起见,这个账本不是由一家银行管理的,而是由11 个不同的“翻译官团队”(也就是以太坊的客户端软件,如 Geth, Erigon, Lighthouse 等)共同维护。

  • 他们的任务:虽然大家用的编程语言不同(有的用 Go,有的用 Rust,有的用 Java),但他们必须完全一致地翻译和执行账本上的规则。
  • 用户怎么接触:普通用户(比如你和我)不会直接去运行这些复杂的“银行系统”,我们是通过**API(应用程序接口)**来查询余额、发送交易的。这就好比你通过手机 App 查余额,App 背后就是在调用这些“翻译官”的服务。

⚠️ 问题:翻译官们“各说各话”了

论文发现了一个严重的问题:虽然大家手里拿着同一本“官方说明书”(API 规范),但在实际翻译和执行时,这 11 个团队经常“理解偏差”

  • 现实案例:就像论文开头提到的,有人在 Etherscan(一个以太坊浏览器)上查一笔转账,显示转了 0.1 个 ETH,但链上实际只有 0.01 个 ETH
  • 后果:这就像银行柜员算错了钱,虽然只是小数点的问题,但会导致用户亏损、交易失败,甚至让人对整个区块链系统失去信任。

🛠️ 挑战:为什么以前没人修好?

以前,要找出这些错误非常困难,就像要在 11 个不同的语言环境中找出一模一样的翻译错误:

  1. 造测试题太难:以前靠人工写测试题,就像让翻译官自己出题考自己,既慢又不全面,还跟不上以太坊快速更新的节奏。
  2. 真假难辨:就算发现两个翻译官回答不一样,怎么知道是谁错了?
    • 是因为真的出错了?
    • 还是因为其中一个翻译官只是“说话方式”不同(比如一个说“无法解码”,另一个说“数据格式错误”,意思其实一样)?
    • 或者是环境不同导致的(比如一个银行刚开门,数据还没同步)?
      以前全靠人工去一个个排查,效率极低。

🚀 解决方案:APIDiffer(自动找茬机器人)

作者团队开发了一个叫 APIDiffer 的工具,它就像一个拥有“超级说明书”和“人工智能大脑”的自动找茬机器人。它的核心工作分三步走:

1. 自动出题(Specification-Guided Test Input Generation)

  • 传统做法:人工出题,容易漏掉冷门情况。
  • APIDiffer 的做法:它直接阅读官方的“说明书”(API 规范),自动生成成千上万道题目。
    • 语法题:故意出一些格式错误的题(比如把地址写成乱码),看翻译官会不会报错。
    • 语义题:它不只是瞎编数字,而是去真实的区块链上抓取真实数据(比如真实的账户地址、真实的区块号)来出题。这就像不仅考翻译官“语法对不对”,还考他们“能不能处理真实的业务”。

2. 同时考试(Differential Testing)

  • 它把这 11 个翻译官(客户端)全部拉到一个模拟的考场(本地测试网)里。
  • 给它们同时发同一套题,然后对比它们的答案。
  • 只要有一个翻译官的答案和大家不一样,就立刻标记为“可疑”。

3. 智能判卷(Specification-Aware False Positive Filtering)

这是最厉害的一步!以前机器对比发现不同就报警,结果全是误报。APIDiffer 引入了 AI(大语言模型) 来当“阅卷老师”:

  • AI 老师会看说明书:它知道哪些字段必须完全一样(比如余额),哪些字段可以不一样(比如服务器 ID)。
  • AI 老师懂语义:如果两个翻译官回答不同,但意思一样(比如一个说“没找到”,一个说“不存在”),AI 会判定这是**“语义等价”**,不算错。
  • 结果:它能把那些“只是说话方式不同”的误报过滤掉,只把真正的“硬伤”(Bug)揪出来。

🏆 成果:抓出了 72 个 Bug

这个机器人上线后,效果惊人:

  • 抓得准:在 11 个主流客户端中,一共抓出了 72 个真实存在的 Bug
  • 修得快:其中 90% 以上 已经被开发团队确认并修复了。
  • 连说明书都修了:最有趣的是,它甚至发现官方说明书本身就有错(比如规定数组长度是 32,但实际规则是 33)。这就像发现“考试大纲”印错了,赶紧把大纲也改了。
  • 覆盖率高:它的测试覆盖率比现有的工具高了近 90%,而且误报率降低了 37%

💡 总结

这篇论文就像给以太坊这个庞大的金融系统请了一位**“全科医生”**。

  • 以前:医生靠人工听诊,慢且容易漏诊。
  • 现在:APIDiffer 用自动化体检 + AI 智能诊断,不仅查出了很多隐藏的疾病(Bug),还帮助医生们统一了诊断标准(修复了说明书),让整个以太坊生态系统更安全、更可靠。

一句话总结:APIDiffer 用“自动出题 + AI 判卷”的方式,帮以太坊的 11 个不同翻译团队消除了“翻译误差”,确保了全球用户看到的账本数据是准确无误的。