Skip to main content
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: browser-only verification from the Tenderly Dashboard.
  • Foundry: forge verify-contract and deploy-and-verify with forge create / forge script.
  • Hardhat: the @tenderly/hardhat-tenderly plugin, automatic or manual.
  • Hardhat (proxy contracts): UUPS, Transparent, and Beacon proxies.
To verify contracts on a Virtual Environment, see Deploy and verify contracts and Verify proxy contracts with Foundry 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.
Who can see the verified sourcePublic 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.
  • Foundry: append /public to the verifier URL to verify publicly, omit it to verify privately. See Foundry verifier URL.
  • Dashboard: toggle Make Private in the verification dialog. See Dashboard verification.