Mar 05, 5-6 PM (57)
Mar 05, 6-7 PM (66)
Mar 05, 7-8 PM (20)
Mar 05, 8-9 PM (21)
Mar 05, 9-10 PM (8)
Mar 05, 10-11 PM (22)
Mar 05, 11-12 AM (21)
Mar 06, 12-1 AM (12)
Mar 06, 1-2 AM (18)
Mar 06, 2-3 AM (8)
Mar 06, 3-4 AM (0)
Mar 06, 4-5 AM (11)
Mar 06, 5-6 AM (5)
Mar 06, 6-7 AM (16)
Mar 06, 7-8 AM (65)
Mar 06, 8-9 AM (35)
Mar 06, 9-10 AM (46)
Mar 06, 10-11 AM (48)
Mar 06, 11-12 PM (45)
Mar 06, 12-1 PM (48)
Mar 06, 1-2 PM (89)
Mar 06, 2-3 PM (93)
Mar 06, 3-4 PM (37)
Mar 06, 4-5 PM (40)
Mar 06, 5-6 PM (20)
Mar 06, 6-7 PM (16)
Mar 06, 7-8 PM (22)
Mar 06, 8-9 PM (15)
Mar 06, 9-10 PM (13)
Mar 06, 10-11 PM (28)
Mar 06, 11-12 AM (22)
Mar 07, 12-1 AM (16)
Mar 07, 1-2 AM (1)
Mar 07, 2-3 AM (6)
Mar 07, 3-4 AM (0)
Mar 07, 4-5 AM (1)
Mar 07, 5-6 AM (5)
Mar 07, 6-7 AM (7)
Mar 07, 7-8 AM (7)
Mar 07, 8-9 AM (4)
Mar 07, 9-10 AM (3)
Mar 07, 10-11 AM (0)
Mar 07, 11-12 PM (4)
Mar 07, 12-1 PM (6)
Mar 07, 1-2 PM (2)
Mar 07, 2-3 PM (6)
Mar 07, 3-4 PM (22)
Mar 07, 4-5 PM (21)
Mar 07, 5-6 PM (5)
Mar 07, 6-7 PM (0)
Mar 07, 7-8 PM (7)
Mar 07, 8-9 PM (10)
Mar 07, 9-10 PM (7)
Mar 07, 10-11 PM (37)
Mar 07, 11-12 AM (28)
Mar 08, 12-1 AM (3)
Mar 08, 1-2 AM (5)
Mar 08, 2-3 AM (6)
Mar 08, 3-4 AM (3)
Mar 08, 4-5 AM (1)
Mar 08, 5-6 AM (1)
Mar 08, 6-7 AM (2)
Mar 08, 7-8 AM (4)
Mar 08, 8-9 AM (10)
Mar 08, 9-10 AM (2)
Mar 08, 10-11 AM (0)
Mar 08, 11-12 PM (1)
Mar 08, 12-1 PM (3)
Mar 08, 1-2 PM (6)
Mar 08, 2-3 PM (6)
Mar 08, 3-4 PM (15)
Mar 08, 4-5 PM (0)
Mar 08, 5-6 PM (31)
Mar 08, 6-7 PM (7)
Mar 08, 7-8 PM (8)
Mar 08, 8-9 PM (12)
Mar 08, 9-10 PM (1)
Mar 08, 10-11 PM (25)
Mar 08, 11-12 AM (25)
Mar 09, 12-1 AM (6)
Mar 09, 1-2 AM (5)
Mar 09, 2-3 AM (22)
Mar 09, 3-4 AM (20)
Mar 09, 4-5 AM (2)
Mar 09, 5-6 AM (5)
Mar 09, 6-7 AM (3)
Mar 09, 7-8 AM (21)
Mar 09, 8-9 AM (36)
Mar 09, 9-10 AM (30)
Mar 09, 10-11 AM (44)
Mar 09, 11-12 PM (31)
Mar 09, 12-1 PM (60)
Mar 09, 1-2 PM (24)
Mar 09, 2-3 PM (74)
Mar 09, 3-4 PM (60)
Mar 09, 4-5 PM (127)
Mar 09, 5-6 PM (50)
Mar 09, 6-7 PM (54)
Mar 09, 7-8 PM (23)
Mar 09, 8-9 PM (25)
Mar 09, 9-10 PM (13)
Mar 09, 10-11 PM (60)
Mar 09, 11-12 AM (24)
Mar 10, 12-1 AM (5)
Mar 10, 1-2 AM (35)
Mar 10, 2-3 AM (34)
Mar 10, 3-4 AM (6)
Mar 10, 4-5 AM (3)
Mar 10, 5-6 AM (5)
Mar 10, 6-7 AM (20)
Mar 10, 7-8 AM (69)
Mar 10, 8-9 AM (110)
Mar 10, 9-10 AM (30)
Mar 10, 10-11 AM (30)
Mar 10, 11-12 PM (53)
Mar 10, 12-1 PM (65)
Mar 10, 1-2 PM (51)
Mar 10, 2-3 PM (89)
Mar 10, 3-4 PM (39)
Mar 10, 4-5 PM (44)
Mar 10, 5-6 PM (26)
Mar 10, 6-7 PM (10)
Mar 10, 7-8 PM (30)
Mar 10, 8-9 PM (15)
Mar 10, 9-10 PM (33)
Mar 10, 10-11 PM (30)
Mar 10, 11-12 AM (46)
Mar 11, 12-1 AM (13)
Mar 11, 1-2 AM (10)
Mar 11, 2-3 AM (6)
Mar 11, 3-4 AM (0)
Mar 11, 4-5 AM (4)
Mar 11, 5-6 AM (3)
Mar 11, 6-7 AM (26)
Mar 11, 7-8 AM (41)
Mar 11, 8-9 AM (94)
Mar 11, 9-10 AM (24)
Mar 11, 10-11 AM (67)
Mar 11, 11-12 PM (37)
Mar 11, 12-1 PM (67)
Mar 11, 1-2 PM (62)
Mar 11, 2-3 PM (33)
Mar 11, 3-4 PM (45)
Mar 11, 4-5 PM (41)
Mar 11, 5-6 PM (51)
Mar 11, 6-7 PM (35)
Mar 11, 7-8 PM (20)
Mar 11, 8-9 PM (39)
Mar 11, 9-10 PM (14)
Mar 11, 10-11 PM (57)
Mar 11, 11-12 AM (43)
Mar 12, 12-1 AM (4)
Mar 12, 1-2 AM (8)
Mar 12, 2-3 AM (6)
Mar 12, 3-4 AM (3)
Mar 12, 4-5 AM (4)
Mar 12, 5-6 AM (8)
Mar 12, 6-7 AM (46)
Mar 12, 7-8 AM (15)
Mar 12, 8-9 AM (62)
Mar 12, 9-10 AM (50)
Mar 12, 10-11 AM (85)
Mar 12, 11-12 PM (28)
Mar 12, 12-1 PM (60)
Mar 12, 1-2 PM (48)
Mar 12, 2-3 PM (42)
Mar 12, 3-4 PM (55)
Mar 12, 4-5 PM (9)
Mar 12, 5-6 PM (1)
4,382 commits this week Mar 05, 2026 - Mar 12, 2026
[Peras 17] Store round number of latest Peras certificate included on chain (#1864)
The main goal of this PR is to extend the ChainDB API and implementation
with a new method that retrieves the latest (as in _highest_) round
number of a Peras certificate included in a block in our preferred
chain:

 ```haskell
getLatestPerasCertOnChainRound :: STM m (Maybe PerasRoundNo)
```

This is needed by an upcoming voting thread to evaluate the Peras voting rules at the beginning of each Peras round (modulo being also part of the voting committee). 

Worth mentioning, the reason this method only retrieves round numbers and not entire certificates is twofold:
* after certificates are validated, we no longer care about their contents other than their corresponding round numbers (which is ultimately only needed by one of the (sub-) voting rules), and
* round numbers are non-parametric (as opposed to certificates being parameterized by `blk`), substantially simplifying the implementation of this PR.
Nonetheless, it should be straightforward to extend this changes if in the future we find out that we need to extract more information from the latest certificate on chain.

The changes are divided into a couple of (hopefully digestible) atomic commits and I would suggest reviewing them in order:

- 1) Extending `BlockSupportsPeras` with a primitive to (possibly) extract certificates from blocks[^1].

