ouroboros-consensus- Consensus layer for the Ouroboros blockchain protocol
Safe HaskellNone



Intended for qualified import

import Ouroboros.Consensus.Fragment.InFuture (CheckInFuture(..), ClockSkew(..))
import qualified Ouroboros.Consensus.Fragment.InFuture as InFuture


data CheckInFuture m blk Source #





Instances details
NoThunks (CheckInFuture m blk) Source # 
Instance details

Defined in Ouroboros.Consensus.Fragment.InFuture


noThunks ∷ Context → CheckInFuture m blk → IO (Maybe ThunkInfo) #

wNoThunks ∷ Context → CheckInFuture m blk → IO (Maybe ThunkInfo) #

showTypeOfProxy (CheckInFuture m blk) → String #

data InFuture m blk Source #

Header of block that we found to be in the future




reference ∷ ∀ m blk. (Monad m, UpdateLedger blk, HasHardForkHistory blk) ⇒ LedgerConfig blk → ClockSkewSystemTime m → CheckInFuture m blk Source #

Clock skew

clockSkewInSecondsDoubleClockSkew Source #

Specify maximum clock skew in seconds

defaultClockSkewClockSkew Source #

Default maximum permissible clock skew

See ClockSkew for details. We allow for 5 seconds skew by default.


data ClockSkew Source #

Maximum permissible clock skew

When running NTP, systems clocks will never be perfectly synchronized. The maximum clock skew records how much of a difference we consider acceptable.

For example. Suppose

  • Two nodes A and B
  • A's clock is 0.5 ahead of B's
  • A produces a block and sends it to B
  • When B translates the SlotNo of that block to a time, it may find that it is 0.5 seconds ahead of its current clock (worst case).

The maximum permissible clock skew decides if B will consider this block to be valid (even if it will not yet consider it for chain seleciton) or as invalid (and disconnect from A, since A is sending it invalid blocks).

Use defaultClockSkew when unsure.


dontCheckMonad m ⇒ CheckInFuture m blk Source #

Trivial InFuture check that doesn't do any check at all

This is useful for testing and tools such as the DB converter.

miracle Source #


∷ ∀ m blk. (MonadSTM m, HasHeader (Header blk)) 
STM m SlotNo

Get current slot


Maximum clock skew (in terms of slots)

CheckInFuture m blk 

If by some miracle we have a function that can always tell us what the correct slot is, implementing CheckInFuture is easy

NOTE: Use of miracle in tests means that none of the hard fork infrastructure for converting slots to time is tested.