{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# LANGUAGE ViewPatterns #-}

module Cardano.Ledger.Api.Tx.Cert (
  EraTxCert (
    TxCert,
    TxCertUpgradeError,
    getRegPoolTxCert,
    getRetirePoolTxCert,
    lookupRegStakeTxCert,
    lookupUnRegStakeTxCert
  ),
  upgradeTxCert,
  getVKeyWitnessTxCert,
  getScriptWitnessTxCert,
  pattern RegPoolTxCert,
  pattern RetirePoolTxCert,
  isRegStakeTxCert,
  isUnRegStakeTxCert,

  -- * Any Era
  AnyEraTxCert (..),
  pattern AnyEraRegPoolTxCert,
  pattern AnyEraRetirePoolTxCert,
  pattern AnyEraRegTxCert,
  pattern AnyEraUnRegTxCert,
  pattern AnyEraMirTxCert,
  pattern AnyEraGenesisDelegTxCert,
  pattern AnyEraRegDepositTxCert,
  pattern AnyEraUnRegDepositTxCert,
  pattern AnyEraDelegTxCert,
  pattern AnyEraRegDepositDelegTxCert,
  pattern AnyEraAuthCommitteeHotKeyTxCert,
  pattern AnyEraResignCommitteeColdTxCert,
  pattern AnyEraRegDRepTxCert,
  pattern AnyEraUnRegDRepTxCert,
  pattern AnyEraUpdateDRepTxCert,

  -- * Shelley Era

  -- | Complete set of patterns for Shelley through Babbage `TxCert`:
  --
  -- @
  -- `TxCert` =
  --   `RegPoolTxCert`
  --   `RetirePoolTxCert`
  --   `RegTxCert`
  --   `UnRegTxCert`
  --   `DelegStakeTxCert`
  --   `MirTxCert`
  --   `GenesisDelegTxCert`
  -- @
  ShelleyEraTxCert (
    getRegTxCert,
    getUnRegTxCert,
    getDelegStakeTxCert,
    getGenesisDelegTxCert,
    getMirTxCert
  ),
  pattern MirTxCert,
  pattern GenesisDelegTxCert,
  pattern RegTxCert,
  pattern UnRegTxCert,
  pattern DelegStakeTxCert,

  -- * Conway Era

  -- | Complete set of patterns for Conway `TxCert`:
  --
  -- @
  -- `TxCert` =
  --   `RegPoolTxCert`
  --   `RetirePoolTxCert`
  --   `RegTxCert`
  --   `UnRegTxCert`
  --   `RegDepositTxCert`
  --   `UnRegDepositTxCert`
  --   `DelegTxCert`
  --   `RegDepositDelegTxCert`
  --   `AuthCommitteeHotKeyTxCert`
  --   `ResignCommitteeColdTxCert`
  --   `RegDRepTxCert`
  --   `UnRegDRepTxCert`
  -- @
  ConwayEraTxCert (
    getRegDepositTxCert,
    getUnRegDepositTxCert,
    getDelegTxCert,
    getRegDepositDelegTxCert,
    getAuthCommitteeHotKeyTxCert,
    getResignCommitteeColdTxCert,
    getRegDRepTxCert,
    getUpdateDRepTxCert
  ),
  getDelegateeTxCert,
  Delegatee (..),
  getStakePoolDelegatee,
  pattern RegDepositTxCert,
  pattern UnRegDepositTxCert,
  pattern DelegTxCert,
  pattern RegDepositDelegTxCert,
  pattern AuthCommitteeHotKeyTxCert,
  pattern ResignCommitteeColdTxCert,
  pattern RegDRepTxCert,
  pattern UnRegDRepTxCert,
) where

import Cardano.Ledger.Api.Era
import Cardano.Ledger.BaseTypes (Anchor, EpochNo, StrictMaybe)
import Cardano.Ledger.Coin (Coin)
import Cardano.Ledger.Conway.TxCert (
  ConwayEraTxCert (
    getAuthCommitteeHotKeyTxCert,
    getDelegTxCert,
    getRegDRepTxCert,
    getRegDepositDelegTxCert,
    getRegDepositTxCert,
    getResignCommitteeColdTxCert,
    getUnRegDRepTxCert,
    getUnRegDepositTxCert,
    getUpdateDRepTxCert
  ),
  Delegatee (..),
  getDelegateeTxCert,
  getStakePoolDelegatee,
  pattern AuthCommitteeHotKeyTxCert,
  pattern DelegTxCert,
  pattern RegDRepTxCert,
  pattern RegDepositDelegTxCert,
  pattern RegDepositTxCert,
  pattern ResignCommitteeColdTxCert,
  pattern UnRegDRepTxCert,
  pattern UnRegDepositTxCert,
 )
import Cardano.Ledger.Core (
  EraTxCert (
    TxCert,
    TxCertUpgradeError,
    getRegPoolTxCert,
    getRetirePoolTxCert,
    getScriptWitnessTxCert,
    getVKeyWitnessTxCert,
    lookupRegStakeTxCert,
    lookupUnRegStakeTxCert,
    upgradeTxCert
  ),
  KeyHash,
  KeyRole (..),
  KeyRoleVRF (GenDelegVRF),
  VRFVerKeyHash,
  isRegStakeTxCert,
  isUnRegStakeTxCert,
  pattern RegPoolTxCert,
  pattern RetirePoolTxCert,
 )
import Cardano.Ledger.Credential (Credential)
import Cardano.Ledger.Shelley.TxCert (
  GenesisDelegCert (..),
  MIRCert,
  ShelleyEraTxCert (
    getDelegStakeTxCert,
    getGenesisDelegTxCert,
    getMirTxCert,
    getRegTxCert,
    getUnRegTxCert
  ),
  pattern DelegStakeTxCert,
  pattern GenesisDelegTxCert,
  pattern MirTxCert,
  pattern RegTxCert,
  pattern UnRegTxCert,
 )
import Cardano.Ledger.State (StakePoolParams)

class EraTxCert era => AnyEraTxCert era where
  anyEraToRegTxCert :: TxCert era -> Maybe (Credential Staking)
  anyEraToRegTxCert = Maybe (Credential Staking)
-> TxCert era -> Maybe (Credential Staking)
forall a b. a -> b -> a
const Maybe (Credential Staking)
forall a. Maybe a
Nothing

  anyEraToUnRegTxCert :: TxCert era -> Maybe (Credential Staking)
  anyEraToUnRegTxCert = Maybe (Credential Staking)
-> TxCert era -> Maybe (Credential Staking)
forall a b. a -> b -> a
const Maybe (Credential Staking)
forall a. Maybe a
Nothing

  anyEraToGenesisDelegTxCert :: TxCert era -> Maybe GenesisDelegCert
  anyEraToGenesisDelegTxCert = Maybe GenesisDelegCert -> TxCert era -> Maybe GenesisDelegCert
forall a b. a -> b -> a
const Maybe GenesisDelegCert
forall a. Maybe a
Nothing

  anyEraToMirTxCert :: TxCert era -> Maybe MIRCert
  anyEraToMirTxCert = Maybe MIRCert -> TxCert era -> Maybe MIRCert
forall a b. a -> b -> a
const Maybe MIRCert
forall a. Maybe a
Nothing

  anyEraToRegDepositTxCert :: TxCert era -> Maybe (Credential Staking, Coin)
  default anyEraToRegDepositTxCert ::
    ConwayEraTxCert era => TxCert era -> Maybe (Credential Staking, Coin)
  anyEraToRegDepositTxCert = TxCert era -> Maybe (Credential Staking, Coin)
forall era.
ConwayEraTxCert era =>
TxCert era -> Maybe (Credential Staking, Coin)
getRegDepositTxCert

  anyEraToUnRegDepositTxCert :: TxCert era -> Maybe (Credential Staking, Coin)
  default anyEraToUnRegDepositTxCert ::
    ConwayEraTxCert era => TxCert era -> Maybe (Credential Staking, Coin)
  anyEraToUnRegDepositTxCert = TxCert era -> Maybe (Credential Staking, Coin)
forall era.
ConwayEraTxCert era =>
TxCert era -> Maybe (Credential Staking, Coin)
getUnRegDepositTxCert

  anyEraToDelegTxCert :: TxCert era -> Maybe (Credential Staking, Delegatee)
  default anyEraToDelegTxCert ::
    ConwayEraTxCert era => TxCert era -> Maybe (Credential Staking, Delegatee)
  anyEraToDelegTxCert = TxCert era -> Maybe (Credential Staking, Delegatee)
forall era.
ConwayEraTxCert era =>
TxCert era -> Maybe (Credential Staking, Delegatee)
getDelegTxCert

  anyEraToRegDepositDelegTxCert :: TxCert era -> Maybe (Credential Staking, Delegatee, Coin)
  default anyEraToRegDepositDelegTxCert ::
    ConwayEraTxCert era => TxCert era -> Maybe (Credential Staking, Delegatee, Coin)
  anyEraToRegDepositDelegTxCert = TxCert era -> Maybe (Credential Staking, Delegatee, Coin)
forall era.
ConwayEraTxCert era =>
TxCert era -> Maybe (Credential Staking, Delegatee, Coin)
getRegDepositDelegTxCert

  anyEraToAuthCommitteeHotKeyTxCert ::
    TxCert era -> Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
  default anyEraToAuthCommitteeHotKeyTxCert ::
    ConwayEraTxCert era =>
    TxCert era ->
    Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
  anyEraToAuthCommitteeHotKeyTxCert = TxCert era
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall era.
ConwayEraTxCert era =>
TxCert era
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
getAuthCommitteeHotKeyTxCert

  anyEraToResignCommitteeColdTxCert ::
    TxCert era -> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
  default anyEraToResignCommitteeColdTxCert ::
    ConwayEraTxCert era =>
    TxCert era ->
    Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
  anyEraToResignCommitteeColdTxCert = TxCert era
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall era.
ConwayEraTxCert era =>
TxCert era
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
getResignCommitteeColdTxCert

  anyEraToRegDRepTxCert ::
    TxCert era -> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
  default anyEraToRegDRepTxCert ::
    ConwayEraTxCert era =>
    TxCert era ->
    Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
  anyEraToRegDRepTxCert = TxCert era -> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall era.
ConwayEraTxCert era =>
TxCert era -> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
getRegDRepTxCert

  anyEraToUnRegDRepTxCert :: TxCert era -> Maybe (Credential DRepRole, Coin)
  default anyEraToUnRegDRepTxCert ::
    ConwayEraTxCert era => TxCert era -> Maybe (Credential DRepRole, Coin)
  anyEraToUnRegDRepTxCert = TxCert era -> Maybe (Credential DRepRole, Coin)
forall era.
ConwayEraTxCert era =>
TxCert era -> Maybe (Credential DRepRole, Coin)
getUnRegDRepTxCert

  anyEraToUpdateDRepTxCert ::
    TxCert era -> Maybe (Credential DRepRole, StrictMaybe Anchor)
  default anyEraToUpdateDRepTxCert ::
    ConwayEraTxCert era =>
    TxCert era ->
    Maybe (Credential DRepRole, StrictMaybe Anchor)
  anyEraToUpdateDRepTxCert = TxCert era -> Maybe (Credential DRepRole, StrictMaybe Anchor)
forall era.
ConwayEraTxCert era =>
TxCert era -> Maybe (Credential DRepRole, StrictMaybe Anchor)
getUpdateDRepTxCert

instance AnyEraTxCert ShelleyEra where
  anyEraToRegTxCert :: TxCert ShelleyEra -> Maybe (Credential Staking)
anyEraToRegTxCert = TxCert ShelleyEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getRegTxCert
  anyEraToUnRegTxCert :: TxCert ShelleyEra -> Maybe (Credential Staking)
anyEraToUnRegTxCert = TxCert ShelleyEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getUnRegTxCert
  anyEraToGenesisDelegTxCert :: TxCert ShelleyEra -> Maybe GenesisDelegCert
anyEraToGenesisDelegTxCert = TxCert ShelleyEra -> Maybe GenesisDelegCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe GenesisDelegCert
getGenesisDelegTxCert
  anyEraToMirTxCert :: TxCert ShelleyEra -> Maybe MIRCert
anyEraToMirTxCert = TxCert ShelleyEra -> Maybe MIRCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe MIRCert
getMirTxCert
  anyEraToRegDepositTxCert :: TxCert ShelleyEra -> Maybe (Credential Staking, Coin)
anyEraToRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert ShelleyEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToUnRegDepositTxCert :: TxCert ShelleyEra -> Maybe (Credential Staking, Coin)
anyEraToUnRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert ShelleyEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToDelegTxCert :: TxCert ShelleyEra -> Maybe (Credential Staking, Delegatee)
anyEraToDelegTxCert = Maybe (Credential Staking, Delegatee)
-> ShelleyTxCert ShelleyEra
-> Maybe (Credential Staking, Delegatee)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee)
forall a. Maybe a
Nothing
  anyEraToRegDepositDelegTxCert :: TxCert ShelleyEra -> Maybe (Credential Staking, Delegatee, Coin)
