从多开网页到一键解析:我是如何用 Sourcify + GoPlus 搭建 Web3 合约查询系统

12 阅读4分钟

背景与痛点

在日常的链上交互或智能合约审计中,快速摸清一个未知合约的底细是刚需。通常,我们需要完成以下繁琐的步骤:

  1. 去 Etherscan/BscScan 查看是否开源。
  2. 切换到 Read/Write Contract 面板,翻找有没有 mint、setTax、pause 等敏感函数。
  3. 如果是代理合约,还得去查 ProxyAdmin 的权限归属。
  4. 去安全平台(如 GoPlus)查貔貅、税率、黑名单等风险字段。
  5. 打开控制台,手动 eth_call 查一下 owner() 或 totalSupply() 的实时数据。

这套流程下来,不仅要在十几个标签页之间反复横跳,而且很容易遗漏隐藏的管理权限。为了提高效率,我决定开发一个一站式合约查询系统,将源码解析、安全检测、链上交互整合到一个页面中。

技术栈方面,前端主打轻量响应,后端直接对接了 Sourcify v2(获取源码和 ABI)、GoPlus(安全风险字段)以及多链公共 JSON-RPC 节点。

ScreenShot_2026-11-03_102848_324.png

核心技术难点与实现方案

1. 数据源的整合与清洗

EVM 兼容链虽然多,但数据源侧重点不同。系统目前支持 BSC、Ethereum、Polygon、Base、Arbitrum 等主流网络。

  • 源码获取:利用 Sourcify v2 的去中心化验证机制,获取完全匹配或部分匹配的 Solidity 源码。这里需要注意的是,获取到的源码包含 OpenZeppelin 等依赖库,需要做树状结构的组装呈现。
  • 安全字段:直接接入 GoPlus 的 API,拉取代币的持有者分布、LP 锁仓比例等数据。踩坑点在于:部分非标准代币(如 ERC-777 或带有自定义逻辑的代币)在 GoPlus 可能会返回空值,后端做了容错处理,前端增加了“未检测到”的兜底展示,避免用户误以为是安全代币。

2.png

2. ABI 解析与敏感权限高亮

获取到 ABI 后,系统需要对函数进行分类:Read(读)、Write(写)、Sensitive(敏感)。

  • 实现逻辑:遍历 ABI JSON 数组,根据 stateMutability 区分读写。对于敏感函数,我建立了一个特征字典(如 owner、mint、setTax、pause、upgrade 等),一旦命中,前端直接标红高亮,并自动生成中文注释,让“后门”无处遁形。

3.png

3. 代理合约(Proxy)的穿透与权限追踪

现在大量项目使用 TransparentUpgradeableProxy 等可升级代理。系统会自动识别代理模式,穿透读出实现合约地址。 技术实现:通过检查 EIP-1967 的特定插槽(如 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc),利用 RPC 读取逻辑合约地址。同时,读取 ProxyAdmin 合约及其 owner。这一步非常关键,它能帮用户直接看清“谁”有权限随时篡改合约逻辑。

4.png

ScreenShot_2026-11-03_102912_899.png

4. 链上实时值读取(RPC 批量 eth_call)

5.png

很多浏览器的数据存在延迟。为了拿到最新状态,系统会直接向节点发起 eth_call。

  • 性能优化:因为无参读函数可能多达十几个,如果逐个发送 RPC 请求,网络开销极大。我在这里使用了 JSON-RPC 的**批量请求(Batch Request)**特性,将 totalSupply()、owner()、sellRatio() 等所有无参读函数打包在一个 HTTP 请求中发送,大幅提升了读取速度。

6.png

适用场景与效果

目前系统已经稳定运行,通过页面底部的“原始数据可导出”功能,用户还可以直接复制包含 ABI、验证信息、安全字段的完整 JSON,方便进行二次分析或存档留证。

对于日常开发和安全研究,它主要适用于以下场景:

7.png

  • 打新防雷:交易前输入地址,快速核对买卖税和黑名单限制。
  • 权限排查:直接查看敏感函数和代理合约的 owner,评估中心化风险。
  • 审计前置:一键导出 ABI 和源码,省去手动下载的麻烦。

8.png

体验地址

项目体验地址,如果你也在做 Web3 开发或链上交互,欢迎体验并给出建议。

🔗 系统地址:bcs.cqgywh.cn/

9.png

10.png 如果大家在开发类似工具时遇到代理合约解析或 RPC 批量请求的问题,欢迎在评论区交流探讨,我有空会一一回复!