| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Consensus.Storage.PerasCertDB.API
Contents
Synopsis
- data PerasCertDB (m ∷ Type → Type) blk = PerasCertDB {
- addCert ∷ WithArrivalTime (ValidatedPerasCert blk) → STM m (m AddPerasCertResult)
- getCertIds ∷ STM m (Set PerasRoundNo)
- getCertsAfter ∷ PerasCertTicketNo → STM m (Map PerasCertTicketNo (m (WithArrivalTime (ValidatedPerasCert blk))))
- getWeightSnapshot ∷ STM m (WithFingerprint (PerasWeightSnapshot blk))
- getLatestCertSeen ∷ STM m (Maybe (WithBoostedBlockStatus (WithArrivalTime (ValidatedPerasCert blk))))
- garbageCollect ∷ SlotNo → STM m (m ())
- data WithBoostedBlockStatus cert
- forgetBoostedBlockStatus ∷ WithBoostedBlockStatus cert → cert
- data AddPerasCertResult
- data PerasCertTicketNo
- zeroPerasCertTicketNo ∷ PerasCertTicketNo
- prop_addCertThenGetCertIds ∷ MonadSTM m ⇒ PerasCertDB m blk → WithArrivalTime (ValidatedPerasCert blk) → m Bool
- prop_getCertsAfterZero ∷ MonadSTM m ⇒ PerasCertDB m blk → m Bool
- prop_getCertsAfterMonotonic ∷ MonadSTM m ⇒ PerasCertDB m blk → PerasCertTicketNo → m Bool
- prop_garbageCollectRemovesOldCerts ∷ MonadSTM m ⇒ PerasCertDB m blk → SlotNo → m Bool
- prop_addCertLatestCertSeenMonotonic ∷ MonadSTM m ⇒ PerasCertDB m blk → WithArrivalTime (ValidatedPerasCert blk) → m Bool
- prop_garbageCollectPreservesLatestCertSeen ∷ MonadSTM m ⇒ PerasCertDB m blk → SlotNo → m Bool
Documentation
data PerasCertDB (m ∷ Type → Type) blk Source #
Constructors
| PerasCertDB | |
Fields
| |
Instances
| NoThunks (PerasCertDB m blk) Source # | |
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API | |
data WithBoostedBlockStatus cert Source #
Indicate whether the block being boosted by a certificate is expected to still be part of the volatile chain suffix or not.
This is relevant for Peras voting because we need to know if a candidate block extends the chain that contains the block being boosted by the latest certificate seen. For this purpose, we want to limit the voting rules to only look within the volatile chain suffix, and assume that, if the boosted block is no longer in the volatile suffix, then it trivially extends the candidate block (because it must have been copied into the immutable chain prefix). For this reason, we need to manually keep track of whether the boosted block of this certificate has already been garbage collected from the volatile suffix or not.
Constructors
| CertBoostingBlockInVolatileDB cert | Certificate boosting a block within the volatile chain suffix |
| CertBoostingBlockNoLongerInVolatileDB cert | Certificate boosting a block that no longer belongs to the volatile chain suffix. This typically means that the block has been copied to the immutable prefix, and then garbage collected from the volatile suffix. |
Instances
forgetBoostedBlockStatus ∷ WithBoostedBlockStatus cert → cert Source #
Deconstruct a certificate from its provenance wrapper
data AddPerasCertResult Source #
Constructors
| AddedPerasCertToDB | |
| PerasCertAlreadyInDB |
Instances
| Eq AddPerasCertResult Source # | |||||
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API Methods | |||||
| Ord AddPerasCertResult Source # | |||||
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API Methods compare ∷ AddPerasCertResult → AddPerasCertResult → Ordering # (<) ∷ AddPerasCertResult → AddPerasCertResult → Bool # (<=) ∷ AddPerasCertResult → AddPerasCertResult → Bool # (>) ∷ AddPerasCertResult → AddPerasCertResult → Bool # (>=) ∷ AddPerasCertResult → AddPerasCertResult → Bool # max ∷ AddPerasCertResult → AddPerasCertResult → AddPerasCertResult # min ∷ AddPerasCertResult → AddPerasCertResult → AddPerasCertResult # | |||||
| Generic AddPerasCertResult Source # | |||||
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API Associated Types
Methods | |||||
| Show AddPerasCertResult Source # | |||||
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API Methods showsPrec ∷ Int → AddPerasCertResult → ShowS # show ∷ AddPerasCertResult → String # showList ∷ [AddPerasCertResult] → ShowS # | |||||
| NoThunks AddPerasCertResult Source # | |||||
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API | |||||
| type Rep AddPerasCertResult Source # | |||||
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API type Rep AddPerasCertResult = D1 ('MetaData "AddPerasCertResult" "Ouroboros.Consensus.Storage.PerasCertDB.API" "ouroboros-consensus-4.0.0.0-inplace" 'False) (C1 ('MetaCons "AddedPerasCertToDB" 'PrefixI 'False) (U1 ∷ Type → Type) :+: C1 ('MetaCons "PerasCertAlreadyInDB" 'PrefixI 'False) (U1 ∷ Type → Type)) | |||||
data PerasCertTicketNo Source #
A sequence number, incremented every time we receive a new certificate.
Note that we will usually receive certificates monotonically by round number, so round numbers could almost fulfill the role of ticket numbers. However, in certain edge cases (while catching up, or during cooldowns), this might not be true, such as during syncing or during cooldown periods. Therefore, for robustness, we choose to maintain dedicated ticket numbers separately.
Instances
| Eq PerasCertTicketNo Source # | |
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API Methods | |
| Ord PerasCertTicketNo Source # | |
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API Methods compare ∷ PerasCertTicketNo → PerasCertTicketNo → Ordering # (<) ∷ PerasCertTicketNo → PerasCertTicketNo → Bool # (<=) ∷ PerasCertTicketNo → PerasCertTicketNo → Bool # (>) ∷ PerasCertTicketNo → PerasCertTicketNo → Bool # (>=) ∷ PerasCertTicketNo → PerasCertTicketNo → Bool # max ∷ PerasCertTicketNo → PerasCertTicketNo → PerasCertTicketNo # min ∷ PerasCertTicketNo → PerasCertTicketNo → PerasCertTicketNo # | |
| Enum PerasCertTicketNo Source # | |
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API Methods succ ∷ PerasCertTicketNo → PerasCertTicketNo # pred ∷ PerasCertTicketNo → PerasCertTicketNo # toEnum ∷ Int → PerasCertTicketNo # fromEnum ∷ PerasCertTicketNo → Int # enumFrom ∷ PerasCertTicketNo → [PerasCertTicketNo] # enumFromThen ∷ PerasCertTicketNo → PerasCertTicketNo → [PerasCertTicketNo] # enumFromTo ∷ PerasCertTicketNo → PerasCertTicketNo → [PerasCertTicketNo] # enumFromThenTo ∷ PerasCertTicketNo → PerasCertTicketNo → PerasCertTicketNo → [PerasCertTicketNo] # | |
| Show PerasCertTicketNo Source # | |
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API Methods showsPrec ∷ Int → PerasCertTicketNo → ShowS # show ∷ PerasCertTicketNo → String # showList ∷ [PerasCertTicketNo] → ShowS # | |
| NoThunks PerasCertTicketNo Source # | |
Defined in Ouroboros.Consensus.Storage.PerasCertDB.API | |
Invariants
prop_addCertThenGetCertIds ∷ MonadSTM m ⇒ PerasCertDB m blk → WithArrivalTime (ValidatedPerasCert blk) → m Bool Source #
After adding a cert, its round number should be present in getCertIds.
prop_getCertsAfterZero ∷ MonadSTM m ⇒ PerasCertDB m blk → m Bool Source #
getCertsAfter with ticket 0 should return all certs in the database.
NOTE: this property is not purely STM.
prop_getCertsAfterMonotonic ∷ MonadSTM m ⇒ PerasCertDB m blk → PerasCertTicketNo → m Bool Source #
getCertsAfter returns strictly increasing ticket numbers.
prop_garbageCollectRemovesOldCerts ∷ MonadSTM m ⇒ PerasCertDB m blk → SlotNo → m Bool Source #
After garbage collection for slot S, no certs with target slot < S should remain. NOTE: this property is not purely STM.
prop_addCertLatestCertSeenMonotonic ∷ MonadSTM m ⇒ PerasCertDB m blk → WithArrivalTime (ValidatedPerasCert blk) → m Bool Source #
After adding a cert, the round number reported by getLatestCertSeen
should be greater than or equal to its previous value.
prop_garbageCollectPreservesLatestCertSeen ∷ MonadSTM m ⇒ PerasCertDB m blk → SlotNo → m Bool Source #
getLatestCertSeen is not affected by garbage collection.