Home / Input Output / ouroboros-consensus
Sep 15, 4-5 AM (0)
Sep 15, 5-6 AM (0)
Sep 15, 6-7 AM (2)
Sep 15, 7-8 AM (2)
Sep 15, 8-9 AM (1)
Sep 15, 9-10 AM (0)
Sep 15, 10-11 AM (1)
Sep 15, 11-12 PM (1)
Sep 15, 12-1 PM (0)
Sep 15, 1-2 PM (3)
Sep 15, 2-3 PM (0)
Sep 15, 3-4 PM (1)
Sep 15, 4-5 PM (0)
Sep 15, 5-6 PM (0)
Sep 15, 6-7 PM (0)
Sep 15, 7-8 PM (0)
Sep 15, 8-9 PM (0)
Sep 15, 9-10 PM (0)
Sep 15, 10-11 PM (0)
Sep 15, 11-12 AM (0)
Sep 16, 12-1 AM (0)
Sep 16, 1-2 AM (0)
Sep 16, 2-3 AM (0)
Sep 16, 3-4 AM (0)
Sep 16, 4-5 AM (0)
Sep 16, 5-6 AM (0)
Sep 16, 6-7 AM (0)
Sep 16, 7-8 AM (0)
Sep 16, 8-9 AM (0)
Sep 16, 9-10 AM (4)
Sep 16, 10-11 AM (4)
Sep 16, 11-12 PM (0)
Sep 16, 12-1 PM (20)
Sep 16, 1-2 PM (3)
Sep 16, 2-3 PM (0)
Sep 16, 3-4 PM (1)
Sep 16, 4-5 PM (0)
Sep 16, 5-6 PM (0)
Sep 16, 6-7 PM (0)
Sep 16, 7-8 PM (0)
Sep 16, 8-9 PM (0)
Sep 16, 9-10 PM (0)
Sep 16, 10-11 PM (0)
Sep 16, 11-12 AM (0)
Sep 17, 12-1 AM (0)
Sep 17, 1-2 AM (0)
Sep 17, 2-3 AM (0)
Sep 17, 3-4 AM (0)
Sep 17, 4-5 AM (0)
Sep 17, 5-6 AM (0)
Sep 17, 6-7 AM (17)
Sep 17, 7-8 AM (3)
Sep 17, 8-9 AM (15)
Sep 17, 9-10 AM (3)
Sep 17, 10-11 AM (0)
Sep 17, 11-12 PM (19)
Sep 17, 12-1 PM (9)
Sep 17, 1-2 PM (0)
Sep 17, 2-3 PM (0)
Sep 17, 3-4 PM (10)
Sep 17, 4-5 PM (0)
Sep 17, 5-6 PM (0)
Sep 17, 6-7 PM (0)
Sep 17, 7-8 PM (0)
Sep 17, 8-9 PM (0)
Sep 17, 9-10 PM (0)
Sep 17, 10-11 PM (0)
Sep 17, 11-12 AM (0)
Sep 18, 12-1 AM (0)
Sep 18, 1-2 AM (0)
Sep 18, 2-3 AM (0)
Sep 18, 3-4 AM (0)
Sep 18, 4-5 AM (0)
Sep 18, 5-6 AM (1)
Sep 18, 6-7 AM (0)
Sep 18, 7-8 AM (23)
Sep 18, 8-9 AM (9)
Sep 18, 9-10 AM (0)
Sep 18, 10-11 AM (2)
Sep 18, 11-12 PM (11)
Sep 18, 12-1 PM (1)
Sep 18, 1-2 PM (1)
Sep 18, 2-3 PM (1)
Sep 18, 3-4 PM (0)
Sep 18, 4-5 PM (0)
Sep 18, 5-6 PM (1)
Sep 18, 6-7 PM (0)
Sep 18, 7-8 PM (0)
Sep 18, 8-9 PM (0)
Sep 18, 9-10 PM (0)
Sep 18, 10-11 PM (0)
Sep 18, 11-12 AM (0)
Sep 19, 12-1 AM (0)
Sep 19, 1-2 AM (0)
Sep 19, 2-3 AM (0)
Sep 19, 3-4 AM (0)
Sep 19, 4-5 AM (0)
Sep 19, 5-6 AM (0)
Sep 19, 6-7 AM (7)
Sep 19, 7-8 AM (3)
Sep 19, 8-9 AM (0)
Sep 19, 9-10 AM (0)
Sep 19, 10-11 AM (0)
Sep 19, 11-12 PM (0)
Sep 19, 12-1 PM (0)
Sep 19, 1-2 PM (1)
Sep 19, 2-3 PM (0)
Sep 19, 3-4 PM (1)
Sep 19, 4-5 PM (0)
Sep 19, 5-6 PM (0)
Sep 19, 6-7 PM (0)
Sep 19, 7-8 PM (0)
Sep 19, 8-9 PM (0)
Sep 19, 9-10 PM (0)
Sep 19, 10-11 PM (0)
Sep 19, 11-12 AM (0)
Sep 20, 12-1 AM (0)
Sep 20, 1-2 AM (0)
Sep 20, 2-3 AM (2)
Sep 20, 3-4 AM (0)
Sep 20, 4-5 AM (0)
Sep 20, 5-6 AM (0)
Sep 20, 6-7 AM (0)
Sep 20, 7-8 AM (0)
Sep 20, 8-9 AM (0)
Sep 20, 9-10 AM (0)
Sep 20, 10-11 AM (0)
Sep 20, 11-12 PM (0)
Sep 20, 12-1 PM (0)
Sep 20, 1-2 PM (0)
Sep 20, 2-3 PM (0)
Sep 20, 3-4 PM (0)
Sep 20, 4-5 PM (0)
Sep 20, 5-6 PM (0)
Sep 20, 6-7 PM (0)
Sep 20, 7-8 PM (0)
Sep 20, 8-9 PM (0)
Sep 20, 9-10 PM (0)
Sep 20, 10-11 PM (0)
Sep 20, 11-12 AM (0)
Sep 21, 12-1 AM (0)
Sep 21, 1-2 AM (0)
Sep 21, 2-3 AM (0)
Sep 21, 3-4 AM (0)
Sep 21, 4-5 AM (0)
Sep 21, 5-6 AM (0)
Sep 21, 6-7 AM (0)
Sep 21, 7-8 AM (0)
Sep 21, 8-9 AM (0)
Sep 21, 9-10 AM (0)
Sep 21, 10-11 AM (0)
Sep 21, 11-12 PM (0)
Sep 21, 12-1 PM (0)
Sep 21, 1-2 PM (0)
Sep 21, 2-3 PM (0)
Sep 21, 3-4 PM (0)
Sep 21, 4-5 PM (0)
Sep 21, 5-6 PM (0)
Sep 21, 6-7 PM (0)
Sep 21, 7-8 PM (0)
Sep 21, 8-9 PM (0)
Sep 21, 9-10 PM (0)
Sep 21, 10-11 PM (0)
Sep 21, 11-12 AM (0)
Sep 22, 12-1 AM (0)
Sep 22, 1-2 AM (0)
Sep 22, 2-3 AM (0)
Sep 22, 3-4 AM (0)
Sep 22, 4-5 AM (0)
183 commits this week Sep 15, 2025 - Sep 22, 2025
Redefine `Header` with `MemoBytes` (#1687)
Since we removed the `era` type parameter in `MemoBytes` (in
`cardano-ledger-core`), we can use `MemoBytes` to define more types that
need to be memoized - `Header` among them.

This simplifies the definition of `Header` and also brings some
instances for free.

Closes https://github.com/IntersectMBO/cardano-ledger/issues/4850
ThreadNet tests: make test output less verbose (#1685)
This small change makes the output of passing ThreadNet tests less
verbose by allowing to use `tasty`'s `--hide-successes` CLI option.

With this change, the output of the following test invocation:

```
cabal test -O0 cardano-test --test-options '--hide-successes -p "$2==\"AllegraMary ThreadNet\" && $3==\"simple convergence\""'
```

is still very verbose, but, in my opinion, is relatively readable:

<details>

<summary>Output with Change</summary>

```
Running 1 test suites...
Test suite cardano-test: RUNNING...

All 1 tests passed (34.91s)
Test suite cardano-test: PASS
Test suite logged to:
/home/geo2a/Workspace/IOG/ouroboros-consensus/other-pr/dist-newstyle/build/x86_64-linux/ghc-9.6.7/ouroboros-consensus-cardano-0.25.1.0/t/cardano-test/noopt/test/ouroboros-consensus-cardano-0.25.1.0-cardano-test.log
1 of 1 test suites (1 of 1 test cases) passed.
```
</details>

without the change, the output contains a series of long lines that make
the output much more difficult to comprehend. When I see the output, I
have a feeling that there's something wrong with this test, even though
it is passing. This is especially annoying in CI output, when some other
tests are actually failing.

<details>

<summary> Output on `main`</summary>

```
Test suite cardano-test: RUNNING...
cardano
  AllegraMary ThreadNet
    simple convergence: OK (39.19s)
      +++ OK, passed 10 tests.

      Observed forge during a non-overlay slot in the second era (10 in total):
      80% True
      20% False

      ReachesEra2 label (10 in total):
      90% pv Enabled, slots1 Enabled, slots2 Required, blocks2 True
      10% pv Enabled, slots1 Blocked, slots2 Optional, blocks2 False

      average #txs/block (10 in total):
      100% R_Btwn (0.0,1.0)

      final intersection depth, Allegra, count (9 in total):
      100% 0 blocks

      final intersection depth, Allegra, k diff (9 in total):
      56% k - 8 blocks
      22% k - 10 blocks
      22% k - 9 blocks

      final intersection depth, Allegra, k frac (9 in total):
      100% k * 0.0 blocks

      final intersection depth, Mary, count (1 in total):
      100% 0 blocks

      final intersection depth, Mary, k diff (1 in total):
      100% k - 10 blocks

      final intersection depth, Mary, k frac (1 in total):
      100% k * 0.0 blocks

      floor(4 * lastJoinSlot / numSlots) (10 in total):
      100% Just 0

      involves >=1 re-delegation (10 in total):
      100% False

      k (10 in total):
      50% NonZero {unNonZero = 8}
      30% NonZero {unNonZero = 10}
      20% NonZero {unNonZero = 9}

      minimumDegreeNodeTopology (10 in total):
      60% Just 2
      40% Just 1

      partition duration, count (10 in total):
      20% 3 slots
      20% 7 slots
      10% 1 slots
      10% 10 slots
      10% 12 slots
      10% 13 slots
      10% 5 slots
      10% 6 slots

      partition duration, k frac (10 in total):
      20% k * 0.3 slots
      10% k * 0.1 slots
      10% k * 0.6 slots
      10% k * 0.7 slots
      10% k * 0.8 slots
      10% k * 0.9 slots
      10% k * 1.0 slots
      10% k * 1.5 slots
      10% k * 1.6 slots

      partition in or abuts era (First era, Second era) (10 in total):
      100% (True,False)

      shortestLength (k = NonZero {unNonZero = 10}) (3 in total):
      67% ≈ (k = NonZero {unNonZero = 10}) << 522
      33% ≈ (k = NonZero {unNonZero = 10}) << 138

      shortestLength (k = NonZero {unNonZero = 8}) (5 in total):
      80% ≈ (k = NonZero {unNonZero = 8}) << 136
      20% ≈ (k = NonZero {unNonZero = 8}) << 264

      shortestLength (k = NonZero {unNonZero = 9}) (2 in total):
      50% ≈ (k = NonZero {unNonZero = 9}) << 265
      50% ≈ (k = NonZero {unNonZero = 9}) << 521

      updates (10 in total):
      20%
        (c0,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 2 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c1,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 2 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])

      10%
        (c0,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 1 % 2, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c1,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 1 % 2, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c2,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 1 % 2, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])

      10%
        (c0,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 1 % 2, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1)])
        (c1,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 1 % 2, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1)])
        (c2,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 1 % 2, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1)])

      10%
        (c0,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 2 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1),ShelleyUpdatedPParams SNothing (EpochNo 3),ShelleyUpdatedPParams SNothing (EpochNo 4)])
        (c1,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 2 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1),ShelleyUpdatedPParams SNothing (EpochNo 3),ShelleyUpdatedPParams SNothing (EpochNo 4)])

      10%
        (c0,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 2 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c1,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 2 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c2,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 2 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])

      10%
        (c0,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 3 % 10, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1),ShelleyUpdatedPParams SNothing (EpochNo 3),ShelleyUpdatedPParams SNothing (EpochNo 4)])
        (c1,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 3 % 10, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1),ShelleyUpdatedPParams SNothing (EpochNo 3),ShelleyUpdatedPParams SNothing (EpochNo 4)])
        (c2,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 3 % 10, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1),ShelleyUpdatedPParams SNothing (EpochNo 3),ShelleyUpdatedPParams SNothing (EpochNo 4)])
        (c3,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 3 % 10, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1),ShelleyUpdatedPParams SNothing (EpochNo 3),ShelleyUpdatedPParams SNothing (EpochNo 4)])

      10%
        (c0,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 3 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1),ShelleyUpdatedPParams SNothing (EpochNo 3),ShelleyUpdatedPParams SNothing (EpochNo 4)])
        (c1,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 3 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1),ShelleyUpdatedPParams SNothing (EpochNo 3),ShelleyUpdatedPParams SNothing (EpochNo 4)])
        (c2,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 3 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1),ShelleyUpdatedPParams SNothing (EpochNo 3),ShelleyUpdatedPParams SNothing (EpochNo 4)])

      10%
        (c0,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 4 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c1,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 4 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c2,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 4 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c3,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 4 % 5, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])

      10%
        (c0,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 9 % 10, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c1,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 9 % 10, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])
        (c2,[ShelleyUpdatedPParams (SJust (PParams (ShelleyPParams {sppMinFeeA = Coin 0, sppMinFeeB = Coin 0, sppMaxBBSize = 10000, sppMaxTxSize = 2048, sppMaxBHSize = 1000, sppKeyDeposit = Coin 0, sppPoolDeposit = CompactCoin {unCompactCoin = 0}, sppEMax = EpochInterval 0, sppNOpt = 100, sppA0 = 0 % 1, sppRho = 0 % 1, sppTau = 0 % 1, sppD = 9 % 10, sppExtraEntropy = NeutralNonce, sppProtocolVersion = ProtVer {pvMajor = Version 3, pvMinor = 0}, sppMinUTxOValue = Coin 0, sppMinPoolCost = Coin 0}))) (EpochNo 1),confirmed (Allegra,Mary,1),done (Allegra,Mary,1)])

All 1 tests passed (39.20s)
Test suite cardano-test: PASS
```

</details>
Adapt the HFC time translation layer for Peras
- Add `PerasRoundLength`
- introduce the `PerasEnabled` datatype to track values
  are only used when Peras is enabled
- HFC: translate between Peras rounds and slots

Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Implement general ObjectDiffusion protocol, and related `ObjectPool{Reader,Writer}` API
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Change s-r-p for `ouroboros-network` to add ObjectDiffusion support
Also use defaultMiniProtocolParameters instead of hardcoded value in unstable-diffusion-testlib
to account for newly defined parameters in the new `ouroboros-network`
version.
Also integrate `NodeToNodeV_16`.

Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Add definitions and codec for `PerasCert` diffusion through ObjectDiffusion
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>
Register and wire-in PerasCertDiffusion in the network layer
Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Co-authored-by: Nicolas "Niols" Jeannerod <[email protected]>