Jun 04, 6-7 PM (46)
Jun 04, 7-8 PM (27)
Jun 04, 8-9 PM (4)
Jun 04, 9-10 PM (2)
Jun 04, 10-11 PM (24)
Jun 04, 11-12 AM (7)
Jun 05, 12-1 AM (6)
Jun 05, 1-2 AM (8)
Jun 05, 2-3 AM (1)
Jun 05, 3-4 AM (1)
Jun 05, 4-5 AM (1)
Jun 05, 5-6 AM (5)
Jun 05, 6-7 AM (9)
Jun 05, 7-8 AM (12)
Jun 05, 8-9 AM (8)
Jun 05, 9-10 AM (11)
Jun 05, 10-11 AM (12)
Jun 05, 11-12 PM (8)
Jun 05, 12-1 PM (52)
Jun 05, 1-2 PM (61)
Jun 05, 2-3 PM (26)
Jun 05, 3-4 PM (24)
Jun 05, 4-5 PM (17)
Jun 05, 5-6 PM (7)
Jun 05, 6-7 PM (14)
Jun 05, 7-8 PM (12)
Jun 05, 8-9 PM (6)
Jun 05, 9-10 PM (2)
Jun 05, 10-11 PM (20)
Jun 05, 11-12 AM (9)
Jun 06, 12-1 AM (6)
Jun 06, 1-2 AM (0)
Jun 06, 2-3 AM (3)
Jun 06, 3-4 AM (4)
Jun 06, 4-5 AM (0)
Jun 06, 5-6 AM (24)
Jun 06, 6-7 AM (1)
Jun 06, 7-8 AM (2)
Jun 06, 8-9 AM (3)
Jun 06, 9-10 AM (0)
Jun 06, 10-11 AM (3)
Jun 06, 11-12 PM (6)
Jun 06, 12-1 PM (2)
Jun 06, 1-2 PM (2)
Jun 06, 2-3 PM (2)
Jun 06, 3-4 PM (18)
Jun 06, 4-5 PM (1)
Jun 06, 5-6 PM (6)
Jun 06, 6-7 PM (0)
Jun 06, 7-8 PM (6)
Jun 06, 8-9 PM (0)
Jun 06, 9-10 PM (1)
Jun 06, 10-11 PM (27)
Jun 06, 11-12 AM (9)
Jun 07, 12-1 AM (14)
Jun 07, 1-2 AM (2)
Jun 07, 2-3 AM (0)
Jun 07, 3-4 AM (0)
Jun 07, 4-5 AM (1)
Jun 07, 5-6 AM (1)
Jun 07, 6-7 AM (3)
Jun 07, 7-8 AM (0)
Jun 07, 8-9 AM (0)
Jun 07, 9-10 AM (1)
Jun 07, 10-11 AM (2)
Jun 07, 11-12 PM (2)
Jun 07, 12-1 PM (5)
Jun 07, 1-2 PM (35)
Jun 07, 2-3 PM (2)
Jun 07, 3-4 PM (4)
Jun 07, 4-5 PM (2)
Jun 07, 5-6 PM (4)
Jun 07, 6-7 PM (0)
Jun 07, 7-8 PM (0)
Jun 07, 8-9 PM (17)
Jun 07, 9-10 PM (1)
Jun 07, 10-11 PM (21)
Jun 07, 11-12 AM (9)
Jun 08, 12-1 AM (9)
Jun 08, 1-2 AM (5)
Jun 08, 2-3 AM (3)
Jun 08, 3-4 AM (4)
Jun 08, 4-5 AM (2)
Jun 08, 5-6 AM (9)
Jun 08, 6-7 AM (5)
Jun 08, 7-8 AM (25)
Jun 08, 8-9 AM (36)
Jun 08, 9-10 AM (40)
Jun 08, 10-11 AM (24)
Jun 08, 11-12 PM (22)
Jun 08, 12-1 PM (40)
Jun 08, 1-2 PM (48)
Jun 08, 2-3 PM (33)
Jun 08, 3-4 PM (27)
Jun 08, 4-5 PM (12)
Jun 08, 5-6 PM (23)
Jun 08, 6-7 PM (14)
Jun 08, 7-8 PM (3)
Jun 08, 8-9 PM (6)
Jun 08, 9-10 PM (19)
Jun 08, 10-11 PM (29)
Jun 08, 11-12 AM (8)
Jun 09, 12-1 AM (5)
Jun 09, 1-2 AM (3)
Jun 09, 2-3 AM (1)
Jun 09, 3-4 AM (3)
Jun 09, 4-5 AM (26)
Jun 09, 5-6 AM (5)
Jun 09, 6-7 AM (23)
Jun 09, 7-8 AM (50)
Jun 09, 8-9 AM (35)
Jun 09, 9-10 AM (45)
Jun 09, 10-11 AM (51)
Jun 09, 11-12 PM (46)
Jun 09, 12-1 PM (86)
Jun 09, 1-2 PM (84)
Jun 09, 2-3 PM (36)
Jun 09, 3-4 PM (38)
Jun 09, 4-5 PM (16)
Jun 09, 5-6 PM (18)
Jun 09, 6-7 PM (18)
Jun 09, 7-8 PM (19)
Jun 09, 8-9 PM (16)
Jun 09, 9-10 PM (16)
Jun 09, 10-11 PM (28)
Jun 09, 11-12 AM (10)
Jun 10, 12-1 AM (11)
Jun 10, 1-2 AM (16)
Jun 10, 2-3 AM (11)
Jun 10, 3-4 AM (19)
Jun 10, 4-5 AM (5)
Jun 10, 5-6 AM (2)
Jun 10, 6-7 AM (46)
Jun 10, 7-8 AM (82)
Jun 10, 8-9 AM (18)
Jun 10, 9-10 AM (59)
Jun 10, 10-11 AM (46)
Jun 10, 11-12 PM (134)
Jun 10, 12-1 PM (48)
Jun 10, 1-2 PM (33)
Jun 10, 2-3 PM (32)
Jun 10, 3-4 PM (28)
Jun 10, 4-5 PM (35)
Jun 10, 5-6 PM (12)
Jun 10, 6-7 PM (12)
Jun 10, 7-8 PM (38)
Jun 10, 8-9 PM (11)
Jun 10, 9-10 PM (9)
Jun 10, 10-11 PM (20)
Jun 10, 11-12 AM (7)
Jun 11, 12-1 AM (10)
Jun 11, 1-2 AM (2)
Jun 11, 2-3 AM (0)
Jun 11, 3-4 AM (2)
Jun 11, 4-5 AM (8)
Jun 11, 5-6 AM (12)
Jun 11, 6-7 AM (34)
Jun 11, 7-8 AM (106)
Jun 11, 8-9 AM (34)
Jun 11, 9-10 AM (20)
Jun 11, 10-11 AM (103)
Jun 11, 11-12 PM (25)
Jun 11, 12-1 PM (38)
Jun 11, 1-2 PM (37)
Jun 11, 2-3 PM (13)
Jun 11, 3-4 PM (19)
Jun 11, 4-5 PM (5)
Jun 11, 5-6 PM (6)
Jun 11, 6-7 PM (0)
3,023 commits this week Jun 04, 2026 - Jun 11, 2026
fix(import): make cross-instance import work from mobile and other origins (#274)
The "Another instance" import flow failed two ways on mobile:

- The exportWallet endpoints used the allowlist-based CORS middleware,
  so any instance not in CORS_ORIGINS got a rejected preflight and the
  browser surfaced an opaque "Load failed". These endpoints are designed
  for cross-instance calls (credentials omitted, CIP-30 signature
  protected), so give them a public Access-Control-Allow-Origin: *
  policy instead.

- instance-tab passed the raw getRewardAddresses()[0] — hex-encoded
  CBOR bytes in mobile in-app browsers — into Mesh signData (throws on
  hex) and into the origin's bech32 signer-list check (never matches).
  Normalize to bech32 client-side, and defensively server-side too for
  older deployed clients.

Also translate opaque cross-origin fetch errors into an actionable
message, and let the Upload JSON tab accept pasted backup JSON since
mobile in-app browsers often can't reach downloaded files.

Co-authored-by: Claude Fable 5 <[email protected]>
fix(import): make cross-instance import work from mobile and other origins
The "Another instance" import flow failed two ways on mobile:

- The exportWallet endpoints used the allowlist-based CORS middleware,
  so any instance not in CORS_ORIGINS got a rejected preflight and the
  browser surfaced an opaque "Load failed". These endpoints are designed
  for cross-instance calls (credentials omitted, CIP-30 signature
  protected), so give them a public Access-Control-Allow-Origin: *
  policy instead.

- instance-tab passed the raw getRewardAddresses()[0] — hex-encoded
  CBOR bytes in mobile in-app browsers — into Mesh signData (throws on
  hex) and into the origin's bech32 signer-list check (never matches).
  Normalize to bech32 client-side, and defensively server-side too for
  older deployed clients.

Also translate opaque cross-origin fetch errors into an actionable
message, and let the Upload JSON tab accept pasted backup JSON since
mobile in-app browsers often can't reach downloaded files.

Co-Authored-By: Claude Fable 5 <[email protected]>
Fix StaleChainState regression in finalPartialFanout (H57 follow-up)
  The previous H57 fix threaded snapshotUTxO as utxoForProof into
  FinalPartialFanoutTx, then recomputed presettled = snapshotUTxO -
  remaining inside finalPartialFanout. This included already-distributed
  batches in the presettled set, so buildAndVerifyAccumulator always
  failed with StaleChainState after the first partial batch.

  Fix: compute presettledUTxO = snapshotUTxO - computeFullFanoutUTxO
  once in HeadLogic where both values are available, and thread it
  directly as a named field. Downstream functions receive the exact
  fixed set of elements that are in the accumulator but never distributed
  (mempty in the normal case; utxoToDecommit or utxoToCommit in the
  edge cases).

  Add tests covering all four presettledUTxO cases for both partialFanout
  and finalPartialFanout, including a new genClosedStateWithUnconfirmedCommit
  generator for the pending-but-not-confirmed deposit case.

  Rename utxoForProof -> presettledUTxO in FinalPartialFanoutTx and
  update the api.yaml schema accordingly.

Signed-off-by: Sasha Bogicevic <[email protected]>
Fix H57 PartialFanoutMembershipFailed when decommit settled before close
  When snapshotVersion < closedState.version (a DecrementTx was confirmed
  between the last snapshot and close), the closed-datum accumulator commits
  to snapshotUTxO = utxo <> utxoToDecommit, but fullUTxO for distribution
  excludes the decommit (already paid out). The remaining accumulator was
  built from fullUTxO - batch only, breaking the on-chain KZG split identity
  A_old = P_K · A_new for every chunk size → H57 for all chunks → fanout stuck.

  Fix: track presettled = UTxO.difference proofUTxO remainingUTxO and include
  it in the remaining accumulator at each partial fanout step, and in the proof
  accumulator at the final step. Thread utxoForProof through FinalPartialFanoutTx
  so the chain layer always has the original snapshotUTxO available.

Signed-off-by: Sasha Bogicevic <[email protected]>
ui: vendor sim-rs/test_data topologies after leios-tools move
`public/topologies/{small,example,thousand}.yaml` were symlinks into
`sim-rs/test_data/`. With sim-rs extracted to cardano-scaling/leios-tools,
the symlinks dangle, breaking the `packages.ui-live` Hydra build at the
`cp -rL` source-resolve step in `ui/build.nix`. Replace the symlinks
with their resolved contents and update the README to point sim-rs
users at the leios-tools repo.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>