BooneTools is the public THORChain tooling site served at boone.tools. The canonical standalone repository is:
https://github.com/erebuskaimoros/boonetools
This repo is a Svelte/Vite frontend with a small Node/Postgres backend for cached THORChain analytics. Dune is the source of truth for historical analytics; public THORChain endpoints are retained for live chain state, quotes, wallet balances, and other action-oriented reads that Dune cannot safely serve.
src/- Svelte app code for the public tools.public/- static assets and generated public data artifacts.backend/- Node backend for cached NodeOp, Bond Tracker, and Rapid Swap data.scripts/- deploy, listener, backfill, repair, and generated-data scripts.docs/- operational docs plus generated research/chart artifacts.ops/- Caddy, Docker, and systemd files for the production host.knowledge/- repo-local session notes and protocol references.
- Bond Tracker
- Rapid Swaps
- TC Fee Dash
- Treasury Tracker
- Vault Explorer
- Limit Orders
- App Layer to Base Layer dashboard at
/app-layer-base-layer
The App Layer dashboard tracks Rujira App Layer fee-share configuration and final transfers into the THORChain Base Layer. Lane 01 is served by the backend from two-minute collector-state snapshots, with the checked-in earnings artifact used only as its historical bootstrap and outage fallback. Dune is the preferred historical source for Reserve payments and app-attributed THORChain liquidity fees; the API reports when it has fallen back to RPC/Midgard. Generated static artifacts live under public/data/rujira-base-layer-fees/, and the page links collector addresses and txs to thorchain.net.
npm install
npm run devOpen:
http://127.0.0.1:5173/
http://127.0.0.1:5173/app-layer-base-layer
Run a production build:
npm run buildRun frontend tests:
npm testRun backend tests:
npm run backend:testDo not commit real secrets. The committed env files are examples only:
.env.examplebackend/.env.example
Frontend production builds use these public runtime values:
VITE_NODEOP_API_BASE=https://boone.tools/functions/v1
VITE_RAPID_SWAPS_API_BASE=https://boone.tools/functions/v1
VITE_TC_FEE_DASH_API_BASE=https://boone.tools/functions/v1
VITE_NODEOP_API_KEY=
VITE_RAPID_SWAPS_API_KEY=
VITE_TC_FEE_DASH_API_KEY=Backend runtime values live in backend/.env on the server. Start from backend/.env.example and set real values there, including DATABASE_URL, PUBLIC_API_KEY, DUNE_API_KEY, and the CMC settings used by TC Fee Dash.
Current Dune source queries:
- TC Fee Dash daily series:
7619850 - Vote Tracker node Mimir events:
7619989 - Rapid Swaps canonical rows:
7619996 - Rapid Swaps market-history denominator:
7620035 - App Layer generated base-layer fees:
7620091 - App Layer explicit Reserve payments:
7620011 - Bond Tracker bond/unbond tx discovery:
7620042
TC Fee Dash uses THORChain daily earnings from thorchain.defi_daily_earnings, CMC historical global market volume for the CEX/global leg, and Dune-indexed DEX exchange volume from dex.trades. It no longer fans out to Midgard or DeFiLlama for that daily series.
Refresh observed Base Layer Reserve payments:
node scripts/rujira-base-layer-fees.mjsRefresh observed direct app-collector distributions and current-balance context:
node scripts/rujira-collector-revenue.mjsRefresh the narrow Base Collector conversion-fee artifact used only as a backend-outage fallback:
node scripts/rujira-app-layer-swap-fees.mjsRefresh the lane 01 historical bootstrap and frontend fallback:
node scripts/rujira-base-layer-inflows.mjsRoutine runs retain verified older rows and recompute the latest three UTC days so they do not depend on indefinite archive-node retention. Set RUJIRA_INFLOW_FULL_REBUILD=1 only when a full historical Thornode archive is available. The generator writes the public fallback and backend/data/rujira-base-layer-inflows.json together.
The collector-distribution artifact is deliberately not an all-time revenue ledger: it observes direct transfers to the currently configured target addresses since its recorded start height, and records current residual balances separately. Its values are non-additive and use current pricing, not historical USD-at-receipt accounting.
BooneTools deploys must be run from the BooneTools website checkout, not from the outer THORChain workspace or the Thornode repo:
cd /Users/boonewheeler/Desktop/Projects/THORChain/boonetools/websiteIf the broader THORChain/Thornode worktree is dirty, use a clean BooneTools checkout/worktree for the intended patch. Do not work around that by manually deploying from the wrong repo.
The live frontend is served from:
/var/www/boone-tools/
on the production host for:
https://boone.tools/
Frontend deploy script:
npm run boonetools:deploy:frontendBackend deploy script:
npm run boonetools:deploy:backendAfter a frontend deploy, verify the built bundle still contains the expected API base:
https://boone.tools/functions/v1
- Prefer Liquify gateway endpoints first for THORNode, Midgard, and RPC traffic.
- Keep official
*.thorchain.networkendpoints as tested fallbacks where the code already uses failover. - Avoid pushing browser traffic directly into Midgard-heavy scan paths when a cached backend route exists.
- New UI work should follow
DESIGN.md, which reflects the current terminal-style BooneTools interface.