Repository navigation
feat(deposit): QR shows the bare address by default, advanced toggle for the full URI - #114
Conversation
…for the full URI Exchange withdraw screens cannot read EIP-681 / Solana Pay URIs, and many payers withdraw from an exchange. The deposit QR now encodes the bare address by default; an 'Advanced QR' checkbox switches to the full payment URI (network, token, amount) for self-custody wallets. Orders with a memo keep the full URI and get no toggle, since a bare-address scan would drop the memo. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Peer review (codex, GPT): no defects found, no P0; default bare-address QR, advanced URI toggle and memo guard are consistent. Its sandbox could not run vitest (EPERM on .vite-temp); locally connectkit vitest 228/228 and build ok. |
| export function depositQrHasAdvanced(depAddr: Pick<DepositAddr, "address" | "uri" | "memo">): boolean { | ||
| return !!depAddr.address && !!depAddr.uri && depAddr.uri !== depAddr.address && !depAddr.memo; |
There was a problem hiding this comment.
P2 (non-blocking) — latent assumption worth a note. This correctly keeps the full URI whenever memo is set, which covers every case that exists today: generateSolanaDeepLink/generateStellarDeepLink surface their only required extra via order.memo, and EVM/Tron deposits need no extra field. The implicit invariant is "the bare address is a safe scan iff no memo." If a future deposit URI ever carries required data in some other field (e.g. a Solana Pay reference, or an XRP/Cosmos destination tag not mapped to memo), the default bare-address QR would silently drop it. Not a bug now — just worth a one-line comment pinning that invariant so the next chain integration doesn't miss it.
Verified: depositQrValue falls back to uri ?? address when !hasAdvanced, so undefined-uri orders now render the address instead of the previous empty QR — a strict improvement. Type is safe (CustomQRCode.value?: string).
Review — PR #114: deposit QR defaults to bare addressVerdict: no blocking issues (0 × P0, 0 × P1). Clean, well-scoped, well-tested change. Reviewed the full diff plus surrounding context in What I checked
Non-blocking
Not approving/merging per instructions — leaving the verdict to the automated step. 🤖 Generated with Claude Code |
Why
Founder decision 2026-10-31: "default is only show address. advanced show the advance qr". Exchange withdraw screens (Binance, OKX) reject EIP-681 / Solana Pay URIs, and many checkout payers withdraw from an exchange. checkout.rozo.ai already defaults to the bare address with an EIP-681 checkbox; the SDK deposit modal (invoice.rozo.ai) encoded the full URI with no choice.
What
depositQrValue/depositQrHasAdvancedinWaitingDepositAddress: default QR = bare address; checkbox "Advanced QR: include network and amount (self-custody wallets)" switches to the full URI.Tests
vitest runin connectkit: 228/228.pnpm run buildok.🤖 Generated with Claude Code