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

Ouroboros.Consensus.Util.IndexedMemPack

Description

This module is a derivative of Data.MemPack but we provide something that will be used to " index " the serialization.

The idea is that we can use this in the Cardano block to avoid serializing a tag next to the TxOut, as the Ledger layer establishes the property that TxOuts are forwards deserializable, meaning we can read them in any later era.

Synopsis

Documentation

class IndexedMemPack idx a where Source #

See MemPack.

Methods

indexedPackedByteCount ∷ idx → a → Int Source #

indexedPackM ∷ idx → a → Pack s () Source #

indexedUnpackMBuffer b ⇒ idx → Unpack b a Source #

indexedTypeName ∷ idx → String Source #

Instances

Instances details
(txout ~ TxOut (LedgerState m), IndexedMemPack (LedgerState m EmptyMK) txout) ⇒ IndexedMemPack (LedgerState (DualBlock m a) EmptyMK) txout Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Dual

(txout ~ TxOut (LedgerState blk), IndexedMemPack (LedgerState blk EmptyMK) txout) ⇒ IndexedMemPack (ExtLedgerState blk EmptyMK) txout Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Extended

IndexedMemPack (TrivialLedgerTables l EmptyMK) Void Source # 
Instance details

Defined in Ouroboros.Consensus.Ledger.Tables

class MemPack a where Source #

Efficient serialization interface that operates directly on memory buffers.

Minimal complete definition

packedByteCount, packM, unpackM

Methods

typeNameString Source #

Name of the type that is being deserialized for error reporting. Default implementation relies on Typeable.

default typeNameTypeable a ⇒ String Source #

packedByteCount ∷ a → Int Source #

Report the exact size in number of bytes that packed version of this type will occupy. It is very important to get this right, otherwise packM will result in a runtime exception. Another words this is the expected property that it should hold:

packedByteCount a == bufferByteCount (pack a)

packM ∷ a → Pack s () Source #

Write binary representation of a type into the MutableByteArray which can be accessed with ask, whenever direct operations on it are necessary.

unpackMBuffer b ⇒ Unpack b a Source #

Read binary representation of the type directly from the buffer, which can be accessed with ask when necessary. Direct reads from the buffer should be preceded with advancing the buffer offset with MonadState by the number of bytes that will be consumed from the buffer and making sure that no reads outside of the buffer can happen. Violation of these rules will lead to segfaults.

Instances

Instances details
MemPack ByteArray 
Instance details

Defined in Data.MemPack

MemPack ByteString 
Instance details

Defined in Data.MemPack

MemPack ByteString 
Instance details

Defined in Data.MemPack

MemPack ShortByteString 
Instance details

Defined in Data.MemPack

MemPack CompactAddr 
Instance details

Defined in Cardano.Ledger.Address

MemPack TxIx 
Instance details

Defined in Cardano.Ledger.BaseTypes

MemPack ScriptHash 
Instance details

Defined in Cardano.Ledger.Hashes

MemPack PlutusBinary 
Instance details

Defined in Cardano.Ledger.Plutus.Language

MemPack TxId 
Instance details

Defined in Cardano.Ledger.TxIn

MemPack TxIn 
Instance details

Defined in Cardano.Ledger.TxIn

MemPack Void 
Instance details

Defined in Data.MemPack

MemPack Int16 
Instance details

Defined in Data.MemPack

MemPack Int32 
Instance details

Defined in Data.MemPack

MemPack Int64 
Instance details

Defined in Data.MemPack

MemPack Int8 
Instance details

Defined in Data.MemPack

MemPack Word16 
Instance details

Defined in Data.MemPack

MemPack Word32 
Instance details

Defined in Data.MemPack

MemPack Word64 
Instance details

Defined in Data.MemPack

MemPack Word8 
Instance details

Defined in Data.MemPack

MemPack Length 
Instance details

Defined in Data.MemPack

MemPack Tag 
Instance details

Defined in Data.MemPack

MemPack Text 
Instance details

Defined in Data.MemPack

MemPack Integer 
Instance details

Defined in Data.MemPack

MemPack Natural 
Instance details

Defined in Data.MemPack

MemPack () 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCount ∷ () → Int Source #

packM ∷ () → Pack s () Source #

unpackMBuffer b ⇒ Unpack b () Source #

MemPack Bool 
Instance details

Defined in Data.MemPack

MemPack Char 
Instance details

Defined in Data.MemPack

MemPack Double 
Instance details

Defined in Data.MemPack

MemPack Float 
Instance details

Defined in Data.MemPack

MemPack Int 
Instance details

Defined in Data.MemPack

MemPack Word 
Instance details

Defined in Data.MemPack

MemPack a ⇒ MemPack (Complex a) 
Instance details

Defined in Data.MemPack

KnownNat n ⇒ MemPack (PackedBytes n) 
Instance details

Defined in Cardano.Crypto.PackedBytes

