ouroboros-consensus-byron-0.1.0.1: Byron ledger integration in the Ouroboros consensus layer
Safe Haskell None
Language Haskell2010

Ouroboros.Consensus.Byron.Ledger.Serialisation

Synopsis

Data family instances

Serialisation

byronBlockEncodingOverhead :: Word32 Source #

The Byron block encoding overhead size in bytes.

This encompasses the overhead in bytes for everything that is encoded within a Byron block, excluding the actual generalized transactions (transactions, delegation certificates, update votes, and update proposals).

decodeByronBoundaryBlock :: EpochSlots -> Decoder s ( ByteString -> ByronBlock ) Source #

Decoder for a boundary Byron block.

PRECONDITION: the ByteString given as argument to the decoder is the same as the one that is decoded.

This is a wrapper for fromCBORABoundaryBlock .

Use decodeByronBlock when you can, this function is provided for use by the hard-fork combinator.

decodeByronRegularBlock :: EpochSlots -> Decoder s ( ByteString -> ByronBlock ) Source #

Decoder for a regular (non-EBB) Byron block.

PRECONDITION: the ByteString given as argument to the decoder is the same as the one that is decoded.

This is a wrapper for fromCBORABlock .

Use decodeByronBlock when you can, this function is provided for use by the hard-fork combinator.

encodeByronBlock :: ByronBlock -> Encoding Source #

Encode a block

Should be backwards compatible with legacy (cardano-sl) nodes.

Implementation note: the decoder uses fromCBORABlockOrBoundary , which has inverse toCBORABlockOrBoundary . This encoder is intended to be binary compatible with toCBORABlockOrBoundary , but does not use it and instead takes advantage of the annotations (using encodePreEncoded ).

encodeByronBoundaryHeader :: RawBoundaryHeader -> Encoding Source #

Encodes a raw Byron EBB header without a tag indicating whether it's a regular header or an EBB header.

Uses the annotation, so cheap.

encodeByronRegularHeader :: RawHeader -> Encoding Source #

Encodes a raw Byron header without a tag indicating whether it's a regular header or an EBB header.

Uses the annotation, so cheap.

Support for on-disk format

byronBinaryBlockInfo :: ByronBlock -> BinaryBlockInfo Source #

The BinaryBlockInfo of the given ByronBlock .

NOTE: the bytestring obtained by slicing the serialised block using the header offset and size will correspond to the header annotation , but not to the serialised header, as we add an envelope ( encodeListLen + tag) around a header in encodeByronHeader . This envelope must thus still be added to the sliced bytestring before it can be deserialised using decodeByronHeader .

Unsized header

dropV1Envelope :: ByteString -> Except String ( SomeSecond ( NestedCtxt Header ) ByronBlock , ByteString ) Source #

Drop the V1 EBB-or-regular-header envelope and reconstruct the context. Since we don't know the block size, use fakeByronBlockSizeHint .

encodeUnsizedHeader :: UnsizedHeader -> Encoding Source #

Encode an unsized header

Does not have to backwards compatible with legacy (cardano-sl) nodes (which never send or store these headers), but should be inverse to decodeSizedHeader , and moreover uses fromCBORABlockOrBoundaryHdr from cardano-ledger-byron, and so we don't have too much choice in this encoder.

fakeByronBlockSizeHint :: SizeInBytes Source #

Fake size (used in compatibility mode)

Orphan instances