From 5986cbf5337593eb11fd984d284bd41da7719a87 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sat, 1 Aug 2026 20:28:56 -0700 Subject: Payment names: ₿you@halwallet.app via BIP-353 DNS payment instructions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Receiving: a Settings card claims a username, signed with the wallet's nostr key; the new names registrar (names/server.js, deployed at names.halwallet.app) enforces first-come ownership by that key and mirrors the claim into a DNSSEC-signed TXT record at .user._bitcoin-payment.halwallet.app whose BIP-21 URI carries the wallet's reusable ark address. The record re-registers itself if the ark address ever changes, and a collapsible hint shows the single CNAME a user adds to serve the same name from their own domain (BIP-353 supports delegation when both zones are DNSSEC-signed). Sending: a pasted name@domain resolves over DNS first — two independent DoH resolvers must agree and both report the DNSSEC AD flag (full client-side chain validation is the stated follow-up) — an ark= instruction pays natively, an on-chain path fills the send form, and a name with no DNS record falls back to the Lightning-address zap flow. Co-Authored-By: Claude Fable 5 --- src/features/zaps.js | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/features/zaps.js') diff --git a/src/features/zaps.js b/src/features/zaps.js index 2667921..71a94af 100644 --- a/src/features/zaps.js +++ b/src/features/zaps.js @@ -156,6 +156,15 @@ export function zapsFeature(ctx) { onClick: () => begin(target, display), }, '⚡ ' + t('lnZapOffer', { addr: display })); }, + // The names feature resolves user@domain over DNS first (BIP-353) and + // lands here when the name has no DNS record — the classic LNURL path. + lnAddressFallback(text) { + if (!canPay() || !ui.send || ui.send.recipients.length !== 1) return false; + const target = parseZapTarget(text); + if (!target || target.kind === 'npub') return false; + begin(target, target.address || String(text).trim()); + return true; + }, // True when an npub can be zapped over Lightning from this build/wallet — // ark's "no Ark address" screen checks this before offering the fallback. canLnZap() { return canPay() && !!wallet.nostrProfile; }, -- cgit v1.2.3