{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Conway.Translation (
  Tx (..),
  addrPtrNormalize,
  translateDatum,
) where

import Cardano.Ledger.Address (addrPtrNormalize)
import Cardano.Ledger.Babbage (BabbageEra)
import Cardano.Ledger.Binary (DecoderError)
import Cardano.Ledger.Conway.Core hiding (Tx)
import Cardano.Ledger.Conway.Era (ConwayEra)
import Cardano.Ledger.Conway.Genesis (ConwayGenesis (..))
import Cardano.Ledger.Conway.Governance (
  cgsCommitteeL,
  cgsConstitutionL,
  cgsCurPParamsL,
  cgsFuturePParamsL,
  cgsPrevPParamsL,
  mkEnactState,
  rsEnactStateL,
  setCompleteDRepPulsingState,
 )
import Cardano.Ledger.Conway.Scripts ()
import Cardano.Ledger.Conway.State
import Cardano.Ledger.Conway.Tx ()
import qualified Cardano.Ledger.Core as Core (Tx)
import Cardano.Ledger.Plutus.Data (translateDatum)
import Cardano.Ledger.Shelley.API (
  EpochState (..),
  NewEpochState (..),
  StrictMaybe (..),
  UTxOState (..),
 )
import qualified Cardano.Ledger.Shelley.API as API
import Cardano.Ledger.Shelley.LedgerState (
  epochStateGovStateL,
  lsCertStateL,
  lsUTxOStateL,
 )
import qualified Cardano.Ledger.UMap as UM
import Data.Default (Default (def))
import qualified Data.Map.Strict as Map
import Lens.Micro

--------------------------------------------------------------------------------
-- Translation from Babbage to Conway
--
-- The instances below are needed by the consensus layer. Do not remove any of
-- them without coordinating with consensus.
--
-- Please add auxiliary instances and other declarations at the bottom of this
-- module, not in the list below so that it remains clear which instances the
-- consensus layer needs.
--
-- WARNING: when a translation instance currently uses the default
-- 'TranslationError', i.e., 'Void', it means the consensus layer relies on it
-- being total. Do not change it!
--------------------------------------------------------------------------------

type instance TranslationContext ConwayEra = ConwayGenesis

instance TranslateEra ConwayEra NewEpochState where
  translateEra :: TranslationContext ConwayEra
-> NewEpochState (PreviousEra ConwayEra)
-> Except
     (TranslationError ConwayEra NewEpochState)
     (NewEpochState ConwayEra)
translateEra TranslationContext ConwayEra
ctxt NewEpochState (PreviousEra ConwayEra)
nes = do
    let es :: EpochState ConwayEra
es = TranslationContext ConwayEra
-> EpochState (PreviousEra ConwayEra) -> EpochState ConwayEra
forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' TranslationContext ConwayEra
ctxt (EpochState (PreviousEra ConwayEra) -> EpochState ConwayEra)
-> EpochState (PreviousEra ConwayEra) -> EpochState ConwayEra
forall a b. (a -> b) -> a -> b
$ NewEpochState BabbageEra -> EpochState BabbageEra
forall era. NewEpochState era -> EpochState era
nesEs NewEpochState (PreviousEra ConwayEra)
NewEpochState BabbageEra
nes
        -- We need to ensure that we have the same initial EnactState in the pulser as
        -- well as in the current EnactState, otherwise in the very first EPOCH rule call
        -- the pulser will reset it.
        ratifyState :: RatifyState ConwayEra
ratifyState =
          RatifyState ConwayEra
forall a. Default a => a
def
            RatifyState ConwayEra
-> (RatifyState ConwayEra -> RatifyState ConwayEra)
-> RatifyState ConwayEra
forall a b. a -> (a -> b) -> b
& (EnactState ConwayEra -> Identity (EnactState ConwayEra))
-> RatifyState ConwayEra -> Identity (RatifyState ConwayEra)
forall era (f :: * -> *).
Functor f =>
(EnactState era -> f (EnactState era))
-> RatifyState era -> f (RatifyState era)
rsEnactStateL ((EnactState ConwayEra -> Identity (EnactState ConwayEra))
 -> RatifyState ConwayEra -> Identity (RatifyState ConwayEra))
-> EnactState ConwayEra
-> RatifyState ConwayEra
-> RatifyState ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ GovState ConwayEra -> EnactState ConwayEra
forall era. ConwayEraGov era => GovState era -> EnactState era
mkEnactState (EpochState ConwayEra
es EpochState ConwayEra
-> Getting
     (ConwayGovState ConwayEra)
     (EpochState ConwayEra)
     (ConwayGovState ConwayEra)
-> ConwayGovState ConwayEra
forall s a. s -> Getting a s a -> a
^. (GovState ConwayEra
 -> Const (ConwayGovState ConwayEra) (GovState ConwayEra))
-> EpochState ConwayEra
-> Const (ConwayGovState ConwayEra) (EpochState ConwayEra)
Getting
  (ConwayGovState ConwayEra)
  (EpochState ConwayEra)
  (ConwayGovState ConwayEra)
forall era (f :: * -> *).
Functor f =>
(GovState era -> f (GovState era))
-> EpochState era -> f (EpochState era)
epochStateGovStateL)
    NewEpochState ConwayEra
-> Except
     (TranslationError ConwayEra NewEpochState)
     (NewEpochState ConwayEra)
forall a.
a -> ExceptT (TranslationError ConwayEra NewEpochState) Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NewEpochState ConwayEra
 -> Except
      (TranslationError ConwayEra NewEpochState)
      (NewEpochState ConwayEra))
-> NewEpochState ConwayEra
-> Except
     (TranslationError ConwayEra NewEpochState)
     (NewEpochState ConwayEra)
