aboutsummaryrefslogtreecommitdiffstats
path: root/src/ark/proto.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-08-29 07:05:47 -0700
committerAdam Soltys <[email protected]>2026-08-29 07:05:47 -0700
commitdd011c2c98033637829d83fc320ab4fdce4ede8c (patch)
tree67be07e6e8480354bfd60589ca68dbcaeac0c409 /src/ark/proto.js
parentc4b566651d6afac2c48c88611094cfa71c16289b (diff)
downloadcoinosv3-dd011c2c98033637829d83fc320ab4fdce4ede8c.tar.gz
coinosv3-dd011c2c98033637829d83fc320ab4fdce4ede8c.zip
A round's output can no longer strand: every refresh asks the server to drop its unlock hash in the mailbox, and any device that finds such a breadcrumb with no matching action adopts the claim itself (input ids now read from the status response — the rescue needs no operator). History learns to tell the whole truth and nothing more: coins the server saw spent elsewhere get a folded row (skipping coins a known renewal consumed), renewals fold across devices on their unlock hash and appear only when they cost something, and a rescue records the fee the round actually took. The account page keeps its header icons when reached from an open wallet; the messages page folds the control/guestbook replay once per burst instead of painting every intermediate state — no more blinking messages from superseded ban lists or member counts crawling to their total, which now paints from last session's settled figure
Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019WboeoetMF3MTmgT7Ew8yi
Diffstat (limited to 'src/ark/proto.js')
-rw-r--r--src/ark/proto.js6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/ark/proto.js b/src/ark/proto.js
index a1f2fdc..b8c091d 100644
--- a/src/ark/proto.js
+++ b/src/ark/proto.js
@@ -511,6 +511,12 @@ export function decodeMailboxMessage(value) {
if (a.field === 1) msg.vtxos.push(decodeVtxo(a.value));
}
}
+ if (f.field === 4) { // RoundParticipationCompleted — wallet-recovery breadcrumb
+ msg.kind = 'roundCompleted';
+ for (const a of pbFields(f.value)) {
+ if (a.field === 2) msg.unlockHash = hex.encode(a.value);
+ }
+ }
if (f.field === 5) { // IncomingLightningPaymentMessage
msg.kind = 'lnIncoming';
for (const a of pbFields(f.value)) {