JuChain
en
中文
中文
  • 什么是 JuChain?
  • 基础信息
    • 网络信息
  • 智能合约
  • 开始使用 JuChain
  • 技术架构
  • Ecosystem
    • 链上生态
    • 跨链桥
    • 测试网水龙头
    • 去中心化交易所
    • 价格预言机
  • 共识机制
    • JPoSA共识机制概述
    • JPoSA质押机制
    • JPoSA惩罚机制
    • JPoSA验证者
  • 开发者指南
    • 入门指南
    • 教程与示例:构建并部署一个简单的 DApp
    • 教程与示例:构建一个简单的 DeFi 借贷 DApp
    • 技术参考
    • 合约源码验证实践
      • 在 JuScan 浏览器上通过图形化界面验证合约源码
      • 使用 Hardhat 框架完成 JuChain 上的合约验证流程
  • 社区与支持
    • 社区与支持
  • 品牌资源与规范
Powered by GitBook
On this page
  • 准备工作
  • 图形化验证步骤
  • 检查验证结果
  • 常见问题与排查 (Troubleshooting)
  1. 开发者指南
  2. 合约源码验证实践

在 JuScan 浏览器上通过图形化界面验证合约源码

Previous合约源码验证实践Next使用 Hardhat 框架完成 JuChain 上的合约验证流程

Last updated 4 days ago

本指南将详细介绍如何通过 JuScan 提供的图形用户界面 (GUI) 来完成合约验证。这为不熟悉命令行工具(如 Hardhat 或 Foundry)的用户提供了一种直观便捷的验证方式。验证后,用户可以直接在 JuScan 区块链浏览器上查看合约的源代码,了解其功能并与之安全交互。


准备工作

在开始验证之前,请确保您已准备好以下信息:

  1. 合约地址: 您已经成功部署到 JuChain 上的智能合约地址。

  2. 合约源代码: 完整的 Solidity (.sol) 或 Yul (.yul) 或 Vyper (.vy) 源代码文件。

  3. 编译器版本: 部署合约时使用的确切 Solidity / Yul / Vyper 编译器版本(例如 0.8.8)。

  4. EVM 版本 (如果非默认): 编译时指定的目标 EVM 版本。

  5. 优化设置: 部署时是否启用了编译优化,以及优化运行次数(runs,Solidity 默认通常是 200)。

  6. 构造函数参数 ABI 编码: 如果合约有构造函数,需要准备部署时传递给构造函数的参数经过 ABI 编码后的十六进制字符串 (以 0x 开头)。您可以从 Hardhat/Foundry 部署日志中查找,或使用 ethers.js/web3.js 等工具生成此编码值。

  7. 库地址 (如果合约链接了外部库): 所有使用的库的名称和部署地址。

  8. 许可证标识符 (SPDX License Identifier) (可选但推荐): 您合约源代码中指定的 SPDX 许可证标识符 (例如 MIT, GPL-3.0)。

  9. JSON 输入或元数据文件 (如果选择特定验证方式): 编译器生成的标准 JSON 输入文件或 metadata.json 文件。