forall a b. (a -> b) -> a -> b
$
      NewEpochState
        { nesEL :: EpochNo
nesEL = NewEpochState BabbageEra -> EpochNo
forall era. NewEpochState era -> EpochNo
nesEL NewEpochState (PreviousEra ConwayEra)
NewEpochState BabbageEra
nes
        , nesBprev :: BlocksMade
nesBprev = NewEpochState BabbageEra -> BlocksMade
forall era. NewEpochState era -> BlocksMade
nesBprev NewEpochState (PreviousEra ConwayEra)
NewEpochState BabbageEra
nes
        , nesBcur :: BlocksMade
nesBcur = NewEpochState BabbageEra -> BlocksMade
forall era. NewEpochState era -> BlocksMade
nesBcur NewEpochState (PreviousEra ConwayEra)
NewEpochState BabbageEra
nes
        , nesEs :: EpochState ConwayEra
nesEs = PulsingSnapshot ConwayEra
-> RatifyState ConwayEra
-> EpochState ConwayEra
-> EpochState ConwayEra
forall era.
(GovState era ~ ConwayGovState era) =>
PulsingSnapshot era
-> RatifyState era -> EpochState era -> EpochState era
setCompleteDRepPulsingState PulsingSnapshot ConwayEra
forall a. Default a => a
def RatifyState ConwayEra
ratifyState EpochState ConwayEra
es
        , nesRu :: StrictMaybe PulsingRewUpdate
nesRu = NewEpochState BabbageEra -> StrictMaybe PulsingRewUpdate
forall era. NewEpochState era -> StrictMaybe PulsingRewUpdate
nesRu NewEpochState (PreviousEra ConwayEra)
NewEpochState BabbageEra
nes
        , nesPd :: PoolDistr
nesPd = NewEpochState BabbageEra -> PoolDistr
forall era. NewEpochState era -> PoolDistr
nesPd NewEpochState (PreviousEra ConwayEra)
NewEpochState BabbageEra
nes
        , stashedAVVMAddresses :: StashedAVVMAddresses ConwayEra
stashedAVVMAddresses = ()
        }

newtype Tx era = Tx {forall era. Tx era -> Tx era
unTx :: Core.Tx era}

instance TranslateEra ConwayEra Tx where
  type TranslationError ConwayEra Tx = DecoderError
  translateEra :: TranslationContext ConwayEra
-> Tx (PreviousEra ConwayEra)
-> Except (TranslationError ConwayEra Tx) (Tx ConwayEra)
translateEra TranslationContext ConwayEra
_ctxt (Tx Tx (PreviousEra ConwayEra)
tx) = do
    -- Note that this does not preserve the hidden bytes field of the transaction.
    -- This is under the premise that this is irrelevant for TxInBlocks, which are
    -- not transmitted as contiguous chunks.
    TxBody ConwayEra
txBody <- TxBody (PreviousEra ConwayEra)
-> Except DecoderError (TxBody ConwayEra)
forall era (ti :: * -> *) (to :: * -> *).
(Era era, ToCBOR (ti (PreviousEra era)), DecCBOR (to era)) =>
ti (PreviousEra era) -> Except DecoderError (to era)
translateEraThroughCBOR (TxBody (PreviousEra ConwayEra)
 -> Except DecoderError (TxBody ConwayEra))
-> TxBody (PreviousEra ConwayEra)
-> Except DecoderError (TxBody ConwayEra)
forall a b. (a -> b) -> a -> b
$ Tx (PreviousEra ConwayEra)
AlonzoTx BabbageEra
tx AlonzoTx BabbageEra
-> Getting
     (TxBody (PreviousEra ConwayEra))
     (AlonzoTx BabbageEra)
     (TxBody (PreviousEra ConwayEra))
-> TxBody (PreviousEra ConwayEra)
forall s a. s -> Getting a s a -> a
^. (TxBody (PreviousEra ConwayEra)
 -> Const
      (TxBody (PreviousEra ConwayEra)) (TxBody (PreviousEra ConwayEra)))
-> Tx (PreviousEra ConwayEra)
-> Const
     (TxBody (PreviousEra ConwayEra)) (Tx (PreviousEra ConwayEra))
Getting
  (TxBody (PreviousEra ConwayEra))
  (AlonzoTx BabbageEra)
  (TxBody (PreviousEra ConwayEra))
forall era. EraTx era => Lens' (Tx era) (TxBody era)
Lens' (Tx (PreviousEra ConwayEra)) (TxBody (PreviousEra ConwayEra))
bodyTxL
    AlonzoTxWits ConwayEra
txWits <- AlonzoTxWits (PreviousEra ConwayEra)
-> Except DecoderError (AlonzoTxWits ConwayEra)
forall era (ti :: * -> *) (to :: * -> *).
(Era era, ToCBOR (ti (PreviousEra era)), DecCBOR (to era)) =>
ti (PreviousEra era) -> Except DecoderError (to era)
translateEraThroughCBOR (AlonzoTxWits (PreviousEra ConwayEra)
 -> Except DecoderError (AlonzoTxWits ConwayEra))
-> AlonzoTxWits (PreviousEra ConwayEra)
-> Except DecoderError (AlonzoTxWits ConwayEra)
forall a b. (a -> b) -> a -> b
$ Tx (PreviousEra ConwayEra)
AlonzoTx BabbageEra
tx AlonzoTx BabbageEra
-> Getting
     (AlonzoTxWits (PreviousEra ConwayEra))
     (AlonzoTx BabbageEra)
     (AlonzoTxWits (PreviousEra ConwayEra))
-> AlonzoTxWits (PreviousEra ConwayEra)
forall s a. s -> Getting a s a -> a
^. (TxWits BabbageEra
 -> Const
      (AlonzoTxWits (PreviousEra ConwayEra)) (TxWits BabbageEra))
-> Tx BabbageEra
-> Const (AlonzoTxWits (PreviousEra ConwayEra)) (Tx BabbageEra)
Getting
  (AlonzoTxWits (PreviousEra ConwayEra))
  (AlonzoTx BabbageEra)
  (AlonzoTxWits (PreviousEra ConwayEra))
forall era. EraTx era => Lens' (Tx era) (TxWits era)
Lens' (Tx BabbageEra) (TxWits BabbageEra)
witsTxL
    StrictMaybe (AlonzoTxAuxData ConwayEra)
auxData <- (AlonzoTxAuxData (PreviousEra ConwayEra)
 -> ExceptT DecoderError Identity (AlonzoTxAuxData ConwayEra))
