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

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

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

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