Skip to main content

Deploy Command

Deploy a complete EVVM instance to any supported blockchain network with interactive configuration.

Command​

./evvm deploy [options]

Description​

The deploy command is an interactive wizard that guides you through the entire EVVM deployment process. It supports both single-chain and cross-chain deployments, handling configuration collection, input validation, contract deployment, block explorer verification, and optional registry registration.

Options​

--skipInputConfig, -s​

Skip the interactive configuration wizard and use the existing configuration file.

  • Type: boolean
  • Default: false
  • Usage: ./evvm deploy --skipInputConfig

When enabled, the CLI reads configuration from:

  • Single-chain: ./input/BaseInputs.sol
  • Cross-chain: ./input/BaseInputs.sol + ./input/CrossChainInputs.sol

Useful for:

  • Re-deploying with the same configuration
  • Automated deployments
  • Testing and development workflows
warning

Ensure configuration files exist and contain valid data before using this flag.

--walletName <name>, -n <name>​

Specify which Foundry wallet to use for single-chain deployment transactions.

  • Type: string
  • Default: defaultKey
  • Usage: ./evvm deploy --walletName myWallet

The wallet must be previously imported into Foundry's keystore:

cast wallet import myWallet --interactive

--walletNameHost <name>​

Specify which Foundry wallet to use for host chain deployment (cross-chain only).

  • Type: string
  • Default: defaultKey
  • Usage: ./evvm deploy --crossChain --walletNameHost hostWallet

Requires sufficient gas tokens on the host chain.

--walletNameExternal <name>​

Specify which Foundry wallet to use for external chain deployment (cross-chain only).

  • Type: string
  • Default: defaultKey
  • Usage: ./evvm deploy --crossChain --walletNameExternal externalWallet

Requires sufficient gas tokens on the external chain.

--crossChain, -c​

Deploy a cross-chain EVVM instance with treasury support on two different blockchains.

  • Type: boolean
  • Default: false
  • Usage: ./evvm deploy --crossChain

When enabled:

  • Deploys EVVM contracts on the host chain
  • Deploys Treasury External Station on the external chain
  • Configures cross-chain communication between treasuries
info

Cross-chain deployments require additional configuration for both host and external chains.

Required Environment Variables​

Single-Chain Deployment​

# RPC URL for the blockchain where you want to deploy EVVM
RPC_URL="https://sepolia-rollup.arbitrum.io/rpc"

# Optional: Etherscan API key for contract verification
ETHERSCAN_API="your_etherscan_api_key"

Cross-Chain Deployment​

# Host chain RPC (where EVVM core contracts will be deployed)
HOST_RPC_URL="https://sepolia-rollup.arbitrum.io/rpc"

# External chain RPC (where Treasury External Station will be deployed)
EXTERNAL_RPC_URL="https://sepolia.base.org"

# Optional: Ethereum Sepolia RPC for registry operations
EVVM_REGISTRATION_RPC_URL="https://gateway.tenderly.co/public/sepolia"

# Optional: Etherscan API key for contract verification
ETHERSCAN_API="your_etherscan_api_key"

If RPC URLs are not found in .env, the CLI will prompt you to enter them.

Deployment Types​

Single-Chain Deployment​

Standard EVVM deployment on a single blockchain.

./evvm deploy

Deployed Contracts:

  • Core (Core virtual machine)
  • NameService (Domain system)
  • Staking (Staking and rewards)
  • Estimator (Reward calculation)
  • Treasury (Asset management)
  • P2PSwap (Token exchange)

Cross-Chain Deployment​

EVVM deployment with cross-chain treasury support.

./evvm deploy --crossChain

Deployed Contracts:

Host Chain:

  • Core (Core virtual machine)
  • NameService (Domain system)
  • Staking (Staking and rewards)
  • Estimator (Reward calculation)
  • Treasury Host Station (Host-side treasury)
  • P2PSwap (Token exchange)

External Chain:

  • Treasury External Station (External-side treasury)
tip

After cross-chain deployment, you'll need to run ./evvm setUpCrossChainTreasuries to connect both treasury stations.

Deployment Flow​

1. Prerequisites Validation​

The CLI validates that all required tools are installed and configured:

  • ✅ Foundry installation check
  • ✅ Wallet availability verification
  • ✅ RPC connectivity test

2. Configuration Collection​

Administrator Addresses​

Three administrative addresses are required:

Admin

  • Full contract administrator privileges
  • Can modify system parameters
  • Controls contract upgrades

Golden Fisher

  • Sudo account with privileged staking operations
  • Bypasses normal staking constraints
  • Used for emergency operations

Activator

  • Manages epoch activation in the Estimator contract
  • Controls reward distribution timing
  • Essential for staking rewards system
Enter the admin address: 0x...
Enter the goldenFisher address: 0x...
Enter the activator address: 0x...

Token Configuration​

Configure your EVVM's native token:

EVVM Name [EVVM]:
Principal Token Name [Mate Token]:
Principal Token Symbol [MATE]:

Values in brackets [value] are defaults. Press Enter to accept or type a new value.

Advanced Metadata (Optional)​

Configure token economics and reward parameters:

Configure advanced metadata (totalSupply, eraTokens, reward)? (y/n):

If you choose y, you'll be prompted for:

  • totalSupply - Total token supply (default: 2033333333000000000000000000)
  • eraTokens - Tokens allocated per era (default: 1016666666500000000000000000)
  • reward - Reward per block/action (default: 5000000000000000000)
tip

Unless you have specific token economics requirements, use the default values by answering n. The defaults are designed for most use cases.

Configuration Summary​

Review all entered values:

═══════════════════════════════════════
Configuration Summary
═══════════════════════════════════════

