CLI Configuration
Full configuration reference for the ADI CLI
Complete reference for the ADI CLI config file at ~/.adi_cli/.adi.yml. For a quick start, see the minimal config in the CLI guide.
Full Annotated Config
# Where to store ecosystem state (wallets, contracts, chain configs)
# Default: ~/.adi_cli/state
state_dir: ~/.adi_cli/state
# Enable verbose logging for troubleshooting
# Default: false (can also use -d flag)
debug: false
# Default protocol version for toolkit Docker image
# Used by init, add, and deploy when --protocol-version is not provided
protocol_version: v0.30.1
# State storage backend (currently only "filesystem" is supported)
state_backend: filesystem
ecosystem:
# Name used for the ecosystem directory and identification
name: adi_ecosystem
# Settlement layer network: localhost (Anvil) | sepolia | mainnet
l1_network: sepolia
# Settlement layer RPC endpoint
# For L3s on ADI, this is ADI Chain.
# Anvil: http://host.docker.internal:8545
# ADI Testnet: https://rpc.ab.testnet.adifoundation.ai
rpc_url: https://rpc.ab.testnet.adifoundation.ai
# Settlement layer the chains settle on
# l1: settles on Ethereum L1 (the chain is an L2)
# l2: settles on an L2 such as ADI Chain (the chain is an L3)
# For L3s on ADI, keep the default l2.
# Default: l2
settlement: l2
# Ecosystem-level ownership transfer after deploy
# ownership:
# new_owner: "0x..."
chains:
- name: my_chain
chain_id: 222
# no-proofs: development/testing (fast, no real proofs)
# gpu: production (requires GPU prover infrastructure)
# Default: no-proofs
prover_mode: no-proofs
# EVM bytecode emulator for unmodified Ethereum contracts
evm_emulator: false
# Data-availability pubdata mode
# blobs: EIP-4844 blobs — requires settlement: l1
# calldata: pubdata posted as calldata on the settlement layer
# custom_da: external DA, e.g. Avail (validium)
# blobs is incompatible with settlement: l2 — an L3 cannot post EIP-4844
# blobs, so init and deploy reject that combination.
# Default: calldata (the only mode valid on either settlement layer)
pubdata_mode: calldata
# Custom ERC20 token for gas payments on the settlement layer
# Omit this to use ADI as the gas token
# base_token_address: "0x..."
# base_token_price_nominator: 1
# base_token_price_denominator: 1
# Override generated operator addresses
# operators:
# operator: "0x..." # PRECOMMITTER, COMMITTER, REVERTER
# prove_operator: "0x..." # PROVER
# execute_operator: "0x..." # EXECUTOR
# Per-chain funding (ETH in ether)
# funding:
# operator_eth: 30.0
# prove_operator_eth: 30.0
# execute_operator_eth: 30.0
# Per-chain ownership
# ownership:
# new_owner: "0x..."
# Ecosystem-level wallet funding during deployment
# A full deployment requires ~270 ADI tokens across all wallets.
# Testnet faucet: https://faucet.ab.testnet.adifoundation.ai/
funding:
# SECURITY: use ADI_FUNDER_KEY env var instead
# funder_key: "0x..."
# Testnet (minimal):
# deployer_eth: 1.0
# governor_eth: 1.0
#
# Production:
deployer_eth: 100.0
governor_eth: 40.0
governor_cgt_units: 5.0 # only if using custom base token
# Gas price multiplier percentage
# CLI fetches current gas price and multiplies by this value
# Recommended: 200 for Anvil, 300 for Sepolia/mainnet
gas_multiplier: 200
# S3 state backup
# s3:
# enabled: true
# tenant_id: my-tenant # S3 key prefix
# bucket: adi-state
# region: us-east-1
# endpoint_url: http://localhost:9000 # MinIO/LocalStack
# Override Docker toolkit image
# toolkit:
# image_tag: "latest"Config Resolution Priority
Config file sources are mutually exclusive — only one file is loaded:
--configflagADI_CONFIGenvironment variable~/.adi_cli/.adi.yml(default)~/.adi.yml(legacy fallback, deprecated — the CLI warns and suggests moving it to~/.adi_cli/)
Override sources are always applied on top:
ADI__*environment variablesCLI flags (highest priority)
Environment Variables
ADI_FUNDER_KEY
Private key (hex) of the wallet that funds ecosystem wallets
ADI_PRIVATE_KEY
Private key (hex) for accepting ownership as new owner
ADI_RPC_URL
Settlement layer RPC endpoint
ADI_EXPLORER_URL
Block explorer API URL for contract verification
ADI_EXPLORER_API_KEY
Block explorer API key
ADI_CONFIG
Path to an alternative config file
ADI__PROTOCOL_VERSION
Default protocol version
ADI__TOOLKIT__IMAGE_TAG
Override Docker image tag
ADI_OPERATOR
Operator address (PRECOMMITTER, COMMITTER, REVERTER)
ADI_PROVE_OPERATOR
Prove operator address (PROVER)
ADI_EXECUTE_OPERATOR
Execute operator address (EXECUTOR)
AWS_ACCESS_KEY_ID
AWS access key for S3 state sync
AWS_SECRET_ACCESS_KEY
AWS secret key for S3 state sync
ADI__S3__ENABLED
Enable S3 sync (true/false)
ADI__S3__TENANT_ID
Tenant identifier for S3 key prefix
ADI__S3__BUCKET
S3 bucket name
RUST_LOG
Logging verbosity: error, warn, info, debug, trace
Override any config value using the ADI__ prefix with double underscores as path separators:
S3 State Synchronization
When enabled, the CLI archives and uploads ecosystem state to S3 after write operations (init, deploy). Archives are stored at s3://{bucket}/{tenant_id}/{ecosystem-name}.tar.gz.
Set credentials via AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.
Deprecated Fields
These fields still work but will be removed in a future release:
Top-level ownership
ecosystem.ownership or ecosystem.chains[].ownership
Top-level operators
ecosystem.chains[].operators
The former chains[].blobs boolean has been removed and replaced by chains[].pubdata_mode. A leftover blobs: key in an old config is silently ignored — the chain falls back to the default pubdata_mode: calldata. See the CLI changelog (v0.4.0) for details.
Last updated
