From ca7d85e8603ad5ee6a31afbf56777cedfc3931b5 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 23 Jun 2026 22:37:58 -0700 Subject: Allow signed-tx export when online; clarify it isn't sent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add a "Sign & export (broadcast elsewhere)" action on the online review screen so you can sign here and broadcast from another device, not just in offline mode. - The signed-result screen now reads as an amber caution ("Signed, but not sent yet… it will not send on its own") instead of a green success banner, so it can't be mistaken for a completed send. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/app.js | 9 +++++++-- src/i18n.js | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/app.js b/src/app.js index 86a2811..11f0589 100644 --- a/src/app.js +++ b/src/app.js @@ -1079,7 +1079,12 @@ function reviewView() { : wallet.offline ? h('button', { class: 'btn-primary grow', onClick: signForExport }, t('signTx')) : h('button', { class: 'btn-primary grow', onClick: broadcast }, t('signBroadcast')) - ) + ), + // Online: also allow signing without broadcasting, to relay the signed tx + // from another device (air-gapped, or a different network). + !wallet.offline && !ui.busy + ? h('button', { class: 'btn-block', style: 'margin-top:8px', onClick: signForExport }, t('signExport')) + : null ); } @@ -1122,7 +1127,7 @@ function sendResultView() { return h( 'div', { class: 'card col' }, - h('div', { class: 'notice ok' }, t('txSignedNote')), + h('div', { class: 'warn-box' }, t('txSignedNote')), h('div', { class: 'small muted' }, t('transactionId')), h('div', { class: 'addr-box' }, r.txid), h('div', { class: 'small muted mt8' }, t('signedTxRaw')), diff --git a/src/i18n.js b/src/i18n.js index ba85819..9a02afe 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -103,10 +103,11 @@ const STR = { offlineSignNote: 'Offline: sign now, then broadcast the signed transaction from an online device.', signBroadcast: 'Sign & broadcast', signTx: 'Sign transaction', + signExport: 'Sign & export (broadcast elsewhere)', broadcastFailed: 'Broadcast failed: {msg}', signingFailed: 'Signing failed: {msg}', done: 'Done', - txSignedNote: '✓ Transaction signed. Broadcast the code below from any online device (e.g. mempool.space → Broadcast).', + txSignedNote: 'Signed, but not sent yet. To actually send it, broadcast the code below from any online device (e.g. mempool.space → Broadcast). It will not send on its own.', transactionId: 'Transaction ID', signedTxRaw: 'Signed transaction (code)', copyHex: 'Copy code', -- cgit v1.2.3