diff options
| author | Adam Soltys <[email protected]> | 2026-08-01 20:28:56 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-08-01 20:28:56 -0700 |
| commit | 5986cbf5337593eb11fd984d284bd41da7719a87 (patch) | |
| tree | 4ea35eb279b7213f5ebe9ec77118710612f35b6d /src/features/zaps.js | |
| parent | 348a57004f94dd0f58c4e70769e65ca7ea3f7619 (diff) | |
| download | coinosv3-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.js | 9 |
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; }, |
