| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Consensus.Fragment.Diff
Description
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)
- getTip :: HasHeader b => ChainDiff b -> Point b
- getAnchorPoint :: ChainDiff b -> Point b
- rollbackExceedsSuffix :: HasHeader b => ChainDiff b -> Bool
- extend :: AnchoredFragment b -> ChainDiff b
- diff :: (HasHeader b, HasCallStack) => AnchoredFragment b -> AnchoredFragment b -> ChainDiff b
- apply :: HasHeader b => AnchoredFragment b -> ChainDiff b -> Maybe (AnchoredFragment b)
- append :: HasHeader b => ChainDiff b -> b -> ChainDiff b
- truncate :: (HasHeader b, HasCallStack) => Point b -> ChainDiff b -> ChainDiff b
- takeWhileOldest :: HasHeader b => (b -> Bool) -> ChainDiff b -> ChainDiff b
- mapM :: forall a b m. (HasHeader b, HeaderHash a ~ HeaderHash b, Monad m) => (a -> m b) -> ChainDiff a -> m (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.
Constructors
| ChainDiff | |
Fields
| |
Queries
getAnchorPoint :: ChainDiff b -> Point b Source #
Return the anchor point of the new suffix
Constructors
Arguments
| :: (HasHeader b, HasCallStack) | |
| => AnchoredFragment b | Current chain |
| -> AnchoredFragment b | Candidate chain |
| -> ChainDiff b |
Application
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.
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.
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.
mapM :: forall a b m. (HasHeader b, HeaderHash a ~ HeaderHash b, Monad m) => (a -> m b) -> ChainDiff a -> m (ChainDiff b) Source #