Move + on-chain
| Symptom | Likely cause | Fix |
|---|---|---|
predict::mint aborts with “quote-asset not allowed” | DUSDC type mismatch | Verify DUSDC_COIN_TYPE matches 0xe95040…::dusdc::DUSDC (the DeepBook-allowlisted type) |
MARKET_REGISTRY_ID empty after publish | parse-publish-output couldn’t find the object change | Re-run pnpm env:from-publish --force or look at objectChanges manually in /tmp/dp-publish.json |
binary-market:create Move build error | Slug contains uppercase or a hyphen | Slug must match /^[a-z0-9_]+$/ |
binary-market:resolve aborts with EWrongCap | ResolverCap id doesn’t match the Settlement | Verify the cap from .binary-markets/registry.json |
dark_pool::deposit aborts with EHashLenMismatch | Attribution hash isn’t 32 bytes | The deposit PTB pads with 32 zero bytes when Seal is off. Check lib/ptb.ts |
binary-market:create fails with “Could not find both TreasuryCaps” | Slug used a Move reserved word | Choose a slug that doesn’t collide (e.g. avoid coin, balance) |
place_limit_order aborts EBalanceManagerBalanceTooLow (code 3) | No 5% fee headroom | Keeper / seeder must quote roundLot(held × 100/105) |
| Frontend trade aborts with “balance too low at execution” | Stale quote, price ticked up between quote and submit | useTxSigner already asserts via waitForTransaction; humanized error explains. Just retry |
Backend
| Symptom | Likely cause | Fix |
|---|---|---|
| Frontend shows “Server URL unreachable” | api process not running, or port mismatch | Check VITE_SERVER_HTTP_URL matches SERVER_PORT |
| Indexer logs no events | Wrong DARKPOOL_PACKAGE_ID or no events emitted yet | Verify the package id matches the live deployment; trigger a test event |
Resolver says RESOLVER_KEY is not set even though .env has it | tsx watch doesn’t walk up to repo-root .env like one-shot tsx does | packages/shared/src/env.ts already walks up ancestors. Confirm .env is at repo root and the line is RESOLVER_KEY=suiprivkey1… with no quotes |
Auto-settle log shows the same digest=… line twice + a “rejected by 1/3 of validators” error | Two resolver processes running concurrently (stale tsx watch child) | ⌃C every resolver shell, pkill -f "resolver/src/index", restart one |
| Vite throws “VITE_ENOKI_API_KEY undefined” | .env is at the wrong location | .env should be at repo root, vite.config.ts has envDir: "../../" |
Toolchain
| Symptom | Likely cause | Fix |
|---|---|---|
pnpm --filter @darkpool/server … errors with “pnpm requires at least Node.js v22.13” | Shell is on v22.11 | nvm use 22.13 (per-shell) or nvm alias default 22.13 (persistent) |
nvm complains about ~/.npmrcglobalconfig/prefix | Mismatched globalconfig | Either pin with nvm alias default 22.13 or clean those lines from ~/.npmrc |
Agent runtime
| Symptom | Likely cause | Fix |
|---|---|---|
| Action feed fills with 22+ identical “Balance of gas object…” rows | Out of gas | Refuel signer with SUI; runtime collapses identical entries with ×N counter |
LLM agent silently falls back to alternate | Missing LLM_API_KEY | Set it in .env. Provider preset picks defaults |
| Agent ticks every minute with no mints | Probe out of bounds | Check the strategy ask_bounds; testnet oracles only quote ~±$500 around spot |
| Fleet card shows red dot | /status endpoint unreachable | Check the agent process is running on the right port |
| Agent paused but runtime keeps logging “would mint” | TRADE_AGENT_ID not set in .env | Set it; the runtime then reads is_active per tick |