{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-} module Cardano.Ledger.Mary.BlockBody () where import Cardano.Ledger.BaseTypes (ProtVer (..)) import Cardano.Ledger.Binary ( Annotator, DecCBOR (decCBOR), EncCBOR (..), EncCBORGroup (..), decodeRecordNamed, encodeListLen, serialize', toPlainEncoding, ) import qualified Cardano.Ledger.Binary.Plain as Plain import Cardano.Ledger.Block (Block (..)) import Cardano.Ledger.Core (EraBlockBody (..), eraProtVerLow) import Cardano.Ledger.Mary.Era (MaryEra) import Cardano.Ledger.Mary.Tx () import Cardano.Ledger.Shelley.BlockBody ( ShelleyBlockBody, mkBasicBlockBodyShelley, shelleyBlockBodyHash, txSeqBlockBodyShelleyL, ) import qualified Data.ByteString as BS import Data.Typeable (Typeable) instance EraBlockBody MaryEra where type BlockBody MaryEra = ShelleyBlockBody MaryEra mkBasicBlockBody :: BlockBody MaryEra mkBasicBlockBody = BlockBody MaryEra forall era. (EraBlockBody era, SafeToHash (TxWits era), BlockBody era ~ ShelleyBlockBody era) => BlockBody era mkBasicBlockBodyShelley txSeqBlockBodyL :: Lens' (BlockBody MaryEra) (StrictSeq (Tx TopTx MaryEra)) txSeqBlockBodyL = (StrictSeq (Tx TopTx MaryEra) -> f (StrictSeq (Tx TopTx MaryEra))) -> BlockBody MaryEra -> f (BlockBody MaryEra) forall era. (EraBlockBody era, SafeToHash (TxWits era), BlockBody era ~ ShelleyBlockBody era) => Lens' (BlockBody era) (StrictSeq (Tx TopTx era)) Lens' (BlockBody MaryEra) (StrictSeq (Tx TopTx MaryEra)) txSeqBlockBodyShelleyL hashBlockBody :: BlockBody MaryEra -> Hash HASH EraIndependentBlockBody hashBlockBody = BlockBody MaryEra -> Hash HASH EraIndependentBlockBody ShelleyBlockBody MaryEra -> Hash HASH EraIndependentBlockBody forall era. ShelleyBlockBody era -> Hash HASH EraIndependentBlockBody shelleyBlockBodyHash blockBodySize :: ProtVer -> BlockBody MaryEra -> Int blockBodySize (ProtVer Version v Word32 _) = ByteString -> Int BS.length (ByteString -> Int) -> (ShelleyBlockBody MaryEra -> ByteString) -> ShelleyBlockBody MaryEra -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c . Version -> Encoding -> ByteString forall a. EncCBOR a => Version -> a -> ByteString serialize' Version v (Encoding -> ByteString) -> (ShelleyBlockBody MaryEra -> Encoding) -> ShelleyBlockBody MaryEra -> ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . ShelleyBlockBody MaryEra -> Encoding forall a. EncCBORGroup a => a -> Encoding encCBORGroup instance EncCBOR h => EncCBOR (Block h MaryEra) where encCBOR :: Block h MaryEra -> Encoding encCBOR (Block h h BlockBody MaryEra txns) = Word -> Encoding encodeListLen Word 4 Encoding -> Encoding -> Encoding forall a. Semigroup a => a -> a -> a <> h -> Encoding forall a. EncCBOR a => a -> Encoding encCBOR h h Encoding -> Encoding -> Encoding forall a. Semigroup a => a -> a -> a <> ShelleyBlockBody MaryEra -> Encoding forall a. EncCBORGroup a => a -> Encoding encCBORGroup BlockBody MaryEra ShelleyBlockBody MaryEra txns instance (EncCBOR h, Typeable h) => Plain.ToCBOR (Block h MaryEra) where toCBOR :: Block h MaryEra -> Encoding toCBOR = Version -> Encoding -> Encoding toPlainEncoding (forall era. Era era => Version eraProtVerLow @MaryEra) (Encoding -> Encoding) -> (Block h MaryEra -> Encoding) -> Block h MaryEra -> Encoding forall b c a. (b -> c) -> (a -> b) -> a -> c . Block h MaryEra -> Encoding forall a. EncCBOR a => a -> Encoding encCBOR instance (DecCBOR (Annotator h), Typeable h) => DecCBOR (Annotator (Block h MaryEra)) where decCBOR :: forall s. Decoder s (Annotator (Block h MaryEra)) decCBOR = Text -> (Annotator (Block h MaryEra) -> Int) -> Decoder s (Annotator (Block h MaryEra)) -> Decoder s (Annotator (Block h MaryEra)) forall a s. Text -> (a -> Int) -> Decoder s a -> Decoder s a decodeRecordNamed Text "Block" (Int -> Annotator (Block h MaryEra) -> Int forall a b. a -> b -> a const Int 4) (Decoder s (Annotator (Block h MaryEra)) -> Decoder s (Annotator (Block h MaryEra))) -> Decoder s (Annotator (Block h MaryEra)) -> Decoder s (Annotator (Block h MaryEra)) forall a b. (a -> b) -> a -> b $ do header <- Decoder s (Annotator h) forall s. Decoder s (Annotator h) forall a s. DecCBOR a => Decoder s a decCBOR txns <- decCBOR pure $ Block <$> header <*> txns