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

module Cardano.Ledger.Conway.CertState () where

import Cardano.Ledger.CertState
import Cardano.Ledger.Conway.Era (ConwayEra)
import Cardano.Ledger.Shelley.CertState
import Data.Coerce (coerce)

instance EraCertState ConwayEra where
  type CertState ConwayEra = ShelleyCertState ConwayEra

  mkCertState :: VState ConwayEra
-> PState ConwayEra -> DState ConwayEra -> CertState ConwayEra
mkCertState = forall era.
VState era -> PState era -> DState era -> ShelleyCertState era
mkShelleyCertState

  upgradeCertState :: EraCertState (PreviousEra ConwayEra) =>
CertState (PreviousEra ConwayEra) -> CertState ConwayEra
upgradeCertState = coerce :: forall a b. Coercible a b => a -> b
coerce

  certDStateL :: Lens' (CertState ConwayEra) (DState ConwayEra)
certDStateL = forall era. Lens' (ShelleyCertState era) (DState era)
shelleyCertDStateL
  {-# INLINE certDStateL #-}

  certVStateL :: Lens' (CertState ConwayEra) (VState ConwayEra)
certVStateL = forall era. Lens' (ShelleyCertState era) (VState era)
shelleyCertVStateL
  {-# INLINE certVStateL #-}

  certPStateL :: Lens' (CertState ConwayEra) (PState ConwayEra)
certPStateL = forall era. Lens' (ShelleyCertState era) (PState era)
shelleyCertPStateL
  {-# INLINE certPStateL #-}

  obligationCertState :: CertState ConwayEra -> Obligations
obligationCertState = forall era. ShelleyCertState era -> Obligations
shelleyObligationCertState

  certsTotalDepositsTxBody :: EraTxBody ConwayEra =>
PParams ConwayEra
-> CertState ConwayEra -> TxBody ConwayEra -> Coin
certsTotalDepositsTxBody = forall era.
EraTxBody era =>
PParams era -> ShelleyCertState era -> TxBody era -> Coin
shelleyCertsTotalDepositsTxBody

  certsTotalRefundsTxBody :: EraTxBody ConwayEra =>
PParams ConwayEra
-> CertState ConwayEra -> TxBody ConwayEra -> Coin
certsTotalRefundsTxBody = forall era.
EraTxBody era =>
PParams era -> ShelleyCertState era -> TxBody era -> Coin
shelleyCertsTotalRefundsTxBody