From ad281e832ed9e36b777f03ed54e799df7d70ffc9 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 31 Jul 2026 08:04:33 -0700 Subject: Fix send-form UX around lightning pays; harden ln state machines MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - a rejected cosign (gRPC INVALID_ARGUMENT) returns the input vtxo to spendable and fails the action instead of leaving it pending forever — the stuck-pending state that pushed small zaps onto Boltz's 25k minimum - ark ln-pay now takes over when funds are settling (retrying quote) rather than falling through to Boltz - typing a destination clears stale send errors (also cleared on tab switch); paste path likewise - typed lightning addresses no longer auto-advance mid-keystroke (the matcher fired at `a@b.co` before `.com`, yanking the form away): the send form offers an explicit "Zap " button; pasted/scanned addresses still advance immediately - ln-recv: HTLC vtxos anchored to a not-yet-confirmed pool round park and retry instead of throwing; the requested HTLC expiry is anchored on first prepare so retries can't inflate it past the server's grant Co-Authored-By: Claude Fable 5 --- tools/ark/ln-e2e-test.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'tools/ark/ln-e2e-test.js') diff --git a/tools/ark/ln-e2e-test.js b/tools/ark/ln-e2e-test.js index b11f542..4d31b56 100644 --- a/tools/ark/ln-e2e-test.js +++ b/tools/ark/ln-e2e-test.js @@ -112,6 +112,9 @@ const payerDone = new Promise((r) => payer.on('close', (code) => r(code))); for (let i = 0; i < 40 && !['done', 'failed'].includes(mgr.lnAction(recv.id).step); i++) { await sleep(1500); + // fresh pool vtxos anchor to a possibly-unconfirmed issuance round — keep + // blocks coming so the HTLC vtxo validation can pass + if (i % 3 === 2) sh('docker exec bc bitcoin-cli -rpcwallet=coinos -generate 1 >/dev/null'); await mgr.driveLn(recv.id); } const r = mgr.lnAction(recv.id); -- cgit v1.2.3