← Protocols
Tenderly
01Description

Full-stack EVM dev platform: transaction simulation, debugger, gas profiler, virtual TestNets, contract verification, alerting, and Web3 Actions (serverless functions triggered by on-chain events).

02Best for
  • 01transaction simulation before signing
  • 02debugging failed/reverted txs with stack traces
  • 03production monitoring and alerting
  • 04Web3 Actions (serverless on-chain hooks)
  • 05virtual TestNets for staging
03Install
  • pnpm add @tenderly/sdk
  • pnpm add -D @tenderly/hardhat-tenderly
  • brew tap tenderly/tenderly && brew install tenderly
04Environment variables
VariableScopeDescription
TENDERLY_ACCESS_KEYServerTenderly API access key from Account Settings → Authorization.
TENDERLY_ACCOUNT_NAMEServerTenderly account (username/org) slug.
TENDERLY_PROJECT_NAMEServerTenderly project slug under the account.
05Prompt snippet
Use Tenderly for simulation and monitoring. Server-side, instantiate `new Tenderly({ accessKey: process.env.TENDERLY_ACCESS_KEY, accountName: process.env.TENDERLY_ACCOUNT_NAME, projectName: process.env.TENDERLY_PROJECT_NAME, network: Network.MAINNET })` and call `tenderly.simulator.simulateTransaction({ from, to, input, value })` BEFORE asking the user to sign — surface the decoded revert reason and gas estimate in the UI. For ongoing ops, create a Web3 Action via the `tenderly` CLI (`tenderly actions init` then `tenderly actions deploy`) that listens to contract events and calls your webhook. Enable Virtual TestNets for staging environments rather than relying on public testnets.
06Gotchas
  • Simulation gas is an estimate — real-world gas can differ when state changes between simulation and submission (e.g. another tx flips a storage slot). Always add a buffer (~20%) when forwarding the estimate.
  • Web3 Actions execute in a sandboxed Node runtime with limited modules and a hard execution-time/memory cap; long-running work must be offloaded to your own backend via webhook.
  • Free tier has aggressive simulation rate limits — production apps simulating every user action will hit them quickly; cache decoded results by `(chainId, from, to, input)` hash.
  • `@tenderly/hardhat-tenderly` v2+ requires `automaticVerifications: true` to verify on Tenderly automatically; otherwise you must call `await tenderly.verify(...)` explicitly per contract.
  • Virtual TestNets are forked from a real chain at a block — they drift from mainnet over time and don't receive new mainnet txs unless you re-fork.
  • Account name and project name are SLUGS (lowercase, hyphenated), not display names — copy them from the dashboard URL, not the page header.
07Alternatives