forge verify-contract

名称

forge-verify-contract - 在选定的验证 provider 上验证智能合约。

简介

forge verify-contract [options] address contract

描述

在选定的验证 provider 上验证智能合约。

你必须提供:

  • 合约地址
  • 合约名称或合约的路径(请阅读下文) 如果是 Etherscan 验证,你还必须提供:
  • 你的 Etherscan API 密钥,可以将其作为一个参数传递,或者设置 ETHERSCAN_API_KEY

要找到准确的编译器版本,运行 ~/.svm/x.y.z/solc-x.y.z --version 并搜索版本字符串此处 中的 8 位十六进制数字。

合约的路径格式为 <path>:<contract>,例如 src/Contract.sol:Contract

默认情况下,智能合约是以多文件的方式进行验证的。如果你想在验证前将合约扁平化,请传递 --flatten

如果 --flatten 被传递 ,该命令将在验证前尝试编译扁平化的合约源代码。如果你不希望这样,请传递--force

你可以用 --constructor-args 来指定 ABI-编码 构造函数参数。或者,你可以用--constructor-args-path指定一个包含 空格分隔的 构造函数参数的文件。 (注意,cache 必须在配置中启用,后者才能发挥作用)。

选项

验证合约选项

--verifier name
    验证提供者。可用选项。etherscan, sourcifyblockscout。默认:etherscan。注意:确保在 Blockscout 主页资源管理器 URL 的末尾添加 "/api?"。

--verifier-url url
    用于提交验证请求的可选验证网址。     环境变量:VERIFIER_URL

--skip-is-verified-check     即使合约已经被验证,也发送验证请求。

--compiler-version version
    用来构建智能合约的编译器版本。

    要找到准确的编译器版本,运行 ~/.svm/x.y.z/solc-x.y.z --version,其中 xy 分别是主要和次要版本号,然后在 此处 搜索版本字符串中的 8 位十六进制数字 。

--num-of-optimizations num
--optimizer-runs num
    用于建立智能合约的优化运行的数量。

--constructor-args args
    ABI 编码的构造函数参数。与 --constructor-args-path 冲突。

--constructor-args-path file
    包含构造函数参数的文件的路径。与 --constructor-args 冲突。

--chain-id chain
--chain chain
    合约部署到的链的ID或名称。     默认:mainnet

--flatten
    表示是否在验证前对源代码进行扁平化的标志。

    如果没有提供这个标志,将使用 JSON 标准输入代替。

-f
--force
    在验证之前不要编译扁平化的智能合约。

--delay delay
    可选的超时,在两次尝试之间,以秒为单位。默认为 3。

--retries retries
    重试的尝试次数。默认为 15。

--show-standard-json-input
    该命令输出适合保存到文件并上传到区块浏览器进行验证的 JSON 格式数据。

--watch
    提交后等待验证结果。     自动运行 forge verify-check,直到验证失败或成功。

--via-ir     将 viaIR 设置为 true。     如果在部署时使用了 --via-ir 进行编译,请在此处也传递,以防止字节码不匹配。

Project Options

--build-info
    生成构建信息文件。

--build-info-path path
    输出目录的路径,构建信息文件将被写入。

--root path
    项目的根路径。默认情况下,这是当前 git 仓库的根目录,或当前工作目录。

-C path
--contracts path
    合约源代码目录。     环境变量:DAPP_SRC

--lib-paths path
    库的文件夹路径。

-R remappings
--remappings remappings
    项目的重映射。

    该参数是一个逗号分隔的重映射列表,格式为 <source>=<dest>

--cache-path path
    编译器缓存的路径。

--config-path file
    配置文件的路径。

--hh
--hardhat
    这是一个方便的标志,与传递 --contracts contracts --lib-paths node-modules 相同。

普通选项

-h
--help
    打印帮助信息。

例子

  1. 在 Etherscan 上用 JSON 标准输入验证一个合约

    forge verify-contract <address> SomeContract --watch
    
    
  2. 验证一个自定义 Sourcify 实例的合约

    forge verify-contract --verifier sourcify \
      --verifier-url http://localhost:5000 <address> SomeContract
    
  3. 验证一个用 solc v0.8.11+commit.d7f03943 构建的扁平化合约:

    forge verify-contract --flatten --watch --compiler-version "v0.8.11+commit.d7f03943" \
      --constructor-args $(cast abi-encode "constructor(string,string,uint256,uint256)" "ForgeUSD" "FUSD" 18 1000000000000000000000) \
      <address> MyToken
    
  4. 通过在文件中指定构造器参数来验证一个扁平化的合约:

    forge verify-contract --flatten --watch --compiler-version "v0.8.11+commit.d7f03943" \
      --constructor-args-path constructor-args.txt <address> src/Token.sol:MyToken
    

    其中 constructor-args.txt 包含以下内容:

    ForgeUSD FUSD 18 1000000000000000000000
    
  5. 部署后立即使用 Blockscout 验证合约(确保在 Blockscout 浏览器 URL 末尾添加 "/api?"):

    forge create --rpc-url <rpc_https_endpoint> --private-key $devTestnetPrivateKey src/Contract.sol:SimpleStorage --verify --verifier blockscout --verifier-url <blockscout_homepage_explorer_url>/api? 
    
  6. 使用 Oklink 验证合约

    forge verify-contract 0x8CDDE82cFB4555D6ca21B5b28F97630265DA94c4 Counter --verifier oklink --verifier-url https://www.oklink.com/api/v5/explorer/contract/verify-source-code-plugin/XLAYER  --api-key $OKLINK_API_KEY
    
  7. 在部署时使用 Oklink 验证合约

    forge create Counter --rpc-url <rpc_https_endpoint> --verify --verifier oklink --verifier-url https://www.oklink.com/api/v5/explorer/contract/verify-source-code-plugin/XLAYER --etherscan-api-key $OKLINK_API_KEY --private-key $PRIVATE_KEY --legacy
    

另请参阅

forge, forge create, forge flatten, forge verify-check