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_ADDRESSset -
CARTESI_CONTRACTS_INPUT_BOX_ADDRESSset -
CARTESI_CONTRACTS_AUTHORITY_ADDRESSset -
CARTESI_CONTRACTS_HISTORY_ADDRESSset -
CARTESI_BLOCKCHAIN_IDmatches network -
CARTESI_BLOCKCHAIN_HTTP_ENDPOINTset -
CARTESI_BLOCKCHAIN_WS_ENDPOINTset -
CARTESI_AUTH_MNEMONICset -
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_URLpoints to Cartesi node -
LCORE_RPC_URLset -
LCORE_DAPP_ADDRESSset -
LCORE_INPUTBOX_ADDRESSset -
LCORE_ADMIN_PUBLIC_KEYset -
LCORE_ADMIN_PRIVATE_KEYset -
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=trueset - 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)
| Contract | Address |
|---|---|
| DApp | 0xAE0863401D5B953b89cad8a5E7c98f5136E9C26d |
| InputBox | 0x59b22D57D4f067708AB0c00552767405926dc768 |
| Authority | 0x08cC70a34EA78F35a871822F685dCB99EE079A08 |
| History | 0xF1A186AFC0C794dA242fcE50052592dDA30F0457 |
Arbitrum One (Mainnet)
| Contract | Address |
|---|---|
| DApp | (Your deployed address) |
| InputBox | See Cartesi docs |
Emergency Procedures
Service Down
- Check container logs
- Verify environment variables
- Check RPC endpoint availability
- Check wallet balance
- Restart containers
Suspected Compromise
- Rotate all keys immediately
- Disable public endpoints
- Audit recent transactions
- Review access logs
- Report to security team