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

module Cardano.Ledger.Babbage.State.Stake () where

import Cardano.Ledger.Babbage.Core ()
import Cardano.Ledger.Babbage.Era (BabbageEra)
import Cardano.Ledger.Shelley.State (
  EraStake (..),
  ShelleyInstantStake,
  addShelleyInstantStake,
  deleteShelleyInstantStake,
  resolveShelleyInstantStake,
  shelleyInstantStakeCredentialsL,
 )

instance EraStake BabbageEra where
  type InstantStake BabbageEra = ShelleyInstantStake BabbageEra
  instantStakeCredentialsL :: Lens'
  (InstantStake BabbageEra)
  (Map (Credential 'Staking) (CompactForm Coin))
instantStakeCredentialsL = (Map (Credential 'Staking) (CompactForm Coin)
 -> f (Map (Credential 'Staking) (CompactForm Coin)))
-> InstantStake BabbageEra -> f (InstantStake BabbageEra)
(Map (Credential 'Staking) (CompactForm Coin)
 -> f (Map (Credential 'Staking) (CompactForm Coin)))
-> ShelleyInstantStake BabbageEra
-> f (ShelleyInstantStake BabbageEra)
forall era (f :: * -> *).
Functor f =>
(Map (Credential 'Staking) (CompactForm Coin)
 -> f (Map (Credential 'Staking) (CompactForm Coin)))
-> ShelleyInstantStake era -> f (ShelleyInstantStake era)
shelleyInstantStakeCredentialsL
  addInstantStake :: UTxO BabbageEra
-> InstantStake BabbageEra -> InstantStake BabbageEra
addInstantStake = UTxO BabbageEra
-> InstantStake BabbageEra -> InstantStake BabbageEra
UTxO BabbageEra
-> ShelleyInstantStake BabbageEra -> ShelleyInstantStake BabbageEra
forall era.
EraTxOut era =>
UTxO era -> ShelleyInstantStake era -> ShelleyInstantStake era
addShelleyInstantStake
  deleteInstantStake :: UTxO BabbageEra
-> InstantStake BabbageEra -> InstantStake BabbageEra
deleteInstantStake = UTxO BabbageEra
-> InstantStake BabbageEra -> InstantStake BabbageEra
UTxO BabbageEra
-> ShelleyInstantStake BabbageEra -> ShelleyInstantStake BabbageEra
forall era.
EraTxOut era =>
UTxO era -> ShelleyInstantStake era -> ShelleyInstantStake era
deleteShelleyInstantStake
  resolveInstantStake :: InstantStake BabbageEra -> UMap -> Stake
resolveInstantStake = InstantStake BabbageEra -> UMap -> Stake
ShelleyInstantStake BabbageEra -> UMap -> Stake
forall era.
(EraStake era, InstantStake era ~ ShelleyInstantStake era) =>
ShelleyInstantStake era -> UMap -> Stake
resolveShelleyInstantStake