TrustLayer is a Solana token risk scoring MVP for hackathon demos.
- API: Node.js (ESM)
- Web: React + TypeScript + Tailwind CSS (Vite)
- API (
apps/api) with:GET /healthGET /v1/score/:mintGET /v1/score-breakdown/:mint(transparent formula output)GET /v1/history/:mint?limit=40(in-memory score timeline by mint)GET /v1/top-tokens?limit=20(CoinGecko-backed market list + fallback + logo enrichment)GET /v1/compare?mintA=&mintB=(A/B risk compare)- multi-RPC failover and provider diagnostics
- holder concentration fallback logic
- confidence-aware status policy (
greenonly withhighconfidence) - in-memory score cache + in-flight dedupe by mint
- Web app (
apps/web) with:- mint input and analysis CTA
- market table with top Solana tokens (CoinGecko/Coinbase-style UX)
- score ring, status, confidence, signal breakdown
- score transparency panel ("Score Math" with weighted contributions + adjustments)
- liquidity/volume/tx/pools metrics
- RPC health and warning panels
- compare mode and watchlist monitoring panel
- empty/loading/error states for demo stability
cd /home/agar/trustlayer
npm install
npm run dev:apiIn second terminal:
cd /home/agar/trustlayer
npm run dev:webOpen:
- Web:
http://127.0.0.1:5173 - API health:
http://127.0.0.1:8787/health
Single command:
cd /home/agar/trustlayer
./scripts/dev_all.shcd /home/agar/trustlayer
./scripts/smoke_api.shCustom mint set:
cd /home/agar/trustlayer
./scripts/smoke_api.sh So11111111111111111111111111111111111111112 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vcd /home/agar/trustlayer
npm run qa:week3Checklist:
docs/frontier_week3_qa_checklist_en.txt
Run baseline checks against docs/golden_tokens_v1.csv:
cd /home/agar/trustlayer
./scripts/benchmark_golden_tokens.shCustom file:
cd /home/agar/trustlayer
./scripts/benchmark_golden_tokens.sh /home/agar/trustlayer/docs/golden_tokens_v1.csvBase RPC setup:
SOLANA_RPC_URLorSOLANA_RPC_URLS(first endpoint should be your private RPC)RPC_TIMEOUT_MSRPC_MAX_RETRIES_PER_URLRPC_CALL_BUDGET_MS
Holder-specific tuning:
RPC_HOLDER_TIMEOUT_MSRPC_HOLDER_MAX_RETRIES_PER_URLRPC_HOLDER_BUDGET_MSHOLDER_TOKEN_ACCOUNTS_FALLBACK_LIMITHOLDER_TOKEN_ACCOUNTS_TIMEOUT_MSHOLDER_TOKEN_ACCOUNTS_BUDGET_MSHOLDER_TOKEN_ACCOUNTS_MAX_PAGESHOLDER_HEURISTIC_PENALTYHOLDER_HEURISTIC_MAX_SCOREHOLDER_HIGH_CONCENTRATION_PCTHOLDER_CRITICAL_CONCENTRATION_PCTHOLDER_HIGH_CONCENTRATION_SCORE_CAPHOLDER_CRITICAL_CONCENTRATION_SCORE_CAP
Cache controls:
SCORE_CACHE_TTL_MS(default45000, set0to disable)SCORE_CACHE_MAX_ENTRIES(default200)
History controls:
SCORE_HISTORY_DEFAULT_LIMITSCORE_HISTORY_MAX_LIMITSCORE_HISTORY_MAX_POINTS_PER_MINTSCORE_HISTORY_RETENTION_MSSCORE_HISTORY_MIN_INTERVAL_MS
Market source:
DEXSCREENER_API_BASEMARKET_TIMEOUT_MSCOINGECKO_API_BASETOP_TOKENS_DEFAULT_LIMITTOP_TOKENS_MAX_LIMITTOP_TOKENS_MARKETS_FETCH_SIZETOP_TOKENS_CACHE_TTL_MSTOP_TOKENS_TIMEOUT_MSJUPITER_TOKEN_LIST_URLJUPITER_TOKEN_LIST_TIMEOUT_MSJUPITER_TOKEN_LIST_CACHE_TTL_MSTOKEN_LIST_FALLBACK_LOGO_BASE
Web:
VITE_API_BASE(defaulthttp://127.0.0.1:8787)
- Open web app and show initial empty state.
- Score
So11111111111111111111111111111111111111112and explain:- score + confidence
- signal breakdown
- RPC health diagnostics
- Repeat same mint and show faster response (
cache.hit=truein API response). - Score one more mint (
EPjFWdd5...) to show non-cached path. - Call
/healthand show cache/rpc operational telemetry.
- No on-chain program yet (API-only scoring service in this phase).
- Some RPC providers return limited/unavailable data for
getTokenLargestAccounts. - Token-account fallback can be slower than direct largest-holders RPC.