anyEraToRegDepositDelegTxCert = Maybe (Credential Staking, Delegatee, Coin)
-> ShelleyTxCert ShelleyEra
-> Maybe (Credential Staking, Delegatee, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee, Coin)
forall a. Maybe a
Nothing
  anyEraToAuthCommitteeHotKeyTxCert :: TxCert ShelleyEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
anyEraToAuthCommitteeHotKeyTxCert = Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
-> ShelleyTxCert ShelleyEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a. Maybe a
Nothing
  anyEraToResignCommitteeColdTxCert :: TxCert ShelleyEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
anyEraToResignCommitteeColdTxCert = Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
-> ShelleyTxCert ShelleyEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToRegDRepTxCert :: TxCert ShelleyEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
anyEraToRegDRepTxCert = Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
-> ShelleyTxCert ShelleyEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToUnRegDRepTxCert :: TxCert ShelleyEra -> Maybe (Credential DRepRole, Coin)
anyEraToUnRegDRepTxCert = Maybe (Credential DRepRole, Coin)
-> ShelleyTxCert ShelleyEra -> Maybe (Credential DRepRole, Coin)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin)
forall a. Maybe a
Nothing
  anyEraToUpdateDRepTxCert :: TxCert ShelleyEra
-> Maybe (Credential DRepRole, StrictMaybe Anchor)
anyEraToUpdateDRepTxCert = Maybe (Credential DRepRole, StrictMaybe Anchor)
-> ShelleyTxCert ShelleyEra
-> Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing

