.env lives at repo root, is gitignored, and is loaded via @darkpool/shared/env with strict zod validation. loadEnv() throws with a clean message on missing required vars.
Sui
| Var | Default | Purpose |
|---|---|---|
SUI_NETWORK | testnet | Network for SuiClient |
SUI_RPC_URL | https://fullnode.testnet.sui.io:443 | RPC endpoint |
DarkPool (filled by pnpm env:from-publish)
| Var | Default | Purpose |
|---|---|---|
DARKPOOL_PACKAGE_ID | 0x0 | Live package id |
MARKET_REGISTRY_ID | 0x0 | Shared MarketRegistry id |
AGENT_REGISTRY_ID | 0x0 | Shared AgentRegistry id |
AUTO_REDEEM_QUEUE_ID | 0x0 | Shared AutoRedeemQueue id |
OO_CONFIG_ID | 0x0 | Shared OOConfig id |
VOTE_LEDGER_ID | 0x0 | Shared VoteLedger id |
DeepBook Predict
| Var | Default | Purpose |
|---|---|---|
PREDICT_PACKAGE_ID | live | Predict package (branch-pinned) |
PREDICT_OBJECT_ID | live | Shared Predict object |
DeepBook V3
| Var | Default | Purpose |
|---|---|---|
DEEPBOOK_PACKAGE_ID | live | V3 package (testnet upgrade) |
DEEPBOOK_REGISTRY_ID | live | V3 registry |
DUSDC
| Var | Default | Purpose |
|---|---|---|
DUSDC_COIN_TYPE | live | DeepBook-allowlisted DUSDC type |
DUSDC_RETURN_ADDRESS | 0x0 | 80% sweep destination (from DeepBook team) |
Pyth
| Var | Default | Purpose |
|---|---|---|
PYTH_PACKAGE_ID | live | Pyth Sui package |
PYTH_STATE_ID | live | Shared state |
PYTH_BTC_USD_PRICE_INFO_OBJECT | 0x0 | Per-feed PriceInfoObject id |
BTC_USD_FEED_ID | live | Pyth feed id (hex, no prefix) |
Enoki + OAuth
| Var | Default | Purpose |
|---|---|---|
VITE_ENOKI_API_KEY | enoki_public_TODO | Public key (browser) |
ENOKI_PRIVATE_KEY | enoki_secret_TODO | Backend / resolver only |
VITE_GOOGLE_CLIENT_ID | TODO | OAuth client (PKCE; no secret needed) |
LLM
| Var | Default | Purpose |
|---|---|---|
LLM_PROVIDER | groq | groq | anthropic | openai | ollama |
LLM_API_KEY | empty | Required for AGENT_STRATEGY=llm (except ollama) |
LLM_MODEL | empty | Override provider default |
LLM_BASE_URL | empty | Override provider base URL |
AGENT_PROMPT_FILE | empty | Markdown mandate path |
Server (api / indexer / quote-worker)
| Var | Default | Purpose |
|---|---|---|
SERVER_PORT | 8081 | api HTTP + WS port |
SERVER_HOST | 0.0.0.0 | Bind host |
REDIS_URL | redis://localhost:6379 | Cache + pubsub + sponsor caps |
DATABASE_URL | postgres://darkpool:darkpool@localhost:5433/darkpool | Postgres |
CORS_ORIGIN | * | CORS allowlist |
QUOTE_POLL_MS | 2000 | Quote-worker tick |
HOT_TTL_S | 60 | Strike-hot TTL |
QUOTE_CACHE_TTL_S | 300 | Quote cache TTL |
INDEXER_POLL_MS | 4000 | Indexer tick |
INDEXER_PAGE_SIZE | 50 | queryEvents page size |
LOG_LEVEL | info | pino level |
Frontend
| Var | Default | Purpose |
|---|---|---|
VITE_SERVER_HTTP_URL | http://localhost:8081 | REST base URL |
VITE_SERVER_WS_URL | ws://localhost:8081/ws | WS URL |
VITE_AGENT_STATUS_URLS | comma-list | Fleet status endpoints |
Self-sponsorship
| Var | Default | Purpose |
|---|---|---|
SPONSOR_KEY | empty | Sponsor signer (falls back to RESOLVER_KEY) |
SPONSOR_DAILY_CAP_SUI | 5 | Global daily cap |
SPONSOR_PER_USER_DAILY_CAP_SUI | 0.5 | Per-sender daily cap |
SPONSOR_MAX_GAS_BUDGET_SUI | 0.03 | Per-tx hard ceiling |
Signing keys
| Var | Default | Purpose |
|---|---|---|
RESOLVER_KEY | empty | Auto-settle keeper + default sponsor signer |
AGENT_KEY | empty | Agent runtime signer |
suiprivkey1… (single line, no quotes). Get via sui keytool export --key-identity <addr>.
Demo markets / agents (filled after bootstrap)
| Var | Purpose |
|---|---|
BTC_MARKET_LINK_ID | Output of pnpm market:register --kind price |
SPORTS_OO_MARKET_LINK_ID | Output of pnpm market:register --kind oo |
AGENT_PREDICT_MANAGER_ID | Output of pnpm predict:new-manager |
TRADE_AGENT_ID | Output of pnpm agent:register |
VAULT_OBJECT_ID | Output of scripts/create-darkpool-vault.ts |
AGENT_SEAL_POLICY_ID | Output of scripts/create-seal-policy.ts |