ouroboros-consensus-cardano-test- Test of the instantation of the Ouroboros consensus layer used by Cardano
Safe HaskellNone



Definitions used in ThreadNet tests that involve two eras.



data Partition Source #

When and for how long the nodes are partitioned

The nodes are divided via message delays into two sub-networks by the parity of their CoreNodeId.


Partition SlotNo NumSlots

the scheduled start slot and duration (which includes the start slot)


Instances details
Show Partition Source # 
Instance details

Defined in Test.ThreadNet.Infra.TwoEras

genPartitionNumCoreNodesNumSlotsSecurityParam → Gen Partition Source #

Generate setupPartition

genTestConfigSecurityParam → (EpochSize, EpochSize) → Gen TestConfig Source #

Generate a setupTestConfig relevant to the case where the first era (eg Byron) lasts for one epoch and the second era (eg Shelley) lasts for an interesting number of slots.

Era inspection

data ReachesEra2 Source #

Whether the test included second era blocks and (pre)reqs relevant to that

Note these fields are ordered alphabetically not semantically; see label_ReachesEra2.




  • rsEra1SlotsPrereq

    enough slots in the first era to enable a block in the second era

  • rsPVPrereq

    sufficient protocol version to enable a block in the second era

  • rsEra2BlocksBool

    blocks from the second era included in final chains

  • rsEra2SlotsRequirement

    enough slots in the second era to necessitate a block in the second era


Instances details
Show ReachesEra2 Source # 
Instance details

Defined in Test.ThreadNet.Infra.TwoEras

Generic ReachesEra2 Source # 
Instance details

Defined in Test.ThreadNet.Infra.TwoEras

Associated Types

type Rep ReachesEra2TypeType Source #

CollectReqs ReachesEra2 Source # 
Instance details

Defined in Test.ThreadNet.Infra.TwoEras

type Rep ReachesEra2 Source # 
Instance details

Defined in Test.ThreadNet.Infra.TwoEras

type Rep ReachesEra2 = D1 ('MetaData "ReachesEra2" "Test.ThreadNet.Infra.TwoEras" "ouroboros-consensus-cardano-test-" 'False) (C1 ('MetaCons "ReachesEra2" 'PrefixI 'True) ((S1 ('MetaSel ('Just "rsEra1Slots") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Prereq) :*: S1 ('MetaSel ('Just "rsPV") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Prereq)) :*: (S1 ('MetaSel ('Just "rsEra2Blocks") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool) :*: S1 ('MetaSel ('Just "rsEra2Slots") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Requirement))))

activeSlotCoeffRational Source #

The active slot coefficient, f.

Some of these tests include epochs in the second era in which stakepools are actually leading. In that case, the k, d, and f parameters and the length of any scheduled network partitions need to be balanced so that Common Prefix violations (in particular, wedges) are extremely unlikely.

isFirstEraBlockHardForkBlock (era ': eras) → Bool Source #

ledgerReachesEra2ReachesEra2Bool Source #

Is the update proposal adopted?

mkMessageDelayPartitionCalcMessageDelay blk Source #

The temporary partition as a CalcMessageDelay

Calculates the delays that implement setupPartition.

numFirstEraEpochsNum a ⇒ a Source #

The number of epochs in the first era in this test

All nodes join in slot 0, we generate the proposal in slot 0, we also generate the votes in slot 0, and the nodes are endorsing the proposal as of slot 0. Thus we expect that the first era will end after one epoch. Otherwise it would indicate some sort of protocol failure.

secondEraOverlaySlotsNumSlotsNumSlots → UnitInterval → EpochSizeSet SlotNo Source #

All OBFT overlay slots in the second era.


label_ReachesEra2ReachesEra2String Source #

List the (pre)reqs in semantic order, followed by the observation

label_hadActiveNonOverlaySlotsTestOutput (HardForkBlock (era ': eras)) → Set SlotNoString Source #

Whether there was a block forged in a non-overlay slot in the second era.

This event evidences that the stake pools were correctly created and delegated to.

prop_ReachesEra2ReachesEra2 → Property Source #

Checks if the observation satisfies the (pre)reqs

tabulatePartitionDurationSecurityParamPartition → Property → Property Source #

tabulatePartitionPositionNumSlotsPartitionBool → Property → Property Source #