instance AnyEraTxCert AllegraEra where
  anyEraToRegTxCert :: TxCert AllegraEra -> Maybe (Credential Staking)
anyEraToRegTxCert = TxCert AllegraEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getRegTxCert
  anyEraToUnRegTxCert :: TxCert AllegraEra -> Maybe (Credential Staking)
anyEraToUnRegTxCert = TxCert AllegraEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getUnRegTxCert
  anyEraToGenesisDelegTxCert :: TxCert AllegraEra -> Maybe GenesisDelegCert
anyEraToGenesisDelegTxCert = TxCert AllegraEra -> Maybe GenesisDelegCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe GenesisDelegCert
getGenesisDelegTxCert
  anyEraToMirTxCert :: TxCert AllegraEra -> Maybe MIRCert
anyEraToMirTxCert = TxCert AllegraEra -> Maybe MIRCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe MIRCert
getMirTxCert
  anyEraToRegDepositTxCert :: TxCert AllegraEra -> Maybe (Credential Staking, Coin)
anyEraToRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert AllegraEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToUnRegDepositTxCert :: TxCert AllegraEra -> Maybe (Credential Staking, Coin)
anyEraToUnRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert AllegraEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToDelegTxCert :: TxCert AllegraEra -> Maybe (Credential Staking, Delegatee)
anyEraToDelegTxCert = Maybe (Credential Staking, Delegatee)
-> ShelleyTxCert AllegraEra
-> Maybe (Credential Staking, Delegatee)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee)
forall a. Maybe a
Nothing
  anyEraToRegDepositDelegTxCert :: TxCert AllegraEra -> Maybe (Credential Staking, Delegatee, Coin)
