{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Allegra.BlockBody () where

import Cardano.Ledger.Allegra.Era (AllegraEra)
import Cardano.Ledger.Allegra.Tx ()
import Cardano.Ledger.BaseTypes (ProtVer (..))
import Cardano.Ledger.Binary (EncCBORGroup (..), serialize')
import Cardano.Ledger.Core (EraBlockBody (..))
import Cardano.Ledger.Shelley.BlockBody (
  ShelleyBlockBody,
  mkBasicBlockBodyShelley,
  shelleyBlockBodyHash,
  txSeqBlockBodyShelleyL,
 )
import qualified Data.ByteString as BS

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