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

Ouroboros.Consensus.Fragment.InFuture

Description

Intended for qualified import

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

Documentation

data CheckInFuture m blk Source #

Constructors

CheckInFuture 

Fields

Instances

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

Defined in Ouroboros.Consensus.Fragment.InFuture

Methods

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

Constructors

InFuture 

Fields

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.

opaque

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.

Testing

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 #

Arguments

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

Get current slot

Word64

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.