Configuration Reference
Complete reference for all environment variables used by L{CORE} and the Attestor service.
Supported Chains
| Chain | Chain ID | Status |
|---|---|---|
| Arbitrum One | 42161 | ✅ Supported (Production) |
| Arbitrum Sepolia | 421614 | ✅ Supported (Testnet) |
| Locale Network | TBD | 🔜 Coming Soon |
| Arbitrum Orbit Chains | - | ✅ Supported |
Limitations
| Limitation | Details |
|---|---|
| EVM only | Currently requires EVM-compatible chain for settlement |
| Determinism required | Cartesi rollup code must be deterministic (no external network calls, no random) |
| TEE for production | Full security guarantees require TEE deployment (EigenCloud) |
| Latency | On-chain settlement adds latency vs centralized alternatives |
Quick Reference
| Category | File | Description |
|---|---|---|
| Attestor | .env or .env.eigencloud | Main attestor service configuration |
| Cartesi Node | .env.cartesi-eigencloud | Cartesi rollup node configuration |
Attestor Environment Variables
Server Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
PORT | No | 8001 | HTTP server port |
APP_PORT | No | - | Alternative port (EigenCloud uses this) |
NODE_ENV | No | development | Environment: development, production, test |
LOG_LEVEL | No | info | Log level: debug, info, warn, error |
Database Configuration (Supabase)
| Variable | Required | Default | Description |
|---|---|---|---|
SUPABASE_URL | Yes | - | Supabase project URL |
SUPABASE_SERVICE_KEY | Yes | - | Service role key (admin operations) |
SUPABASE_ANON_KEY | No | - | Anonymous key (public operations) |
JWT_SECRET | Yes | - | Secret for admin session tokens |
Wallet Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
PRIVATE_KEY | Yes* | - | ETH private key for signing |
MNEMONIC | Yes* | - | Mnemonic phrase (EigenCloud TEE mode) |
*One of PRIVATE_KEY or MNEMONIC is required. PRIVATE_KEY takes precedence.
L{CORE} Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
LCORE_ENABLED | No | 0 | Enable L{CORE} integration (1 to enable) |
LCORE_NODE_URL | Yes* | - | Cartesi node URL (e.g., http://${CARTESI_NODE_IP}:10000) |
LCORE_RPC_URL | Yes* | - | Blockchain RPC for InputBox transactions |
LCORE_DAPP_ADDRESS | Yes* | - | DApp contract address |
LCORE_INPUTBOX_ADDRESS | Yes* | - | InputBox contract address |
LCORE_ADMIN_PUBLIC_KEY | Yes* | - | NaCl public key (base64) for encryption |
LCORE_ADMIN_PRIVATE_KEY | Yes* | - | NaCl private key (base64) for decryption |
*Required when LCORE_ENABLED=1.
TOPRF Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
TOPRF_SHARE_PRIVATE_KEY | No | - | Threshold signature private key share |
TOPRF_SHARE_PUBLIC_KEY | No | - | Threshold signature public key share |
TOPRF_PUBLIC_KEY | No | - | Overall threshold signature public key |
Chain Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
CHAIN_ID | No | - | Chain ID for contract deployment |
TASK_CONTRACT_ADDRESS | No | - | Task contract address |
GOVERNANCE_CONTRACT_ADDRESS | No | - | Governance contract address |
Monitoring & Observability
| Variable | Required | Default | Description |
|---|---|---|---|
ELASTIC_APM_SERVER_URL | No | - | Elastic APM server URL |
ELASTIC_APM_SECRET_TOKEN | No | - | Elastic APM authentication token |
ELASTIC_APM_SAMPLE_RATE | No | - | Fraction of requests to sample |
Other Settings
| Variable | Required | Default | Description |
|---|---|---|---|
HTTPS_PROXY_URL | No | - | Geo-specified proxy URL template |
ZK_CONCURRENCY | No | 10 | Number of concurrent ZK proofs |
LOCALE_PUBLIC_URL | No | - | Public WebSocket URL for clients |
DISABLE_BGP_CHECKS | No | 0 | Disable BGP checks (testing only) |
ACCEPT_CLAIM_PAYMENT_REQUESTS | No | 0 | Allow attestor to pay for claims |
AUTHENTICATION_PUBLIC_KEY | No | - | Public key for private auth |
Cartesi Node Environment Variables
These variables configure the Cartesi rollup node when deployed to EigenCloud.
Critical Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
CARTESI_HTTP_ADDRESS | YES | 127.0.0.1 | MUST be 0.0.0.0 for EigenCloud |
CARTESI_HTTP_PORT | No | 10000 | HTTP server port |
Contract Addresses
| Variable | Required | Default | Description |
|---|---|---|---|
CARTESI_CONTRACTS_APPLICATION_ADDRESS | Yes | - | DApp contract address |
CARTESI_CONTRACTS_INPUT_BOX_ADDRESS | Yes | - | InputBox contract address |
CARTESI_CONTRACTS_AUTHORITY_ADDRESS | Yes | - | Authority contract address |
CARTESI_CONTRACTS_HISTORY_ADDRESS | Yes | - | History contract address |
CARTESI_CONTRACTS_INPUT_BOX_DEPLOYMENT_BLOCK_NUMBER | Yes | - | Block number when InputBox was deployed |
Chain Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
CARTESI_BLOCKCHAIN_ID | Yes | - | Chain ID (421614 for Arbitrum Sepolia) |
CARTESI_BLOCKCHAIN_HTTP_ENDPOINT | Yes | - | HTTP RPC endpoint |
CARTESI_BLOCKCHAIN_WS_ENDPOINT | Yes | - | WebSocket RPC endpoint |
CARTESI_BLOCKCHAIN_FINALITY_OFFSET | No | 1 | Blocks to wait for finality |
CARTESI_EPOCH_LENGTH | No | 43200 | Epoch length in blocks |
Node Wallet
| Variable | Required | Default | Description |
|---|---|---|---|
CARTESI_AUTH_MNEMONIC | Yes | - | Mnemonic for node wallet |
Database
| Variable | Required | Default | Description |
|---|---|---|---|
CARTESI_POSTGRES_ENDPOINT | No | - | PostgreSQL connection string |
Other
| Variable | Required | Default | Description |
|---|---|---|---|
CARTESI_EXPERIMENTAL_DISABLE_CONFIG_LOG | No | false | Disable config logging |
Example Configurations
Attestor (.env.eigencloud)
# L\{CORE\} Production Configuration
LCORE_ENABLED=1
LCORE_NODE_URL=http://${CARTESI_NODE_IP}:10000
LCORE_RPC_URL=https://arb-sepolia.g.alchemy.com/v2/YOUR_KEY
LCORE_DAPP_ADDRESS=0xAE0863401D5B953b89cad8a5E7c98f5136E9C26d
LCORE_INPUTBOX_ADDRESS=0x59b22D57D4f067708AB0c00552767405926dc768
# Encryption Keys
LCORE_ADMIN_PUBLIC_KEY=your-base64-public-key
LCORE_ADMIN_PRIVATE_KEY=your-base64-private-key
# Server
NODE_ENV=production
PORT=8001
Cartesi Node (.env.cartesi-eigencloud)
# CRITICAL: Bind to all interfaces
CARTESI_HTTP_ADDRESS=0.0.0.0
# Contract Addresses
CARTESI_CONTRACTS_APPLICATION_ADDRESS=0xAE0863401D5B953b89cad8a5E7c98f5136E9C26d
CARTESI_CONTRACTS_AUTHORITY_ADDRESS=0x08cC70a34EA78F35a871822F685dCB99EE079A08
CARTESI_CONTRACTS_HISTORY_ADDRESS=0xF1A186AFC0C794dA242fcE50052592dDA30F0457
CARTESI_CONTRACTS_INPUT_BOX_ADDRESS=0x59b22D57D4f067708AB0c00552767405926dc768
CARTESI_CONTRACTS_INPUT_BOX_DEPLOYMENT_BLOCK_NUMBER=2838409
# Chain Configuration (Arbitrum Sepolia)
CARTESI_BLOCKCHAIN_ID=421614
CARTESI_BLOCKCHAIN_FINALITY_OFFSET=1
CARTESI_EPOCH_LENGTH=43200
# RPC Endpoints
CARTESI_BLOCKCHAIN_HTTP_ENDPOINT=https://arb-sepolia.g.alchemy.com/v2/YOUR_KEY
CARTESI_BLOCKCHAIN_WS_ENDPOINT=wss://arb-sepolia.g.alchemy.com/v2/YOUR_KEY
# Node Wallet
CARTESI_AUTH_MNEMONIC=your twelve word mnemonic phrase here
# Security
CARTESI_EXPERIMENTAL_DISABLE_CONFIG_LOG=true
Development (Local)
PRIVATE_KEY=0x...development-key...
LCORE_RPC_URL=https://arb-sepolia.g.alchemy.com/v2/YOUR_KEY
LCORE_DAPP_ADDRESS=0xAE0863401D5B953b89cad8a5E7c98f5136E9C26d
LCORE_ADMIN_PUBLIC_KEY=...
LCORE_ADMIN_PRIVATE_KEY=...
PROOF_SIGNING_KEY=...
LOG_LEVEL=debug
Generating Keys
NaCl Keypair (L{CORE} Admin)
node -e "
const nacl = require('tweetnacl');
const keypair = nacl.box.keyPair();
console.log('LCORE_ADMIN_PUBLIC_KEY=' + Buffer.from(keypair.publicKey).toString('base64'));
console.log('LCORE_ADMIN_PRIVATE_KEY=' + Buffer.from(keypair.secretKey).toString('base64'));
"
Proof Signing Key
node -e "console.log('PROOF_SIGNING_KEY=' + require('crypto').randomBytes(32).toString('hex'))"
Private Key (for testing only)
node -e "console.log('PRIVATE_KEY=0x' + require('crypto').randomBytes(32).toString('hex'))"
Docker Image Hash (TEE Registration)
docker build -f attestor.dockerfile -t attestor . && \
docker inspect --format='{{.Id}}' attestor | cut -d: -f2 | sed 's/^/0x/'
Network Reference
Contract Addresses (Arbitrum Sepolia)
| Contract | Address |
|---|---|
| DApp | 0xAE0863401D5B953b89cad8a5E7c98f5136E9C26d |
| InputBox | 0x59b22D57D4f067708AB0c00552767405926dc768 |
| Authority | 0x08cC70a34EA78F35a871822F685dCB99EE079A08 |
| History | 0xF1A186AFC0C794dA242fcE50052592dDA30F0457 |
Arbitrum Sepolia (Testnet)
| Setting | Value |
|---|---|
| Chain ID | 421614 |
| InputBox Deployment Block | 2838409 |
| Block Explorer | https://sepolia.arbiscan.io |
| Faucet | https://sepoliafaucet.com |
Arbitrum One (Mainnet)
| Setting | Value |
|---|---|
| Chain ID | 42161 |
| InputBox | Check Cartesi docs |
| Block Explorer | https://arbiscan.io |
Security Notes
- Never commit
.envto git - It's in.gitignoreby default - Use different keys per environment - Dev, staging, production
- Rotate keys regularly - Especially
PROOF_SIGNING_KEY - Secure your private key - Consider hardware wallets for production
- Limit RPC access - Use IP allowlists when possible