Skip to main content

Production Checklist

Checklist for deploying L{CORE} to production.


Pre-Deployment​

Infrastructure​

  • EigenCloud account created and verified
  • Docker Hub access for pushing images
  • Arbitrum RPC endpoint configured (Alchemy, Infura, etc.)
  • Domain/IP addresses allocated for services
  • SSL certificates provisioned (if using custom domain)

Wallet Setup​

  • Production wallet created
  • Wallet funded with ETH for gas (Arbitrum Sepolia or Mainnet)
  • Private key/mnemonic stored securely (never in code)
  • Test transaction successful

Keys Generated​

  • NaCl keypair for L{CORE} encryption
    node -e "
    const nacl = require('tweetnacl');
    const kp = nacl.box.keyPair();
    console.log('PUBLIC=' + Buffer.from(kp.publicKey).toString('base64'));
    console.log('PRIVATE=' + Buffer.from(kp.secretKey).toString('base64'));
    "
  • Proof signing key
    node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
  • JWT secret for admin sessions
  • Keys stored in secure secret manager

Cartesi Node Deployment​

Docker Image​

  • Image built with EXPOSE directive
    FROM modernsociety/lcore-cartesi-node:latest
    USER root
    EXPOSE 10000
  • Image pushed to registry
  • Image tag matches deployment config

Environment Variables​

  • CARTESI_HTTP_ADDRESS=0.0.0.0 (CRITICAL)
  • CARTESI_CONTRACTS_APPLICATION_ADDRESS set
  • CARTESI_CONTRACTS_INPUT_BOX_ADDRESS set
  • CARTESI_CONTRACTS_AUTHORITY_ADDRESS set
  • CARTESI_CONTRACTS_HISTORY_ADDRESS set
  • CARTESI_BLOCKCHAIN_ID matches network
  • CARTESI_BLOCKCHAIN_HTTP_ENDPOINT set
  • CARTESI_BLOCKCHAIN_WS_ENDPOINT set
  • CARTESI_AUTH_MNEMONIC set
  • CARTESI_EXPERIMENTAL_DISABLE_CONFIG_LOG=true

Verification​

  • Container starts without errors
  • Port 10000 accessible externally
  • Health query returns success
    curl "http://${IP}:10000/inspect/$(python3 -c "import urllib.parse; print(urllib.parse.quote('{\"type\":\"health\",\"params\":{}}'))")"
  • Node syncing with blockchain

Attestor Deployment​

Docker Image​

  • Image built
  • Image pushed to registry
  • Image tag matches deployment config

Environment Variables​

  • LCORE_ENABLED=1
  • LCORE_NODE_URL points to Cartesi node
  • LCORE_RPC_URL set
  • LCORE_DAPP_ADDRESS set
  • LCORE_INPUTBOX_ADDRESS set
  • LCORE_ADMIN_PUBLIC_KEY set
  • LCORE_ADMIN_PRIVATE_KEY set
  • NODE_ENV=production
  • PORT=8001
  • Database credentials (if using Supabase)

Verification​

  • Container starts without errors
  • Health check passes
    curl http://${IP}:8001/healthcheck
  • L{CORE} status shows connected
    curl http://${IP}:8001/api/lcore/status
  • Test attestation succeeds

Security Checklist​

Secrets​

  • No secrets in code or Dockerfiles
  • Environment variables not logged
  • CARTESI_EXPERIMENTAL_DISABLE_CONFIG_LOG=true set
  • Private keys rotated from development
  • Different keys per environment

Network​

  • Firewall rules configured
  • Only required ports exposed (8001, 10000)
  • RPC endpoint has IP allowlist (if possible)
  • Internal network isolated from public

Access Control​

  • Admin endpoints require authentication
  • Rate limiting enabled
  • CORS configured appropriately
  • No debug endpoints exposed

Monitoring Setup​

Health Checks​

  • Uptime monitoring for Attestor /healthcheck
  • Uptime monitoring for Cartesi /inspect/...
  • Alert thresholds configured

Logging​

  • Log aggregation configured
  • Log retention policy set
  • Sensitive data not logged

Metrics​

  • Request latency tracked
  • Error rates monitored
  • Gas usage tracked
  • Attestation throughput measured

Backup & Recovery​

Database​

  • Supabase backups enabled (if using)
  • Backup retention configured
  • Restore procedure tested

Keys​

  • Key backup procedure documented
  • Key recovery tested
  • Key rotation procedure documented

Configuration​

  • Environment config version controlled
  • Deployment rollback procedure documented

Post-Deployment​

Functional Tests​

  • Create test attestation
  • Query attestation via Cartesi
  • Verify bucket assignment
  • Test access grant flow
  • Verify encryption/decryption

Load Tests​

  • Concurrent attestation test
  • Query performance under load
  • Gas estimation accurate

Documentation​

  • Endpoint URLs documented
  • API keys documented (securely)
  • Runbook created for common operations
  • Incident response plan documented

Contract Addresses Reference​

Arbitrum Sepolia (Testnet)​

ContractAddress
DApp0xAE0863401D5B953b89cad8a5E7c98f5136E9C26d
InputBox0x59b22D57D4f067708AB0c00552767405926dc768
Authority0x08cC70a34EA78F35a871822F685dCB99EE079A08
History0xF1A186AFC0C794dA242fcE50052592dDA30F0457

Arbitrum One (Mainnet)​

ContractAddress
DApp(Your deployed address)
InputBoxSee Cartesi docs

Emergency Procedures​

Service Down​

  1. Check container logs
  2. Verify environment variables
  3. Check RPC endpoint availability
  4. Check wallet balance
  5. Restart containers

Suspected Compromise​

  1. Rotate all keys immediately
  2. Disable public endpoints
  3. Audit recent transactions
  4. Review access logs
  5. Report to security team