- 2) Extend the Shelley ledger state with a field to cache the latest round number seen in a block. This value is updated whenever a new block is applied to the ledger.

- 3) Introducing the `LedgerSupportsPeras` type class to give access to this field from an arbitrary ledger state (notably needed by the hard fork ledger state), and propagating the constraint everywhere.

- 4) Extending the ChainDB API with the aforementioned `getLatestPerasCertOnChainRound` method, and providing an implementation that returns the latest round number between the ones found in the ledger state of both the volatile and immutable tips[^2].

- 5) (and vi.) Extending the `TestBlock` used by the storage tests to replicate the changes made by (ii) and (iii) to the Shelley ledger state.

- 7) Extending the ChainDB QSM model and tests to exercise the new method in the ChainDB API[^3].

Closes https://github.com/tweag/cardano-peras/issues/198

[^1]: this currently has a degenerate instance that always returns `Nothing`, but this will notably will not be the case after integrating the [changes](https://github.com/IntersectMBO/cardano-ledger/pull/5439) made to the Ledger layer to (possibly) include Peras certificates in Dijkstra block bodies.

[^2]: this might seem overly conservative at first but, as far as we can tell, there is no guarantee that a newer certificate (as in, one included in a younger block) will necessarily point to a higher Peras round number. This means that, the latest round number could be in a certificate included in an immutable block, even if there are newer certificates included in blocks in the volatile suffix. So, we always end up reaching for the maximum of all the available options.

[^3]: this notably required disabling the generation of the new command (as well as the inclusion of certificates in test blocks for good measure) whenever a test runs with `LoEEnabled`. Supporting both simultaneously is outside of the scope of this PR (and of pre-alpha Peras as whole).
fix: register runtime.onConnect synchronously on SW startup [LW-14540] (#2188)
* chore: bump cardano-js-sdk

* fix: register runtime.onConnect synchronously on SW startup

When the service worker is woken by a content script connection,
the runtime.onConnect listener was not yet registered because it
was set up lazily inside the dynamically imported modules. This
caused the first DApp connector call to fail.

Call getBackgroundMessenger synchronously before the dynamic import
so the listener is in place immediately. The singleton ensures all
later exposeApi calls reuse the same messenger instance.
Bump dompurify from 3.3.1 to 3.3.3 in /docs/website
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.3.1 to 3.3.3.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.3.1...3.3.3)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.3.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Fix submitTxToNodeLocal leaky exception (#1102)
Wrap connectToLocalNode in try @SomeException and introduce a unified
TxSubmitResult return type with three constructors: TxSubmitSuccess,
TxSubmitFail, and TxSubmitError. Previously, network-level errors (e.g.
BearerClosed) escaped as exceptions; they are now surfaced as TxSubmitError.

Update the cardano-rpc call site to pattern-match on TxSubmitResult
directly, removing the tryAny workaround it used to compensate for this.
test(e2e): group profile setup as initiator (#1626)
* Add group profile onboarding E2E: feature files, remote-initiator helper, ssi-agent-urls

* updated the helper, steps

* updated the test

* added contract

* test: split group profile features and backend step definitions

* chore(test): added createBackendUser and createRemoteInitiator interfaces

* chore: add support for witness config

* fixed getOObi, added agent role in init

* chore: eventual acceptGroupInvitation fix

* fix: Joiner business logic

* fix: add endRole sign from remoteJoiner aafter group creation

* test: normalize tests for Initiator creates multisig group and it becomes active

* test: fix the step "all members accept the group invitation"

* test(e2e): address PR comments

---------

Co-authored-by: Ankit Shukla <[email protected]>
Co-authored-by: Ankit Shukla <[email protected]>
Co-authored-by: Ankit Shukla <[email protected]>