From 7234a3de9e200f36accb754f62163f0bd5360832 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 24 Jun 2026 13:38:08 -0700 Subject: Replace seed gift links with presigned PSBT claim links MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gifting no longer shares a seed. "Gift some Bitcoin" (Settings) presigns a chosen amount as a #gift= link: one SIGHASH_SINGLE input (the sender's change output is cryptographically fixed, so a front-runner can only take the gift portion, never the change) plus the rest left open. The coin is reserved per-wallet so normal sends skip it; reclaim it anytime. Opening the link generates a brand-new wallet the sender never sees, shows the amount, and on Claim adds the claimer's address as the output, finalizes, and broadcasts — then prompts backup of the fresh seed. This gives forward secrecy (sender locked out once confirmed), one-shot semantics (claiming spends the input), and keeps funds in the sender's wallet until claimed. Crypto verified end-to-end (sign NONE/SINGLE -> add output -> finalize -> valid tx; deterministic-signature equality proves the presigned sig is valid for any output the claimer picks). Strings retranslated across all 19 locales. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/i18n.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/i18n.js') diff --git a/src/i18n.js b/src/i18n.js index 0c38520..017b6fa 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -145,15 +145,22 @@ const STR = { backToHistory: '← Back to history', recoveryPhrase: 'Recovery phrase', giftWelcome: 'You’ve been sent Bitcoin', - giftWelcomeBody: 'This wallet is yours now. Anyone with its recovery phrase controls the coins, so back it up before you do anything else.', - giftBackup: 'Back up this wallet', - giftSkip: 'Skip for now', giftBackedUp: 'I’ve written it down', - giftLink: 'Gift this wallet', - giftLinkDesc: 'Create a link that opens this wallet, with its funds, for onboarding someone fast.', - giftLinkWarn: '⚠ Anyone who opens this link controls all the funds in this wallet. Only share it to give the wallet away, and keep the amount small.', + giftLink: 'Gift some Bitcoin', + giftLinkDesc: 'Presign an amount as a link. Whoever opens it claims the Bitcoin into a brand-new wallet that only they control.', + giftLinkWarn: '⚠ Anyone who opens this link can claim the amount, so share it only with the person you are gifting. Keep amounts small.', giftLinkReveal: 'Create gift link', + giftAmountLabel: 'Amount to gift', + giftAmountInvalid: 'Enter a valid amount.', + giftAnother: 'Create another', + giftReserved: '{n} coin set aside for unclaimed gifts', + giftReclaim: 'Reclaim', copyLink: 'Copy link', + claimBody: 'Claim it into a brand-new wallet that only you control.', + claimBtn: 'Claim it', + claimFailed: 'This gift has already been claimed or is no longer available.', + claimedTitle: 'Claimed!', + claimedBody: 'Your Bitcoin is on its way. Back up your recovery phrase to keep it safe.', recoveryWarn: '⚠ Anyone who can see these words can steal your funds. Make sure nobody is watching before you reveal them.', bip39Passphrase: 'Passphrase', copyPassphrase: 'Copy passphrase', -- cgit v1.2.3