尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Private cross-chain checkout. Customers pay from a shielded Zcash wallet; merchants receive USDC (or USDT) on Base, Arbitrum, Ethereum or Solana. Lona never holds funds: each payment is converted by NEAR Intents (1Click API) and sent straight to the merchant's wallet.
Read DESIGN.md before changing any UI.
Lona-Signature, HMAC-SHA256) with retries for about a day/api/v1/invoices, /api/v1/payment_links)Idempotency-Key on every POST, per-key rate limits with headers, list filters and cursor pagingnpm install
npm run dev # http://localhost:3000
npm test # payment lifecycle, webhooks, signatures, network guard, tokens, receipts, idempotency, rate limits,
# ZEC/USD conversion and rounding, quote guard, duplicate sign-ups
npm run test:e2e # browser checks for signup, login, checkout amounts and the homepage demo
npm run test:full # every merchant feature, the REST API and signed webhooks (start the server with
# ALLOW_PRIVATE_WEBHOOKS=1 CRON_SECRET=e2e-cron SANDBOX_ZEC_USD=1300; set SERVER_LOG to its log)
# (needs a running build at BASE_URL and Playwright with Chromium)
No database setup is needed locally: an embedded Postgres (PGlite) is created in .data/ and migrated on boot.
Try it: create an account, set a payout wallet under Settlement (any valid-looking address works in test mode), create an invoice, open checkout, click "Pay with Zcash", then "Pay in full".
DATABASE_URL..env.example, at minimum APP_URL, CRON_SECRET, ONECLICK_JWT, LONA_FEE_RECIPIENT, NEXT_PUBLIC_LEGAL_NAME, NEXT_PUBLIC_CONTACT_EMAIL.vercel.json runs migrations before each build and calls /api/cron/tick every minute (per-minute crons need a paid Vercel plan; on Hobby, run the tick from an external scheduler with the CRON_SECRET bearer header).POST /api/v1/invoices creates an invoice in USD. No price yet./pay/:id and clicks Pay. Lona asks 1Click for an EXACT_OUTPUT quote: the merchant receives exactly the invoice amount, and the customer's ZEC amount includes network costs and Lona's fee (appFees). The price is held for 20 minutes./v0/status (on page views and every minute from the scheduler) and moves the invoice through awaiting_payment, payment_received, converting and paid_out, emitting a webhook at each meaningful change. Status changes use compare-and-set, so each event fires once.Code map: src/lib/invoices.ts (state machine), src/lib/providers/ (1Click adapter and sandbox, behind one interface so a second route such as Maya Protocol can be added), src/lib/webhooks.ts, src/app/api/.
/v0/tokens at runtime, with known IDs as a fallback. Check the Solana USDC mapping against the live token list.RESEND_API_KEY and a verified sending domain in MAIL_FROM. Without it, confirmation, reset and receipt emails are only logged.APP_URL set to itsrc/app/icon.svg)NEXT_PUBLIC_CONTACT_EMAIL set to a real inboxRESEND_API_KEY and MAIL_FROM set, sending domain verifiedSANDBOX_ZEC_USD only to pin a fixed test price.LONA_FEE_BPS (default 50, so 0.5%). It is added to live quotes only when LONA_FEE_RECIPIENT is set./api/cron/tick syncs payments in flight, expires old invoices, retries webhooks and prunes rate-limit
state. It needs Authorization: Bearer $CRON_SECRET.
.github/workflows/scheduled-tick.yml runs it every 30 minutes, which fits a private repo's free
Actions minutes. Add CRON_SECRET as a repository secret.Wrong passwords are counted per email and per IP in 15-minute windows (stored hashed). Defaults:
5 per email, 30 per IP for sign-in; 3 reset emails per address and 10 reset requests per IP; 10 new
accounts per IP. A correct password clears the email's count. Override with AUTH_LOGIN_EMAIL_LIMIT,
AUTH_LOGIN_IP_LIMIT, AUTH_FORGOT_EMAIL_LIMIT, AUTH_FORGOT_IP_LIMIT, AUTH_SIGNUP_IP_LIMIT.