From bd54987e1f2d708f7e9c5e6e903bcd3c4502b495 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 23 Sep 2026 07:31:46 -0700 Subject: lightning: don't wedge the listener on an already-credited preimage Skip settlements whose preimage was already credited instead of retrying until the process exits, and reject previously used preimages when they are queued. Co-Authored-By: Claude Opus 5.5 (1M context) --- routes/preimages.ts | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'routes') diff --git a/routes/preimages.ts b/routes/preimages.ts index 49673d17..5e7c484f 100644 --- a/routes/preimages.ts +++ b/routes/preimages.ts @@ -51,6 +51,13 @@ export default { for (let p of preimages) { p = p.toLowerCase(); if (seen.has(p)) continue; + // A preimage that already settled (or backs a live invoice) can't be + // credited again — reject it rather than let a buyer pay for nothing. + if ( + (await db.exists(`credited:${p}`)) || + (await db.exists(`preimage:${sha256(p)}`)) + ) + fail("preimage already used"); seen.add(p); fresh.push(p); } -- cgit v1.2.3