图形化验证步骤

  1. 访问验证页面:

    • 推荐: 直接导航到您部署的合约地址页面。在合约详情页的 "Code" (代码) 选项卡下,查找并点击 "Verify & Publish" (验证并发布) 按钮或链接。

    • 或者,在 JuScan 浏览器的主菜单中寻找 "More" (更多) / "Tools" (工具) -> "Verify Contract" (验证合约) 的选项。

    • 或者,尝试直接访问验证 URL:https://juscan.io/contract-verification(对于测试网络请访问https://testnet.juscan.io/contract-verification) 。

  2. 输入合约地址 (Contract Address to Verify): 如果您不是从合约页面直接跳转过来的,需要在此处粘贴您要验证的合约地址。

  3. 选择合约许可证 (Contract License):

    • 从下拉菜单中选择与您合约源代码中 SPDX-License-Identifier (如果声明了) 相匹配的开源许可证。强烈建议指定许可证。

    • JuScan 支持多种常见许可证,包括 MIT, GPL 系列, Apache, Unlicense 等。

    • 如果代码不开源或未指定许可证,选择 "No License (None)"。

  4. 选择验证方式 (Verification method / Compiler type):

  • 此下拉菜单提供多种验证输入类型。请选择与您的项目和编译输出最匹配的方式:

    • Solidity (Single file / Flattened source code): 适用于单个 .sol 或 .yul 文件。如果您的合约包含 import 语句,您需要先将所有依赖的代码"扁平化"(flatten)到这一个文件中。这是最直接的方式,但对于复杂项目可能需要预处理。

    • Solidity (Standard JSON input): 推荐方式之一。您需要上传由 Solidity 编译器生成的标准 JSON 输入文件。该文件包含了所有源码、编译器设置等信息,验证成功率较高。

    • Solidity (Multi-part files): 适用于包含多个(至少两个) .sol 或 .yul 文件(例如,主合约、库、接口)并通过 import 相互引用的项目。您需要分别上传所有相关的源文件。

    • Solidity (Hardhat) / Solidity (Foundry): 允许直接使用 Hardhat 或 Foundry 项目的编译产物(如 build-info 文件)进行验证。请根据界面提示操作。

    • Vyper (Contract): 适用于单个 Vyper 合约文件。

    • Vyper (Multi-part files): 适用于包含多个 Vyper 文件的项目。

  1. 填写详细信息 (根据所选验证方式变化):

  • 根据您选择的验证方式,下方会显示不同的输入字段。

  • 通用字段:

    • Compiler Version: 选择与您部署时使用的完全相同的编译器版本 (例如 0.8.8)。避免选择 Nightly Builds。

    • EVM Version: 选择编译时指定的目标 EVM 版本。如果使用编译器默认值,通常选择 default 或对应编译器的默认 EVM。

    • Optimization Enabled: 如果编译时启用了优化,选择 "Yes" (是),并填写优化运行次数 Optimization Runs (例如 200)。如果未启用,选择 "No" (否)。

  • 对于 Solidity (Single file / Flattened):

    • Is Yul contract?: 如果您上传的是 Yul (.yul) 代码,勾选此项。

    • Enter the Solidity Contract Code: 将您的完整、扁平化后的 Solidity 或 Yul 源代码粘贴到此文本框中。

    • Constructor Arguments: 如果合约有构造函数,在此处粘贴 ABI 编码后的参数字符串 (以 0x 开头)。

    • Contract Libraries: 如果合约链接了外部库,点击 "Add Contract Library",并分别填入库的名称和已部署的地址。

  • 对于 Solidity (Standard JSON input):

    • 上传包含标准 JSON 输入的 .json 文件。

  • 对于 Solidity (Multi-part files):

    • 逐个上传所有的 .sol 或 .yul 源文件,包括主合约和所有依赖文件。

  1. 提交验证: 仔细核对所有信息后,点击 "Verify and Publish" (验证并发布) 或类似名称的按钮提交验证请求。


检查验证结果

  • 成功: 如果所有信息都正确且与链上字节码匹配,页面会显示成功消息。在合约地址的详情页面,"Code" (代码) 选项卡旁边将出现一个绿色的勾号 ✅ 标记,表明合约已成功验证。同时会增加 "Read Contract" (读取合约) 和 "Write Contract" (写入合约) 选项卡,允许用户交互。

  • 失败: 如果验证失败,会显示错误信息,例如 "There was an error compiling your contract", "Bytecode does not match", "Compiler version mismatch" 等。请仔细阅读错误提示,它将指明问题所在。


常见问题与排查 (Troubleshooting)

验证失败时,请按以下步骤检查最常见的问题:

  1. 编译器版本不匹配: 确保选择的编译器版本 (包括修订号 x.y.z) 与部署时使用的完全一致。

  2. 优化设置不匹配: 确保优化启用状态 (Yes/No) 和优化运行次数 (runs) 与部署时完全一致。这是最常见的错误。

  3. EVM 版本不匹配: 如果编译时指定了非默认的 EVM 版本,确保在此处也正确选择。

  4. 源代码不匹配:

    • 检查提交的源代码(无论是单个文件、多个文件还是 JSON 输入中的代码)是否与部署时的版本逐字逐句完全一致,包括空格、注释等。

    • 对于 Single file/Flattened 模式,确保所有 import 都已正确内联。

    • 源代码中的 SPDX-License-Identifier 应与您在表单中选择的许可证类型匹配。

  5. 构造函数参数错误: 确保提供的 ABI 编码参数字符串 (以 0x 开头) 与部署交易中使用的完全一致。编码方式、参数顺序、参数值都必须正确。

  6. 库地址错误: 如果使用了外部库,确保填写的库名称和已部署地址准确无误。

  7. 选择了错误的验证方式: 例如,对多文件合约使用了 Single file 方式而未扁平化。

  8. Yul 合约标识: 如果验证的是 Yul 合约,检查是否已正确标记。

  9. 网络或浏览器问题: 尝试刷新页面、清除浏览器缓存或使用不同的浏览器重试。

在此模块输入合约地址并选择许可证,然后选择验证方式
填写详细信息模块