anyEraToRegDepositDelegTxCert = Maybe (Credential Staking, Delegatee, Coin)
-> ShelleyTxCert AllegraEra
-> Maybe (Credential Staking, Delegatee, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee, Coin)
forall a. Maybe a
Nothing
  anyEraToAuthCommitteeHotKeyTxCert :: TxCert AllegraEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
anyEraToAuthCommitteeHotKeyTxCert = Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
-> ShelleyTxCert AllegraEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a. Maybe a
Nothing
  anyEraToResignCommitteeColdTxCert :: TxCert AllegraEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
anyEraToResignCommitteeColdTxCert = Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
-> ShelleyTxCert AllegraEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToRegDRepTxCert :: TxCert AllegraEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
anyEraToRegDRepTxCert = Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
-> ShelleyTxCert AllegraEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToUnRegDRepTxCert :: TxCert AllegraEra -> Maybe (Credential DRepRole, Coin)
anyEraToUnRegDRepTxCert = Maybe (Credential DRepRole, Coin)
-> ShelleyTxCert AllegraEra -> Maybe (Credential DRepRole, Coin)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin)
forall a. Maybe a
Nothing
  anyEraToUpdateDRepTxCert :: TxCert AllegraEra
-> Maybe (Credential DRepRole, StrictMaybe Anchor)
anyEraToUpdateDRepTxCert = Maybe (Credential DRepRole, StrictMaybe Anchor)
-> ShelleyTxCert AllegraEra
-> Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing

instance AnyEraTxCert MaryEra where
  anyEraToRegTxCert :: TxCert MaryEra -> Maybe (Credential Staking)
