From acd6ca748f1fc4b31648fb999e2f9342cbf5c8a1 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 2 Sep 2026 08:32:13 -0700 Subject: The tester with 233 sats gets to spend them: invoice coverage judges the SUM of spendable coins (the single-coin gate silently declined anything over the largest coin, though multi-input pays gather 24), an uncoverable invoice now owns its paste — board the shortfall from Savings, or say what's short — instead of dropping the bolt11 into the address field like a dead click, and chain calls gain a last-resort relay through the registrar (/esplora passthrough, tip cached) for the network that blackholes every public esplora MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01MrkLsNScXe9b6BviUSdmMr --- src/ark/manager.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/ark') diff --git a/src/ark/manager.js b/src/ark/manager.js index e9f79b0..9731dd6 100644 --- a/src/ark/manager.js +++ b/src/ark/manager.js @@ -200,7 +200,11 @@ export class ArkManager { async _esplora(path, init) { const hosts = (this._esploraHosts ||= [ this.esploraUrl, - ...(this.network === 'mainnet' ? ['https://blockstream.info/api', 'https://mempool.space/api'] : []), + // last resort: our own registrar relays chain calls — the one host a + // wallet that can reach coinos at all provably reaches + ...(this.network === 'mainnet' + ? ['https://blockstream.info/api', 'https://mempool.space/api', 'https://names.coinos.io/esplora'] + : []), ].filter((h, i, a) => h && a.indexOf(h) === i)); const start = this._esploraIdx || 0; let lastErr; -- cgit v1.2.3