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

# Smart Contract Verification

> Verify a smart contract on Tenderly to decode its transactions, events, and state changes, and debug execution against the original Solidity source.

Contract verification submits the source code of a deployed contract so Tenderly can match it against the on-chain bytecode. Once verified, Tenderly can decode that contract's transactions, events, and state changes in:

* **Decoded transactions**: call traces, events, state changes, and gas usage become human-readable.
* **Debugger**: step through execution against the original Solidity, set priorities, and comment on traces.
* **Gas profiler**: line-level gas attribution against the source.
* **Sharing**: share verified contracts with collaborators and auditors.

Without verification you'll see raw bytecode in every Tenderly tool that touches that contract.

## Pick a method

For verification on **public networks** (mainnets and testnets), pick the guide that matches your tooling:

* [Dashboard](/contract-verification/dashboard): browser-only verification from the Tenderly Dashboard.
* [Foundry](/contract-verification/foundry): `forge verify-contract` and deploy-and-verify with `forge create` / `forge script`.
* [Hardhat](/contract-verification/hardhat): the `@tenderly/hardhat-tenderly` plugin, automatic or manual.
* [Hardhat (proxy contracts)](/contract-verification/hardhat-proxy): UUPS, Transparent, and Beacon proxies.

To verify contracts on a **Virtual Environment**, see [Deploy and verify contracts](/virtual-environments/develop/deploy-contracts) and [Verify proxy contracts with Foundry](/virtual-environments/develop/verify-proxy-contracts) under Virtual Environments.

## Public vs private visibility

On **public networks** you choose between two visibility modes:

* **Public verification.** Source is visible to everyone on Tenderly and propagated to public verification registries.
* **Private verification.** Source is visible only inside your Tenderly project and organization.

On **Virtual Environments** verifications are always scoped to your project and organization. There is no public mode; see [Deploy and verify contracts](/virtual-environments/develop/deploy-contracts).

| Who can see the verified source | Public verification (public network) | Private verification (public network) | Virtual Environment |
| ------------------------------- | :----------------------------------: | :-----------------------------------: | :-----------------: |
| All Tenderly users              |                   ✓                  |                                       |                     |
| Project collaborators           |                   ✓                  |                   ✓                   |          ✓          |
| Organization members            |                   ✓                  |                   ✓                   |          ✓          |

How to switch to private mode depends on the method:

* **Hardhat**: set `tenderly.privateVerification: true` in `hardhat.config.ts`. See [Hardhat setup](/contract-verification/hardhat#configure-authentication-and-verification-visibility).
* **Foundry**: append `/public` to the verifier URL to verify publicly, omit it to verify privately. See [Foundry verifier URL](/contract-verification/foundry#verifier-url).
* **Dashboard**: toggle **Make Private** in the verification dialog. See [Dashboard verification](/contract-verification/dashboard#public-and-private-verification).
