{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Babbage.BlockBody where

import Cardano.Ledger.Alonzo.BlockBody
import Cardano.Ledger.Babbage.Era
import Cardano.Ledger.Babbage.Tx ()
import Cardano.Ledger.BaseTypes (ProtVer (..))
import Cardano.Ledger.Binary (EncCBORGroup (..), serialize')
import Cardano.Ledger.Core
import qualified Data.ByteString as BS

instance EraBlockBody BabbageEra where
  type BlockBody BabbageEra = AlonzoBlockBody BabbageEra
  mkBasicBlockBody :: BlockBody BabbageEra
mkBasicBlockBody = BlockBody BabbageEra
forall era.
(SafeToHash (TxWits era), BlockBody era ~ AlonzoBlockBody era,
 AlonzoEraTx era) =>
BlockBody era
mkBasicBlockBodyAlonzo
  txSeqBlockBodyL :: Lens' (BlockBody BabbageEra) (StrictSeq (Tx TopTx BabbageEra))
txSeqBlockBodyL = (StrictSeq (Tx TopTx BabbageEra)
 -> f (StrictSeq (Tx TopTx BabbageEra)))
-> BlockBody BabbageEra -> f (BlockBody BabbageEra)
forall era.
(SafeToHash (TxWits era), BlockBody era ~ AlonzoBlockBody era,
 AlonzoEraTx era) =>
Lens' (BlockBody era) (StrictSeq (Tx TopTx era))
Lens' (BlockBody BabbageEra) (StrictSeq (Tx TopTx BabbageEra))
txSeqBlockBodyAlonzoL
  hashBlockBody :: BlockBody BabbageEra -> Hash HASH EraIndependentBlockBody
hashBlockBody = BlockBody BabbageEra -> Hash HASH EraIndependentBlockBody
AlonzoBlockBody BabbageEra -> Hash HASH EraIndependentBlockBody
forall era.
AlonzoBlockBody era -> Hash HASH EraIndependentBlockBody
alonzoBlockBodyHash
  numSegComponents :: Word64
numSegComponents = Word64
4
  blockBodySize :: ProtVer -> BlockBody BabbageEra -> Int
blockBodySize (ProtVer Version
v Natural
_) = ByteString -> Int
BS.length (ByteString -> Int)
-> (AlonzoBlockBody BabbageEra -> ByteString)
-> AlonzoBlockBody BabbageEra
-> 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 BabbageEra -> Encoding)
-> AlonzoBlockBody BabbageEra
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoBlockBody BabbageEra -> Encoding
forall a. EncCBORGroup a => a -> Encoding
encCBORGroup