合约校验

在 TRONSCAN 上校验已部署合约的源码,让用户可以阅读、审计,并通过 TRONSCAN 的 交互式 UI 调用合约方法。

📘

前置阅读

在 TRONSCAN 上验证智能合约时,系统会将您提交的合约源码进行编译,并与链上已部署的字节码进行哈希比对,验证一致后便会公开源码。通过验证的合约将在 TRONSCAN 的页面上展示完整的源码,便于他人阅读和审计,并且支持直接通过 TRONSCAN 的交互界面在线调用合约方法。

为什么要验证合约源码

验证并开源合约源码能为您的项目带来以下实际价值:

  • 提高透明度 —— 用户和投资者可以直接阅读合约源码,确认其实际功能与项目方描述完全相符。
  • 便于可信审计 —— 社区成员与安全研究人员能够公开审查源码,及时发现并修复潜在的安全漏洞。
  • 生成交互式 UI 界面 —— TRONSCAN 会为已验证的合约自动生成一个可视化交互界面,用户无需编写任何代码,即可直接在网页上调用合约的公开方法。
  • 提升生态兼容性 —— 许多去中心化钱包、链上分析平台以及区块浏览器,只会对已完成源码验证的智能合约进行收录和展示。

分步验证流程

请前往官方的 TRONSCAN 合约验证入口

第一步 —— 填写合约基础信息

在验证页面中,您需要填写一系列基础配置项。所有的参数设定必须与您部署该合约时使用的配置完全一致——哪怕只有一个字符的偏差,都会导致最终的比对字节码校验失败。

字段填写内容
Contract Address部署交易生成并分配的合约地址
Main Contract主合约名称(Solidity 代码中声明的主 contract 名称)
Solidity Compiler Version编译时使用的精确编译器版本号(例如 0.8.6
License开源许可证类型,如果不确定,可以直接选择 None
Optimization编译时是否开启了能耗优化配置(Optimizer)
Runs优化时的 Runs 参数值(若启用了优化,默认通常为 200
TRONSCAN 校验表单,显示基本合约信息字段

填写完成后,点击 Upload Contract File(s)(上传合约文件)按钮继续。

第二步 —— 提交源码文件

  1. 上传您所有的 Solidity 源代码文件。请注意,上传的代码必须与部署时的源码完全一致,且须包含所有的外部依赖项。
  2. 完成网页的人机身份验证(reCAPTCHA)。
  3. 点击 Verify and Publish(验证并发布)按钮。
包含 Verify and Publish 按钮的源码上传步骤

TRONSCAN 将会使用您提供的编译器参数重新编译上传的源码,并将编译产生的字节码与链上存储的字节码进行匹配。如果两者哈希值完全匹配,页面将显示“Contract Verified”,同时您的源码也将正式公开展示在 TRONSCAN 的合约页面上。

TRONSCAN 显示已校验合约

常见报错与排查指南

1. 验证包含子目录结构的多文件合约

TRONSCAN 源码验证器目前不支持直接校验带有子目录嵌套结构(如 contracts/libs/ 等)的多文件项目。在提交验证前,您需要将所有关联的合约代码“展平”(Flatten)合并为单个独立的 .sol 文件。具体操作步骤请参阅 TRONSCAN 展平合约指南

2. reCAPTCHA 验证组件无法加载

由于 TRONSCAN 的验证表单集成了 Google reCAPTCHA 人机验证,如果该组件在您的浏览器中无法正常加载,可能是您的网络环境限制了对 Google 相关域名的访问。请尝试使用网络代理服务或切换其他网络环境重试。

校验表单中的 reCAPTCHA 组件

3. 提示 "Contract has not been deployed on the network"

此报错表明您提交的合约地址在当前选定的网络中并不存在。请排查:

  • 检查输入的合约地址是否正确无误。
  • 检查 TRONSCAN 网页右上角的网络选择器,确保已切换至您实际部署该合约的目标网络环境(如主网、Shasta 测试网或 Nile 测试网)。

4. 提示 "Please confirm the correct parameters and try again"

这是最普遍的验证失败报错,通常由以下两类原因引起:

编译参数不匹配

网页表单中填写的参数与您在编译合约时实际使用的配置不符。请仔细核对以下配置:

  • Solidity 编译器版本(注意: TRON 的 Solidity 编译器与以太坊标准 Solidity 编译器存在发行版上的差异,请确保选用专为 TRON 定制的完全一致的编译器版本)
  • 开源许可证类型(License)
  • 能耗优化配置(Optimization)是否开启
  • 优化运行次数(Runs)

源代码不匹配

上传的源码文件与链上已部署合约的字节码编译结果不相符。常见原因有:

  • 部署合约后,本地源码被无意中进行了修改。
  • 上传源码时,漏掉了部分引入的依赖文件。
  • 提交前多文件没有正确展平。

建议解决方法

  • 确保上传的是您部署时所使用的确切源码版本(建议使用 Git 分支、Tag 或提交哈希来固定和检出部署时的代码)。
  • 确保打包并提交了所有的依赖文件。
  • 在上传前,使用 truffle-flattenersolidity-flattener 等行业标准工具将您的项目源码展平为单一的 Solidity 源文件,具体展平技巧请参阅 TRONSCAN 合约展平指南

相关资源