{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Ouroboros.Consensus.Byron.Node.Serialisation () where
import qualified Codec.CBOR.Decoding as CBOR
import qualified Codec.CBOR.Encoding as CBOR
import Codec.Serialise (decode, encode)
import Control.Monad.Except
import qualified Data.ByteString.Lazy as Lazy
import qualified Data.ByteString.Short as Short
import Cardano.Binary
import Cardano.Prelude (cborError)
import qualified Cardano.Chain.Block as CC
import qualified Cardano.Chain.Byron.API as CC
import Ouroboros.Network.Block (Serialised (..), unwrapCBORinCBOR,
wrapCBORinCBOR)
import Ouroboros.Consensus.Block
import Ouroboros.Consensus.HeaderValidation
import Ouroboros.Consensus.Ledger.SupportsMempool (GenTxId)
import Ouroboros.Consensus.Node.Run
import Ouroboros.Consensus.Node.Serialisation
import Ouroboros.Consensus.Protocol.PBFT.State (PBftState)
import Ouroboros.Consensus.Storage.Serialisation
import Ouroboros.Consensus.Byron.Ledger
import Ouroboros.Consensus.Byron.Ledger.Conversions
import Ouroboros.Consensus.Byron.Protocol
instance HasBinaryBlockInfo ByronBlock where
getBinaryBlockInfo :: ByronBlock -> BinaryBlockInfo
getBinaryBlockInfo = ByronBlock -> BinaryBlockInfo
byronBinaryBlockInfo
instance SerialiseDiskConstraints ByronBlock
instance EncodeDisk ByronBlock ByronBlock where
encodeDisk :: CodecConfig ByronBlock -> ByronBlock -> Encoding
encodeDisk CodecConfig ByronBlock
_ = ByronBlock -> Encoding
encodeByronBlock
instance DecodeDisk ByronBlock (Lazy.ByteString -> ByronBlock) where
decodeDisk :: CodecConfig ByronBlock
-> forall s. Decoder s (ByteString -> ByronBlock)
decodeDisk CodecConfig ByronBlock
ccfg = EpochSlots -> Decoder s (ByteString -> ByronBlock)
forall s. EpochSlots -> Decoder s (ByteString -> ByronBlock)
decodeByronBlock (CodecConfig ByronBlock -> EpochSlots
getByronEpochSlots CodecConfig ByronBlock
ccfg)
instance EncodeDisk ByronBlock (LedgerState ByronBlock) where
encodeDisk :: CodecConfig ByronBlock -> LedgerState ByronBlock -> Encoding
encodeDisk CodecConfig ByronBlock
_ = LedgerState ByronBlock -> Encoding
encodeByronLedgerState
instance DecodeDisk ByronBlock (LedgerState ByronBlock) where
decodeDisk :: CodecConfig ByronBlock
-> forall s. Decoder s (LedgerState ByronBlock)
decodeDisk CodecConfig ByronBlock
_ = Decoder s (LedgerState ByronBlock)
forall s. Decoder s (LedgerState ByronBlock)
decodeByronLedgerState
instance EncodeDisk ByronBlock (PBftState PBftByronCrypto) where
encodeDisk :: CodecConfig ByronBlock -> PBftState PBftByronCrypto -> Encoding
encodeDisk CodecConfig ByronBlock
_ = PBftState PBftByronCrypto -> Encoding
ChainDepState (BlockProtocol ByronBlock) -> Encoding
encodeByronChainDepState
instance DecodeDisk ByronBlock (PBftState PBftByronCrypto) where
decodeDisk :: CodecConfig ByronBlock
-> forall s. Decoder s (PBftState PBftByronCrypto)
decodeDisk CodecConfig ByronBlock
_ = Decoder s (PBftState PBftByronCrypto)
forall s. Decoder s (ChainDepState (BlockProtocol ByronBlock))
decodeByronChainDepState
instance EncodeDisk ByronBlock (AnnTip ByronBlock) where
encodeDisk :: CodecConfig ByronBlock -> AnnTip ByronBlock -> Encoding
encodeDisk CodecConfig ByronBlock
_ = AnnTip ByronBlock -> Encoding
encodeByronAnnTip
instance DecodeDisk ByronBlock (AnnTip ByronBlock) where
decodeDisk :: CodecConfig ByronBlock -> forall s. Decoder s (AnnTip ByronBlock)
decodeDisk CodecConfig ByronBlock
_ = Decoder s (AnnTip ByronBlock)
forall s. Decoder s (AnnTip ByronBlock)
decodeByronAnnTip
instance SerialiseNodeToNodeConstraints ByronBlock where
estimateBlockSize :: Header ByronBlock -> SizeInBytes
estimateBlockSize = Header ByronBlock -> SizeInBytes
byronHeaderBlockSizeHint
instance SerialiseNodeToNode ByronBlock ByronBlock where
encodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock -> ByronBlock -> Encoding
encodeNodeToNode CodecConfig ByronBlock
_ BlockNodeToNodeVersion ByronBlock
_ = (ByronBlock -> Encoding) -> ByronBlock -> Encoding
forall a. (a -> Encoding) -> a -> Encoding
wrapCBORinCBOR ByronBlock -> Encoding
encodeByronBlock
decodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock
-> forall s. Decoder s ByronBlock
decodeNodeToNode CodecConfig ByronBlock
ccfg BlockNodeToNodeVersion ByronBlock
_ = (forall s. Decoder s (ByteString -> ByronBlock))
-> forall s. Decoder s ByronBlock
forall a.
(forall s. Decoder s (ByteString -> a)) -> forall s. Decoder s a
unwrapCBORinCBOR (EpochSlots -> Decoder s (ByteString -> ByronBlock)
forall s. EpochSlots -> Decoder s (ByteString -> ByronBlock)
decodeByronBlock EpochSlots
epochSlots)
where
epochSlots :: EpochSlots
epochSlots = CodecConfig ByronBlock -> EpochSlots
getByronEpochSlots CodecConfig ByronBlock
ccfg
instance SerialiseNodeToNode ByronBlock (Header ByronBlock) where
encodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock
-> Header ByronBlock
-> Encoding
encodeNodeToNode CodecConfig ByronBlock
ccfg = \case
BlockNodeToNodeVersion ByronBlock
ByronNodeToNodeVersion1 ->
(Header ByronBlock -> Encoding) -> Header ByronBlock -> Encoding
forall a. (a -> Encoding) -> a -> Encoding
wrapCBORinCBOR ((Header ByronBlock -> Encoding) -> Header ByronBlock -> Encoding)
-> (Header ByronBlock -> Encoding) -> Header ByronBlock -> Encoding
forall a b. (a -> b) -> a -> b
$
UnsizedHeader -> Encoding
encodeUnsizedHeader (UnsizedHeader -> Encoding)
-> (Header ByronBlock -> UnsizedHeader)
-> Header ByronBlock
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (UnsizedHeader, SizeInBytes) -> UnsizedHeader
forall a b. (a, b) -> a
fst ((UnsizedHeader, SizeInBytes) -> UnsizedHeader)
-> (Header ByronBlock -> (UnsizedHeader, SizeInBytes))
-> Header ByronBlock
-> UnsizedHeader
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Header ByronBlock -> (UnsizedHeader, SizeInBytes)
splitSizeHint
BlockNodeToNodeVersion ByronBlock
ByronNodeToNodeVersion2 ->
CodecConfig ByronBlock
-> DepPair (NestedCtxt Header ByronBlock) -> Encoding
forall blk a. EncodeDisk blk a => CodecConfig blk -> a -> Encoding
encodeDisk CodecConfig ByronBlock
ccfg (DepPair (NestedCtxt Header ByronBlock) -> Encoding)
-> (Header ByronBlock -> DepPair (NestedCtxt Header ByronBlock))
-> Header ByronBlock
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Header ByronBlock -> DepPair (NestedCtxt Header ByronBlock)
forall (f :: * -> *) blk.
HasNestedContent f blk =>
f blk -> DepPair (NestedCtxt f blk)
unnest
decodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock
-> forall s. Decoder s (Header ByronBlock)
decodeNodeToNode CodecConfig ByronBlock
ccfg = \case
BlockNodeToNodeVersion ByronBlock
ByronNodeToNodeVersion1 ->
(forall s. Decoder s (ByteString -> Header ByronBlock))
-> forall s. Decoder s (Header ByronBlock)
forall a.
(forall s. Decoder s (ByteString -> a)) -> forall s. Decoder s a
unwrapCBORinCBOR ((forall s. Decoder s (ByteString -> Header ByronBlock))
-> forall s. Decoder s (Header ByronBlock))
-> (forall s. Decoder s (ByteString -> Header ByronBlock))
-> forall s. Decoder s (Header ByronBlock)
forall a b. (a -> b) -> a -> b
$
((UnsizedHeader -> SizeInBytes -> Header ByronBlock)
-> SizeInBytes -> UnsizedHeader -> Header ByronBlock
forall a b c. (a -> b -> c) -> b -> a -> c
flip UnsizedHeader -> SizeInBytes -> Header ByronBlock
joinSizeHint SizeInBytes
fakeByronBlockSizeHint (UnsizedHeader -> Header ByronBlock)
-> (ByteString -> UnsizedHeader) -> ByteString -> Header ByronBlock
forall b c a. (b -> c) -> (a -> b) -> a -> c
.)
((ByteString -> UnsizedHeader) -> ByteString -> Header ByronBlock)
-> Decoder s (ByteString -> UnsizedHeader)
-> Decoder s (ByteString -> Header ByronBlock)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> EpochSlots -> Decoder s (ByteString -> UnsizedHeader)
forall s. EpochSlots -> Decoder s (ByteString -> UnsizedHeader)
decodeUnsizedHeader EpochSlots
epochSlots
BlockNodeToNodeVersion ByronBlock
ByronNodeToNodeVersion2 ->
DepPair (NestedCtxt Header ByronBlock) -> Header ByronBlock
forall (f :: * -> *) blk.
HasNestedContent f blk =>
DepPair (NestedCtxt f blk) -> f blk
nest (DepPair (NestedCtxt Header ByronBlock) -> Header ByronBlock)
-> Decoder s (DepPair (NestedCtxt Header ByronBlock))
-> Decoder s (Header ByronBlock)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> CodecConfig ByronBlock
-> forall s. Decoder s (DepPair (NestedCtxt Header ByronBlock))
forall blk a.
DecodeDisk blk a =>
CodecConfig blk -> forall s. Decoder s a
decodeDisk CodecConfig ByronBlock
ccfg
where
epochSlots :: EpochSlots
epochSlots = CodecConfig ByronBlock -> EpochSlots
getByronEpochSlots CodecConfig ByronBlock
ccfg
instance SerialiseNodeToNode ByronBlock (Serialised ByronBlock)
instance SerialiseNodeToNode ByronBlock (SerialisedHeader ByronBlock) where
encodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock
-> SerialisedHeader ByronBlock
-> Encoding
encodeNodeToNode CodecConfig ByronBlock
ccfg BlockNodeToNodeVersion ByronBlock
version = case BlockNodeToNodeVersion ByronBlock
version of
BlockNodeToNodeVersion ByronBlock
ByronNodeToNodeVersion1 ->
Serialised Any -> Encoding
forall a. Serialise a => a -> Encoding
encode
(Serialised Any -> Encoding)
-> (SerialisedHeader ByronBlock -> Serialised Any)
-> SerialisedHeader ByronBlock
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Serialised Any
forall a. ByteString -> Serialised a
Serialised
(ByteString -> Serialised Any)
-> (SerialisedHeader ByronBlock -> ByteString)
-> SerialisedHeader ByronBlock
-> Serialised Any
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SomeSecond (NestedCtxt Header) ByronBlock, ByteString)
-> ByteString
addV1Envelope
((SomeSecond (NestedCtxt Header) ByronBlock, ByteString)
-> ByteString)
-> (SerialisedHeader ByronBlock
-> (SomeSecond (NestedCtxt Header) ByronBlock, ByteString))
-> SerialisedHeader ByronBlock
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenDepPair Serialised (NestedCtxt Header ByronBlock)
-> (SomeSecond (NestedCtxt Header) ByronBlock, ByteString)
forall (f :: * -> * -> *) blk.
GenDepPair Serialised (f blk) -> (SomeSecond f blk, ByteString)
aux
(GenDepPair Serialised (NestedCtxt Header ByronBlock)
-> (SomeSecond (NestedCtxt Header) ByronBlock, ByteString))
-> (SerialisedHeader ByronBlock
-> GenDepPair Serialised (NestedCtxt Header ByronBlock))
-> SerialisedHeader ByronBlock
-> (SomeSecond (NestedCtxt Header) ByronBlock, ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SerialisedHeader ByronBlock
-> GenDepPair Serialised (NestedCtxt Header ByronBlock)
forall blk.
SerialisedHeader blk
-> GenDepPair Serialised (NestedCtxt Header blk)
serialisedHeaderToDepPair
where
aux :: GenDepPair Serialised (f blk)
-> (SomeSecond f blk, Lazy.ByteString)
aux :: GenDepPair Serialised (f blk) -> (SomeSecond f blk, ByteString)
aux (GenDepPair f blk a
ix (Serialised ByteString
bytes)) = (f blk a -> SomeSecond f blk
forall (f :: * -> * -> *) a b. f a b -> SomeSecond f a
SomeSecond f blk a
ix, ByteString
bytes)
BlockNodeToNodeVersion ByronBlock
ByronNodeToNodeVersion2 -> CodecConfig ByronBlock -> SerialisedHeader ByronBlock -> Encoding
forall blk a. EncodeDisk blk a => CodecConfig blk -> a -> Encoding
encodeDisk CodecConfig ByronBlock
ccfg
decodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock
-> forall s. Decoder s (SerialisedHeader ByronBlock)
decodeNodeToNode CodecConfig ByronBlock
ccfg BlockNodeToNodeVersion ByronBlock
version = case BlockNodeToNodeVersion ByronBlock
version of
BlockNodeToNodeVersion ByronBlock
ByronNodeToNodeVersion1 -> do
ByteString
bs <- Serialised Any -> ByteString
forall a. Serialised a -> ByteString
unSerialised (Serialised Any -> ByteString)
-> Decoder s (Serialised Any) -> Decoder s ByteString
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (Serialised Any)
forall a s. Serialise a => Decoder s a
decode
(String -> Decoder s (SerialisedHeader ByronBlock))
-> (GenDepPair Serialised (NestedCtxt Header ByronBlock)
-> Decoder s (SerialisedHeader ByronBlock))
-> Either
String (GenDepPair Serialised (NestedCtxt Header ByronBlock))
-> Decoder s (SerialisedHeader ByronBlock)
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> Decoder s (SerialisedHeader ByronBlock)
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (SerialisedHeader ByronBlock
-> Decoder s (SerialisedHeader ByronBlock)
forall (m :: * -> *) a. Monad m => a -> m a
return (SerialisedHeader ByronBlock
-> Decoder s (SerialisedHeader ByronBlock))
-> (GenDepPair Serialised (NestedCtxt Header ByronBlock)
-> SerialisedHeader ByronBlock)
-> GenDepPair Serialised (NestedCtxt Header ByronBlock)
-> Decoder s (SerialisedHeader ByronBlock)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenDepPair Serialised (NestedCtxt Header ByronBlock)
-> SerialisedHeader ByronBlock
forall blk.
GenDepPair Serialised (NestedCtxt Header blk)
-> SerialisedHeader blk
SerialisedHeaderFromDepPair) (Either
String (GenDepPair Serialised (NestedCtxt Header ByronBlock))
-> Decoder s (SerialisedHeader ByronBlock))
-> Either
String (GenDepPair Serialised (NestedCtxt Header ByronBlock))
-> Decoder s (SerialisedHeader ByronBlock)
forall a b. (a -> b) -> a -> b
$
Except
String (GenDepPair Serialised (NestedCtxt Header ByronBlock))
-> Either
String (GenDepPair Serialised (NestedCtxt Header ByronBlock))
forall e a. Except e a -> Either e a
runExcept (Except
String (GenDepPair Serialised (NestedCtxt Header ByronBlock))
-> Either
String (GenDepPair Serialised (NestedCtxt Header ByronBlock)))
-> Except
String (GenDepPair Serialised (NestedCtxt Header ByronBlock))
-> Either
String (GenDepPair Serialised (NestedCtxt Header ByronBlock))
forall a b. (a -> b) -> a -> b
$ (SomeSecond (NestedCtxt Header) ByronBlock, ByteString)
-> GenDepPair Serialised (NestedCtxt Header ByronBlock)
forall (f :: * -> * -> *) blk.
(SomeSecond f blk, ByteString) -> GenDepPair Serialised (f blk)
aux ((SomeSecond (NestedCtxt Header) ByronBlock, ByteString)
-> GenDepPair Serialised (NestedCtxt Header ByronBlock))
-> ExceptT
String
Identity
(SomeSecond (NestedCtxt Header) ByronBlock, ByteString)
-> Except
String (GenDepPair Serialised (NestedCtxt Header ByronBlock))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ByteString
-> ExceptT
String
Identity
(SomeSecond (NestedCtxt Header) ByronBlock, ByteString)
dropV1Envelope ByteString
bs
where
aux :: (SomeSecond f blk, Lazy.ByteString)
-> GenDepPair Serialised (f blk)
aux :: (SomeSecond f blk, ByteString) -> GenDepPair Serialised (f blk)
aux (SomeSecond f blk b
ix, ByteString
bytes) = f blk b -> Serialised b -> GenDepPair Serialised (f blk)
forall (f :: * -> *) a (g :: * -> *). f a -> g a -> GenDepPair g f
GenDepPair f blk b
ix (ByteString -> Serialised b
forall a. ByteString -> Serialised a
Serialised ByteString
bytes)
BlockNodeToNodeVersion ByronBlock
ByronNodeToNodeVersion2 -> CodecConfig ByronBlock
-> forall s. Decoder s (SerialisedHeader ByronBlock)
forall blk a.
DecodeDisk blk a =>
CodecConfig blk -> forall s. Decoder s a
decodeDisk CodecConfig ByronBlock
ccfg
instance SerialiseNodeToNode ByronBlock (GenTx ByronBlock) where
encodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock
-> GenTx ByronBlock
-> Encoding
encodeNodeToNode CodecConfig ByronBlock
_ BlockNodeToNodeVersion ByronBlock
_ = GenTx ByronBlock -> Encoding
encodeByronGenTx
decodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock
-> forall s. Decoder s (GenTx ByronBlock)
decodeNodeToNode CodecConfig ByronBlock
_ BlockNodeToNodeVersion ByronBlock
_ = Decoder s (GenTx ByronBlock)
forall s. Decoder s (GenTx ByronBlock)
decodeByronGenTx
instance SerialiseNodeToNode ByronBlock (GenTxId ByronBlock) where
encodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock
-> GenTxId ByronBlock
-> Encoding
encodeNodeToNode CodecConfig ByronBlock
_ BlockNodeToNodeVersion ByronBlock
_ = GenTxId ByronBlock -> Encoding
encodeByronGenTxId
decodeNodeToNode :: CodecConfig ByronBlock
-> BlockNodeToNodeVersion ByronBlock
-> forall s. Decoder s (GenTxId ByronBlock)
decodeNodeToNode CodecConfig ByronBlock
_ BlockNodeToNodeVersion ByronBlock
_ = Decoder s (GenTxId ByronBlock)
forall s. Decoder s (GenTxId ByronBlock)
decodeByronGenTxId
instance SerialiseNodeToClientConstraints ByronBlock
instance SerialiseNodeToClient ByronBlock ByronBlock where
encodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock -> ByronBlock -> Encoding
encodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = (ByronBlock -> Encoding) -> ByronBlock -> Encoding
forall a. (a -> Encoding) -> a -> Encoding
wrapCBORinCBOR ByronBlock -> Encoding
encodeByronBlock
decodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> forall s. Decoder s ByronBlock
decodeNodeToClient CodecConfig ByronBlock
ccfg BlockNodeToClientVersion ByronBlock
_ = (forall s. Decoder s (ByteString -> ByronBlock))
-> forall s. Decoder s ByronBlock
forall a.
(forall s. Decoder s (ByteString -> a)) -> forall s. Decoder s a
unwrapCBORinCBOR (EpochSlots -> Decoder s (ByteString -> ByronBlock)
forall s. EpochSlots -> Decoder s (ByteString -> ByronBlock)
decodeByronBlock EpochSlots
epochSlots)
where
epochSlots :: EpochSlots
epochSlots = CodecConfig ByronBlock -> EpochSlots
getByronEpochSlots CodecConfig ByronBlock
ccfg
instance SerialiseNodeToClient ByronBlock (Serialised ByronBlock)
instance SerialiseNodeToClient ByronBlock (GenTx ByronBlock) where
encodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> GenTx ByronBlock
-> Encoding
encodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = GenTx ByronBlock -> Encoding
encodeByronGenTx
decodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> forall s. Decoder s (GenTx ByronBlock)
decodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = Decoder s (GenTx ByronBlock)
forall s. Decoder s (GenTx ByronBlock)
decodeByronGenTx
instance SerialiseNodeToClient ByronBlock (GenTxId ByronBlock) where
encodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> GenTxId ByronBlock
-> Encoding
encodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = GenTxId ByronBlock -> Encoding
encodeByronGenTxId
decodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> forall s. Decoder s (GenTxId ByronBlock)
decodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = Decoder s (GenTxId ByronBlock)
forall s. Decoder s (GenTxId ByronBlock)
decodeByronGenTxId
instance SerialiseNodeToClient ByronBlock SlotNo where
encodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock -> SlotNo -> Encoding
encodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = SlotNo -> Encoding
forall a. ToCBOR a => a -> Encoding
toCBOR
decodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> forall s. Decoder s SlotNo
decodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = Decoder s SlotNo
forall a s. FromCBOR a => Decoder s a
fromCBOR
instance SerialiseNodeToClient ByronBlock CC.ApplyMempoolPayloadErr where
encodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> ApplyMempoolPayloadErr
-> Encoding
encodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = ApplyMempoolPayloadErr -> Encoding
ApplyTxErr ByronBlock -> Encoding
encodeByronApplyTxError
decodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> forall s. Decoder s ApplyMempoolPayloadErr
decodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = Decoder s ApplyMempoolPayloadErr
forall s. Decoder s (ApplyTxErr ByronBlock)
decodeByronApplyTxError
instance SerialiseNodeToClient ByronBlock (SomeSecond BlockQuery ByronBlock) where
encodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> SomeSecond BlockQuery ByronBlock
-> Encoding
encodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ (SomeSecond BlockQuery ByronBlock b
q) = BlockQuery ByronBlock b -> Encoding
forall result. BlockQuery ByronBlock result -> Encoding
encodeByronQuery BlockQuery ByronBlock b
q
decodeNodeToClient :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> forall s. Decoder s (SomeSecond BlockQuery ByronBlock)
decodeNodeToClient CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = Decoder s (SomeSecond BlockQuery ByronBlock)
forall s. Decoder s (SomeSecond BlockQuery ByronBlock)
decodeByronQuery
instance SerialiseResult ByronBlock (BlockQuery ByronBlock) where
encodeResult :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> BlockQuery ByronBlock result
-> result
-> Encoding
encodeResult CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = BlockQuery ByronBlock result -> result -> Encoding
forall result. BlockQuery ByronBlock result -> result -> Encoding
encodeByronResult
decodeResult :: CodecConfig ByronBlock
-> BlockNodeToClientVersion ByronBlock
-> BlockQuery ByronBlock result
-> forall s. Decoder s result
decodeResult CodecConfig ByronBlock
_ BlockNodeToClientVersion ByronBlock
_ = BlockQuery ByronBlock result -> Decoder s result
forall result.
BlockQuery ByronBlock result -> forall s. Decoder s result
decodeByronResult
instance ReconstructNestedCtxt Header ByronBlock where
reconstructPrefixLen :: proxy (Header ByronBlock) -> PrefixLen
reconstructPrefixLen proxy (Header ByronBlock)
_ = Word8 -> PrefixLen
PrefixLen Word8
2
reconstructNestedCtxt :: proxy (Header ByronBlock)
-> ShortByteString
-> SizeInBytes
-> SomeSecond (NestedCtxt Header) ByronBlock
reconstructNestedCtxt proxy (Header ByronBlock)
_proxy ShortByteString
prefix SizeInBytes
size =
case ShortByteString -> Int -> Word8
Short.index ShortByteString
prefix Int
1 of
Word8
0 -> NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader)
-> SomeSecond (NestedCtxt Header) ByronBlock
forall (f :: * -> * -> *) a b. f a b -> SomeSecond f a
SomeSecond (NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader)
-> SomeSecond (NestedCtxt Header) ByronBlock)
-> NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader)
-> SomeSecond (NestedCtxt Header) ByronBlock
forall a b. (a -> b) -> a -> b
$ NestedCtxt_ ByronBlock Header (SlotNo, RawBoundaryHeader)
-> NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader)
forall (f :: * -> *) blk a.
NestedCtxt_ blk f a -> NestedCtxt f blk a
NestedCtxt (SizeInBytes
-> NestedCtxt_ ByronBlock Header (SlotNo, RawBoundaryHeader)
CtxtByronBoundary SizeInBytes
size)
Word8
1 -> NestedCtxt Header ByronBlock RawHeader
-> SomeSecond (NestedCtxt Header) ByronBlock
forall (f :: * -> * -> *) a b. f a b -> SomeSecond f a
SomeSecond (NestedCtxt Header ByronBlock RawHeader
-> SomeSecond (NestedCtxt Header) ByronBlock)
-> NestedCtxt Header ByronBlock RawHeader
-> SomeSecond (NestedCtxt Header) ByronBlock
forall a b. (a -> b) -> a -> b
$ NestedCtxt_ ByronBlock Header RawHeader
-> NestedCtxt Header ByronBlock RawHeader
forall (f :: * -> *) blk a.
NestedCtxt_ blk f a -> NestedCtxt f blk a
NestedCtxt (SizeInBytes -> NestedCtxt_ ByronBlock Header RawHeader
CtxtByronRegular SizeInBytes
size)
Word8
_ -> String -> SomeSecond (NestedCtxt Header) ByronBlock
forall a. HasCallStack => String -> a
error (String -> SomeSecond (NestedCtxt Header) ByronBlock)
-> String -> SomeSecond (NestedCtxt Header) ByronBlock
forall a b. (a -> b) -> a -> b
$ String
"invalid ByronBlock with prefix: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ShortByteString -> String
forall a. Show a => a -> String
show ShortByteString
prefix
instance EncodeDiskDepIx (NestedCtxt Header) ByronBlock where
encodeDiskDepIx :: CodecConfig ByronBlock
-> SomeSecond (NestedCtxt Header) ByronBlock -> Encoding
encodeDiskDepIx CodecConfig ByronBlock
_ccfg (SomeSecond (NestedCtxt NestedCtxt_ ByronBlock Header b
ctxt)) = [Encoding] -> Encoding
forall a. Monoid a => [a] -> a
mconcat [
Word -> Encoding
CBOR.encodeListLen Word
2
, case NestedCtxt_ ByronBlock Header b
ctxt of
CtxtByronBoundary size -> [Encoding] -> Encoding
forall a. Monoid a => [a] -> a
mconcat [
Word8 -> Encoding
CBOR.encodeWord8 Word8
0
, SizeInBytes -> Encoding
CBOR.encodeWord32 SizeInBytes
size
]
CtxtByronRegular size -> [Encoding] -> Encoding
forall a. Monoid a => [a] -> a
mconcat [
Word8 -> Encoding
CBOR.encodeWord8 Word8
1
, SizeInBytes -> Encoding
CBOR.encodeWord32 SizeInBytes
size
]
]
instance EncodeDiskDep (NestedCtxt Header) ByronBlock where
encodeDiskDep :: CodecConfig ByronBlock
-> NestedCtxt Header ByronBlock a -> a -> Encoding
encodeDiskDep CodecConfig ByronBlock
_ccfg (NestedCtxt NestedCtxt_ ByronBlock Header a
ctxt) a
h =
case NestedCtxt_ ByronBlock Header a
ctxt of
CtxtByronRegular _size ->
RawHeader -> Encoding
encodeByronRegularHeader a
RawHeader
h
CtxtByronBoundary _size ->
RawBoundaryHeader -> Encoding
encodeByronBoundaryHeader ((SlotNo, RawBoundaryHeader) -> RawBoundaryHeader
forall a b. (a, b) -> b
snd a
(SlotNo, RawBoundaryHeader)
h)
instance DecodeDiskDepIx (NestedCtxt Header) ByronBlock where
decodeDiskDepIx :: CodecConfig ByronBlock
-> Decoder s (SomeSecond (NestedCtxt Header) ByronBlock)
decodeDiskDepIx CodecConfig ByronBlock
_ccfg = do
Text -> Int -> Decoder s ()
forall s. Text -> Int -> Decoder s ()
enforceSize Text
"decodeDiskDepIx ByronBlock" Int
2
Decoder s Word8
forall s. Decoder s Word8
CBOR.decodeWord8 Decoder s Word8
-> (Word8 -> Decoder s (SomeSecond (NestedCtxt Header) ByronBlock))
-> Decoder s (SomeSecond (NestedCtxt Header) ByronBlock)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Word8
0 -> NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader)
-> SomeSecond (NestedCtxt Header) ByronBlock
forall (f :: * -> * -> *) a b. f a b -> SomeSecond f a
SomeSecond (NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader)
-> SomeSecond (NestedCtxt Header) ByronBlock)
-> (SizeInBytes
-> NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader))
-> SizeInBytes
-> SomeSecond (NestedCtxt Header) ByronBlock
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NestedCtxt_ ByronBlock Header (SlotNo, RawBoundaryHeader)
-> NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader)
forall (f :: * -> *) blk a.
NestedCtxt_ blk f a -> NestedCtxt f blk a
NestedCtxt (NestedCtxt_ ByronBlock Header (SlotNo, RawBoundaryHeader)
-> NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader))
-> (SizeInBytes
-> NestedCtxt_ ByronBlock Header (SlotNo, RawBoundaryHeader))
-> SizeInBytes
-> NestedCtxt Header ByronBlock (SlotNo, RawBoundaryHeader)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SizeInBytes
-> NestedCtxt_ ByronBlock Header (SlotNo, RawBoundaryHeader)
CtxtByronBoundary (SizeInBytes -> SomeSecond (NestedCtxt Header) ByronBlock)
-> Decoder s SizeInBytes
-> Decoder s (SomeSecond (NestedCtxt Header) ByronBlock)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s SizeInBytes
forall s. Decoder s SizeInBytes
CBOR.decodeWord32
Word8
1 -> NestedCtxt Header ByronBlock RawHeader
-> SomeSecond (NestedCtxt Header) ByronBlock
forall (f :: * -> * -> *) a b. f a b -> SomeSecond f a
SomeSecond (NestedCtxt Header ByronBlock RawHeader
-> SomeSecond (NestedCtxt Header) ByronBlock)
-> (SizeInBytes -> NestedCtxt Header ByronBlock RawHeader)
-> SizeInBytes
-> SomeSecond (NestedCtxt Header) ByronBlock
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NestedCtxt_ ByronBlock Header RawHeader
-> NestedCtxt Header ByronBlock RawHeader
forall (f :: * -> *) blk a.
NestedCtxt_ blk f a -> NestedCtxt f blk a
NestedCtxt (NestedCtxt_ ByronBlock Header RawHeader
-> NestedCtxt Header ByronBlock RawHeader)
-> (SizeInBytes -> NestedCtxt_ ByronBlock Header RawHeader)
-> SizeInBytes
-> NestedCtxt Header ByronBlock RawHeader
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SizeInBytes -> NestedCtxt_ ByronBlock Header RawHeader
CtxtByronRegular (SizeInBytes -> SomeSecond (NestedCtxt Header) ByronBlock)
-> Decoder s SizeInBytes
-> Decoder s (SomeSecond (NestedCtxt Header) ByronBlock)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s SizeInBytes
forall s. Decoder s SizeInBytes
CBOR.decodeWord32
Word8
t -> DecoderError
-> Decoder s (SomeSecond (NestedCtxt Header) ByronBlock)
forall e s a. Buildable e => e -> Decoder s a
cborError (DecoderError
-> Decoder s (SomeSecond (NestedCtxt Header) ByronBlock))
-> DecoderError
-> Decoder s (SomeSecond (NestedCtxt Header) ByronBlock)
forall a b. (a -> b) -> a -> b
$ Text -> Word8 -> DecoderError
DecoderErrorUnknownTag Text
"decodeDiskDepIx ByronBlock" Word8
t
instance DecodeDiskDep (NestedCtxt Header) ByronBlock where
decodeDiskDep :: CodecConfig ByronBlock
-> NestedCtxt Header ByronBlock a
-> forall s. Decoder s (ByteString -> a)
decodeDiskDep ByronCodecConfig{..} (NestedCtxt NestedCtxt_ ByronBlock Header a
ctxt) =
case NestedCtxt_ ByronBlock Header a
ctxt of
CtxtByronRegular _size ->
EpochSlots -> Decoder s (ByteString -> RawHeader)
forall s. EpochSlots -> Decoder s (ByteString -> RawHeader)
decodeByronRegularHeader EpochSlots
getByronEpochSlots
CtxtByronBoundary _size ->
(ByteString -> RawBoundaryHeader)
-> ByteString -> (SlotNo, RawBoundaryHeader)
auxBoundary ((ByteString -> RawBoundaryHeader)
-> ByteString -> (SlotNo, RawBoundaryHeader))
-> Decoder s (ByteString -> RawBoundaryHeader)
-> Decoder s (ByteString -> (SlotNo, RawBoundaryHeader))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (ByteString -> RawBoundaryHeader)
forall s. Decoder s (ByteString -> RawBoundaryHeader)
decodeByronBoundaryHeader
where
auxBoundary :: (Lazy.ByteString -> RawBoundaryHeader)
-> (Lazy.ByteString -> (SlotNo, RawBoundaryHeader))
auxBoundary :: (ByteString -> RawBoundaryHeader)
-> ByteString -> (SlotNo, RawBoundaryHeader)
auxBoundary ByteString -> RawBoundaryHeader
f ByteString
bs =
(SlotNo
slotNo, RawBoundaryHeader
hdr)
where
hdr :: RawBoundaryHeader
hdr :: RawBoundaryHeader
hdr = ByteString -> RawBoundaryHeader
f ByteString
bs
slotNo :: SlotNo
slotNo :: SlotNo
slotNo = SlotNumber -> SlotNo
fromByronSlotNo (SlotNumber -> SlotNo) -> SlotNumber -> SlotNo
forall a b. (a -> b) -> a -> b
$
EpochSlots -> Word64 -> SlotNumber
CC.boundaryBlockSlot EpochSlots
getByronEpochSlots (RawBoundaryHeader -> Word64
forall a. ABoundaryHeader a -> Word64
CC.boundaryEpoch RawBoundaryHeader
hdr)