anyEraToRegTxCert = TxCert MaryEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getRegTxCert
  anyEraToUnRegTxCert :: TxCert MaryEra -> Maybe (Credential Staking)
anyEraToUnRegTxCert = TxCert MaryEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getUnRegTxCert
  anyEraToGenesisDelegTxCert :: TxCert MaryEra -> Maybe GenesisDelegCert
anyEraToGenesisDelegTxCert = TxCert MaryEra -> Maybe GenesisDelegCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe GenesisDelegCert
getGenesisDelegTxCert
  anyEraToMirTxCert :: TxCert MaryEra -> Maybe MIRCert
anyEraToMirTxCert = TxCert MaryEra -> Maybe MIRCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe MIRCert
getMirTxCert
  anyEraToRegDepositTxCert :: TxCert MaryEra -> Maybe (Credential Staking, Coin)
anyEraToRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert MaryEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToUnRegDepositTxCert :: TxCert MaryEra -> Maybe (Credential Staking, Coin)
anyEraToUnRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert MaryEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToDelegTxCert :: TxCert MaryEra -> Maybe (Credential Staking, Delegatee)
anyEraToDelegTxCert = Maybe (Credential Staking, Delegatee)
-> ShelleyTxCert MaryEra -> Maybe (Credential Staking, Delegatee)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee)
forall a. Maybe a
Nothing
  anyEraToRegDepositDelegTxCert :: TxCert MaryEra -> Maybe (Credential Staking, Delegatee, Coin)
anyEraToRegDepositDelegTxCert = Maybe (Credential Staking, Delegatee, Coin)
-> ShelleyTxCert MaryEra
-> Maybe (Credential Staking, Delegatee, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee, Coin)
forall a. Maybe a
Nothing
  anyEraToAuthCommitteeHotKeyTxCert :: TxCert MaryEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
anyEraToAuthCommitteeHotKeyTxCert = Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
-> ShelleyTxCert MaryEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a. Maybe a
Nothing
  anyEraToResignCommitteeColdTxCert :: TxCert MaryEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
anyEraToResignCommitteeColdTxCert = Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
-> ShelleyTxCert MaryEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToRegDRepTxCert :: TxCert MaryEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
anyEraToRegDRepTxCert = Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
-> ShelleyTxCert MaryEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToUnRegDRepTxCert :: TxCert MaryEra -> Maybe (Credential DRepRole, Coin)
anyEraToUnRegDRepTxCert = Maybe (Credential DRepRole, Coin)
-> ShelleyTxCert MaryEra -> Maybe (Credential DRepRole, Coin)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin)
forall a. Maybe a
Nothing
  anyEraToUpdateDRepTxCert :: TxCert MaryEra -> Maybe (Credential DRepRole, StrictMaybe Anchor)
anyEraToUpdateDRepTxCert = Maybe (Credential DRepRole, StrictMaybe Anchor)
-> ShelleyTxCert MaryEra
-> Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing

instance AnyEraTxCert AlonzoEra where
  anyEraToRegTxCert :: TxCert AlonzoEra -> Maybe (Credential Staking)
anyEraToRegTxCert = TxCert AlonzoEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getRegTxCert
  anyEraToUnRegTxCert :: TxCert AlonzoEra -> Maybe (Credential Staking)
anyEraToUnRegTxCert = TxCert AlonzoEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getUnRegTxCert
  anyEraToGenesisDelegTxCert :: TxCert AlonzoEra -> Maybe GenesisDelegCert
anyEraToGenesisDelegTxCert = TxCert AlonzoEra -> Maybe GenesisDelegCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe GenesisDelegCert
getGenesisDelegTxCert
  anyEraToMirTxCert :: TxCert AlonzoEra -> Maybe MIRCert
anyEraToMirTxCert = TxCert AlonzoEra -> Maybe MIRCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe MIRCert
getMirTxCert
  anyEraToRegDepositTxCert :: TxCert AlonzoEra -> Maybe (Credential Staking, Coin)
anyEraToRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert AlonzoEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToUnRegDepositTxCert :: TxCert AlonzoEra -> Maybe (Credential Staking, Coin)
anyEraToUnRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert AlonzoEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToDelegTxCert :: TxCert AlonzoEra -> Maybe (Credential Staking, Delegatee)
anyEraToDelegTxCert = Maybe (Credential Staking, Delegatee)
-> ShelleyTxCert AlonzoEra -> Maybe (Credential Staking, Delegatee)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee)
forall a. Maybe a
Nothing
  anyEraToRegDepositDelegTxCert :: TxCert AlonzoEra -> Maybe (Credential Staking, Delegatee, Coin)
