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

Ouroboros.Consensus.Ledger.SupportsMempool

Synopsis

Documentation

data family GenTx blk :: Type Source #

Generalized transaction

The mempool (and, accordingly, blocks) consist of "generalized transactions"; this could be "proper" transactions (transferring funds) but also other kinds of things such as update proposals, delegations, etc.

Instances

Instances details
Isomorphic GenTx Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Unary

Methods

project :: NoHardForks blk => GenTx (HardForkBlock '[blk]) -> GenTx blk Source #

inject :: NoHardForks blk => GenTx blk -> GenTx (HardForkBlock '[blk]) Source #

(Typeable m, Typeable a) => ShowProxy (TxId (GenTx (DualBlock m a)) :: Type) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

showProxy :: Proxy (TxId (GenTx (DualBlock m a))) -> String Source #

Typeable xs => ShowProxy (TxId (GenTx (HardForkBlock xs)) :: Type) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

(Typeable m, Typeable a) => ShowProxy (GenTx (DualBlock m a) :: Type) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Typeable xs => ShowProxy (GenTx (HardForkBlock xs) :: Type) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

Eq (GenTxId m) => Eq (TxId (GenTx (DualBlock m a))) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

(==) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

(/=) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

CanHardFork xs => Eq (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

CanHardFork xs => Eq (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

Ord (GenTxId m) => Ord (TxId (GenTx (DualBlock m a))) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

compare :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Ordering #

(<) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

(<=) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

(>) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

(>=) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

max :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) #

min :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) #

CanHardFork xs => Ord (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

Show (GenTxId m) => Show (TxId (GenTx (DualBlock m a))) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

showsPrec :: Int -> TxId (GenTx (DualBlock m a)) -> ShowS #

show :: TxId (GenTx (DualBlock m a)) -> String #

showList :: [TxId (GenTx (DualBlock m a))] -> ShowS #

CanHardFork xs => Show (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

Bridge m a => Show (GenTx (DualBlock m a)) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

showsPrec :: Int -> GenTx (DualBlock m a) -> ShowS #

show :: GenTx (DualBlock m a) -> String #

showList :: [GenTx (DualBlock m a)] -> ShowS #

CanHardFork xs => Show (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

NoThunks (TxId (GenTx (DualBlock m a))) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

CanHardFork xs => NoThunks (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

NoThunks (GenTx (DualBlock m a)) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

CanHardFork xs => NoThunks (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

All CondenseConstraints xs => Condense (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Condense

All CondenseConstraints xs => Condense (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Condense

Bridge m a => HasTxId (GenTx (DualBlock m a)) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

txId :: GenTx (DualBlock m a) -> TxId (GenTx (DualBlock m a)) Source #

CanHardFork xs => HasTxId (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

SerialiseHFC xs => SerialiseNodeToClient (HardForkBlock xs) (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Serialisation.SerialiseNodeToClient

SerialiseHFC xs => SerialiseNodeToNode (HardForkBlock xs) (GenTxId (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Serialisation.SerialiseNodeToNode

SerialiseHFC xs => SerialiseNodeToNode (HardForkBlock xs) (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Serialisation.SerialiseNodeToNode

newtype TxId (GenTx (DualBlock m a)) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

newtype TxId (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

newtype GenTx (HardForkBlock xs) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

data GenTx (DualBlock m a) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

type family ApplyTxErr blk :: Type Source #

Updating the ledger with a single transaction may result in a different error type as when updating it with a block

Instances

Instances details
type ApplyTxErr (HardForkBlock xs) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

type ApplyTxErr (DualBlock m a) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

class (UpdateLedger blk, NoThunks (GenTx blk), NoThunks (Ticked (LedgerState blk)), Show (GenTx blk), Show (ApplyTxErr blk)) => LedgerSupportsMempool blk where Source #

Minimal complete definition

applyTx, reapplyTx, maxTxCapacity, txInBlockSize

Methods

txInvariant :: GenTx blk -> Bool Source #

Check whether the internal invariants of the transaction hold.

applyTx Source #

Arguments

:: LedgerConfig blk 
-> SlotNo

Slot number of the block containing the tx

-> GenTx blk 
-> TickedLedgerState blk 
-> Except (ApplyTxErr blk) (TickedLedgerState blk) 

Apply transaction we have not previously seen before

reapplyTx Source #

Arguments

:: HasCallStack 
=> LedgerConfig blk 
-> SlotNo

Slot number of the block containing the tx

-> GenTx blk 
-> TickedLedgerState blk 
-> Except (ApplyTxErr blk) (TickedLedgerState blk) 

Re-apply a transaction

When we re-apply a transaction to a potentially different ledger state expensive checks such as cryptographic hashes can be skipped, but other checks (such as checking for double spending) must still be done.

maxTxCapacity :: TickedLedgerState blk -> Word32 Source #

The maximum number of bytes worth of transactions that can be put into a block according to the currently adopted protocol parameters of the ledger state.

This is (conservatively) computed by subtracting the header size and any other fixed overheads from the maximum block size.

txInBlockSize :: GenTx blk -> Word32 Source #

Return the post-serialisation size in bytes of a GenTx /when it is embedded in a block/. This size might differ from the size of the serialisation used to send and receive the transaction across the network.

This size is used to compute how many transaction we can put in a block when forging one.

For example, CBOR-in-CBOR could be used when sending the transaction across the network, requiring a few extra bytes compared to the actual in-block serialisation. Another example is the transaction of the hard-fork combinator which will include an envelope indicating its era when sent across the network. However, when embedded in the respective era's block, there is no need for such envelope.

Can be implemented by serialising the GenTx, but, ideally, this is implement more efficiently. E.g., by returning the length of the annotation.

data family TxId tx :: Type Source #

A generalized transaction, GenTx, identifier.

Instances

Instances details
(Typeable m, Typeable a) => ShowProxy (TxId (GenTx (DualBlock m a)) :: Type) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

showProxy :: Proxy (TxId (GenTx (DualBlock m a))) -> String Source #

Typeable xs => ShowProxy (TxId (GenTx (HardForkBlock xs)) :: Type) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

Eq (GenTxId m) => Eq (TxId (GenTx (DualBlock m a))) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

(==) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

(/=) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

CanHardFork xs => Eq (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

Ord (GenTxId m) => Ord (TxId (GenTx (DualBlock m a))) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

compare :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Ordering #

(<) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

(<=) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

(>) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

(>=) :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> Bool #

max :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) #

min :: TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) -> TxId (GenTx (DualBlock m a)) #

CanHardFork xs => Ord (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

Show (GenTxId m) => Show (TxId (GenTx (DualBlock m a))) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

showsPrec :: Int -> TxId (GenTx (DualBlock m a)) -> ShowS #

show :: TxId (GenTx (DualBlock m a)) -> String #

showList :: [TxId (GenTx (DualBlock m a))] -> ShowS #

CanHardFork xs => Show (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

NoThunks (TxId (GenTx (DualBlock m a))) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

CanHardFork xs => NoThunks (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

All CondenseConstraints xs => Condense (TxId (GenTx (HardForkBlock xs))) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Condense

SerialiseHFC xs => SerialiseNodeToNode (HardForkBlock xs) (GenTxId (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Serialisation.SerialiseNodeToNode

newtype TxId (GenTx (DualBlock m a)) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

newtype TxId (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

class (Show (TxId tx), Ord (TxId tx), NoThunks (TxId tx)) => HasTxId tx where Source #

Transactions with an identifier

The mempool will use these to locate transactions, so two different transactions should have different identifiers.

Methods

txId :: tx -> TxId tx Source #

Return the TxId of a GenTx.

NOTE: a TxId must be unique up to ledger rules, i.e., two GenTxs with the same TxId must be the same transaction according to the ledger. However, we do not assume that a TxId uniquely determines a GenTx: two GenTxs with the same TxId can differ in, e.g., witnesses.

Should be cheap as this will be called often.

Instances

Instances details
Bridge m a => HasTxId (GenTx (DualBlock m a)) Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

Methods

txId :: GenTx (DualBlock m a) -> TxId (GenTx (DualBlock m a)) Source #

CanHardFork xs => HasTxId (GenTx (HardForkBlock xs)) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool

type GenTxId blk = TxId (GenTx blk) Source #

Shorthand: ID of a generalized transaction

class HasTxs blk where Source #

Collect all transactions from a block

This is used for tooling only. We don't require it as part of RunNode (and cannot, because we cannot give an instance for the dual ledger).

Methods

extractTxs :: blk -> [GenTx blk] Source #

Return the transactions part of the given block in no particular order.

Instances

Instances details
All HasTxs xs => HasTxs (HardForkBlock xs) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Mempool