-> StrictMaybe (AlonzoTxAuxData (PreviousEra ConwayEra))
-> ExceptT
     DecoderError Identity (StrictMaybe (AlonzoTxAuxData ConwayEra))
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> StrictMaybe a -> m (StrictMaybe b)
mapM AlonzoTxAuxData (PreviousEra ConwayEra)
-> ExceptT DecoderError Identity (AlonzoTxAuxData ConwayEra)
forall era (ti :: * -> *) (to :: * -> *).
(Era era, ToCBOR (ti (PreviousEra era)), DecCBOR (to era)) =>
ti (PreviousEra era) -> Except DecoderError (to era)
translateEraThroughCBOR (Tx (PreviousEra ConwayEra)
AlonzoTx BabbageEra
tx AlonzoTx BabbageEra
-> Getting
     (StrictMaybe (AlonzoTxAuxData (PreviousEra ConwayEra)))
     (AlonzoTx BabbageEra)
     (StrictMaybe (AlonzoTxAuxData (PreviousEra ConwayEra)))
-> StrictMaybe (AlonzoTxAuxData (PreviousEra ConwayEra))
forall s a. s -> Getting a s a -> a
^. (StrictMaybe (TxAuxData BabbageEra)
 -> Const
      (StrictMaybe (AlonzoTxAuxData (PreviousEra ConwayEra)))
      (StrictMaybe (TxAuxData BabbageEra)))
-> Tx BabbageEra
-> Const
     (StrictMaybe (AlonzoTxAuxData (PreviousEra ConwayEra)))
     (Tx BabbageEra)
Getting
  (StrictMaybe (AlonzoTxAuxData (PreviousEra ConwayEra)))
  (AlonzoTx BabbageEra)
  (StrictMaybe (AlonzoTxAuxData (PreviousEra ConwayEra)))
forall era.
EraTx era =>
Lens' (Tx era) (StrictMaybe (TxAuxData era))
Lens' (Tx BabbageEra) (StrictMaybe (TxAuxData BabbageEra))
auxDataTxL)
    let isValidTx :: IsValid
isValidTx = Tx (PreviousEra ConwayEra)
AlonzoTx BabbageEra
tx AlonzoTx BabbageEra
-> Getting IsValid (AlonzoTx BabbageEra) IsValid -> IsValid
forall s a. s -> Getting a s a -> a
^. (IsValid -> Const IsValid IsValid)
-> Tx BabbageEra -> Const IsValid (Tx BabbageEra)
Getting IsValid (AlonzoTx BabbageEra) IsValid
forall era. AlonzoEraTx era => Lens' (Tx era) IsValid
Lens' (Tx BabbageEra) IsValid
isValidTxL
        newTx :: AlonzoTx ConwayEra
newTx =
          TxBody ConwayEra -> Tx ConwayEra
forall era. EraTx era => TxBody era -> Tx era
mkBasicTx TxBody ConwayEra
txBody
            AlonzoTx ConwayEra
-> (AlonzoTx ConwayEra -> AlonzoTx ConwayEra) -> AlonzoTx ConwayEra
forall a b. a -> (a -> b) -> b
& (TxWits ConwayEra -> Identity (TxWits ConwayEra))
-> Tx ConwayEra -> Identity (Tx ConwayEra)
(TxWits ConwayEra -> Identity (AlonzoTxWits ConwayEra))
-> AlonzoTx ConwayEra -> Identity (AlonzoTx ConwayEra)
forall era. EraTx era => Lens' (Tx era) (TxWits era)
Lens' (Tx ConwayEra) (TxWits ConwayEra)
witsTxL ((TxWits ConwayEra -> Identity (AlonzoTxWits ConwayEra))
 -> AlonzoTx ConwayEra -> Identity (AlonzoTx ConwayEra))
-> AlonzoTxWits ConwayEra
-> AlonzoTx ConwayEra
-> AlonzoTx ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ AlonzoTxWits ConwayEra
txWits
            AlonzoTx ConwayEra
-> (AlonzoTx ConwayEra -> AlonzoTx ConwayEra) -> AlonzoTx ConwayEra
forall a b. a -> (a -> b) -> b
& (IsValid -> Identity IsValid)
-> Tx ConwayEra -> Identity (Tx ConwayEra)
(IsValid -> Identity IsValid)
-> AlonzoTx ConwayEra -> Identity (AlonzoTx ConwayEra)
forall era. AlonzoEraTx era => Lens' (Tx era) IsValid
Lens' (Tx ConwayEra) IsValid
isValidTxL ((IsValid -> Identity IsValid)
 -> AlonzoTx ConwayEra -> Identity (AlonzoTx ConwayEra))
-> IsValid -> AlonzoTx ConwayEra -> AlonzoTx ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ IsValid
isValidTx
            AlonzoTx ConwayEra
-> (AlonzoTx ConwayEra -> AlonzoTx ConwayEra) -> AlonzoTx ConwayEra
forall a b. a -> (a -> b) -> b
& (StrictMaybe (TxAuxData ConwayEra)
 -> Identity (StrictMaybe (TxAuxData ConwayEra)))
-> Tx ConwayEra -> Identity (Tx ConwayEra)
(StrictMaybe (TxAuxData ConwayEra)
 -> Identity (StrictMaybe (AlonzoTxAuxData ConwayEra)))
-> AlonzoTx ConwayEra -> Identity (AlonzoTx ConwayEra)
forall era.
EraTx era =>
Lens' (Tx era) (StrictMaybe (TxAuxData era))
Lens' (Tx ConwayEra) (StrictMaybe (TxAuxData ConwayEra))
auxDataTxL ((StrictMaybe (TxAuxData ConwayEra)
  -> Identity (StrictMaybe (AlonzoTxAuxData ConwayEra)))
 -> AlonzoTx ConwayEra -> Identity (AlonzoTx ConwayEra))
-> StrictMaybe (AlonzoTxAuxData ConwayEra)
-> AlonzoTx ConwayEra
-> AlonzoTx ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ StrictMaybe (AlonzoTxAuxData ConwayEra)
auxData
    Tx ConwayEra -> ExceptT DecoderError Identity (Tx ConwayEra)
forall a. a -> ExceptT DecoderError Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Tx ConwayEra -> ExceptT DecoderError Identity (Tx ConwayEra))
-> Tx ConwayEra -> ExceptT DecoderError Identity (Tx ConwayEra)
forall a b. (a -> b) -> a -> b
$ Tx ConwayEra -> Tx ConwayEra
forall era. Tx era -> Tx era
Tx Tx ConwayEra
AlonzoTx ConwayEra
newTx

--------------------------------------------------------------------------------
-- Auxiliary instances and functions
--------------------------------------------------------------------------------

instance TranslateEra ConwayEra PParams where
  translateEra :: TranslationContext ConwayEra