Addresses:
admin: 0x...
goldenFisher: 0x...
activator: 0x...

EVVM Metadata:
EvvmName: EVVM
principalTokenName: Mate Token
principalTokenSymbol: MATE
principalTokenAddress: 0x0000000000000000000000000000000000000001
totalSupply: 2033333333000000000000000000
eraTokens: 1016666666500000000000000000
reward: 5000000000000000000

Confirm configuration? (y/n):

3. Chain Validation​

The CLI verifies that your target chain is supported:

  • Testnet chains: Automatically validated against EVVM Registry
  • Local blockchains (Chain ID 31337/1337): Skip validation, proceed directly
  • Unsupported chains: Display error with instructions for requesting support
Local Development

Local blockchains (Anvil, Hardhat) are detected automatically and skip registry validation.

4. Block Explorer Verification​

Choose how to verify your deployed contracts:

Select block explorer verification:
🭬 Etherscan v2
Blockscout
Sourcify
Custom
Skip verification (not recommended)

Verification Options​

Etherscan v2

  • Requires ETHERSCAN_API in .env file
  • Supports Etherscan and Etherscan-compatible explorers
  • Most common option for major networks

Blockscout

  • Requires block explorer homepage URL
  • CLI will prompt: Enter your Blockscout homepage URL
  • Common for L2s and custom networks

Sourcify

  • Automatically verifies on Sourcify
  • No API key required
  • Decentralized verification

Custom

  • Provide custom verification flags
  • Example: --verify --verifier-url <url> --verifier-api-key <key>
  • For specialized verification setups

Skip verification

  • Deploys without verification
  • Not recommended for production
  • Use only for local testing

5. Contract Deployment​

The CLI compiles and deploys all EVVM contracts:

═══════════════════════════════════════
Deployment
═══════════════════════════════════════

Chain ID: 421614
Starting deployment...

Six contracts are deployed in sequence:

  1. Staking - Staking and reward management
  2. Core - Core virtual machine logic
  3. Estimator - Reward calculation engine
  4. NameService - Domain name system
  5. Treasury - Asset management
  6. P2PSwap - Token exchange

The deployment automatically:

  • Links contracts together
  • Sets up initial permissions
  • Configures cross-contract references

6. Deployment Success​

After successful deployment, you'll see:

✓ Deployment completed successfully!

═══════════════════════════════════════
Deployed Contracts
═══════════════════════════════════════

✓ Staking
→ 0x...
✓ Core
→ 0x...
✓ Estimator
→ 0x...
✓ NameService
→ 0x...
✓ Treasury
→ 0x...
✓ P2PSwap
→ 0x...

All contracts are verified on the block explorer with links to view them.

7. Registry Registration (Optional)​

The CLI asks if you want to register your EVVM immediately:

═══════════════════════════════════════
Next Step: Registration
═══════════════════════════════════════
Your EVVM instance is ready to be registered.

Important:
To register now, your Admin address must match the defaultKey wallet.
Otherwise, you can register later using:
evvm register --coreAddress 0x...

📖 For more details, visit:
https://www.evvm.info/docs/QuickStart#7-register-in-registry-evvm

Do you want to register the EVVM instance now? (y/n):

If you choose y:

  1. CLI prompts for custom Ethereum Sepolia RPC (optional)
  2. Calls EVVM Registry contract on Ethereum Sepolia
  3. Receives EVVM ID (≥ 1000)
  4. Updates your EVVM contract with the assigned ID

If you choose n, you can register later using the register command.

Examples​

Basic Deployment​

Deploy with interactive configuration:

./evvm deploy

Deploy with Existing Configuration​

Use previously saved configuration:

./evvm deploy --skipInputConfig

Deploy with Custom Wallet​

Use a specific wallet for deployment:

./evvm deploy --walletName myWallet

Combined Options​

Skip configuration and use custom wallet:

./evvm deploy -s -n myWallet

Output Files​

Configuration File​

Generated at ./lib/evvm/testnet/input/BaseInputs.sol:

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import {CoreStructs} from "@evvm/testnet-contracts/library/structs/CoreStructs.sol";

abstract contract BaseInputs {
address admin = 0x...;
address goldenFisher = 0x...;
address activator = 0x...;

CoreStructs.EvvmMetadata inputMetadata =
CoreStructs.EvvmMetadata({
EvvmName: "EVVM",
EvvmID: 0,
principalTokenName: "Mate Token",
principalTokenSymbol: "MATE",
principalTokenAddress: 0x0000000000000000000000000000000000000001,
totalSupply: 2033333333000000000000000000,
eraTokens: 1016666666500000000000000000,
reward: 5000000000000000000
});
}

Deployment Data​

Saved at ./broadcast/Deploy.s.sol/[chainId]/run-latest.json:

Contains:

  • Transaction details
  • Deployed contract addresses
  • Constructor arguments
  • Gas usage information
  • Verification data

Troubleshooting​

Foundry Not Found​

Error: Foundry is not installed.

Solution: Install Foundry:

curl -L https://foundry.paradigm.xyz | bash
foundryup

Wallet Not Found​

Error: Wallet 'defaultKey' is not available.

Solution: Import your wallet:

cast wallet import defaultKey --interactive

Chain Not Supported​

Error: Host Chain ID 12345 is not supported.

Solution:

  • For testnet chains, request support at evvm-registry-contracts
  • For mainnet, EVVM doesn't support mainnet yet
  • For local testing, use an unregistered chain ID (e.g., 1337)

Verification Failed​

If verification fails, contracts are still deployed successfully. You can verify manually later using Foundry:

forge verify-contract <contract_address> <contract_name> \
--chain-id <chain_id> \
--etherscan-api-key <api_key>

See Also​