anyEraToRegDepositDelegTxCert = Maybe (Credential Staking, Delegatee, Coin)
-> ShelleyTxCert AlonzoEra
-> Maybe (Credential Staking, Delegatee, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee, Coin)
forall a. Maybe a
Nothing
  anyEraToAuthCommitteeHotKeyTxCert :: TxCert AlonzoEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
anyEraToAuthCommitteeHotKeyTxCert = Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
-> ShelleyTxCert AlonzoEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a. Maybe a
Nothing
  anyEraToResignCommitteeColdTxCert :: TxCert AlonzoEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
anyEraToResignCommitteeColdTxCert = Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
-> ShelleyTxCert AlonzoEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToRegDRepTxCert :: TxCert AlonzoEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
anyEraToRegDRepTxCert = Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
-> ShelleyTxCert AlonzoEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToUnRegDRepTxCert :: TxCert AlonzoEra -> Maybe (Credential DRepRole, Coin)
anyEraToUnRegDRepTxCert = Maybe (Credential DRepRole, Coin)
-> ShelleyTxCert AlonzoEra -> Maybe (Credential DRepRole, Coin)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin)
forall a. Maybe a
Nothing
  anyEraToUpdateDRepTxCert :: TxCert AlonzoEra -> Maybe (Credential DRepRole, StrictMaybe Anchor)
anyEraToUpdateDRepTxCert = Maybe (Credential DRepRole, StrictMaybe Anchor)
-> ShelleyTxCert AlonzoEra
-> Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing

instance AnyEraTxCert BabbageEra where
  anyEraToRegTxCert :: TxCert BabbageEra -> Maybe (Credential Staking)
anyEraToRegTxCert = TxCert BabbageEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getRegTxCert
  anyEraToUnRegTxCert :: TxCert BabbageEra -> Maybe (Credential Staking)
anyEraToUnRegTxCert = TxCert BabbageEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getUnRegTxCert
  anyEraToGenesisDelegTxCert :: TxCert BabbageEra -> Maybe GenesisDelegCert
anyEraToGenesisDelegTxCert = TxCert BabbageEra -> Maybe GenesisDelegCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe GenesisDelegCert
getGenesisDelegTxCert
  anyEraToMirTxCert :: TxCert BabbageEra -> Maybe MIRCert
anyEraToMirTxCert = TxCert BabbageEra -> Maybe MIRCert
forall era.
(ShelleyEraTxCert era, AtMostEra "Babbage" era) =>
TxCert era -> Maybe MIRCert
getMirTxCert
  anyEraToRegDepositTxCert :: TxCert BabbageEra -> Maybe (Credential Staking, Coin)
anyEraToRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert BabbageEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToUnRegDepositTxCert :: TxCert BabbageEra -> Maybe (Credential Staking, Coin)
anyEraToUnRegDepositTxCert = Maybe (Credential Staking, Coin)
-> ShelleyTxCert BabbageEra -> Maybe (Credential Staking, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Coin)
forall a. Maybe a
Nothing
  anyEraToDelegTxCert :: TxCert BabbageEra -> Maybe (Credential Staking, Delegatee)
anyEraToDelegTxCert = Maybe (Credential Staking, Delegatee)
-> ShelleyTxCert BabbageEra
-> Maybe (Credential Staking, Delegatee)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee)
forall a. Maybe a
Nothing
  anyEraToRegDepositDelegTxCert :: TxCert BabbageEra -> Maybe (Credential Staking, Delegatee, Coin)
anyEraToRegDepositDelegTxCert = Maybe (Credential Staking, Delegatee, Coin)
-> ShelleyTxCert BabbageEra
-> Maybe (Credential Staking, Delegatee, Coin)
forall a b. a -> b -> a
const Maybe (Credential Staking, Delegatee, Coin)
forall a. Maybe a
Nothing
  anyEraToAuthCommitteeHotKeyTxCert :: TxCert BabbageEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
anyEraToAuthCommitteeHotKeyTxCert = Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
-> ShelleyTxCert BabbageEra
-> Maybe
     (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, Credential HotCommitteeRole)
forall a. Maybe a
Nothing
  anyEraToResignCommitteeColdTxCert :: TxCert BabbageEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
