尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Privacy-first Cashu mint monitor
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Privacy-first monitoring for Cashu ecash mints — real-time status, reliability scoring, and decentralized discovery via Nostr.
• Probes all known mints every 5 minutes via /v1/info
• A mint is ONLINE only if the endpoint returns HTTP 200 with valid JSON containing a nuts field
• Server-side latency measured from Frankfurt, DE
• "Show my latency" button for a client-side test directly from your browser檢視完整 README ↗Privacy-first monitoring for Cashu ecash mints — real-time status, reliability scoring, and decentralized discovery via Nostr.
Live: mintradar.org
About, privacy and rules: mintradar.org/about
/v1/infonuts field is an objectComposite score (0–100, in points, not a percentage) calculated server-side after every probe. Shown alongside a separate Community Rating (average of Nostr reviews), so a signal that does not come from the operator sits next to the objective one. This is a health / transparency score — it does not measure solvency or whether a mint can pay out.
Five components feed the score:
| Component | Basis |
|---|---|
| Uptime | Availability over the last 24 hours |
| Audit Reliability | Share of the last 7 days' swaps whose failure cashu.info attributes to the mint. Too few swaps, no cashu.info data, or stale data scores a neutral middle value, not zero. audit.8333.space is not used for the score |
| NUT Support | Supported NUT specs, out of the set of mint-side NUTs MintRadar tracks. A NUT-04 or NUT-05 the mint has switched off ("disabled": true in /v1/info) does not count |
| Version Freshness | How far the mint's software (Nutshell or cdk) is behind the newest stable release of the same software |
| Contact Info | Contact methods provided (email, Twitter, Nostr); capped, so a long contact list cannot inflate the score |
Mints that were discovered recently are capped below the maximum, even if every component is maxed.
The exact weights, audit bands, thresholds, cap and the change log are published on mintradar.org/methodology (generated from the same constants the backend uses).
Interactive breakdown modal on each mint — hover any row for a tooltip explaining the scoring logic.
?nuts= link (comma-separated NUT numbers, e.g. ?nuts=9,12; a mint must support all of them), shown as dismissible NUT-NN tags?q= (search), ?sort= (name/latency/rating/reliability/reviewCount) with ?dir= (asc/desc), ?status= (all/offline), ?reliability= (0–100), ?testmints=hide, ?unit= (sat, usd, eur, comma-separated, e.g. ?unit=sat,usd), ?method= (one method, e.g. ?method=bolt12) and ?compare= (comma-separated mint URLs, also on the Watchlist page); default values are omitted#overview, #history, #nuts, #audit, #reviews, #review-<id>), and Tools from /tools#token, /tools#payment-request and /tools#pickCompare up to 4 mints side-by-side: Status, Reliability Score, Community Rating, Uptime, Latency, Input fee, Deposit and Withdrawal methods (a side the mint switched off is marked), Limits, Units, NUT count and support grid, software version and its history. The mint picker works from the keyboard. On narrow screens the mints stay side by side in a compact table with a fixed label column (more than two scroll sideways), and an Only differences switch hides the rows where all mints agree.
POST /api/notifications/subscribe (NIP-98) and the MintRadar notification service sends gift-wrapped DMs from its service key. Notifications are off for a newly watched mint: on the Watchlist card you turn on "Goes down" / "Goes up" yourself, and optionally any of the "More alerts" ("Mint/melt issues", "Version outdated", "Lost NUT04/05"), each one separately, and a pill shows as on only after the server confirmed the subscription (a failed request leaves it off and says so). Alerts are rate-limited per mint and per subscriber, so a flapping mint cannot flood your inbox. A DM contains only a fixed text, the mint's host name and a link to MintRadar, never text taken from the mint. Subscriber relays must use the standard web ports. A mint's URL is sent to the backend only while notifications are on for that mint — turn them off and the URL is not sharedAutomatic mint discovery on a schedule from a set of public Nostr relays, using kind:38172 mint announcements and kind:38000 review events (URL mining), plus the audit.8333.space API — the sources run in parallel.
cashuA / cashuB) to see its mint, amount, unit, proof count, memo, mint status, and Reliability Score, plus a signature check (NUT-12), the exact fee to claim the token (the mint's input fee per coin, rounded up) and whether its keyset is still active at the mint — with a link to Mint Detail or Cashu.me. Optional Check if spent queries the mint (NUT-07) for unspent / spent / pending / partial proofscreqA…) to see its amount, unit, description, locking condition, transports and accepted mints, each accepted mint with its MintRadar status and Reliability Score when it is trackedA 5-module "Cashu 101" course, written as plain-language text with illustrated diagrams and key-takeaway callouts — no quizzes or progress tracking, just prev/next navigation between modules:
A hand-maintained list of Cashu-compatible wallets — each with supported platforms, a short description, and a link to the wallet's own site — plus a short section on running your own mint. No ranking or reviews.
Mint Detail shows community reviews as kind:38000 events. On page load they're fetched live from a small fast relay set; a server-side sync additionally aggregates reviews from a broader relay set so counts and averages stay complete. Ratings are parsed from the review's rating tag or its [N/5] marker. Author profiles (name + avatar) are resolved from Nostr. Avatars are only loaded over HTTPS.
Sharing a mint page link on Twitter/X, Discord, Telegram, Slack, WhatsApp or Facebook shows a preview card with that mint's name, Reliability Score, and online status — server-rendered for link-preview crawlers that don't run JavaScript.
The hosted instance takes regular automatic database backups.
Read-only JSON under https://mintradar.org/api/, including a stable API for wallets (GET /api/v1/wallets/mints, OpenAPI file in MintRadar/docs/openapi/wallets-v1.yaml). Per mint it gives status, Reliability Score, units, NUTs, mintDisabled / meltDisabled for a switched-off NUT-04 / NUT-05, and on request methods, limits, keysets and feeExamples; the list filters by unit, minScore, nuts, method, maxInputFeePpk, eligible and changedSince. Rate-limited. See MintRadar/docs/API.md. How the score is computed (with its change log): mintradar.org/methodology; a quick start for wallet developers: mintradar.org/for-wallets. Signed health assertions (Nostr kind 30385) are published under the key [email protected]: see mintradar.org/for-wallets.
Frontend
ui-monospace stack for numeric/data values — no Google Fonts, no CDNBackend
pg)Deployment
/api/* reverse proxy)Supported login methods:
bunker:// URI or NIP-05 identifier; also supports QR pairing with the Amber mobile appgit clone https://github.com/hroomnik007/MintRadar.git
cd MintRadar/MintRadar
The frontend and backend source live in the MintRadar/ subdirectory. The working directory for app code, Docker, and CI is MintRadar/MintRadar. The repository root holds only the README, LICENSE, SECURITY.md and repository config (.github/ with CONTRIBUTING.md and the templates, .gitignore, .gitleaks.toml).
cp backend/.env.example backend/.env
Edit backend/.env:
DATABASE_URL=postgresql://mintradar:yourpassword@postgres:5432/mintradar
ALLOWED_ORIGINS=http://localhost:5173
With Docker Compose the backend reaches PostgreSQL by its service name postgres (the database port is not published to the host). Compose also needs POSTGRES_PASSWORD (the same password as in DATABASE_URL), either exported in your shell or set in a .env file next to docker-compose.yml:
echo "POSTGRES_PASSWORD=yourpassword" > .env
(cd backend && npm ci && npm run build)
docker compose up -d
The backend image is built from the compiled backend/dist/ (git-ignored), so the build must come first. docker compose up -d starts PostgreSQL and the backend API on port 3002 (bound to 127.0.0.1 only); curl http://127.0.0.1:3002/health answers once it is up.
npm ci
npm run dev
Open http://localhost:5173. The dev server proxies /api to the backend on port 3002.
npm run typecheck && npm run build
Serve the dist/ directory with Nginx. See MintRadar/deploy/nginx.conf for the Nginx configuration of the hosted instance — it includes the security headers (CSP, HSTS, X-Frame-Options) and the /api/ reverse proxy block.
MINT_ALLOWLIST)To monitor a fixed set of mints (for example your own) and nothing else, set a comma-separated list of mint URLs in backend/.env:
MINT_ALLOWLIST=https://mint.example.com,https://other-mint.example.org
Only https:// entries count. An empty value, or a list without a single valid https:// URL, means normal mode (the public behaviour is unchanged). At every start the listed mints are added to the database instead of the built-in public seed list.
While the list is active, the backend does not:
ATTESTATION_SERVICE_NSEC is set;POST /api/mint/submit and GET /api/mint/probe answer 403 for a URL that is not in the list, and POST /api/mints/discover answers 403 to every request.
What still leaves the server in this mode:
/v1/info are looked up in DNS (system resolver) to check that the domain exists.NOTIFICATION_SERVICE_NSEC), a notification contains the mint's hostname and a mintradar.org/mint/... link with its URL, and it is published to Nostr relays. Leave NOTIFICATION_SERVICE_NSEC unset for a private deployment.NOTIFICATION_SERVICE_NSEC set, the generic "MintRadar Alerts" service profile is also published once at start (it contains no mint data).MintRadar handles Nostr private keys and is used by the Bitcoin/Cashu community. To report a vulnerability, see SECURITY.md.
dangerouslySetInnerHTML; user-controlled URLs are validated before renderingnode user; the backend port is bound to the loopback interface and PostgreSQL is not published to the hostIssues and pull requests are welcome. Please open an issue to discuss significant changes before submitting a PR. See CONTRIBUTING.md.
App code is MIT. The bundled webfonts (DM Sans, JetBrains Mono) are open-source fonts under their own licenses, self-hosted under MintRadar/public/fonts/.
Built with ⚡ for the Cashu & Nostr community