aboutsummaryrefslogtreecommitdiffstats
path: root/tools/minimal-smoke.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-07-04 12:35:15 -0700
committerAdam Soltys <[email protected]>2026-07-04 12:35:15 -0700
commitcc2c05d2a1b7a9601eb3cb0df998483099e590cc (patch)
tree53f388790f8cca263c15d6d870a36ea283541995 /tools/minimal-smoke.js
parentb7c5abd93868b97c25f52610510544764a3e44eb (diff)
downloadcoinosv3-cc2c05d2a1b7a9601eb3cb0df998483099e590cc.tar.gz
coinosv3-cc2c05d2a1b7a9601eb3cb0df998483099e590cc.zip
Features phase 2b: silent payments + nostr sync leave the core wallet
wallet.js drops from 2,374 to ~1,970 lines, holding only BIP84 on-chain logic plus generic feature seams. New seams added this pass: registerBalanceExtra extra confirmed/pending buckets registerInputProvider extra spendable inputs for buildTx registerSendPreparer destinations needing post-selection derivation registerInputSigner non-BIP84 input signing registerHistoryProvider / registerScanHook / registerRealtimeHook / registerLoadHook / registerCacheExtension / registerCacheSavedHook src/features/sp-wallet.js: the whole BIP-352 engine — key derivation, worker-accelerated indexer scanning, the live indexer WebSocket, SP outputs as spendable inputs, sp1 send preparation, and per-output-key signing — installs via those seams (installSpWallet). src/features/sync.js: nostr identity + encrypted cross-device state sync plus its Settings card, installed via load/cache-saved/realtime hooks. profileChip/nostrProfile move here-adjacent (into gifts, the only other nostr consumer), so core app.js no longer imports nostr at all. buildTx/sign are now feature-agnostic (input providers + preparers + signers); _recomputeBalance* use the balance-extra registry, so a core build with no SP no longer calls a missing spBalance() (that regression dropped the minimal build into offline mode — caught by the smoke test). New coverage: tools/sp-test.js drives two browser "devices" through an SP send, indexer discovery, and an SP-input spend on the ark regtest chain (needs tools/sp-indexer.js pointed at bitcoind:18543). Minimal smoke now also asserts no SP/nostr code ships. Minimal profile: 314KB, down from 412KB (full: 580KB). All suites green: minimal smoke, sp-test, ark UI, gift lifecycle. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01QFAcD4V284DvYZZHP7Rxxy
Diffstat (limited to 'tools/minimal-smoke.js')
-rw-r--r--tools/minimal-smoke.js7
1 files changed, 6 insertions, 1 deletions
diff --git a/tools/minimal-smoke.js b/tools/minimal-smoke.js
index ab31619..1e80d67 100644
--- a/tools/minimal-smoke.js
+++ b/tools/minimal-smoke.js
@@ -28,6 +28,8 @@ check('meaningfully smaller than full', html.length < full.length * 0.9);
check('no ark protocol code', !html.includes('Ark VTXO mailbox authorization'));
check('no swap protocol code', !html.includes('swap/reverse'));
check('no musig code', !html.includes('MuSig/noncecoef'));
+check('no silent-payment engine', !html.includes('BIP0352') && !html.includes('__SP_WORKER__'));
+check('no nostr sync code', !html.includes('30078') && !html.includes('relay.coinos.io'));
const server = Bun.serve({ port: 5198, fetch: () => new Response(html, { headers: { 'content-type': 'text/html' } }) });
@@ -79,6 +81,7 @@ try {
check('no swap provider card', !settings.includes('Swap provider'));
check('no ark card', !/⚔ Ark/.test(settings));
check('no sp indexer card', !settings.includes('Silent payment indexer'));
+ check('no sync card', !settings.toLowerCase().includes('sync'));
console.log('\n[3] core receive still works');
await clickText('.tabs button', 'Receive');
@@ -87,7 +90,9 @@ try {
check('onchain address shown', /^bcrt1/.test(addr || ''), (addr || '').slice(0, 16) + '…');
sh(`${BCLI} sendtoaddress ${addr} 0.0004`);
sh(`${BCLI} generatetoaddress 1 $(${BCLI} getnewaddress) >/dev/null`);
- check('payment lands', await waitText('40,000', 30000));
+ const landed = await waitText('40,000', 30000);
+ if (!landed) console.log(' [balance area]', (await bodyText()).slice(0, 200).replace(/\n+/g, ' | '));
+ check('payment lands', landed);
check('no page errors', errs.length === 0, errs.join(' | '));
console.log(ok ? '\n✅ SUCCESS: minimal profile is a working on-chain-only wallet'