aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ark.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ark.ts')
-rw-r--r--lib/ark.ts14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/ark.ts b/lib/ark.ts
index 65f43e16..3fc33ef6 100644
--- a/lib/ark.ts
+++ b/lib/ark.ts
@@ -28,7 +28,13 @@ const getWallet = async () => {
let refreshing = false;
let lastRefresh = 0;
const REFRESH_COOLDOWN = 30_000;
-const failedBoardingOutpoints = new Set<string>();
+let failedBoardingOutpoints = new Set<string>();
+const FAILED_BOARDING_KEY = "ark:failedBoardingOutpoints";
+const loadFailedOutpoints = async () => {
+ const members = await db.sMembers(FAILED_BOARDING_KEY);
+ failedBoardingOutpoints = new Set(members);
+};
+loadFailedOutpoints();
let recoveryFailures = 0;
let renewalFailures = 0;
@@ -147,10 +153,14 @@ export const refreshArkWallet = async (force = false) => {
l("ark onboarded boarding utxo:", utxo.value, "sats, txid:", txid);
await logArkOp("onboard", { txid, amount: utxo.value, boardingTxid: utxo.txid, vout: utxo.vout });
failedBoardingOutpoints.clear();
+ await db.del(FAILED_BOARDING_KEY);
break;
} catch (e: any) {
const retriable = /not enough intent confirmations|timed out|signing_session/i.test(e.message);
- if (!retriable) failedBoardingOutpoints.add(outpointKey(utxo));
+ if (!retriable) {
+ failedBoardingOutpoints.add(outpointKey(utxo));
+ await db.sAdd(FAILED_BOARDING_KEY, outpointKey(utxo));
+ }
warn("ark onboard failed:", utxo.value, "sats:", e.message);
}
}