> ## 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.

# Verify Contracts via Dashboard

> Learn how to verify smart contracts publicly and privately in the browser through the Tenderly Dashboard.

<Info>
  **Works on:** public networks (mainnets and testnets). To verify a contract on a Virtual Environment, see [Deploy and verify contracts](/virtual-environments/develop/deploy-contracts).
</Info>

Verify smart contracts from your browser in the Tenderly Dashboard. This is the fastest path when you're not using Hardhat or Foundry; if you are, the [Hardhat](/contract-verification/hardhat) or [Foundry](/contract-verification/foundry) workflows automate this.

## Prerequisites

To verify a contract, you need to provide:

* **The source code**
* **The exact compiler settings** used to compile the deployed version

You can upload the source code in several ways through the Dashboard:

* **JSON Upload**: paste the JSON metadata generated by the Solidity compiler.
* **ABI Upload**: paste the contract ABI.
* **Contract Source Upload**: paste source code directly, upload a single source file, or upload an entire project directory. The directory option works best for contracts that import other contracts.

## Public and private verification

When verifying a contract, you choose between two visibility modes:

* **Public**: the contract source is visible to anyone using Tenderly.
* **Private**: the contract source is only visible inside the project you verified it in.

The **Verification** column on the Contracts list shows a contract's current status: `Unverified`, `Public`, or `Private`.

## Dashboard contract verification guide

After you've [added an unverified contract](/developer-explorer/contracts) to a Tenderly project, here are the steps to verify it using the Dashboard.

<Steps>
  <Step title="Find the unverified contract">
    Open the contract's page. An unverified contract shows a banner with a **Verify Contract** button.

    <img src="https://mintcdn.com/tenderly/czz1ot21Icudd1fI/images/contract-verification/verify-button-context.webp?fit=max&auto=format&n=czz1ot21Icudd1fI&q=85&s=8f6c1629a074f02bfaf582b59c45b36d" alt="Unverified contract banner with Verify Contract button" width="1600" height="1000" data-path="images/contract-verification/verify-button-context.webp" />
  </Step>

  <Step title="Choose visibility">
    Select **Public** or **Private**. Private is selected by default, and scopes the verified source to the current project.

    <img src="https://mintcdn.com/tenderly/czz1ot21Icudd1fI/images/contract-verification/select-contract-visibility.webp?fit=max&auto=format&n=czz1ot21Icudd1fI&q=85&s=0e7e1f2c8ddc35679eaac7c0b8209970" alt="Verify Contract visibility step" width="1600" height="1000" data-path="images/contract-verification/select-contract-visibility.webp" />
  </Step>

  <Step title="Choose the upload method">
    Pick one of:

    * **JSON Upload**
    * **ABI Upload**
    * **Contract Source Upload**, which opens a submenu: **Paste Source Code**, **Upload Source File**, or **Upload Project Directory**.

          <img src="https://mintcdn.com/tenderly/czz1ot21Icudd1fI/images/contract-verification/upload-method-choice.webp?fit=max&auto=format&n=czz1ot21Icudd1fI&q=85&s=cddea7854489e70120d5f6d0a28cc227" alt="Verify Contract source code upload method choice" width="1600" height="1000" data-path="images/contract-verification/upload-method-choice.webp" />

          <img src="https://mintcdn.com/tenderly/czz1ot21Icudd1fI/images/contract-verification/upload-method-submenu.webp?fit=max&auto=format&n=czz1ot21Icudd1fI&q=85&s=e9d3992a70f06f27812c8736571d3642" alt="Contract Source Upload submenu" width="1600" height="1000" data-path="images/contract-verification/upload-method-submenu.webp" />

    If you paste source directly, give the file a name and paste the contract source into the editor.

    <img src="https://mintcdn.com/tenderly/czz1ot21Icudd1fI/images/contract-verification/paste-source-code-screen.webp?fit=max&auto=format&n=czz1ot21Icudd1fI&q=85&s=51d862e62ff1e9e18939de0abb0b14fb" alt="Paste source code screen" width="1600" height="1000" data-path="images/contract-verification/paste-source-code-screen.webp" />
  </Step>

  <Step title="Select the contract">
    If the upload contains several contracts, pick the one matching the address shown in the previous step. If any imports are missing, the Dashboard prompts you to add them before continuing.

    <img src="https://mintcdn.com/tenderly/czz1ot21Icudd1fI/images/contract-verification/select-deployed-contract.webp?fit=max&auto=format&n=czz1ot21Icudd1fI&q=85&s=f266dea68b47ac5eba1b5fb58106cc7d" alt="Choose a Deployed Contract step" width="1600" height="1000" data-path="images/contract-verification/select-deployed-contract.webp" />
  </Step>

  <Step title="Set the compiler settings">
    Fill in the compiler version, optimizer settings (enabled / runs), EVM version, ViaIR, and library address pairs if your contract uses linked libraries. Any mismatch with the deployed bytecode will fail verification.

    <img src="https://mintcdn.com/tenderly/czz1ot21Icudd1fI/images/contract-verification/compiler-settings.webp?fit=max&auto=format&n=czz1ot21Icudd1fI&q=85&s=f6df5a3fa35ca4f847f3f55d161cdc2e" alt="Compiler Settings step filled in" width="1600" height="1000" data-path="images/contract-verification/compiler-settings.webp" />
  </Step>

  <Step title="Finish">
    Click **Finish** to submit. The contract's verification status and info panel update immediately.

    <img src="https://mintcdn.com/tenderly/czz1ot21Icudd1fI/images/contract-verification/verification-success.webp?fit=max&auto=format&n=czz1ot21Icudd1fI&q=85&s=d0da61422e154ee4e0e56ba6940a502d" alt="Contract page after successful private verification" width="1600" height="1000" data-path="images/contract-verification/verification-success.webp" />
  </Step>
</Steps>

## How to verify smart contracts in bulk

If you have several unverified contracts in your project, click **Verify All Contracts** on the Contracts list. This opens the **Verify multiple contracts** dialog, listing every unverified contract with a **Make Private** toggle and an **Add source** button per row.

<img src="https://mintcdn.com/tenderly/czz1ot21Icudd1fI/images/contract-verification/verify-all-contracts-modal.webp?fit=max&auto=format&n=czz1ot21Icudd1fI&q=85&s=3d07f614f3bfaee666330e669661f276" alt="Verify multiple contracts dialog" width="800" height="270" data-path="images/contract-verification/verify-all-contracts-modal.webp" />

Click **Add source** next to each contract and supply the upload, compiler settings, and visibility as in the [single-contract flow](#dashboard-contract-verification-guide) above. The bottom **Verify** button stays disabled until every row has a source, then submits all of them at once.