-> PParams (PreviousEra ConwayEra)
-> Except (TranslationError ConwayEra PParams) (PParams ConwayEra)
translateEra ConwayGenesis {UpgradeConwayPParams Identity
cgUpgradePParams :: UpgradeConwayPParams Identity
cgUpgradePParams :: ConwayGenesis -> UpgradeConwayPParams Identity
cgUpgradePParams} = PParams ConwayEra -> ExceptT Void Identity (PParams ConwayEra)
forall a. a -> ExceptT Void Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PParams ConwayEra -> ExceptT Void Identity (PParams ConwayEra))
-> (PParams BabbageEra -> PParams ConwayEra)
-> PParams BabbageEra
-> ExceptT Void Identity (PParams ConwayEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UpgradePParams Identity ConwayEra
-> PParams (PreviousEra ConwayEra) -> PParams ConwayEra
forall era.
(EraPParams era, EraPParams (PreviousEra era)) =>
UpgradePParams Identity era
-> PParams (PreviousEra era) -> PParams era
upgradePParams UpgradePParams Identity ConwayEra
UpgradeConwayPParams Identity
cgUpgradePParams

instance TranslateEra ConwayEra FuturePParams where
  translateEra :: TranslationContext ConwayEra
-> FuturePParams (PreviousEra ConwayEra)
-> Except
     (TranslationError ConwayEra FuturePParams)
     (FuturePParams ConwayEra)
translateEra TranslationContext ConwayEra
ctxt = \case
    FuturePParams (PreviousEra ConwayEra)
NoPParamsUpdate -> FuturePParams ConwayEra
-> ExceptT Void Identity (FuturePParams ConwayEra)
forall a. a -> ExceptT Void Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure FuturePParams ConwayEra
forall era. FuturePParams era
NoPParamsUpdate
    DefinitePParamsUpdate PParams (PreviousEra ConwayEra)
pp -> PParams ConwayEra -> FuturePParams ConwayEra
forall era. PParams era -> FuturePParams era
DefinitePParamsUpdate (PParams ConwayEra -> FuturePParams ConwayEra)
-> ExceptT Void Identity (PParams ConwayEra)
-> ExceptT Void Identity (FuturePParams ConwayEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TranslationContext ConwayEra
-> PParams (PreviousEra ConwayEra)
-> Except (TranslationError ConwayEra PParams) (PParams ConwayEra)
forall era (f :: * -> *).
TranslateEra era f =>
TranslationContext era
-> f (PreviousEra era) -> Except (TranslationError era f) (f era)
translateEra TranslationContext ConwayEra
ctxt PParams (PreviousEra ConwayEra)
pp
    PotentialPParamsUpdate Maybe (PParams (PreviousEra ConwayEra))
mpp -> Maybe (PParams ConwayEra) -> FuturePParams ConwayEra
forall era. Maybe (PParams era) -> FuturePParams era
PotentialPParamsUpdate (Maybe (PParams ConwayEra) -> FuturePParams ConwayEra)
-> ExceptT Void Identity (Maybe (PParams ConwayEra))
-> ExceptT Void Identity (FuturePParams ConwayEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (PParams BabbageEra -> ExceptT Void Identity (PParams ConwayEra))
-> Maybe (PParams BabbageEra)
-> ExceptT Void Identity (Maybe (PParams ConwayEra))
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Maybe a -> m (Maybe b)
mapM (TranslationContext ConwayEra
-> PParams (PreviousEra ConwayEra)
-> Except (TranslationError ConwayEra PParams) (PParams ConwayEra)
forall era (f :: * -> *).
TranslateEra era f =>
TranslationContext era
-> f (PreviousEra era) -> Except (TranslationError era f) (f era)
translateEra TranslationContext ConwayEra
ctxt) Maybe (PParams (PreviousEra ConwayEra))
Maybe (PParams BabbageEra)
mpp

instance TranslateEra ConwayEra EpochState where
  translateEra :: TranslationContext ConwayEra
-> EpochState (PreviousEra ConwayEra)
-> Except
     (TranslationError ConwayEra EpochState) (EpochState ConwayEra)
translateEra TranslationContext ConwayEra
ctxt EpochState (PreviousEra ConwayEra)
es =
    EpochState ConwayEra
-> Except
     (TranslationError ConwayEra EpochState) (EpochState ConwayEra)
forall a.
a -> ExceptT (TranslationError ConwayEra EpochState) Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (EpochState ConwayEra
 -> Except
      (TranslationError ConwayEra EpochState) (EpochState ConwayEra))
-> EpochState ConwayEra
-> Except
     (TranslationError ConwayEra EpochState) (EpochState ConwayEra)
forall a b. (a -> b) -> a -> b
$
      EpochState
        { esChainAccountState :: ChainAccountState
esChainAccountState = EpochState BabbageEra -> ChainAccountState
forall era. EpochState era -> ChainAccountState
esChainAccountState EpochState (PreviousEra ConwayEra)
EpochState BabbageEra
es
        , esSnapshots :: SnapShots
esSnapshots = EpochState BabbageEra -> SnapShots
forall era. EpochState era -> SnapShots
esSnapshots EpochState (PreviousEra ConwayEra)
EpochState BabbageEra
es
        , esLState :: LedgerState ConwayEra
esLState = TranslationContext ConwayEra
-> LedgerState (PreviousEra ConwayEra) -> LedgerState ConwayEra
forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' TranslationContext ConwayEra
ctxt (LedgerState (PreviousEra ConwayEra) -> LedgerState ConwayEra)
-> LedgerState (PreviousEra ConwayEra) -> LedgerState ConwayEra
forall a b. (a -> b) -> a -> b
$ EpochState BabbageEra -> LedgerState BabbageEra
forall era. EpochState era -> LedgerState era
esLState EpochState (PreviousEra ConwayEra)
EpochState BabbageEra
es
        , esNonMyopic :: NonMyopic
esNonMyopic = EpochState BabbageEra -> NonMyopic
forall era. EpochState era -> NonMyopic
esNonMyopic EpochState (PreviousEra ConwayEra)
EpochState BabbageEra
es
        }

instance TranslateEra ConwayEra DState where
  translateEra :: TranslationContext ConwayEra
-> DState (PreviousEra ConwayEra)
-> Except (TranslationError ConwayEra DState) (DState ConwayEra)
translateEra TranslationContext ConwayEra
_ DState {dsUnified :: forall era. DState era -> UMap
dsUnified = UMap
umap, Map FutureGenDeleg GenDelegPair
InstantaneousRewards
GenDelegs
dsFutureGenDelegs :: Map FutureGenDeleg GenDelegPair
dsGenDelegs :: GenDelegs
dsIRewards :: InstantaneousRewards
dsFutureGenDelegs :: forall era. DState era -> Map FutureGenDeleg GenDelegPair
dsGenDelegs :: forall era. DState era -> GenDelegs
dsIRewards :: forall era. DState era -> InstantaneousRewards
..} = DState ConwayEra -> ExceptT Void Identity (DState ConwayEra)
forall a. a -> ExceptT Void Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure DState {dsUnified :: UMap
dsUnified = UMap
umap', Map FutureGenDeleg GenDelegPair
InstantaneousRewards
GenDelegs
dsFutureGenDelegs :: Map FutureGenDeleg GenDelegPair
dsGenDelegs :: GenDelegs
dsIRewards :: InstantaneousRewards
dsFutureGenDelegs :: Map FutureGenDeleg GenDelegPair
dsGenDelegs :: GenDelegs
dsIRewards :: InstantaneousRewards
..}
    where
      umap' :: UMap
umap' =
        UMap
umap
          { UM.umElems =
              Map.map (\(UM.UMElem StrictMaybe RDPair
rd Set Ptr
_ StrictMaybe (KeyHash 'StakePool)
poolId StrictMaybe DRep
drep) -> StrictMaybe RDPair
-> Set Ptr
-> StrictMaybe (KeyHash 'StakePool)
-> StrictMaybe DRep
-> UMElem
UM.UMElem StrictMaybe RDPair
rd Set Ptr
forall a. Monoid a => a
mempty StrictMaybe (KeyHash 'StakePool)
poolId StrictMaybe DRep
drep) (UM.umElems umap)
          , UM.umPtrs = mempty
          }

instance TranslateEra ConwayEra PState where
  translateEra :: TranslationContext ConwayEra
-> PState (PreviousEra ConwayEra)
-> Except (TranslationError ConwayEra PState) (PState ConwayEra)
translateEra TranslationContext ConwayEra
_ PState {Map (KeyHash 'StakePool) EpochNo
Map (KeyHash 'StakePool) Coin
Map (KeyHash 'StakePool) PoolParams
psStakePoolParams :: Map (KeyHash 'StakePool) PoolParams
psFutureStakePoolParams :: Map (KeyHash 'StakePool) PoolParams
psRetiring :: Map (KeyHash 'StakePool) EpochNo
psDeposits :: Map (KeyHash 'StakePool) Coin
psStakePoolParams :: forall era. PState era -> Map (KeyHash 'StakePool) PoolParams
psFutureStakePoolParams :: forall era. PState era -> Map (KeyHash 'StakePool) PoolParams
psRetiring :: forall era. PState era -> Map (KeyHash 'StakePool) EpochNo
psDeposits :: forall era. PState era -> Map (KeyHash 'StakePool) Coin
..} = PState ConwayEra -> ExceptT Void Identity (PState ConwayEra)
forall a. a -> ExceptT Void Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PState {Map (KeyHash 'StakePool) EpochNo
Map (KeyHash 'StakePool) Coin
Map (KeyHash 'StakePool) PoolParams
psStakePoolParams :: Map (KeyHash 'StakePool) PoolParams
psFutureStakePoolParams :: Map (KeyHash 'StakePool) PoolParams
psRetiring :: Map (KeyHash 'StakePool) EpochNo
psDeposits :: Map (KeyHash 'StakePool) Coin
psStakePoolParams :: Map (KeyHash 'StakePool) PoolParams
psFutureStakePoolParams :: Map (KeyHash 'StakePool) PoolParams
psRetiring :: Map (KeyHash 'StakePool) EpochNo
psDeposits :: Map (KeyHash 'StakePool) Coin
..}

instance TranslateEra ConwayEra API.LedgerState where
  translateEra :: TranslationContext ConwayEra
-> LedgerState (PreviousEra ConwayEra)
-> Except
     (TranslationError ConwayEra LedgerState) (LedgerState ConwayEra)
translateEra TranslationContext ConwayEra
conwayGenesis LedgerState (PreviousEra ConwayEra)
ls =
    LedgerState ConwayEra
-> ExceptT Void Identity (LedgerState ConwayEra)
forall a. a -> ExceptT Void Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
      API.LedgerState
        { lsUTxOState :: UTxOState ConwayEra
API.lsUTxOState = TranslationContext ConwayEra
-> UTxOState (PreviousEra ConwayEra) -> UTxOState ConwayEra
forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' TranslationContext ConwayEra
conwayGenesis (UTxOState (PreviousEra ConwayEra) -> UTxOState ConwayEra)
-> UTxOState (PreviousEra ConwayEra) -> UTxOState ConwayEra
forall a b. (a -> b) -> a -> b
$ LedgerState (PreviousEra ConwayEra)
LedgerState BabbageEra
ls LedgerState BabbageEra
-> Getting
     (UTxOState BabbageEra)
     (LedgerState BabbageEra)
     (UTxOState BabbageEra)
-> UTxOState BabbageEra
forall s a. s -> Getting a s a -> a
^. Getting
  (UTxOState BabbageEra)
  (LedgerState BabbageEra)
  (UTxOState BabbageEra)
forall era (f :: * -> *).
Functor f =>
(UTxOState era -> f (UTxOState era))
-> LedgerState era -> f (LedgerState era)
lsUTxOStateL
        , lsCertState :: CertState ConwayEra
API.lsCertState = TranslationContext ConwayEra
-> CertState BabbageEra -> CertState ConwayEra
translateCertState TranslationContext ConwayEra
conwayGenesis (CertState BabbageEra -> CertState ConwayEra)
-> CertState BabbageEra -> CertState ConwayEra
forall a b. (a -> b) -> a -> b
$ LedgerState (PreviousEra ConwayEra)
LedgerState BabbageEra
ls LedgerState BabbageEra
-> Getting
     (ShelleyCertState BabbageEra)
     (LedgerState BabbageEra)
     (ShelleyCertState BabbageEra)
-> ShelleyCertState BabbageEra
forall s a. s -> Getting a s a -> a
^. (CertState BabbageEra
 -> Const (ShelleyCertState BabbageEra) (CertState BabbageEra))
-> LedgerState BabbageEra
-> Const (ShelleyCertState BabbageEra) (LedgerState BabbageEra)
Getting
  (ShelleyCertState BabbageEra)
  (LedgerState BabbageEra)
  (ShelleyCertState BabbageEra)
forall era (f :: * -> *).
Functor f =>
(CertState era -> f (CertState era))
-> LedgerState era -> f (LedgerState era)
lsCertStateL
        }

translateCertState ::
  TranslationContext ConwayEra ->
  API.CertState BabbageEra ->
  API.CertState ConwayEra
translateCertState :: TranslationContext ConwayEra
-> CertState BabbageEra -> CertState ConwayEra
translateCertState TranslationContext ConwayEra
ctx CertState BabbageEra
scert =
  CertState ConwayEra
forall a. Default a => a
def
    CertState ConwayEra
-> (CertState ConwayEra -> CertState ConwayEra)
-> CertState ConwayEra
forall a b. a -> (a -> b) -> b
& (DState ConwayEra -> Identity (DState ConwayEra))
-> CertState ConwayEra -> Identity (CertState ConwayEra)
forall era. EraCertState era => Lens' (CertState era) (DState era)
Lens' (CertState ConwayEra) (DState ConwayEra)
certDStateL ((DState ConwayEra -> Identity (DState ConwayEra))
 -> CertState ConwayEra -> Identity (CertState ConwayEra))
-> DState ConwayEra -> CertState ConwayEra -> CertState ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TranslationContext ConwayEra
-> DState (PreviousEra ConwayEra) -> DState ConwayEra
forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' TranslationContext ConwayEra
ctx (CertState BabbageEra
ShelleyCertState BabbageEra
scert ShelleyCertState BabbageEra
-> Getting
     (DState (PreviousEra ConwayEra))
     (ShelleyCertState BabbageEra)
     (DState (PreviousEra ConwayEra))
-> DState (PreviousEra ConwayEra)
forall s a. s -> Getting a s a -> a
^. (DState (PreviousEra ConwayEra)
 -> Const
      (DState (PreviousEra ConwayEra)) (DState (PreviousEra ConwayEra)))
-> CertState (PreviousEra ConwayEra)
-> Const
     (DState (PreviousEra ConwayEra))
     (CertState (PreviousEra ConwayEra))
Getting
  (DState (PreviousEra ConwayEra))
  (ShelleyCertState BabbageEra)
  (DState (PreviousEra ConwayEra))
forall era. EraCertState era => Lens' (CertState era) (DState era)
Lens'
  (CertState (PreviousEra ConwayEra))
  (DState (PreviousEra ConwayEra))
certDStateL)
    CertState ConwayEra
-> (CertState ConwayEra -> ConwayCertState ConwayEra)
-> ConwayCertState ConwayEra
forall a b. a -> (a -> b) -> b
& (PState ConwayEra -> Identity (PState ConwayEra))
-> CertState ConwayEra -> Identity (CertState ConwayEra)
(PState ConwayEra -> Identity (PState ConwayEra))
-> CertState ConwayEra -> Identity (ConwayCertState ConwayEra)
forall era. EraCertState era => Lens' (CertState era) (PState era)
Lens' (CertState ConwayEra) (PState ConwayEra)
certPStateL ((PState ConwayEra -> Identity (PState ConwayEra))
 -> CertState ConwayEra -> Identity (ConwayCertState ConwayEra))
-> PState ConwayEra
-> CertState ConwayEra
-> ConwayCertState ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ TranslationContext ConwayEra
-> PState (PreviousEra ConwayEra) -> PState ConwayEra
forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' TranslationContext ConwayEra
ctx (CertState BabbageEra
ShelleyCertState BabbageEra
scert ShelleyCertState BabbageEra
-> Getting
     (PState BabbageEra)
     (ShelleyCertState BabbageEra)
     (PState BabbageEra)
-> PState BabbageEra
forall s a. s -> Getting a s a -> a
^. (PState BabbageEra
 -> Const (PState BabbageEra) (PState BabbageEra))
-> CertState BabbageEra
-> Const (PState BabbageEra) (CertState BabbageEra)
Getting
  (PState BabbageEra)
  (ShelleyCertState BabbageEra)
  (PState BabbageEra)
forall era. EraCertState era => Lens' (CertState era) (PState era)
Lens' (CertState BabbageEra) (PState BabbageEra)
certPStateL)

translateGovState ::
  TranslationContext ConwayEra ->
  GovState BabbageEra ->
  GovState ConwayEra
translateGovState :: TranslationContext ConwayEra
-> GovState BabbageEra -> GovState ConwayEra
translateGovState ctxt :: TranslationContext ConwayEra
ctxt@ConwayGenesis {ListMap (Credential 'Staking) Delegatee
ListMap (Credential 'DRepRole) DRepState
Constitution ConwayEra
Committee ConwayEra
UpgradeConwayPParams Identity
cgUpgradePParams :: ConwayGenesis -> UpgradeConwayPParams Identity
cgUpgradePParams :: UpgradeConwayPParams Identity
cgConstitution :: Constitution ConwayEra
cgCommittee :: Committee ConwayEra
cgDelegs :: ListMap (Credential 'Staking) Delegatee
cgInitialDReps :: ListMap (Credential 'DRepRole) DRepState
cgConstitution :: ConwayGenesis -> Constitution ConwayEra
cgCommittee :: ConwayGenesis -> Committee ConwayEra
cgDelegs :: ConwayGenesis -> ListMap (Credential 'Staking) Delegatee
cgInitialDReps :: ConwayGenesis -> ListMap (Credential 'DRepRole) DRepState
..} GovState BabbageEra
sgov =
  let curPParams :: PParams ConwayEra
curPParams = TranslationContext ConwayEra
-> PParams (PreviousEra ConwayEra) -> PParams ConwayEra
forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' TranslationContext ConwayEra
ctxt (GovState BabbageEra
ShelleyGovState BabbageEra
sgov ShelleyGovState BabbageEra
-> Getting
     (PParams BabbageEra)
     (ShelleyGovState BabbageEra)
     (PParams BabbageEra)
-> PParams BabbageEra
forall s a. s -> Getting a s a -> a
^. (PParams BabbageEra
 -> Const (PParams BabbageEra) (PParams BabbageEra))
-> GovState BabbageEra
-> Const (PParams BabbageEra) (GovState BabbageEra)
Getting
  (PParams BabbageEra)
  (ShelleyGovState BabbageEra)
  (PParams BabbageEra)
forall era. EraGov era => Lens' (GovState era) (PParams era)
Lens' (GovState BabbageEra) (PParams BabbageEra)
curPParamsGovStateL)
      prevPParams :: PParams ConwayEra
prevPParams = TranslationContext ConwayEra
-> PParams (PreviousEra ConwayEra) -> PParams ConwayEra
forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' TranslationContext ConwayEra
ctxt (GovState BabbageEra
ShelleyGovState BabbageEra
sgov ShelleyGovState BabbageEra
-> Getting
     (PParams BabbageEra)
     (ShelleyGovState BabbageEra)
     (PParams BabbageEra)
-> PParams BabbageEra
forall s a. s -> Getting a s a -> a
^. (PParams BabbageEra
 -> Const (PParams BabbageEra) (PParams BabbageEra))
-> GovState BabbageEra
-> Const (PParams BabbageEra) (GovState BabbageEra)
Getting
  (PParams BabbageEra)
  (ShelleyGovState BabbageEra)
  (PParams BabbageEra)
forall era. EraGov era => Lens' (GovState era) (PParams era)
Lens' (GovState BabbageEra) (PParams BabbageEra)
prevPParamsGovStateL)
      futurePParams :: FuturePParams ConwayEra
futurePParams = TranslationContext ConwayEra
-> FuturePParams (PreviousEra ConwayEra) -> FuturePParams ConwayEra
forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' TranslationContext ConwayEra
ctxt (GovState BabbageEra
ShelleyGovState BabbageEra
sgov ShelleyGovState BabbageEra
-> Getting
     (FuturePParams BabbageEra)
     (ShelleyGovState BabbageEra)
     (FuturePParams BabbageEra)
-> FuturePParams BabbageEra
forall s a. s -> Getting a s a -> a
^. (FuturePParams BabbageEra
 -> Const (FuturePParams BabbageEra) (FuturePParams BabbageEra))
-> GovState BabbageEra
-> Const (FuturePParams BabbageEra) (GovState BabbageEra)
Getting
  (FuturePParams BabbageEra)
  (ShelleyGovState BabbageEra)
  (FuturePParams BabbageEra)
forall era. EraGov era => Lens' (GovState era) (FuturePParams era)
Lens' (GovState BabbageEra) (FuturePParams BabbageEra)
futurePParamsGovStateL)
   in GovState ConwayEra
ConwayGovState ConwayEra
forall era. EraGov era => GovState era
emptyGovState
        ConwayGovState ConwayEra
-> (ConwayGovState ConwayEra -> ConwayGovState ConwayEra)
-> ConwayGovState ConwayEra
forall a b. a -> (a -> b) -> b
& (PParams ConwayEra -> Identity (PParams ConwayEra))
-> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra)
forall era (f :: * -> *).
Functor f =>
(PParams era -> f (PParams era))
-> ConwayGovState era -> f (ConwayGovState era)
cgsCurPParamsL ((PParams ConwayEra -> Identity (PParams ConwayEra))
 -> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra))
-> PParams ConwayEra
-> ConwayGovState ConwayEra
-> ConwayGovState ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ PParams ConwayEra
curPParams
        ConwayGovState ConwayEra
-> (ConwayGovState ConwayEra -> ConwayGovState ConwayEra)
-> ConwayGovState ConwayEra
forall a b. a -> (a -> b) -> b
& (PParams ConwayEra -> Identity (PParams ConwayEra))
-> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra)
forall era (f :: * -> *).
Functor f =>
(PParams era -> f (PParams era))
-> ConwayGovState era -> f (ConwayGovState era)
cgsPrevPParamsL ((PParams ConwayEra -> Identity (PParams ConwayEra))
 -> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra))
-> PParams ConwayEra
-> ConwayGovState ConwayEra
-> ConwayGovState ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ PParams ConwayEra
prevPParams
        ConwayGovState ConwayEra
-> (ConwayGovState ConwayEra -> ConwayGovState ConwayEra)
-> ConwayGovState ConwayEra
forall a b. a -> (a -> b) -> b
& (FuturePParams ConwayEra -> Identity (FuturePParams ConwayEra))
-> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra)
forall era (f :: * -> *).
Functor f =>
(FuturePParams era -> f (FuturePParams era))
-> ConwayGovState era -> f (ConwayGovState era)
cgsFuturePParamsL ((FuturePParams ConwayEra -> Identity (FuturePParams ConwayEra))
 -> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra))
-> FuturePParams ConwayEra
-> ConwayGovState ConwayEra
-> ConwayGovState ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ FuturePParams ConwayEra
futurePParams
        ConwayGovState ConwayEra
-> (ConwayGovState ConwayEra -> ConwayGovState ConwayEra)
-> ConwayGovState ConwayEra
forall a b. a -> (a -> b) -> b
& (StrictMaybe (Committee ConwayEra)
 -> Identity (StrictMaybe (Committee ConwayEra)))
-> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra)
forall era (f :: * -> *).
Functor f =>
(StrictMaybe (Committee era) -> f (StrictMaybe (Committee era)))
-> ConwayGovState era -> f (ConwayGovState era)
cgsCommitteeL ((StrictMaybe (Committee ConwayEra)
  -> Identity (StrictMaybe (Committee ConwayEra)))
 -> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra))
-> StrictMaybe (Committee ConwayEra)
-> ConwayGovState ConwayEra
-> ConwayGovState ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Committee ConwayEra -> StrictMaybe (Committee ConwayEra)
forall a. a -> StrictMaybe a
SJust Committee ConwayEra
cgCommittee
        ConwayGovState ConwayEra
-> (ConwayGovState ConwayEra -> ConwayGovState ConwayEra)
-> ConwayGovState ConwayEra
forall a b. a -> (a -> b) -> b
& (Constitution ConwayEra -> Identity (Constitution ConwayEra))
-> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra)
forall era (f :: * -> *).
Functor f =>
(Constitution era -> f (Constitution era))
-> ConwayGovState era -> f (ConwayGovState era)
cgsConstitutionL ((Constitution ConwayEra -> Identity (Constitution ConwayEra))
 -> ConwayGovState ConwayEra -> Identity (ConwayGovState ConwayEra))
-> Constitution ConwayEra
-> ConwayGovState ConwayEra
-> ConwayGovState ConwayEra
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Constitution ConwayEra
cgConstitution

instance TranslateEra ConwayEra UTxOState where
  translateEra :: TranslationContext ConwayEra
-> UTxOState (PreviousEra ConwayEra)
-> Except
     (TranslationError ConwayEra UTxOState) (UTxOState ConwayEra)
translateEra TranslationContext ConwayEra
ctxt UTxOState (PreviousEra ConwayEra)
us =
    UTxOState ConwayEra -> ExceptT Void Identity (UTxOState ConwayEra)
forall a. a -> ExceptT Void Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
      UTxOState
        { utxosUtxo :: UTxO ConwayEra
API.utxosUtxo = TranslationContext ConwayEra
-> UTxO (PreviousEra ConwayEra) -> UTxO ConwayEra
forall era (f :: * -> *).
(TranslateEra era f, TranslationError era f ~ Void) =>
TranslationContext era -> f (PreviousEra era) -> f era
translateEra' TranslationContext ConwayEra
ctxt (UTxO (PreviousEra ConwayEra) -> UTxO ConwayEra)
-> UTxO (PreviousEra ConwayEra) -> UTxO ConwayEra
forall a b. (a -> b) -> a -> b
$ UTxOState BabbageEra -> UTxO BabbageEra
forall era. UTxOState era -> UTxO era
API.utxosUtxo UTxOState (PreviousEra ConwayEra)
UTxOState BabbageEra
us
        , utxosDeposited :: Coin
API.utxosDeposited = UTxOState BabbageEra -> Coin
forall era. UTxOState era -> Coin
API.utxosDeposited UTxOState (PreviousEra ConwayEra)
UTxOState BabbageEra
us
        , utxosFees :: Coin
API.utxosFees = UTxOState BabbageEra -> Coin
forall era. UTxOState era -> Coin
API.utxosFees UTxOState (PreviousEra ConwayEra)
UTxOState BabbageEra
us
        , utxosGovState :: GovState ConwayEra
API.utxosGovState = TranslationContext ConwayEra
-> GovState BabbageEra -> GovState ConwayEra
translateGovState TranslationContext ConwayEra
ctxt (GovState BabbageEra -> GovState ConwayEra)
-> GovState BabbageEra -> GovState ConwayEra
forall a b. (a -> b) -> a -> b
$ UTxOState BabbageEra -> GovState BabbageEra
forall era. UTxOState era -> GovState era
API.utxosGovState UTxOState (PreviousEra ConwayEra)
UTxOState BabbageEra
us
        , utxosInstantStake :: InstantStake ConwayEra
API.utxosInstantStake = Map (Credential 'Staking) (CompactForm Coin)
-> InstantStake ConwayEra
Map (Credential 'Staking) (CompactForm Coin)
-> ConwayInstantStake ConwayEra
forall era.
Map (Credential 'Staking) (CompactForm Coin)
-> ConwayInstantStake era
ConwayInstantStake (Map (Credential 'Staking) (CompactForm Coin)
 -> InstantStake ConwayEra)
-> (ShelleyInstantStake BabbageEra
    -> Map (Credential 'Staking) (CompactForm Coin))
-> ShelleyInstantStake BabbageEra
-> InstantStake ConwayEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyInstantStake BabbageEra
-> Map (Credential 'Staking) (CompactForm Coin)
forall era.
ShelleyInstantStake era
-> Map (Credential 'Staking) (CompactForm Coin)
sisCredentialStake (ShelleyInstantStake BabbageEra -> InstantStake ConwayEra)
-> ShelleyInstantStake BabbageEra -> InstantStake ConwayEra
forall a b. (a -> b) -> a -> b
$ UTxOState BabbageEra -> InstantStake BabbageEra
forall era. UTxOState era -> InstantStake era
API.utxosInstantStake UTxOState (PreviousEra ConwayEra)
UTxOState BabbageEra
us
        , utxosDonation :: Coin
API.utxosDonation = UTxOState BabbageEra -> Coin
forall era. UTxOState era -> Coin
API.utxosDonation UTxOState (PreviousEra ConwayEra)
UTxOState BabbageEra
us
        }

instance TranslateEra ConwayEra API.UTxO where
  translateEra :: TranslationContext ConwayEra
-> UTxO (PreviousEra ConwayEra)
-> Except (TranslationError ConwayEra UTxO) (UTxO ConwayEra)
translateEra TranslationContext ConwayEra
_ctxt UTxO (PreviousEra ConwayEra)
utxo =
    UTxO ConwayEra
-> Except (TranslationError ConwayEra UTxO) (UTxO ConwayEra)
forall a. a -> ExceptT (TranslationError ConwayEra UTxO) Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (UTxO ConwayEra
 -> Except (TranslationError ConwayEra UTxO) (UTxO ConwayEra))
-> UTxO ConwayEra
-> Except (TranslationError ConwayEra UTxO) (UTxO ConwayEra)
forall a b. (a -> b) -> a -> b
$ Map TxIn (TxOut ConwayEra) -> UTxO ConwayEra
forall era. Map TxIn (TxOut era) -> UTxO era
API.UTxO (Map TxIn (TxOut ConwayEra) -> UTxO ConwayEra)
-> Map TxIn (TxOut ConwayEra) -> UTxO ConwayEra
forall a b. (a -> b) -> a -> b
$ TxOut (PreviousEra ConwayEra) -> TxOut ConwayEra
TxOut (PreviousEra ConwayEra) -> BabbageTxOut ConwayEra
forall era.
(EraTxOut era, EraTxOut (PreviousEra era)) =>
TxOut (PreviousEra era) -> TxOut era
upgradeTxOut (TxOut (PreviousEra ConwayEra) -> BabbageTxOut ConwayEra)
-> Map TxIn (TxOut (PreviousEra ConwayEra))
-> Map TxIn (BabbageTxOut ConwayEra)
forall a b k. (a -> b) -> Map k a -> Map k b
`Map.map` UTxO BabbageEra -> Map TxIn (TxOut BabbageEra)
forall era. UTxO era -> Map TxIn (TxOut era)
API.unUTxO UTxO (PreviousEra ConwayEra)
UTxO BabbageEra
utxo