MemPack (CompactForm Coin)

This instance prefixes with a 0 Tag for binary compatibility with compact form of multiassets.

Instance details

Defined in Cardano.Ledger.Coin

Typeable kr ⇒ MemPack (Credential kr) 
Instance details

Defined in Cardano.Ledger.Credential

MemPack (KeyHash r) 
Instance details

Defined in Cardano.Ledger.Hashes

MemPack (SafeHash i) 
Instance details

Defined in Cardano.Ledger.Hashes

MemPack (BinaryData era) 
Instance details

Defined in Cardano.Ledger.Plutus.Data

Era era ⇒ MemPack (Datum era) 
Instance details

Defined in Cardano.Ledger.Plutus.Data

Methods

typeNameString Source #

packedByteCountDatum era → Int Source #

packMDatum era → Pack s () Source #

unpackMBuffer b ⇒ Unpack b (Datum era) Source #

MemPack (Plutus l) 
Instance details

Defined in Cardano.Ledger.Plutus.Language

MemPack (Ptr a) 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCountPtr a → Int Source #

packMPtr a → Pack s () Source #

unpackMBuffer b ⇒ Unpack b (Ptr a) Source #

(MemPack a, Integral a) ⇒ MemPack (Ratio a) 
Instance details

Defined in Data.MemPack

MemPack (StablePtr a) 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word16) 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word32) 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word64) 
Instance details

Defined in Data.MemPack

MemPack (VarLen Word) 
Instance details

Defined in Data.MemPack

(All MemPackTxOut xs, Typeable xs) ⇒ MemPack (DefaultHardForkTxOut xs) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Ledger

MemPack a ⇒ MemPack (Maybe a) 
Instance details

Defined in Data.MemPack

MemPack a ⇒ MemPack [a] 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCount ∷ [a] → Int Source #

packM ∷ [a] → Pack s () Source #

unpackMBuffer b ⇒ Unpack b [a] Source #

HashAlgorithm h ⇒ MemPack (Hash h a) 
Instance details

Defined in Cardano.Crypto.Hash.Class

Methods

typeNameString Source #

packedByteCountHash h a → Int Source #

packMHash h a → Pack s () Source #

unpackMBuffer b ⇒ Unpack b (Hash h a) Source #

(MemPack a, MemPack b) ⇒ MemPack (Either a b) 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCountEither a b → Int Source #

packMEither a b → Pack s () Source #

unpackMBuffer b0 ⇒ Unpack b0 (Either a b) Source #

(MemPack a, MemPack b) ⇒ MemPack (a, b) 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCount ∷ (a, b) → Int Source #

packM ∷ (a, b) → Pack s () Source #

unpackMBuffer b0 ⇒ Unpack b0 (a, b) Source #

(MemPack a, MemPack b, MemPack c) ⇒ MemPack (a, b, c) 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCount ∷ (a, b, c) → Int Source #

packM ∷ (a, b, c) → Pack s () Source #

unpackMBuffer b0 ⇒ Unpack b0 (a, b, c) Source #

(MemPack a, MemPack b, MemPack c, MemPack d) ⇒ MemPack (a, b, c, d) 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCount ∷ (a, b, c, d) → Int Source #

packM ∷ (a, b, c, d) → Pack s () Source #

unpackMBuffer b0 ⇒ Unpack b0 (a, b, c, d) Source #

(MemPack a, MemPack b, MemPack c, MemPack d, MemPack e) ⇒ MemPack (a, b, c, d, e) 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCount ∷ (a, b, c, d, e) → Int Source #

packM ∷ (a, b, c, d, e) → Pack s () Source #

unpackMBuffer b0 ⇒ Unpack b0 (a, b, c, d, e) Source #

(MemPack a, MemPack b, MemPack c, MemPack d, MemPack e, MemPack f) ⇒ MemPack (a, b, c, d, e, f) 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCount ∷ (a, b, c, d, e, f) → Int Source #

packM ∷ (a, b, c, d, e, f) → Pack s () Source #

unpackMBuffer b0 ⇒ Unpack b0 (a, b, c, d, e, f) Source #

(MemPack a, MemPack b, MemPack c, MemPack d, MemPack e, MemPack f, MemPack g) ⇒ MemPack (a, b, c, d, e, f, g) 
Instance details

Defined in Data.MemPack

Methods

typeNameString Source #

packedByteCount ∷ (a, b, c, d, e, f, g) → Int Source #

packM ∷ (a, b, c, d, e, f, g) → Pack s () Source #

unpackMBuffer b0 ⇒ Unpack b0 (a, b, c, d, e, f, g) Source #

indexedPackByteString ∷ ∀ a idx. (IndexedMemPack idx a, HasCallStack) ⇒ idx → a → ByteString Source #

indexedUnpackError ∷ ∀ idx a b. (Buffer b, IndexedMemPack idx a, HasCallStack) ⇒ idx → b → a Source #