> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# 常见问题：合约验证

> 使用 Hardhat 或 Foundry 在公共网络上私有验证合约，撤销公开验证，并验证代理合约及 hardhat-ignition 部署。

<div className="flex flex-col gap-4 mt-8">
  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="i-verified-my-contract-publicly-but-want-it-to-be" className="text-xl font-semibold">我公开验证了合约，但希望它变为私有。可以移除该合约的公开验证吗？</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        要将您的合约恢复为私有并仅在您的项目内可见，请[联系我们的支持团队](https://tenderly.co/contact-us)或发送邮件至 [support@tenderly.co](mailto:support@tenderly.co)。请务必提供您的用户名、项目和合约地址。我们的团队将删除该指定合约的公开验证。
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-do-i-privately-verify-contracts-from-public-ne" className="text-xl font-semibold">如何在 Tenderly 中私有验证来自公共网络（Mainnet、Holesky 等）的合约？</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        私有验证意味着合约将仅对拥有您项目访问权限的 Tenderly 用户可见。

        * 使用 Hardhat 进行验证时，必须[在 `hardhat.config.ts` 中设置 `config.tenderly.private` 标志](/contract-verification/hardhat#configure)。除非指定此标志，否则合约将被公开验证。
        * 使用 Foundry 进行验证时，[Verifier URL](/contract-verification/foundry#verifier-url) 应以 **`/public`** 结尾：
          ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
          ## private verification URL
          https://api.tenderly.co/api/v1/account/me/project/project/etherscan/verify/network/8253

          ## public verification URL
          https://api.tenderly.co/api/v1/account/me/project/project/etherscan/verify/network/8253/public
          ```
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="if-i-publicly-verify-a-contract-on-tenderly-will-i" className="text-xl font-semibold">如果我在 Tenderly 上公开验证了合约，将其从合约列表中删除后是否仍会可见？</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        是的，公开验证的合约在您将其从合约列表中删除后仍然可见。为
        确保您的合约仅在您的项目内可见，您可以改用私有验证。了解更多关于
        [不同验证类型和验证流程](/contract-verification/overview)的信息。
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-can-i-verify-contracts-with-hardhat-ignition" className="text-xl font-semibold">如何使用 hardhat-ignition 验证合约？</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        使用 `hardhat ignition deploy` 进行部署，并确保在运行命令时添加带有特定值的 **`--deployment-id`**。

        ```bash lines={4} theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        TENDERLY_AUTOMATIC_VERIFICATION=true \
        npx hardhat ignition deploy ./ignition/modules/Lock.ts \
            --network virtual_base \
            --deployment-id deploy-to-virtual-base
        ```
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-do-i-verify-contracts-automatically-with-harhd" className="text-xl font-semibold">如何通过 hardhat-tenderly 插件自动验证合约？</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        * **对于版本 `>= 2.4.0 和 >=1.10.0`**，插件识别环境变量 **`TENDERLY_AUTOMATIC_VERIFICATION`**。使用它可开启或关闭自动验证。
          示例：

          ```bash filename="bash.sh" theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
          TENDERLY_AUTOMATIC_VERIFICATION=true npx hardhat deploy
          ```

          * **对于版本 `< 2.4.0 和 < 1.10.0`**，您必须以如下方式在 `hardhat.config.ts` 中调用 `tenderly.setup` 来控制自动验证。

            ```js filename="hardhat.config.js" theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
            tenderly.setup({ automaticVerifications: !!process.env.TENDERLY_AUTOMATIC_VERIFICATION })
            ```
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="do-i-need-to-call-tenderly-setup-in-hardhat-config" className="text-xl font-semibold">我需要在 hardhat.config.ts 中调用 tenderly.setup() 吗？</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        从 2.4.0 和 1.10.0 起，您无需调用 `tenderly.setup` 方法。
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-should-i-name-networks-in-hardhat-config-ts" className="text-xl font-semibold">在 hardhat.config.ts 中应如何命名网络？</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        * 公共网络可以使用任意名称。

          对于 Virtual Environments，取决于 `@tenderly/hardhat-tenderly` 的版本：

          * 在**版本 `< 2.4.0` 和 `< 1.10.0`** 中，网络名称**必须为 `tenderly`**。
          * 在**版本 `>= 2.4.0` 和 `>= 1.10.0`** 中，网络名称可以任意指定。
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-do-i-verify-proxy-contracts-in-hardhat" className="text-xl font-semibold">如何在 Hardhat 中验证代理合约？</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        * 在**版本 `>= 2.1.0` 和 `>= 1.10.0`** 中，代理合约的自动验证开箱即用。

          * 对于**版本 `< 2.4.0` 和 `< 1.10.0`**，请遵循[自动代理验证变通方法](/contract-verification/hardhat-proxy)。
          * 若要避免使用该变通方法：

          ```bash filename="upgrade.sh" theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
          npm update @tenderly/hardhat-tenderly
          ```
      </div>
    </div>
  </Card>
</div>
