# Environment Variables Reference

Complete reference for all environment variables needed for the trustless bridge deployment.

## Required Variables (Must Be Set)

### Deployment Account
```bash
PRIVATE_KEY=0x...  # Deployer private key (NEVER commit to git)
```

### RPC Endpoints
```bash
ETHEREUM_MAINNET_RPC=https://eth.llamarpc.com  # Ethereum Mainnet RPC URL
RPC_URL_138=http://chain138.example.com:8545    # ChainID 138 RPC URL
```

### Etherscan Verification
```bash
ETHERSCAN_API_KEY=your_etherscan_api_key  # For contract verification
```

## Contract Addresses (Populated During Deployment)

### Core Bridge Contracts (ChainID 138)
```bash
LOCKBOX_138=0x...  # Lockbox contract address on ChainID 138
```

### Core Bridge Contracts (Ethereum Mainnet)
```bash
BOND_MANAGER=0x...              # BondManager contract address
CHALLENGE_MANAGER=0x...         # ChallengeManager contract address
LIQUIDITY_POOL=0x...            # LiquidityPoolETH contract address
INBOX_ETH=0x...                 # InboxETH contract address
SWAP_ROUTER=0x...               # Basic SwapRouter contract address
BRIDGE_SWAP_COORDINATOR=0x...   # BridgeSwapCoordinator contract address
```

### Enhanced Routing
```bash
ENHANCED_SWAP_ROUTER=0x...  # EnhancedSwapRouter contract address
```

### Integration Contracts
```bash
STABLECOIN_PEG_MANAGER=0x...      # StablecoinPegManager contract address
COMMODITY_PEG_MANAGER=0x...       # CommodityPegManager contract address
ISO_CURRENCY_MANAGER=0x...        # ISOCurrencyManager contract address
BRIDGE_RESERVE_COORDINATOR=0x...  # BridgeReserveCoordinator contract address
```

### Reserve System
```bash
RESERVE_SYSTEM=0x...  # ReserveSystem contract address (ChainID 138)
XAU_ADDRESS=0x...    # XAU token address (if tokenized)
```

## Optional Configuration Variables

### Bridge Configuration
```bash
BOND_MULTIPLIER_BPS=11000              # 110% (default)
MIN_BOND=1000000000000000000           # 1 ETH (default)
CHALLENGE_WINDOW_SECONDS=1800           # 30 minutes (default)
LP_FEE_BPS=5                           # 0.05% (default)
MIN_LIQUIDITY_RATIO_BPS=11000          # 110% (default)
```

### Peg Configuration
```bash
USD_PEG_THRESHOLD_BPS=50                # 0.5% (default)
ETH_PEG_THRESHOLD_BPS=10                # 0.1% (default)
COMMODITY_PEG_THRESHOLD_BPS=100        # 1.0% (default)
MIN_RESERVE_RATIO_BPS=11000             # 110% (default)
```

### Liquidity Configuration
```bash
LIQUIDITY_AMOUNT=100                    # ETH amount for initial liquidity (default: 100)
RESERVE_AMOUNT=100000                   # USDT amount for reserves (default: 100000)
```

## Token Addresses (Ethereum Mainnet)

These are standard addresses and typically don't need to be changed:

```bash
WETH=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
USDT=0xdAC17F958D2ee523a2206206994597C13D831ec7
USDC=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
DAI=0x6B175474E89094C44Da98b954EedeAC495271d0F
```

## DEX Protocol Addresses (Ethereum Mainnet)

These are standard addresses and typically don't need to be changed:

```bash
UNISWAP_V3_ROUTER=0xE592427A0AEce92De3Edee1F18E0157C05861564
CURVE_3POOL=0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7
DODOEX_ROUTER=0xa356867fDCEa8e71AEaF87805808803806231FdC
BALANCER_VAULT=0xBA12222222228d8Ba445958a75a0704d566BF2C8
ONEINCH_ROUTER=0x1111111254EEB25477B68fb85Ed929f73A960582
```

`UNISWAP_V3_ROUTER` should point at the legacy SwapRouter on Ethereum mainnet because the trustless router contracts in this repo call `exactInputSingle` directly.

## Balancer Pool IDs (Configure After Deployment)

```bash
# BALANCER_WETH_USDT_POOL_ID=0x...
# BALANCER_WETH_USDC_POOL_ID=0x...
# Add more pool IDs as needed
```

## Dodoex PMM / Full Swappable (Chains 138, 651940)

For PMM coverage of all tokens and swap+bridge+swap flow:

```bash
# Per-chain DODO (set for each chain)
CHAIN_138_DODO_POOL_MANAGER=0x...
CHAIN_138_DODO_VENDING_MACHINE=0x...
CHAIN_651940_DODO_POOL_MANAGER=0x...
CHAIN_651940_DODO_VENDING_MACHINE=0x...

# Token coverage script (create-all-dodo-pools-from-token-api.sh)
TOKEN_AGGREGATION_API_URL=http://localhost:3000
CHAIN_ID=138
QUOTE_TOKEN_ADDRESS=0x...   # WETH or canonical stable per chain
DODO_PMM_INTEGRATION_ADDRESS=0x...
ENHANCED_SWAP_ROUTER_ADDRESS=0x...
UNIVERSAL_ASSET_REGISTRY_ADDRESS=0x...
RPC_URL=...
PRIVATE_KEY=0x...

# Quote service (swap+bridge+swap)
ENHANCED_SWAP_ROUTER_ADDRESS=0x...   # Source chain router
DESTINATION_RPC_URL=...
DESTINATION_SWAP_ROUTER_ADDRESS=0x...

# SwapBridgeSwapCoordinator (atomic swap then bridge)
SWAP_BRIDGE_SWAP_COORDINATOR=0x...
```

