{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-} module Cardano.Ledger.Conway.BlockBody where import Cardano.Ledger.Alonzo.BlockBody 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.Conway.Era import Cardano.Ledger.Conway.Tx () import Cardano.Ledger.Core import qualified Data.ByteString as BS import Data.Typeable (Typeable) instance EraBlockBody ConwayEra where type BlockBody ConwayEra = AlonzoBlockBody ConwayEra mkBasicBlockBody :: BlockBody ConwayEra mkBasicBlockBody = BlockBody ConwayEra forall era. (SafeToHash (TxWits era), BlockBody era ~ AlonzoBlockBody era, AlonzoEraTx era) => BlockBody era mkBasicBlockBodyAlonzo txSeqBlockBodyL :: Lens' (BlockBody ConwayEra) (StrictSeq (Tx TopTx ConwayEra)) txSeqBlockBodyL = (StrictSeq (Tx TopTx ConwayEra) -> f (StrictSeq (Tx TopTx ConwayEra))) -> BlockBody ConwayEra -> f (BlockBody ConwayEra) forall era. (SafeToHash (TxWits era), BlockBody era ~ AlonzoBlockBody era, AlonzoEraTx era) => Lens' (BlockBody era) (StrictSeq (Tx TopTx era)) Lens' (BlockBody ConwayEra) (StrictSeq (Tx TopTx ConwayEra)) txSeqBlockBodyAlonzoL hashBlockBody :: BlockBody ConwayEra -> Hash HASH EraIndependentBlockBody hashBlockBody = BlockBody ConwayEra -> Hash HASH EraIndependentBlockBody AlonzoBlockBody ConwayEra -> Hash HASH EraIndependentBlockBody forall era. AlonzoBlockBody era -> Hash HASH EraIndependentBlockBody alonzoBlockBodyHash blockBodySize :: ProtVer -> BlockBody ConwayEra -> Int blockBodySize (ProtVer Version v Word32 _) = ByteString -> Int BS.length (ByteString -> Int) -> (AlonzoBlockBody ConwayEra -> ByteString) -> AlonzoBlockBody ConwayEra -> 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) -> (AlonzoBlockBody ConwayEra -> Encoding) -> AlonzoBlockBody ConwayEra -> ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . AlonzoBlockBody ConwayEra -> Encoding forall a. EncCBORGroup a => a -> Encoding encCBORGroup instance EncCBOR h => EncCBOR (Block h ConwayEra) where encCBOR :: Block h ConwayEra -> Encoding encCBOR (Block h h BlockBody ConwayEra txns) = Word -> Encoding encodeListLen Word 5 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 <> AlonzoBlockBody ConwayEra -> Encoding forall a. EncCBORGroup a => a -> Encoding encCBORGroup BlockBody ConwayEra AlonzoBlockBody ConwayEra txns instance (EncCBOR h, Typeable h) => Plain.ToCBOR (Block h ConwayEra) where toCBOR :: Block h ConwayEra -> Encoding toCBOR = Version -> Encoding -> Encoding toPlainEncoding (forall era. Era era => Version eraProtVerLow @ConwayEra) (Encoding -> Encoding) -> (Block h ConwayEra -> Encoding) -> Block h ConwayEra -> Encoding forall b c a. (b -> c) -> (a -> b) -> a -> c . Block h ConwayEra -> Encoding forall a. EncCBOR a => a -> Encoding encCBOR instance (DecCBOR (Annotator h), Typeable h) => DecCBOR (Annotator (Block h ConwayEra)) where decCBOR :: forall s. Decoder s (Annotator (Block h ConwayEra)) decCBOR = Text -> (Annotator (Block h ConwayEra) -> Int) -> Decoder s (Annotator (Block h ConwayEra)) -> Decoder s (Annotator (Block h ConwayEra)) forall a s. Text -> (a -> Int) -> Decoder s a -> Decoder s a decodeRecordNamed Text "Block" (Int -> Annotator (Block h ConwayEra) -> Int forall a b. a -> b -> a const Int 5) (Decoder s (Annotator (Block h ConwayEra)) -> Decoder s (Annotator (Block h ConwayEra))) -> Decoder s (Annotator (Block h ConwayEra)) -> Decoder s (Annotator (Block h ConwayEra)) 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