aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/zaps.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-08-01 20:28:56 -0700
committerAdam Soltys <[email protected]>2026-08-01 20:28:56 -0700
commit5986cbf5337593eb11fd984d284bd41da7719a87 (patch)
tree4ea35eb279b7213f5ebe9ec77118710612f35b6d /src/features/zaps.js
parent348a57004f94dd0f58c4e70769e65ca7ea3f7619 (diff)
downloadcoinosv3-5986cbf5337593eb11fd984d284bd41da7719a87.tar.gz
coinosv3-5986cbf5337593eb11fd984d284bd41da7719a87.zip
Payment names: ₿[email protected] via BIP-353 DNS payment instructions
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 <name>.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 <[email protected]>
Diffstat (limited to 'src/features/zaps.js')
-rw-r--r--src/features/zaps.js9
1 files changed, 9 insertions, 0 deletions
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; },