Run pool creation for all tokens: `scripts/create-all-dodo-pools-from-token-api.sh` (use `DRY_RUN=true` to preview). Ensure CCIP router and chain selectors are set for 138, 651940, and target chains; LINK funded for bridge contracts.

## Service Configuration

### Market Reporting Service
```bash
MARKET_REPORTING_API_KEY=your_api_key_here  # API key for market reporting service
```

### Service Ports (Optional - defaults provided)
```bash
# Liquidity Engine Service
LIQUIDITY_ENGINE_PORT=3000

# Market Reporting Service
MARKET_REPORTING_PORT=3001

# Bridge Reserve Service
BRIDGE_RESERVE_PORT=3002

# ISO Currency Service
ISO_CURRENCY_PORT=3003
```

## Phase-by-Phase Requirements

### Phase 1: Environment Setup
**Required:**
- `PRIVATE_KEY`
- `ETHEREUM_MAINNET_RPC`
- `RPC_URL_138`
- `ETHERSCAN_API_KEY`

### Phase 2: Deploy Core Contracts
**Required:**
- All Phase 1 variables

**Populated After:**
- `LOCKBOX_138` (ChainID 138)
- `BOND_MANAGER`
- `CHALLENGE_MANAGER`
- `LIQUIDITY_POOL`
- `INBOX_ETH`
- `SWAP_ROUTER`
- `BRIDGE_SWAP_COORDINATOR`

### Phase 3: Deploy Enhanced Router
**Required:**
- All Phase 1 variables
- `BRIDGE_SWAP_COORDINATOR` (from Phase 2)

**Populated After:**
- `ENHANCED_SWAP_ROUTER`

### Phase 4: Deploy Integration Contracts
**Required:**
- All Phase 1 variables
- `BRIDGE_SWAP_COORDINATOR` (from Phase 2)
- `RESERVE_SYSTEM` (must be set if deploying)

**Populated After:**
- `STABLECOIN_PEG_MANAGER`
- `COMMODITY_PEG_MANAGER`
- `ISO_CURRENCY_MANAGER`
- `BRIDGE_RESERVE_COORDINATOR`

### Phase 5: Initialize System
**Required:**
- All Phase 1 variables
- `ENHANCED_SWAP_ROUTER` (from Phase 3)
- `BRIDGE_SWAP_COORDINATOR` (from Phase 2)

### Phase 6: Provide Liquidity
**Required:**
- All Phase 1 variables
- `LIQUIDITY_POOL` (from Phase 2)
- `RESERVE_SYSTEM` (must be set)

**Optional:**
- `LIQUIDITY_AMOUNT` (default: 100)
- `RESERVE_AMOUNT` (default: 100000)

### Phase 7: Configure Access Control
**Required:**
- All Phase 1 variables
- `ENHANCED_SWAP_ROUTER` (from Phase 3)
- `BRIDGE_SWAP_COORDINATOR` (from Phase 2)

### Phase 8: Deploy Backend Services
**Required:**
- All Phase 1 variables
- Contract addresses from previous phases

**Service-Specific:**
- `MARKET_REPORTING_API_KEY` (for Market Reporting Service)

### Phase 9: Deploy Frontend
**Required:**
- Contract addresses from previous phases (for frontend configuration)

### Phase 10: Verification
**Required:**
- All contract addresses from previous phases

## Validation Checklist

Before starting deployment, ensure:

- [ ] `PRIVATE_KEY` is set and valid
- [ ] `ETHEREUM_MAINNET_RPC` is accessible
- [ ] `RPC_URL_138` is accessible (or will be)
- [ ] `ETHERSCAN_API_KEY` is valid
- [ ] Deployer has sufficient ETH (5-10 ETH recommended)
- [ ] `RESERVE_SYSTEM` address is known (if deploying integration contracts)

## Security Notes

1. **Never commit `.env` file** to version control
2. **Use `.env.template`** as a reference
3. **Store private keys securely** - use hardware wallets for production
4. **Rotate API keys** regularly
5. **Use environment-specific values** for different networks (testnet vs mainnet)

## Example .env File

```bash
# Deployment Account
PRIVATE_KEY=0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

# RPC Endpoints
ETHEREUM_MAINNET_RPC=https://eth.llamarpc.com
RPC_URL_138=http://chain138.example.com:8545

# Etherscan Verification
ETHERSCAN_API_KEY=ABC123XYZ789

# Reserve System
RESERVE_SYSTEM=0x1111111111111111111111111111111111111111
XAU_ADDRESS=0x2222222222222222222222222222222222222222

# Contract Addresses (populated during deployment)
LOCKBOX_138=
BOND_MANAGER=
CHALLENGE_MANAGER=
LIQUIDITY_POOL=
INBOX_ETH=
SWAP_ROUTER=
BRIDGE_SWAP_COORDINATOR=
ENHANCED_SWAP_ROUTER=
STABLECOIN_PEG_MANAGER=
COMMODITY_PEG_MANAGER=
ISO_CURRENCY_MANAGER=
BRIDGE_RESERVE_COORDINATOR=

# Service Configuration
MARKET_REPORTING_API_KEY=your_api_key_here
```

## Troubleshooting

### Variable Not Found
- Check `.env` file exists
- Verify variable name spelling
- Ensure no extra spaces around `=`
- Check for comments (lines starting with `#`)

### Variable Not Set
- Run `phase1-env-setup.sh` to verify
- Check script output for missing variables
- Review this reference for required variables

### Contract Address Not Found
- Ensure previous phase completed successfully
- Check deployment output for addresses
- Verify addresses are saved to `.env`
