Safe Haskell | None |
---|---|
Language | Haskell2010 |
The UTXO state, kept in memory by the chain index.
Synopsis
- data UtxoState a = UtxoState {
- _usTxUtxoData :: a
- _usTip :: Tip
- usTxUtxoData :: forall a a. Lens (UtxoState a) (UtxoState a) a a
- usTip :: forall a. Lens' (UtxoState a) Tip
- type UtxoIndex a = FingerTree (BlockCount, UtxoState a) (UtxoState a)
- utxoState :: Monoid a => UtxoIndex a -> UtxoState a
- utxoBlockCount :: Monoid a => UtxoIndex a -> Int
- tip :: UtxoState a -> Tip
- viewTip :: Monoid a => UtxoIndex a -> Tip
- pointLessThanTip :: Point -> Tip -> Bool
- data InsertUtxoPosition
- data InsertUtxoSuccess a = InsertUtxoSuccess {}
- data InsertUtxoFailed
- insert :: (Monoid a, Eq a) => UtxoState a -> UtxoIndex a -> Either InsertUtxoFailed (InsertUtxoSuccess a)
- data RollbackFailed
- = RollbackNoTip
- | TipMismatch {
- foundTip :: Tip
- targetPoint :: Point
- | OldPointNotFound Point
- data RollbackResult a = RollbackResult {
- newTip :: Tip
- rolledBackIndex :: UtxoIndex a
- rollbackWith :: Monoid a => (UtxoIndex a -> UtxoIndex a -> UtxoIndex a) -> Point -> UtxoIndex a -> Either RollbackFailed (RollbackResult a)
- data ReduceBlockCountResult a
- reduceBlockCount :: Monoid a => Depth -> UtxoIndex a -> ReduceBlockCountResult a
- newtype BlockCount = BlockCount {
- getBlockCount :: Int
Documentation
UTXO / ledger state, kept in memory. We are only interested in the UTXO set, everything else is stored on disk. This is OK because we don't need to validate transactions when they come in.
UtxoState | |
|
Instances
usTxUtxoData :: forall a a. Lens (UtxoState a) (UtxoState a) a a Source #
pointLessThanTip :: Point -> Tip -> Bool Source #
Is the given point earlier than the provided tip. Yes, if the point is the genersis point, no if the tip is the genesis point, otherwise, just compare the slots.
Extending the UTXO index
data InsertUtxoPosition Source #
Outcome of inserting a UtxoState
into the utxo index
InsertAtEnd | The utxo state was added to the end. Returns the new index |
InsertBeforeEnd | The utxo state was added somewhere before the end. Returns the new index and the tip |
Instances
data InsertUtxoSuccess a Source #
Instances
Pretty (InsertUtxoSuccess a) Source # | |
Defined in Plutus.ChainIndex.UtxoState pretty :: InsertUtxoSuccess a -> Doc ann prettyList :: [InsertUtxoSuccess a] -> Doc ann |
data InsertUtxoFailed Source #
UTXO state could not be inserted into the chain index
DuplicateBlock Tip | Insertion failed as there was already a block with the given number |
InsertUtxoNoTip | The |
Instances
insert :: (Monoid a, Eq a) => UtxoState a -> UtxoIndex a -> Either InsertUtxoFailed (InsertUtxoSuccess a) Source #
Insert a UtxoState
into the index
Rollbacks
data RollbackFailed Source #
Reason why the rollback
operation failed
RollbackNoTip | Rollback failed because the utxo index had no tip (not synchronised) |
TipMismatch | Unable to roll back to |
| |
OldPointNotFound Point | Unable to find the old tip |
Instances
data RollbackResult a Source #
RollbackResult | |
|
:: Monoid a | |
=> (UtxoIndex a -> UtxoIndex a -> UtxoIndex a) | Calculate the new index given the index before and the index after the rollback point. |
-> Point | |
-> UtxoIndex a | |
-> Either RollbackFailed (RollbackResult a) |
Perform a rollback on the utxo index, with a callback to calculate the new index.
Limit the UTXO index size
data ReduceBlockCountResult a Source #
reduceBlockCount :: Monoid a => Depth -> UtxoIndex a -> ReduceBlockCountResult a Source #
newtype BlockCount Source #
Instances
Semigroup BlockCount Source # | |
Defined in Plutus.ChainIndex.UtxoState (<>) :: BlockCount -> BlockCount -> BlockCount Source # sconcat :: NonEmpty BlockCount -> BlockCount Source # stimes :: Integral b => b -> BlockCount -> BlockCount Source # | |
Monoid BlockCount Source # | |
Defined in Plutus.ChainIndex.UtxoState mempty :: BlockCount Source # mappend :: BlockCount -> BlockCount -> BlockCount Source # mconcat :: [BlockCount] -> BlockCount Source # | |
Monoid a => Measured (BlockCount, UtxoState a) (UtxoState a) Source # | |
Defined in Plutus.ChainIndex.UtxoState measure :: UtxoState a -> (BlockCount, UtxoState a) |