Skip to content

Tenderly Environment Deployment for EIL

This guide walks you through deploying a Tenderly environment for EIL (Ethereum Interoperability Layer), including setting up Virtual TestNets, a flexible development infrastructure, and running the Docker-based development environment in Tenderly mode.

Prerequisites

  • Tenderly account
  • Docker installed and running
  • Node.js and Yarn package manager
  • Chain Abstraction SDK: Download v1.0.0

Step 1: Create a Tenderly account and set up Virtual TestNets

1.1 Create a Tenderly account

  1. Visit Tenderly Dashboard and create an account
  2. Create a new project for your EIL environment
  3. Navigate to the Virtual TestNets section

1.2 Create Virtual TestNets for four chains

Create four separate Virtual TestNets for each required blockchain:

  • Ethereum Mainnet (Chain ID: 1)
  • Optimism (Chain ID: 10)
  • Arbitrum One (Chain ID: 42161)
  • Base Mainnet (Chain ID: 8453)

For each Virtual TestNet:

  • Enable State sync to keep your network replicas in real-time sync with the parent networks

1.3 Collect RPC URLs

After creating each Virtual TestNet, collect the Admin RPC URLs:

  • Copy the Admin RPC URL for each network (you'll need these for environment configuration)
  • The URLs will look like: https://virtual.testnet.tenderly.co/[tenant]/[project]/[id]

Step 2: Install the Chain Abstraction SDK

Add the Chain Abstraction SDK and required dependencies:

# Install the SDK package from the hosted tarball
yarn add <https://ca-proj.netlify.app/chain-abstraction-v1.0.0-20251112.110201.tar.gz>

# Install required dependencies
yarn add viem permissionless tsx
yarn add -D typescript @types/node esbuild

Step 3: Configure the environment for Tenderly Mode

3.1 Set environment variables

Copy the sample environment file from the SDK:

cp node_modules/chain-abstraction/dockers.env.sample .env

Edit the .env file and configure:

# Required: Your Alchemy API key for upstream connections
ALCHEMY_API_KEY=your_alchemy_key_here

# Set Docker mode to use Tenderly
NODES_MODE=tenderly

# Configure Tenderly URLs for each chain
TENDERLY_ETH=https://virtual.testnet.tenderly.co/[tenant]/[project]/[ethereum-id]
TENDERLY_ARB=https://virtual.testnet.tenderly.co/[tenant]/[project]/[arbitrum-id]
TENDERLY_BASE=https://virtual.testnet.tenderly.co/[tenant]/[project]/[base-id]
TENDERLY_OP=https://virtual.testnet.tenderly.co/[tenant]/[project]/[optimism-id]

# Output folder for deployment configuration
DEPLOYMENT=${PWD}/deployment

# Network access configuration
HOSTNAME=localhost

# Optional: Enable debug logging
DEBUG=false

3.2 Understanding Tenderly Mode

When NODES_MODE=tenderly is set:

  • Local proxy nodes are created that connect to your Tenderly Virtual TestNets
  • Proxy nodes support transaction tracing (required for bundlers)
  • Local endpoints expose standard ports: 8500-8503 for the four chains
  • Applications can use either Tenderly URLs directly or local proxy URLs

Step 3: Launch the Docker environment

3.3 Verify the Docker setup

Ensure Docker is running and the environment is properly configured:

# Check if Docker is running
docker version

# Verify environment configuration (should show no errors)
yarn dockers-config

3.4 Start all services

Launch the complete EIL environment:

# Start all services and wait for complete initialization
yarn dockers-run

This command will:

  • Start proxy nodes connecting to your Tenderly Virtual TestNets
  • Deploy all necessary smart contracts
  • Start bundlers for each chain
  • Initialize mock liquidity providers
  • Wait for all components to be ready

3.5 Monitoring the environment

Alternative: Use yarn dockers-up to run with attached logs in the foreground:

# Start with logs attached (use Ctrl+C to stop)
yarn dockers-up

The setup is complete when you see the "wait-for-all" service exit successfully.

3.6 Access local proxy endpoints

Your Tenderly networks are now accessible via local proxy nodes:

  • Ethereum: http://localhost:8500
  • Arbitrum: http://localhost:8501
  • Base: http://localhost:8502
  • Optimism: http://localhost:8503

Bundler endpoints are also available:

  • Ethereum Bundler: http://localhost:3000/rpc
  • Arbitrum Bundler: http://localhost:3001/rpc
  • Base Bundler: http://localhost:3002/rpc
  • Optimism Bundler: http://localhost:3003/rpc

Step 4: Testing and validation

5.1 Verify network connectivity

Test connectivity to all chains:

# Check all nodes are responding
for port in 8500 8501 8502 8503; do
  echo "Testing port $port..."
  curl -X POST <http://localhost>:$port \\
    -H "Content-Type: application/json" \\
    -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
done

5.2 Monitor transaction activity

Use the Tenderly Dashboard to monitor:

  • Transaction execution across all chains
  • Gas usage optimization
  • Cross-chain message passing
  • Smart contract interactions

Configuration Reference

Required environment variables

Variable Description Example
NODES_MODE Set to tenderly for Tenderly mode tenderly
TENDERLY_ETH Ethereum Virtual TestNet RPC URL https://virtual.testnet.tenderly.co/...
TENDERLY_ARB Arbitrum Virtual TestNet RPC URL https://virtual.testnet.tenderly.co/...
TENDERLY_BASE Base Virtual TestNet RPC URL https://virtual.testnet.tenderly.co/...
TENDERLY_OP Optimism Virtual TestNet RPC URL https://virtual.testnet.tenderly.co/...
ALCHEMY_API_KEY Alchemy API key for upstream data ak_...

Network Port Mapping

Network Proxy Port Bundler Port Chain ID
Ethereum 8500 3000 73571
Arbitrum 8501 3001 73573
Base 8502 3002 73574
Optimism 8503 3003 73572