{-# 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