Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Intended for qualified import
import Ouroboros.Consensus.Fragment.Diff (ChainDiff (..)) import qualified Ouroboros.Consensus.Fragment.Diff as Diff
Synopsis
- data ChainDiff b = ChainDiff {
- getRollback ∷ !Word64
- getSuffix ∷ !(AnchoredFragment b)
- getAnchorPoint ∷ ChainDiff b → Point b
- getTip ∷ HasHeader b ⇒ ChainDiff b → Point b
- rollbackExceedsSuffix ∷ HasHeader b ⇒ ChainDiff b → Bool
- diff ∷ (HasHeader b, HasHeader b', HeaderHash b ~ HeaderHash b', HasCallStack) ⇒ AnchoredFragment b' → AnchoredFragment b → ChainDiff b
- extend ∷ AnchoredFragment b → ChainDiff b
- apply ∷ HasHeader b ⇒ AnchoredFragment b → ChainDiff b → Maybe (AnchoredFragment b)
- append ∷ HasHeader b ⇒ ChainDiff b → b → ChainDiff b
- mapM ∷ ∀ a b m. (HasHeader b, HeaderHash a ~ HeaderHash b, Monad m) ⇒ (a → m b) → ChainDiff a → m (ChainDiff b)
- takeWhileOldest ∷ HasHeader b ⇒ (b → Bool) → ChainDiff b → ChainDiff b
- truncate ∷ (HasHeader b, HasCallStack) ⇒ Point b → ChainDiff b → ChainDiff b
Documentation
A diff of a chain (fragment).
Typical instantiations of the type argument b
: a block type blk
,
Header blk
, HeaderFields
, ..., anything that supports HasHeader
.
Note: we allow the suffix to be shorter than the number of blocks to roll
back. In other words, applying a ChainDiff
can result in a chain shorter
than the chain to which the diff was applied.
ChainDiff | |
|
Queries
getAnchorPoint ∷ ChainDiff b → Point b Source #
Return the anchor point of the new suffix
Constructors
∷ (HasHeader b, HasHeader b', HeaderHash b ~ HeaderHash b', HasCallStack) | |
⇒ AnchoredFragment b' | Current chain |
→ AnchoredFragment b | Candidate chain |
→ ChainDiff b |
Application
apply ∷ HasHeader b ⇒ AnchoredFragment b → ChainDiff b → Maybe (AnchoredFragment b) Source #
Manipulation
append ∷ HasHeader b ⇒ ChainDiff b → b → ChainDiff b Source #
Append a b
to a ChainDiff
.
PRECONDITION: it must fit onto the end of the suffix.
mapM ∷ ∀ a b m. (HasHeader b, HeaderHash a ~ HeaderHash b, Monad m) ⇒ (a → m b) → ChainDiff a → m (ChainDiff b) Source #
takeWhileOldest ∷ HasHeader b ⇒ (b → Bool) → ChainDiff b → ChainDiff b Source #
Return the longest prefix of the suffix matching the given predicate, starting from the left, i.e., the "oldest" blocks.
If the new suffix is shorter than the diff's rollback, return Nothing
.
truncate ∷ (HasHeader b, HasCallStack) ⇒ Point b → ChainDiff b → ChainDiff b Source #
Truncate the diff by rolling back the new suffix to the given point.
PRECONDITION: the given point must correspond to one of the new
blocks/headers of the new suffix or its anchor (i.e,
).withinFragmentBounds
pt (getSuffix diff)
If the length of the truncated suffix is shorter than the rollback,
Nothing
is returned.