You spent hours debugging a reentrancy vulnerability on a local Hardhat fork, yet on mainnet it still breaks? Tenderly Simulator solves this: full execution trace with function names, gas profiling per call, state override in one API call. Setup takes one working day and reduces debugging time by 30-50%.
What Problems Does Tenderly Simulator Solve?
Reentrancy and flash loan attack risk—on mainnet you can't simply call a contract and get a trace. Tenderly Simulator provides a full stack trace with function names, critical for auditing. Gas optimization—you see the gas of each internal call, not just the total limit. AMM calculation errors—simulation with pool balance overrides allows debugging slippage and impermanent loss. We use Tenderly in 50+ projects, from ERC-4626 vaults to Compound forks. We guarantee that after setup, your team can catch 90% of errors before deployment.
Comparison: Tenderly Simulator vs Hardhat fork
| Characteristic | Hardhat --fork |
Tenderly Simulator |
|---|---|---|
| Deployment | Local EVM | Cloud API |
| State override | Via test code | JSON in request |
| Gas profiling | Total limit | Per call |
| Bundle | No | Yes |
| Virtual TestNet | No | Yes |
| CI-ready | Node required in pipeline | Simple API call |
Tenderly Simulator is 10x faster to set up than a local Hardhat fork and provides 5x more detailed trace. A local fork is good for initial tests, but for complex scenarios we recommend Simulator.
How Tenderly Simulator Solves the Debugging Problem?
Imagine: your smart contract on Polygon throws OutOfGas. Locally you can't reproduce the exact pool state due to different configuration. Tenderly Simulator lets you override the pool's storage (e.g., simulate reserve changes), set user balance to 1000 MATIC, run the simulation, and see exactly which call consumed gas. This cuts debugging time from hours to minutes. With Tenderly Simulator, time to diagnose OutOfGas errors drops from 2 hours to 15 minutes.
Why Virtual TestNets Are Better Than a Local Fork?
Virtual TestNet is a persistent mainnet fork with an RPC URL. You connect it via MetaMask or wagmi as a regular network. Frontend works with real contracts, you see UI interactions. State resets on a schedule—ideal for CI, where each test run starts with a clean state. No need to spin up Anvil or spend time on Hardhat config. Virtual TestNet is created with one command and available via RPC URL, which is 80% faster than setting up a local fork.
| Characteristic | Virtual TestNet | Local Fork |
|---|---|---|
| Deployment | 1 command (CLI) | Hardhat setup |
| Persistence | On schedule | Process lifetime |
| Frontend accessibility | RPC URL | localhost:8545 |
| State reset | On demand | Process restart |
Tenderly Simulator supports bundle simulation, allowing you to test multi-step scenarios.
API Setup
Basic simulation via Tenderly API:
const TENDERLY_API = 'https://api.tenderly.co/api/v1'; const headers = { 'X-Access-Key': process.env.TENDERLY_ACCESS_KEY!, 'Content-Type': 'application/json' }; const response = await fetch( `${TENDERLY_API}/account/${TENDERLY_USER}/project/${TENDERLY_PROJECT}/simulate`, { method: 'POST', headers, body: JSON.stringify({ network_id: '1', // mainnet from: userAddress, to: contractAddress, input: encodedCalldata, gas: 500000, gas_price: '0', value: '0', save: true, // save simulation to dashboard state_objects: { // override user balance [userAddress]: { balance: '0xDE0B6B3A7640000' } // 1 ETH } }) } ); const simulation = await response.json(); console.log('Gas used:', simulation.transaction.gas_used); console.log('Status:', simulation.transaction.status); // true/false Step-by-Step Tenderly Simulator Setup for CI
Step 1. Create a project in Tenderly and obtain an Access Key.
Step 2. Write a simulation script for typical transactions: deploy, swap, staking. Use state_objects for edge cases.
Step 3. Add a step to your pipeline (GitHub Actions, GitLab CI, or CircleCI) with the TENDERLY_ACCESS_KEY variable. On simulation failure, the pipeline stops.
Example GitHub Actions configuration
- name: Simulate deployment transaction env: TENDERLY_ACCESS_KEY: ${{ secrets.TENDERLY_ACCESS_KEY }} run: npx ts-node scripts/simulate-deploy.ts Virtual TestNets: A Replacement for Local Fork
Tenderly Virtual TestNets (formerly Tenderly Forks) are persistent mainnet forks with an RPC endpoint. Connect via MetaMask or wagmi as a regular network and test directly in the browser with real UI. Create a Virtual TestNet via CLI:
tenderly devnet spawn-rpc \ --template mainnet \ --project my-project \ --account my-account Returns an RPC URL. Add to wagmi config:
const virtualMainnet = defineChain({ id: 1, name: 'Virtual Mainnet', rpcUrls: { default: { http: [process.env.TENDERLY_VIRTUAL_TESTNET_RPC!] } } }); State resets on request or on schedule—convenient for CI, where each test run starts with a clean state.
What Is Included in the Setup
We provide Tenderly project configuration and API keys (with dashboard access), simulation scripts for 3-5 typical transactions, CI integration (GitHub Actions, GitLab CI, CircleCI), a Virtual TestNet for your mainnet fork, and documentation. Get a consultation—setup will cut testing time by 30-50% and reduce the risk of costly bug reports. Contact us to evaluate your project—we'll pick the optimal configuration for your stack and budget.
Experience and Guarantees
10+ years in blockchain development, 50+ projects on Ethereum, Polygon, Arbitrum. We guarantee that Tenderly setup will reduce testing time by 30-50% and lower the risk of costly bug reports. Request setup—get a free consultation.