anyEraToResignCommitteeColdTxCert = Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
-> ShelleyTxCert BabbageEra
-> Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential ColdCommitteeRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToRegDRepTxCert :: TxCert BabbageEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
anyEraToRegDRepTxCert = Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
-> ShelleyTxCert BabbageEra
-> Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin, StrictMaybe Anchor)
forall a. Maybe a
Nothing
  anyEraToUnRegDRepTxCert :: TxCert BabbageEra -> Maybe (Credential DRepRole, Coin)
anyEraToUnRegDRepTxCert = Maybe (Credential DRepRole, Coin)
-> ShelleyTxCert BabbageEra -> Maybe (Credential DRepRole, Coin)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, Coin)
forall a. Maybe a
Nothing
  anyEraToUpdateDRepTxCert :: TxCert BabbageEra
-> Maybe (Credential DRepRole, StrictMaybe Anchor)
anyEraToUpdateDRepTxCert = Maybe (Credential DRepRole, StrictMaybe Anchor)
-> ShelleyTxCert BabbageEra
-> Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a b. a -> b -> a
const Maybe (Credential DRepRole, StrictMaybe Anchor)
forall a. Maybe a
Nothing

instance AnyEraTxCert ConwayEra where
  anyEraToRegTxCert :: TxCert ConwayEra -> Maybe (Credential Staking)
anyEraToRegTxCert = TxCert ConwayEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getRegTxCert
  anyEraToUnRegTxCert :: TxCert ConwayEra -> Maybe (Credential Staking)
anyEraToUnRegTxCert = TxCert ConwayEra -> Maybe (Credential Staking)
forall era.
ShelleyEraTxCert era =>
TxCert era -> Maybe (Credential Staking)
getUnRegTxCert

instance AnyEraTxCert DijkstraEra

