Home指南API 参考手册
指南API 参考手册社区Discord博客FAQ漏洞赏金公告中心English(英文版)Log In
指南

合约验证

在 Tronscan 上进行合约验证,是将合约源代码与其部署在 TRON 链上的字节码进行比对并公开展示的过程。验证成功后,源码将显示在该合约页面的“合约”标签页中,方便用户查阅和进行交互操作。

1. 合约验证的目的与意义

合约验证不仅是保障用户权益的重要手段,也是推动 TRON 生态健康发展的关键步骤。经验证的合约具备以下显著优势:

  • 提升透明度:用户可以直接查看合约的源代码,从而了解其内部逻辑和功能,这极大地增强了用户对项目和合约的信任度。
  • 便于审计与安全检查:公开的源代码便于社区成员或专业的第三方安全机构对合约进行审计,及时发现并修复潜在的安全漏洞或风险,保障资产安全。
  • 支持交互操作:Tronscan 提供了直观的可视化合约调用界面。用户和开发者可以直接在页面中调用合约的公共方法,进行测试、验证和交互,无需编写额外的代码。
  • 展示项目规范性:合约验证是衡量一个项目开发流程专业性和合规性的重要标志。经验证的合约表明项目方遵循了良好的开发实践。
  • 增强生态兼容性:部分第三方平台(如钱包、数据分析服务、DApp 浏览器等)仅支持已验证的合约。因此,进行合约验证是您的项目对接这些服务和扩展生态影响力的前提条件。

2. 验证合约操作指南

您可以通过 Tronscan 提供的在线验证工具对已部署的合约进行验证。请访问 Tronscan 合约验证工具 开始验证流程。

2.1 填写合约基本信息

在验证页面中,您需要准确填写合约的基本信息。请务必注意,以下信息必须与您部署合约时的设置完全一致,否则验证将失败。

  • 合约地址:部署合约后生成的地址。
  • 合约名称:主合约的名称(即 contract 关键字后的名称)。
  • 编译器版本:部署时使用的 Solidity 编译器版本。
  • License:合约的开源许可证类型。如无特殊需求,通常可以选择 None
  • 是否优化(Optimization):部署合约时是否启用了编译器优化。请根据您部署时的实际选择进行勾选。
  • Runs:如果启用了优化,请填写部署时设置的优化运行次数。

填写完毕后,点击 “上传合约文件” 继续验证流程。

2.2 提交合约源代码

  1. 点击“上传合约文件”按钮,选择您的合约源代码文件并上传。请确保上传的代码与链上部署的版本完全一致,包括所有依赖文件。
  2. 勾选 “进行人机身份验证” 以完成安全检查。
  3. 点击 “验证并发布” 按钮。

Tronscan 将自动比对您提交的源代码与链上部署的字节码。如果验证通过,系统将显示“恭喜您合约已验证成功!”的提示信息。随后,您可以前往合约页面查看已公开的合约源代码信息。


3. 合约验证常见问题与解决方案

在合约验证过程中,您可能会遇到以下常见问题。下面列出了每类问题的解决方案。

1. 如何验证带目录结构的合约文件?

注意:Tronscan 暂不支持目录结构的合约验证。如果您的合约文件结构中包含子目录(如 contracts/、libs/ 等),请在验证前对合约进行“扁平化”处理,即将所有依赖合并为一个 .sol 文件。具体操作方法请参考 Tronscan官方指南

2. 无法进行人机验证

在点击 “验证并发布” 提交合约验证信息之前,Tronscan 会弹出 Google reCAPTCHA 组件进行人机身份验证(如下图所示)。如果该组件无法正常加载,可能是由于当前网络无法访问 Google 服务,建议检查网络连接。


3. 验证失败并提示: “T.... verification failed. Contract has not been deployed on the network”

此错误说明您提交的合约地址在当前选择的网络(主网/测试网)上找不到部署记录,请检查:

  • 合约地址是否正确
  • Tronscan 页面右上角所选网络是否正确(主网, Nile测试网, Shasta测试网)

4. 验证失败并提示: “T.... verification failed. Please confirm the correct parameters and try again”

这是最常见的验证失败信息,通常是以下两种原因之一:

  • 原因一:验证参数与部署参数不一致
    请确保以下参数与部署合约时保持完全一致:

    • Solidity 编译器版本(注意区分 Tron 与 Ethereum 编译器)
    • License 类型
    • 是否启用优化
    • 优化次数Runs
  • 原因二:上传的源码与部署源码不一致

    • 上传的合约源码与实际部署时的代码不同(如改动、缺文件);
    • 忘记包含依赖合约;
    • 忘记扁平化;

    解决方法:

    • 确保上传的源码与部署时使用的完全一致;
    • 包含全部依赖;
    • 完成合约扁平化处理