From 8229ea08caeb6d03efa56205b9526e2751217162 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 21 Oct 2026 22:03:55 -0700 Subject: names: a queued payment the float can cover goes now, backoff or not Float top-ups that missed their 60 s settle window landed later (+300k on 2026-10-22 once the ASP's vtxo pool refilled), but only a top-up seen to settle resets the queue's backoff, so jarryd's 248k sat in a 1-hour wait with 477k in the float. Co-Authored-By: Claude Opus 5.5 --- names/server.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'names/server.js') diff --git a/names/server.js b/names/server.js index 1048e4d..fbb7737 100644 --- a/names/server.js +++ b/names/server.js @@ -853,7 +853,11 @@ async function retryTick() { if (!q.length) return; const still = []; for (const p of q) { - if (p.next && Date.now() < p.next) { still.push(p); continue; } + // A top-up that "didn't settle" in its 60 s window can land later (two + // did, 2026-10-22, once the ASP's pool refilled), and nothing resets the + // backoff then: a payment the float can now cover goes now. + const floatCovers = !p.foreign && fwd.balance().spendableSat >= p.sat; + if (p.next && Date.now() < p.next && !floatCovers) { still.push(p); continue; } try { await forward(p.name, p.sat, p.hash, p.pubkey); } catch (e) { log(`forward retry failed for ${p.name} (${p.sat} sat, try ${(p.tries || 0) + 1}): ${e.message}`); -- cgit v1.2.3