pattern AnyEraRegPoolTxCert :: EraTxCert era => StakePoolParams -> TxCert era
pattern $mAnyEraRegPoolTxCert :: forall {r} {era}.
EraTxCert era =>
TxCert era -> (StakePoolParams -> r) -> ((# #) -> r) -> r
$bAnyEraRegPoolTxCert :: forall era. EraTxCert era => StakePoolParams -> TxCert era
AnyEraRegPoolTxCert poolParams = RegPoolTxCert poolParams

pattern AnyEraRetirePoolTxCert ::
  EraTxCert era => KeyHash StakePool -> EpochNo -> TxCert era
pattern $mAnyEraRetirePoolTxCert :: forall {r} {era}.
EraTxCert era =>
TxCert era
-> (KeyHash StakePool -> EpochNo -> r) -> ((# #) -> r) -> r
$bAnyEraRetirePoolTxCert :: forall era.
EraTxCert era =>
KeyHash StakePool -> EpochNo -> TxCert era
AnyEraRetirePoolTxCert keyHash epochNo = RetirePoolTxCert keyHash epochNo

pattern AnyEraRegTxCert :: AnyEraTxCert era => Credential Staking -> TxCert era
pattern $mAnyEraRegTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era -> (Credential Staking -> r) -> ((# #) -> r) -> r
AnyEraRegTxCert c <- (anyEraToRegTxCert -> Just c)

pattern AnyEraUnRegTxCert :: AnyEraTxCert era => Credential Staking -> TxCert era
pattern $mAnyEraUnRegTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era -> (Credential Staking -> r) -> ((# #) -> r) -> r
AnyEraUnRegTxCert c <- (anyEraToUnRegTxCert -> Just c)

pattern AnyEraMirTxCert :: AnyEraTxCert era => MIRCert -> TxCert era
pattern $mAnyEraMirTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era -> (MIRCert -> r) -> ((# #) -> r) -> r
AnyEraMirTxCert d <- (anyEraToMirTxCert -> Just d)

pattern AnyEraGenesisDelegTxCert ::
  AnyEraTxCert era =>
  KeyHash GenesisRole ->
  KeyHash GenesisDelegate ->
  VRFVerKeyHash GenDelegVRF ->
  TxCert era
pattern $mAnyEraGenesisDelegTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (KeyHash GenesisRole
    -> KeyHash GenesisDelegate -> VRFVerKeyHash GenDelegVRF -> r)
-> ((# #) -> r)
-> r
AnyEraGenesisDelegTxCert genKey genDelegKey vrfKeyHash <-
  (anyEraToGenesisDelegTxCert -> Just (GenesisDelegCert genKey genDelegKey vrfKeyHash))

pattern AnyEraRegDepositTxCert ::
  AnyEraTxCert era =>
  Credential Staking ->
  Coin ->
  TxCert era
pattern $mAnyEraRegDepositTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (Credential Staking -> Coin -> r) -> ((# #) -> r) -> r
AnyEraRegDepositTxCert cred c <- (anyEraToRegDepositTxCert -> Just (cred, c))

pattern AnyEraUnRegDepositTxCert ::
  AnyEraTxCert era =>
  Credential Staking ->
  Coin ->
  TxCert era
pattern $mAnyEraUnRegDepositTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (Credential Staking -> Coin -> r) -> ((# #) -> r) -> r
AnyEraUnRegDepositTxCert cred c <- (anyEraToUnRegDepositTxCert -> Just (cred, c))

pattern AnyEraDelegTxCert ::
  AnyEraTxCert era =>
  Credential Staking ->
  Delegatee ->
  TxCert era
pattern $mAnyEraDelegTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (Credential Staking -> Delegatee -> r) -> ((# #) -> r) -> r
AnyEraDelegTxCert cred d <- (anyEraToDelegTxCert -> Just (cred, d))

pattern AnyEraRegDepositDelegTxCert ::
  AnyEraTxCert era =>
  Credential Staking ->
  Delegatee ->
  Coin ->
  TxCert era
pattern $mAnyEraRegDepositDelegTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (Credential Staking -> Delegatee -> Coin -> r)
-> ((# #) -> r)
-> r
AnyEraRegDepositDelegTxCert cred d c <- (anyEraToRegDepositDelegTxCert -> Just (cred, d, c))

pattern AnyEraAuthCommitteeHotKeyTxCert ::
  AnyEraTxCert era =>
  Credential ColdCommitteeRole ->
  Credential HotCommitteeRole ->
  TxCert era
pattern $mAnyEraAuthCommitteeHotKeyTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (Credential ColdCommitteeRole
    -> Credential HotCommitteeRole -> r)
-> ((# #) -> r)
-> r
AnyEraAuthCommitteeHotKeyTxCert ck hk <- (anyEraToAuthCommitteeHotKeyTxCert -> Just (ck, hk))

pattern AnyEraResignCommitteeColdTxCert ::
  AnyEraTxCert era =>
  Credential ColdCommitteeRole ->
  StrictMaybe Anchor ->
  TxCert era
pattern $mAnyEraResignCommitteeColdTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (Credential ColdCommitteeRole -> StrictMaybe Anchor -> r)
-> ((# #) -> r)
-> r
AnyEraResignCommitteeColdTxCert ck a <- (anyEraToResignCommitteeColdTxCert -> Just (ck, a))

pattern AnyEraRegDRepTxCert ::
  AnyEraTxCert era =>
  Credential DRepRole ->
  Coin ->
  StrictMaybe Anchor ->
  TxCert era
pattern $mAnyEraRegDRepTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (Credential DRepRole -> Coin -> StrictMaybe Anchor -> r)
-> ((# #) -> r)
-> r
AnyEraRegDRepTxCert cred deposit mAnchor <- (anyEraToRegDRepTxCert -> Just (cred, deposit, mAnchor))

pattern AnyEraUnRegDRepTxCert ::
  AnyEraTxCert era =>
  Credential DRepRole ->
  Coin ->
  TxCert era
pattern $mAnyEraUnRegDRepTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (Credential DRepRole -> Coin -> r) -> ((# #) -> r) -> r
AnyEraUnRegDRepTxCert cred deposit <- (anyEraToUnRegDRepTxCert -> Just (cred, deposit))

pattern AnyEraUpdateDRepTxCert ::
  AnyEraTxCert era =>
  Credential DRepRole ->
  StrictMaybe Anchor ->
  TxCert era
pattern $mAnyEraUpdateDRepTxCert :: forall {r} {era}.
AnyEraTxCert era =>
TxCert era
-> (Credential DRepRole -> StrictMaybe Anchor -> r)
-> ((# #) -> r)
-> r
AnyEraUpdateDRepTxCert cred mAnchor <- (anyEraToUpdateDRepTxCert -> Just (cred, mAnchor))

{-# COMPLETE
  AnyEraRegPoolTxCert
  , AnyEraRetirePoolTxCert
  , AnyEraRegTxCert
  , AnyEraUnRegTxCert
  , AnyEraRegDepositTxCert
  , AnyEraUnRegDepositTxCert
  , AnyEraDelegTxCert
  , AnyEraRegDepositDelegTxCert
  , AnyEraAuthCommitteeHotKeyTxCert
  , AnyEraResignCommitteeColdTxCert
  , AnyEraRegDRepTxCert
  , AnyEraUnRegDRepTxCert
  , AnyEraUpdateDRepTxCert
  #-}