{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TupleSections #-} module Cardano.Api.Experimental.Tx.Internal.Compatible ( mkTxCertificates ) where import Cardano.Api.Address qualified as Api import Cardano.Api.Era.Internal.Eon.Convert import Cardano.Api.Era.Internal.Eon.ShelleyBasedEra import Cardano.Api.Experimental.Era import Cardano.Api.Experimental.Plutus.Internal.Script qualified as Exp import Cardano.Api.Experimental.Plutus.Internal.ScriptWitness qualified as Exp import Cardano.Api.Experimental.Simple.Script qualified as Exp import Cardano.Api.Experimental.Tx.Internal.AnyWitness import Cardano.Api.Experimental.Tx.Internal.Certificate qualified as Exp import Cardano.Api.Experimental.Tx.Internal.Certificate.Compatible qualified as Api import Cardano.Api.Ledger.Internal.Reexport qualified as L import Cardano.Api.Plutus.Internal.Script (fromAllegraTimelock, sbeToSimpleScriptLanguageInEra) import Cardano.Api.Plutus.Internal.Script qualified as Api import Cardano.Api.Tx.Internal.Body (TxCertificates (..)) import Cardano.Api.Tx.Internal.Body qualified as Api import Cardano.Ledger.Allegra.Scripts qualified as L import Cardano.Ledger.Alonzo.Scripts qualified as L import Cardano.Ledger.Plutus.Language qualified as L import Cardano.Ledger.Plutus.Language qualified as Plutus import GHC.Exts (IsList (..)) mkTxCertificates :: forall era . IsEra era => [(Exp.Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era))] -> Api.TxCertificates Api.BuildTx era mkTxCertificates :: forall era. IsEra era => [(Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era))] -> TxCertificates BuildTx era mkTxCertificates [] = TxCertificates BuildTx era forall build era. TxCertificates build era TxCertificatesNone mkTxCertificates [(Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era))] certs = ShelleyBasedEra era -> OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) -> TxCertificates BuildTx era forall era build. ShelleyBasedEra era -> OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith build (Maybe (StakeCredential, Witness WitCtxStake era))) -> TxCertificates build era TxCertificates (Era era -> ShelleyBasedEra era forall era. Era era -> ShelleyBasedEra era forall a (f :: a -> *) (g :: a -> *) (era :: a). Convert f g => f era -> g era convert Era era forall era. IsEra era => Era era useEra) (OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) -> TxCertificates BuildTx era) -> OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) -> TxCertificates BuildTx era forall a b. (a -> b) -> a -> b $ [Item (OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))))] -> OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) forall l. IsList l => [Item l] -> l fromList ([Item (OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))))] -> OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))) -> [Item (OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))))] -> OMap (Certificate (ShelleyLedgerEra era)) (BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) forall a b. (a -> b) -> a -> b $ ((Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era)) -> (Certificate (ShelleyLedgerEra era), BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))) -> [(Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era))] -> [(Certificate (ShelleyLedgerEra era), BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))] forall a b. (a -> b) -> [a] -> [b] map (Era era -> (Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era)) -> (Certificate (ShelleyLedgerEra era), BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) forall era. Era era -> (Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era)) -> (Certificate (ShelleyLedgerEra era), BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) getStakeCred Era era forall era. IsEra era => Era era useEra) [(Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era))] certs where getStakeCred :: Era era -> (Exp.Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era)) -> ( Exp.Certificate (ShelleyLedgerEra era) , Api.BuildTxWith Api.BuildTx (Maybe (Api.StakeCredential, Api.Witness Api.WitCtxStake era)) ) getStakeCred :: forall era. Era era -> (Certificate (ShelleyLedgerEra era), AnyWitness (LedgerEra era)) -> (Certificate (ShelleyLedgerEra era), BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) getStakeCred Era era era (Certificate (ShelleyLedgerEra era) cert, AnyWitness (LedgerEra era) witness) = case Era era era of Era era ConwayEra -> do let Exp.Certificate TxCert (ShelleyLedgerEra era) ConwayTxCert ConwayEra c = Certificate (ShelleyLedgerEra era) cert mStakeCred :: Maybe StakeCredential mStakeCred = ShelleyBasedEra era -> TxCert (ShelleyLedgerEra era) -> Maybe StakeCredential forall era. ShelleyBasedEra era -> TxCert (ShelleyLedgerEra era) -> Maybe StakeCredential Api.getTxCertWitness (Era era -> ShelleyBasedEra era forall era. Era era -> ShelleyBasedEra era forall a (f :: a -> *) (g :: a -> *) (era :: a). Convert f g => f era -> g era convert Era era era) TxCert (ShelleyLedgerEra era) ConwayTxCert ConwayEra c wit :: Witness WitCtxStake era wit = case AnyWitness (LedgerEra era) witness of AnyWitness (LedgerEra era) AnyKeyWitnessPlaceholder -> KeyWitnessInCtx WitCtxStake -> Witness WitCtxStake era forall witctx era. KeyWitnessInCtx witctx -> Witness witctx era Api.KeyWitness KeyWitnessInCtx WitCtxStake Api.KeyWitnessForStakeAddr AnySimpleScriptWitness SimpleScriptOrReferenceInput (LedgerEra era) ss -> ScriptWitnessInCtx WitCtxStake -> ScriptWitness WitCtxStake era -> Witness WitCtxStake era forall witctx era. ScriptWitnessInCtx witctx -> ScriptWitness witctx era -> Witness witctx era Api.ScriptWitness ScriptWitnessInCtx WitCtxStake Api.ScriptWitnessForStakeAddr (ScriptWitness WitCtxStake era -> Witness WitCtxStake era) -> ScriptWitness WitCtxStake era -> Witness WitCtxStake era forall a b. (a -> b) -> a -> b $ Era era -> SimpleScriptOrReferenceInput (LedgerEra era) -> ScriptWitness WitCtxStake era forall era. AllegraEraScript (LedgerEra era) => Era era -> SimpleScriptOrReferenceInput (LedgerEra era) -> ScriptWitness WitCtxStake era newToOldSimpleScriptWitness Era era era SimpleScriptOrReferenceInput (LedgerEra era) ss AnyPlutusScriptWitness PlutusScriptWitness lang purpose (LedgerEra era) psw -> ScriptWitnessInCtx WitCtxStake -> ScriptWitness WitCtxStake era -> Witness WitCtxStake era forall witctx era. ScriptWitnessInCtx witctx -> ScriptWitness witctx era -> Witness witctx era Api.ScriptWitness ScriptWitnessInCtx WitCtxStake Api.ScriptWitnessForStakeAddr (ScriptWitness WitCtxStake era -> Witness WitCtxStake era) -> ScriptWitness WitCtxStake era -> Witness WitCtxStake era forall a b. (a -> b) -> a -> b $ Era era -> PlutusScriptWitness lang purpose (LedgerEra era) -> ScriptWitness WitCtxStake era forall era (lang :: Language) (purpose :: PlutusScriptPurpose). Era era -> PlutusScriptWitness lang purpose (LedgerEra era) -> ScriptWitness WitCtxStake era newToOldPlutusCertificateScriptWitness Era era Era ConwayEra ConwayEra PlutusScriptWitness lang purpose (LedgerEra era) psw (Certificate (ShelleyLedgerEra era) cert, Maybe (StakeCredential, Witness WitCtxStake era) -> BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)) forall a. a -> BuildTxWith BuildTx a forall (f :: * -> *) a. Applicative f => a -> f a pure (Maybe (StakeCredential, Witness WitCtxStake era) -> BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) -> Maybe (StakeCredential, Witness WitCtxStake era) -> BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)) forall a b. (a -> b) -> a -> b $ (,Witness WitCtxStake era wit) (StakeCredential -> (StakeCredential, Witness WitCtxStake era)) -> Maybe StakeCredential -> Maybe (StakeCredential, Witness WitCtxStake era) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe StakeCredential mStakeCred) Era era DijkstraEra -> do let Exp.Certificate TxCert (ShelleyLedgerEra era) DijkstraTxCert DijkstraEra c = Certificate (ShelleyLedgerEra era) cert mStakeCred :: Maybe StakeCredential mStakeCred = ShelleyBasedEra era -> TxCert (ShelleyLedgerEra era) -> Maybe StakeCredential forall era. ShelleyBasedEra era -> TxCert (ShelleyLedgerEra era) -> Maybe StakeCredential Api.getTxCertWitness (Era era -> ShelleyBasedEra era forall era. Era era -> ShelleyBasedEra era forall a (f :: a -> *) (g :: a -> *) (era :: a). Convert f g => f era -> g era convert Era era era) TxCert (ShelleyLedgerEra era) DijkstraTxCert DijkstraEra c wit :: Witness WitCtxStake era wit = case AnyWitness (LedgerEra era) witness of AnyWitness (LedgerEra era) AnyKeyWitnessPlaceholder -> KeyWitnessInCtx WitCtxStake -> Witness WitCtxStake era forall witctx era. KeyWitnessInCtx witctx -> Witness witctx era Api.KeyWitness KeyWitnessInCtx WitCtxStake Api.KeyWitnessForStakeAddr AnySimpleScriptWitness SimpleScriptOrReferenceInput (LedgerEra era) ss -> ScriptWitnessInCtx WitCtxStake -> ScriptWitness WitCtxStake era -> Witness WitCtxStake era forall witctx era. ScriptWitnessInCtx witctx -> ScriptWitness witctx era -> Witness witctx era Api.ScriptWitness ScriptWitnessInCtx WitCtxStake Api.ScriptWitnessForStakeAddr (ScriptWitness WitCtxStake era -> Witness WitCtxStake era) -> ScriptWitness WitCtxStake era -> Witness WitCtxStake era forall a b. (a -> b) -> a -> b $ Era era -> SimpleScriptOrReferenceInput (LedgerEra era) -> ScriptWitness WitCtxStake era forall era. AllegraEraScript (LedgerEra era) => Era era -> SimpleScriptOrReferenceInput (LedgerEra era) -> ScriptWitness WitCtxStake era newToOldSimpleScriptWitness Era era era SimpleScriptOrReferenceInput (LedgerEra era) ss AnyPlutusScriptWitness PlutusScriptWitness lang purpose (LedgerEra era) psw -> ScriptWitnessInCtx WitCtxStake -> ScriptWitness WitCtxStake era -> Witness WitCtxStake era forall witctx era. ScriptWitnessInCtx witctx -> ScriptWitness witctx era -> Witness witctx era Api.ScriptWitness ScriptWitnessInCtx WitCtxStake Api.ScriptWitnessForStakeAddr (ScriptWitness WitCtxStake era -> Witness WitCtxStake era) -> ScriptWitness WitCtxStake era -> Witness WitCtxStake era forall a b. (a -> b) -> a -> b $ Era era -> PlutusScriptWitness lang purpose (LedgerEra era) -> ScriptWitness WitCtxStake era forall era (lang :: Language) (purpose :: PlutusScriptPurpose). Era era -> PlutusScriptWitness lang purpose (LedgerEra era) -> ScriptWitness WitCtxStake era newToOldPlutusCertificateScriptWitness Era era Era DijkstraEra DijkstraEra PlutusScriptWitness lang purpose (LedgerEra era) psw (Certificate (ShelleyLedgerEra era) cert, Maybe (StakeCredential, Witness WitCtxStake era) -> BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)) forall a. a -> BuildTxWith BuildTx a forall (f :: * -> *) a. Applicative f => a -> f a pure (Maybe (StakeCredential, Witness WitCtxStake era) -> BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))) -> Maybe (StakeCredential, Witness WitCtxStake era) -> BuildTxWith BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)) forall a b. (a -> b) -> a -> b $ (,Witness WitCtxStake era wit) (StakeCredential -> (StakeCredential, Witness WitCtxStake era)) -> Maybe StakeCredential -> Maybe (StakeCredential, Witness WitCtxStake era) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe StakeCredential mStakeCred) newToOldSimpleScriptWitness :: L.AllegraEraScript (LedgerEra era) => Era era -> Exp.SimpleScriptOrReferenceInput (LedgerEra era) -> Api.ScriptWitness Api.WitCtxStake era newToOldSimpleScriptWitness :: forall era. AllegraEraScript (LedgerEra era) => Era era -> SimpleScriptOrReferenceInput (LedgerEra era) -> ScriptWitness WitCtxStake era newToOldSimpleScriptWitness Era era era SimpleScriptOrReferenceInput (LedgerEra era) simple = case SimpleScriptOrReferenceInput (LedgerEra era) simple of Exp.SScript (Exp.SimpleScript NativeScript (LedgerEra era) script) -> ScriptLanguageInEra SimpleScript' era -> SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness WitCtxStake era forall era witctx. ScriptLanguageInEra SimpleScript' era -> SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness witctx era Api.SimpleScriptWitness (ShelleyBasedEra era -> ScriptLanguageInEra SimpleScript' era forall era. ShelleyBasedEra era -> ScriptLanguageInEra SimpleScript' era sbeToSimpleScriptLanguageInEra (ShelleyBasedEra era -> ScriptLanguageInEra SimpleScript' era) -> ShelleyBasedEra era -> ScriptLanguageInEra SimpleScript' era forall a b. (a -> b) -> a -> b $ Era era -> ShelleyBasedEra era forall era. Era era -> ShelleyBasedEra era forall a (f :: a -> *) (g :: a -> *) (era :: a). Convert f g => f era -> g era convert Era era era) (SimpleScript -> SimpleScriptOrReferenceInput SimpleScript' forall lang. SimpleScript -> SimpleScriptOrReferenceInput lang Api.SScript (SimpleScript -> SimpleScriptOrReferenceInput SimpleScript') -> SimpleScript -> SimpleScriptOrReferenceInput SimpleScript' forall a b. (a -> b) -> a -> b $ NativeScript (LedgerEra era) -> SimpleScript forall era. AllegraEraScript era => NativeScript era -> SimpleScript fromAllegraTimelock NativeScript (LedgerEra era) script) Exp.SReferenceScript TxIn inp -> ScriptLanguageInEra SimpleScript' era -> SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness WitCtxStake era forall era witctx. ScriptLanguageInEra SimpleScript' era -> SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness witctx era Api.SimpleScriptWitness (ShelleyBasedEra era -> ScriptLanguageInEra SimpleScript' era forall era. ShelleyBasedEra era -> ScriptLanguageInEra SimpleScript' era sbeToSimpleScriptLanguageInEra (ShelleyBasedEra era -> ScriptLanguageInEra SimpleScript' era) -> ShelleyBasedEra era -> ScriptLanguageInEra SimpleScript' era forall a b. (a -> b) -> a -> b $ Era era -> ShelleyBasedEra era forall era. Era era -> ShelleyBasedEra era forall a (f :: a -> *) (g :: a -> *) (era :: a). Convert f g => f era -> g era convert Era era era) (TxIn -> SimpleScriptOrReferenceInput SimpleScript' forall lang. TxIn -> SimpleScriptOrReferenceInput lang Api.SReferenceScript TxIn inp) newToOldPlutusCertificateScriptWitness :: Era era -> Exp.PlutusScriptWitness lang purpose (LedgerEra era) -> Api.ScriptWitness Api.WitCtxStake era newToOldPlutusCertificateScriptWitness :: forall era (lang :: Language) (purpose :: PlutusScriptPurpose). Era era -> PlutusScriptWitness lang purpose (LedgerEra era) -> ScriptWitness WitCtxStake era newToOldPlutusCertificateScriptWitness Era era ConwayEra (Exp.PlutusScriptWitness SLanguage lang Plutus.SPlutusV1 PlutusScriptOrReferenceInput lang (LedgerEra era) scriptOrRef PlutusScriptDatum lang purpose _ ScriptRedeemer redeemer ExecutionUnits execUnits) = ScriptLanguageInEra PlutusScriptV1 era -> PlutusScriptVersion PlutusScriptV1 -> PlutusScriptOrReferenceInput PlutusScriptV1 -> ScriptDatum WitCtxStake -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness WitCtxStake era forall lang era witctx. IsPlutusScriptLanguage lang => ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum witctx -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness witctx era Api.PlutusScriptWitness ScriptLanguageInEra PlutusScriptV1 era ScriptLanguageInEra PlutusScriptV1 ConwayEra Api.PlutusScriptV1InConway PlutusScriptVersion PlutusScriptV1 Api.PlutusScriptV1 (PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra) -> PlutusScriptOrReferenceInput PlutusScriptV1 forall (lang :: Language) era oldlang. PlutusScriptOrReferenceInput lang (LedgerEra era) -> PlutusScriptOrReferenceInput oldlang newToOldPlutusScriptOrReferenceInput PlutusScriptOrReferenceInput lang (LedgerEra era) PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra) scriptOrRef) ScriptDatum WitCtxStake Api.NoScriptDatumForStake ScriptRedeemer redeemer ExecutionUnits execUnits newToOldPlutusCertificateScriptWitness Era era ConwayEra (Exp.PlutusScriptWitness SLanguage lang Plutus.SPlutusV2 PlutusScriptOrReferenceInput lang (LedgerEra era) scriptOrRef PlutusScriptDatum lang purpose _ ScriptRedeemer redeemer ExecutionUnits execUnits) = ScriptLanguageInEra PlutusScriptV2 era -> PlutusScriptVersion PlutusScriptV2 -> PlutusScriptOrReferenceInput PlutusScriptV2 -> ScriptDatum WitCtxStake -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness WitCtxStake era forall lang era witctx. IsPlutusScriptLanguage lang => ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum witctx -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness witctx era Api.PlutusScriptWitness ScriptLanguageInEra PlutusScriptV2 era ScriptLanguageInEra PlutusScriptV2 ConwayEra Api.PlutusScriptV2InConway PlutusScriptVersion PlutusScriptV2 Api.PlutusScriptV2 (PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra) -> PlutusScriptOrReferenceInput PlutusScriptV2 forall (lang :: Language) era oldlang. PlutusScriptOrReferenceInput lang (LedgerEra era) -> PlutusScriptOrReferenceInput oldlang newToOldPlutusScriptOrReferenceInput PlutusScriptOrReferenceInput lang (LedgerEra era) PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra) scriptOrRef) ScriptDatum WitCtxStake Api.NoScriptDatumForStake ScriptRedeemer redeemer ExecutionUnits execUnits newToOldPlutusCertificateScriptWitness Era era ConwayEra (Exp.PlutusScriptWitness SLanguage lang Plutus.SPlutusV3 PlutusScriptOrReferenceInput lang (LedgerEra era) scriptOrRef PlutusScriptDatum lang purpose _ ScriptRedeemer redeemer ExecutionUnits execUnits) = ScriptLanguageInEra PlutusScriptV3 era -> PlutusScriptVersion PlutusScriptV3 -> PlutusScriptOrReferenceInput PlutusScriptV3 -> ScriptDatum WitCtxStake -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness WitCtxStake era forall lang era witctx. IsPlutusScriptLanguage lang => ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum witctx -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness witctx era Api.PlutusScriptWitness ScriptLanguageInEra PlutusScriptV3 era ScriptLanguageInEra PlutusScriptV3 ConwayEra Api.PlutusScriptV3InConway PlutusScriptVersion PlutusScriptV3 Api.PlutusScriptV3 (PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra) -> PlutusScriptOrReferenceInput PlutusScriptV3 forall (lang :: Language) era oldlang. PlutusScriptOrReferenceInput lang (LedgerEra era) -> PlutusScriptOrReferenceInput oldlang newToOldPlutusScriptOrReferenceInput PlutusScriptOrReferenceInput lang (LedgerEra era) PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra) scriptOrRef) ScriptDatum WitCtxStake Api.NoScriptDatumForStake ScriptRedeemer redeemer ExecutionUnits execUnits newToOldPlutusCertificateScriptWitness Era era ConwayEra (Exp.PlutusScriptWitness SLanguage lang Plutus.SPlutusV4 PlutusScriptOrReferenceInput lang (LedgerEra era) _ PlutusScriptDatum lang purpose _ ScriptRedeemer _ ExecutionUnits _) = [Char] -> ScriptWitness WitCtxStake era forall a. HasCallStack => [Char] -> a error [Char] "newToOldPlutusCertificateScriptWitness: PlutusV4 script not possible in Conway era" newToOldPlutusCertificateScriptWitness Era era DijkstraEra (Exp.PlutusScriptWitness SLanguage lang Plutus.SPlutusV1 PlutusScriptOrReferenceInput lang (LedgerEra era) scriptOrRef PlutusScriptDatum lang purpose _ ScriptRedeemer redeemer ExecutionUnits execUnits) = ScriptLanguageInEra PlutusScriptV1 era -> PlutusScriptVersion PlutusScriptV1 -> PlutusScriptOrReferenceInput PlutusScriptV1 -> ScriptDatum WitCtxStake -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness WitCtxStake era forall lang era witctx. IsPlutusScriptLanguage lang => ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum witctx -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness witctx era Api.PlutusScriptWitness ScriptLanguageInEra PlutusScriptV1 era ScriptLanguageInEra PlutusScriptV1 DijkstraEra Api.PlutusScriptV1InDijkstra PlutusScriptVersion PlutusScriptV1 Api.PlutusScriptV1 (PlutusScriptOrReferenceInput lang (LedgerEra DijkstraEra) -> PlutusScriptOrReferenceInput PlutusScriptV1 forall (lang :: Language) era oldlang. PlutusScriptOrReferenceInput lang (LedgerEra era) -> PlutusScriptOrReferenceInput oldlang newToOldPlutusScriptOrReferenceInput PlutusScriptOrReferenceInput lang (LedgerEra era) PlutusScriptOrReferenceInput lang (LedgerEra DijkstraEra) scriptOrRef) ScriptDatum WitCtxStake Api.NoScriptDatumForStake ScriptRedeemer redeemer ExecutionUnits execUnits newToOldPlutusCertificateScriptWitness Era era DijkstraEra (Exp.PlutusScriptWitness SLanguage lang Plutus.SPlutusV2 PlutusScriptOrReferenceInput lang (LedgerEra era) scriptOrRef PlutusScriptDatum lang purpose _ ScriptRedeemer redeemer ExecutionUnits execUnits) = ScriptLanguageInEra PlutusScriptV2 era -> PlutusScriptVersion PlutusScriptV2 -> PlutusScriptOrReferenceInput PlutusScriptV2 -> ScriptDatum WitCtxStake -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness WitCtxStake era forall lang era witctx. IsPlutusScriptLanguage lang => ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum witctx -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness witctx era Api.PlutusScriptWitness ScriptLanguageInEra PlutusScriptV2 era ScriptLanguageInEra PlutusScriptV2 DijkstraEra Api.PlutusScriptV2InDijkstra PlutusScriptVersion PlutusScriptV2 Api.PlutusScriptV2 (PlutusScriptOrReferenceInput lang (LedgerEra DijkstraEra) -> PlutusScriptOrReferenceInput PlutusScriptV2 forall (lang :: Language) era oldlang. PlutusScriptOrReferenceInput lang (LedgerEra era) -> PlutusScriptOrReferenceInput oldlang newToOldPlutusScriptOrReferenceInput PlutusScriptOrReferenceInput lang (LedgerEra era) PlutusScriptOrReferenceInput lang (LedgerEra DijkstraEra) scriptOrRef) ScriptDatum WitCtxStake Api.NoScriptDatumForStake ScriptRedeemer redeemer ExecutionUnits execUnits newToOldPlutusCertificateScriptWitness Era era DijkstraEra (Exp.PlutusScriptWitness SLanguage lang Plutus.SPlutusV3 PlutusScriptOrReferenceInput lang (LedgerEra era) scriptOrRef PlutusScriptDatum lang purpose _ ScriptRedeemer redeemer ExecutionUnits execUnits) = ScriptLanguageInEra PlutusScriptV3 era -> PlutusScriptVersion PlutusScriptV3 -> PlutusScriptOrReferenceInput PlutusScriptV3 -> ScriptDatum WitCtxStake -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness WitCtxStake era forall lang era witctx. IsPlutusScriptLanguage lang => ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum witctx -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness witctx era Api.PlutusScriptWitness ScriptLanguageInEra PlutusScriptV3 era ScriptLanguageInEra PlutusScriptV3 DijkstraEra Api.PlutusScriptV3InDijkstra PlutusScriptVersion PlutusScriptV3 Api.PlutusScriptV3 (PlutusScriptOrReferenceInput lang (LedgerEra DijkstraEra) -> PlutusScriptOrReferenceInput PlutusScriptV3 forall (lang :: Language) era oldlang. PlutusScriptOrReferenceInput lang (LedgerEra era) -> PlutusScriptOrReferenceInput oldlang newToOldPlutusScriptOrReferenceInput PlutusScriptOrReferenceInput lang (LedgerEra era) PlutusScriptOrReferenceInput lang (LedgerEra DijkstraEra) scriptOrRef) ScriptDatum WitCtxStake Api.NoScriptDatumForStake ScriptRedeemer redeemer ExecutionUnits execUnits newToOldPlutusCertificateScriptWitness Era era DijkstraEra (Exp.PlutusScriptWitness SLanguage lang Plutus.SPlutusV4 PlutusScriptOrReferenceInput lang (LedgerEra era) scriptOrRef PlutusScriptDatum lang purpose _ ScriptRedeemer redeemer ExecutionUnits execUnits) = ScriptLanguageInEra PlutusScriptV4 era -> PlutusScriptVersion PlutusScriptV4 -> PlutusScriptOrReferenceInput PlutusScriptV4 -> ScriptDatum WitCtxStake -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness WitCtxStake era forall lang era witctx. IsPlutusScriptLanguage lang => ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum witctx -> ScriptRedeemer -> ExecutionUnits -> ScriptWitness witctx era Api.PlutusScriptWitness ScriptLanguageInEra PlutusScriptV4 era ScriptLanguageInEra PlutusScriptV4 DijkstraEra Api.PlutusScriptV4InDijkstra PlutusScriptVersion PlutusScriptV4 Api.PlutusScriptV4 (PlutusScriptOrReferenceInput lang (LedgerEra DijkstraEra) -> PlutusScriptOrReferenceInput PlutusScriptV4 forall (lang :: Language) era oldlang. PlutusScriptOrReferenceInput lang (LedgerEra era) -> PlutusScriptOrReferenceInput oldlang newToOldPlutusScriptOrReferenceInput PlutusScriptOrReferenceInput lang (LedgerEra era) PlutusScriptOrReferenceInput lang (LedgerEra DijkstraEra) scriptOrRef) ScriptDatum WitCtxStake Api.NoScriptDatumForStake ScriptRedeemer redeemer ExecutionUnits execUnits newToOldPlutusScriptOrReferenceInput :: Exp.PlutusScriptOrReferenceInput lang (LedgerEra era) -> Api.PlutusScriptOrReferenceInput oldlang newToOldPlutusScriptOrReferenceInput :: forall (lang :: Language) era oldlang. PlutusScriptOrReferenceInput lang (LedgerEra era) -> PlutusScriptOrReferenceInput oldlang newToOldPlutusScriptOrReferenceInput (Exp.PReferenceScript TxIn txin) = TxIn -> PlutusScriptOrReferenceInput oldlang forall lang. TxIn -> PlutusScriptOrReferenceInput lang Api.PReferenceScript TxIn txin newToOldPlutusScriptOrReferenceInput (Exp.PScript (Exp.PlutusScriptInEra PlutusRunnable lang plutusRunnable)) = let oldScript :: ShortByteString oldScript = PlutusBinary -> ShortByteString L.unPlutusBinary (PlutusBinary -> ShortByteString) -> (Plutus lang -> PlutusBinary) -> Plutus lang -> ShortByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . Plutus lang -> PlutusBinary forall (l :: Language). Plutus l -> PlutusBinary L.plutusBinary (Plutus lang -> ShortByteString) -> Plutus lang -> ShortByteString forall a b. (a -> b) -> a -> b $ PlutusRunnable lang -> Plutus lang forall (l :: Language). PlutusRunnable l -> Plutus l L.plutusFromRunnable PlutusRunnable lang plutusRunnable in PlutusScript oldlang -> PlutusScriptOrReferenceInput oldlang forall lang. PlutusScript lang -> PlutusScriptOrReferenceInput lang Api.PScript (PlutusScript oldlang -> PlutusScriptOrReferenceInput oldlang) -> PlutusScript oldlang -> PlutusScriptOrReferenceInput oldlang forall a b. (a -> b) -> a -> b $ ShortByteString -> PlutusScript oldlang forall lang. ShortByteString -> PlutusScript lang Api.PlutusScriptSerialised ShortByteString oldScript