aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/ark.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-08-18 16:27:56 -0700
committerAdam Soltys <[email protected]>2026-08-18 16:27:56 -0700
commitecf7da305d56cee8a8d2306ca7fa5dad4b2f0c39 (patch)
treebafe19ba0d4f06124495266f2d05de56dd9246bc /src/features/ark.js
parent1d21e3b9546496a4eccf8ec9ec45934999e07fd8 (diff)
downloadcoinosv3-ecf7da305d56cee8a8d2306ca7fa5dad4b2f0c39.tar.gz
coinosv3-ecf7da305d56cee8a8d2306ca7fa5dad4b2f0c39.zip
A refresh learns to let go: a participation rejected for unusable inputs asks the server which coins died and rebuilds around the survivors instead of resubmitting the doomed set every sync forever; the balance reconciles on a ten-minute cadence so ghosts can't pose as sats; and arkRescue() reclaims a round output whose action a device lost
Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_012u4oe1KPx9faCsDBLfZYqi
Diffstat (limited to 'src/features/ark.js')
-rw-r--r--src/features/ark.js10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/features/ark.js b/src/features/ark.js
index 66e4e44..30b167a 100644
--- a/src/features/ark.js
+++ b/src/features/ark.js
@@ -308,6 +308,16 @@ export function arkFeature(ctx) {
initArk();
}
+ // Operator console rescue for a round participation stranded server-side
+ // 'unclaimed' (its action lost client-side): arkRescue('<unlockHash>',
+ // ['<vtxoId>', ...]) from devtools, ids supplied from the server's DB.
+ if (typeof globalThis !== 'undefined') {
+ globalThis.arkRescue = async (unlockHash, inputIds) => {
+ const mgr = await connectArk();
+ return mgr.rescueParticipation(unlockHash, inputIds);
+ };
+ }
+
function connectArk() {
if (ark) return Promise.resolve(ark);
if (arkConnectPromise) return arkConnectPromise;