{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Cardano.Ledger.Mary.ImpTest (
  MaryEraImp,
  module Test.Cardano.Ledger.Allegra.ImpTest,
) where

import Cardano.Ledger.Mary (MaryEra)
import Cardano.Ledger.Mary.Core
import Cardano.Ledger.Mary.Value
import Test.Cardano.Ledger.Allegra.ImpTest
import Test.Cardano.Ledger.Mary.Arbitrary ()
import Test.Cardano.Ledger.Mary.Era
import Test.Cardano.Ledger.Mary.TreeDiff ()

instance ShelleyEraImp MaryEra where
  impSatisfyNativeScript :: forall (l :: TxLevel).
Set (KeyHash Witness)
-> TxBody l MaryEra
-> NativeScript MaryEra
-> ImpTestM
     MaryEra (Maybe (Map (KeyHash Witness) (KeyPair Witness)))
impSatisfyNativeScript = Set (KeyHash Witness)
-> TxBody l MaryEra
-> NativeScript MaryEra
-> ImpTestM
     MaryEra (Maybe (Map (KeyHash Witness) (KeyPair Witness)))
forall era (l :: TxLevel).
(ShelleyEraImp era, AllegraEraScript era, AllegraEraTxBody era,
 NativeScript era ~ Timelock era) =>
Set (KeyHash Witness)
-> TxBody l era
-> NativeScript era
-> ImpTestM era (Maybe (Map (KeyHash Witness) (KeyPair Witness)))
impAllegraSatisfyNativeScript
  fixupTx :: HasCallStack =>
Tx TopTx MaryEra -> ImpTestM MaryEra (Tx TopTx MaryEra)
fixupTx = Tx TopTx MaryEra -> ImpTestM MaryEra (Tx TopTx MaryEra)
forall era.
(ShelleyEraImp era, HasCallStack) =>
Tx TopTx era -> ImpTestM era (Tx TopTx era)
shelleyFixupTx
  expectTxSuccess :: HasCallStack => Tx TopTx MaryEra -> ImpTestM MaryEra ()
expectTxSuccess = Tx TopTx MaryEra -> ImpTestM MaryEra ()
forall era.
(ShelleyEraImp era, HasCallStack) =>
Tx TopTx era -> ImpTestM era ()
impShelleyExpectTxSuccess
  modifyImpInitProtVer :: ShelleyEraImp MaryEra =>
Version
-> SpecWith (ImpInit (LedgerSpec MaryEra))
-> SpecWith (ImpInit (LedgerSpec MaryEra))
modifyImpInitProtVer = Version
-> SpecWith (ImpInit (LedgerSpec MaryEra))
-> SpecWith (ImpInit (LedgerSpec MaryEra))
forall era.
ShelleyEraImp era =>
Version
-> SpecWith (ImpInit (LedgerSpec era))
-> SpecWith (ImpInit (LedgerSpec era))
shelleyModifyImpInitProtVer
  genRegTxCert :: Credential Staking -> ImpTestM MaryEra (TxCert MaryEra)
genRegTxCert = Credential Staking -> ImpTestM MaryEra (TxCert MaryEra)
forall era.
ShelleyEraTxCert era =>
Credential Staking -> ImpTestM era (TxCert era)
shelleyGenRegTxCert
  genUnRegTxCert :: Credential Staking -> ImpTestM MaryEra (TxCert MaryEra)
genUnRegTxCert = Credential Staking -> ImpTestM MaryEra (TxCert MaryEra)
forall era.
ShelleyEraTxCert era =>
Credential Staking -> ImpTestM era (TxCert era)
shelleyGenUnRegTxCert
  delegStakeTxCert :: Credential Staking -> KeyHash StakePool -> TxCert MaryEra
delegStakeTxCert = Credential Staking -> KeyHash StakePool -> TxCert MaryEra
forall era.
ShelleyEraTxCert era =>
Credential Staking -> KeyHash StakePool -> TxCert era
shelleyDelegStakeTxCert

class
  ( AllegraEraImp era
  , MaryEraTest era
  , Value era ~ MaryValue
  ) =>
  MaryEraImp era

instance AllegraEraImp MaryEra

instance MaryEraImp MaryEra