W3

字节码比对器

问的是一个问题:「我在区块浏览器上看到的源码,真的是链上跑的那份代码编译出来的吗?」源码验证是自愿行为,任何人都可以上传一份「看起来没问题」的源码去通过验证。 只有拿编译产物和链上字节码逐字节比,才能把这件事确认下来。

支持 0x 前缀、空格换行、以及直接粘贴 hardhat / foundry 的 JSON 产物
识别到 字节
与链上比对(可选)

三个容易踩的坑

  • 1. 部署字节码 ≠ 运行时字节码。部署字节码(creation code)里内嵌着运行时代码,还多了构造逻辑; 运行时代码才是链上长期存在、真正被调用执行的那份。 把部署字节码拿去比对会得出一堆「不匹配」,还会扫出一张完全错误的函数选择器表。 这里会识别你粘的是哪一种,认出来了就直接告诉你。
  • 2. 「不一致」分两种,含义差很远。编译器会在运行时代码尾部写入一段 CBOR 编码的元数据(内含源码哈希与编译设置)。 同一次编译的产物,只要 IPFS 地址或编译器补丁号不同,这 43 字节就不一样,代码本体却完全相同。 所以比对必须分档:完全一致 / 忽略元数据后一致 / 不一致。 只报「不一致」,会把正常复制粘贴的产物误判成篡改。
  • 3. 一致性只说明「代码没被换」,不说明代码是好的。恶意逻辑完全可以被验证通过——它就是作者自己写的、自己上传的。 字节码比对解决的是「源码与链上是否同一份」,风险判断要交给Rug Pull 扫描器与人工审计。
相关:手上有合约地址而不只是字节码,合约体检会自动拉源码、验证状态、函数表与持仓分布;想读懂反编译出来的选择器背后是什么操作,看链上 API 参考;要按清单系统检查一遍,用审计检查清单