{-# LANGUAGE EmptyCase #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TupleSections #-}

module Cardano.Api.Experimental.Tx.Internal.Certificate
  ( Certificate (..)
  , mkTxCertificates
  , convertToOldApiCertificate
  , convertToNewCertificate
  )
where

import Cardano.Api.Address qualified as Api
import Cardano.Api.Certificate.Internal qualified as Api
import Cardano.Api.Era.Internal.Eon.Convert
import Cardano.Api.Era.Internal.Eon.ConwayEraOnwards
import Cardano.Api.Era.Internal.Eon.ShelleyToBabbageEra qualified as Api
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.Ledger qualified as L
import Cardano.Api.Plutus.Internal.Script
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.Plutus.Language qualified as L
import Cardano.Ledger.Plutus.Language qualified as Plutus

import GHC.IsList

data Certificate era where
  Certificate :: L.TxCert era -> Certificate era

convertToOldApiCertificate :: Era era -> Certificate (LedgerEra era) -> Api.Certificate era
convertToOldApiCertificate :: forall era.
Era era -> Certificate (LedgerEra era) -> Certificate era
convertToOldApiCertificate Era era
ConwayEra (Certificate TxCert (LedgerEra era)
cert) =
  ConwayEraOnwards era
-> ConwayTxCert (ShelleyLedgerEra era) -> Certificate era
forall era.
Typeable era =>
ConwayEraOnwards era
-> ConwayTxCert (ShelleyLedgerEra era) -> Certificate era
Api.ConwayCertificate ConwayEraOnwards era
ConwayEraOnwards ConwayEra
ConwayEraOnwardsConway TxCert (LedgerEra era)
ConwayTxCert (ShelleyLedgerEra era)
cert

convertToNewCertificate :: Era era -> Api.Certificate era -> Certificate (LedgerEra era)
convertToNewCertificate :: forall era.
Era era -> Certificate era -> Certificate (LedgerEra era)
convertToNewCertificate Era era
ConwayEra (Api.ConwayCertificate ConwayEraOnwards era
_ ConwayTxCert (ShelleyLedgerEra era)
cert) = TxCert ConwayEra -> Certificate ConwayEra
forall era. TxCert era -> Certificate era
Certificate TxCert ConwayEra
ConwayTxCert (ShelleyLedgerEra era)
cert
convertToNewCertificate Era era
ConwayEra (Api.ShelleyRelatedCertificate ShelleyToBabbageEra era
sToBab ShelleyTxCert (ShelleyLedgerEra era)
_) =
  case ShelleyToBabbageEra era
ShelleyToBabbageEra ConwayEra
sToBab :: Api.ShelleyToBabbageEra ConwayEra of {}

mkTxCertificates
  :: forall era
   . IsEra era
  => [(Certificate (LedgerEra era), AnyWitness (LedgerEra era))]
  -> Api.TxCertificates Api.BuildTx era
mkTxCertificates :: forall era.
IsEra era =>
[(Certificate (LedgerEra era), AnyWitness (LedgerEra era))]
-> TxCertificates BuildTx era
mkTxCertificates [] = TxCertificates BuildTx era
forall build era. TxCertificates build era
TxCertificatesNone
mkTxCertificates [(Certificate (LedgerEra era), AnyWitness (LedgerEra era))]
certs =
  ShelleyBasedEra era
-> OMap
     (Certificate era)
     (BuildTxWith
        BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))
-> TxCertificates BuildTx era
forall era build.
ShelleyBasedEra era
-> OMap
     (Certificate 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 era)
   (BuildTxWith
      BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))
 -> TxCertificates BuildTx era)
-> OMap
     (Certificate era)
     (BuildTxWith
        BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))
-> TxCertificates BuildTx era
forall a b. (a -> b) -> a -> b
$ [Item
   (OMap
      (Certificate era)
      (BuildTxWith
         BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))))]
-> OMap
     (Certificate era)
     (BuildTxWith
        BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))
forall l. IsList l => [Item l] -> l
fromList ([Item
    (OMap
       (Certificate era)
       (BuildTxWith
          BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))))]
 -> OMap
      (Certificate era)
      (BuildTxWith
         BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))))
-> [Item
      (OMap
         (Certificate era)
         (BuildTxWith
            BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))))]
-> OMap
     (Certificate era)
     (BuildTxWith
        BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))
forall a b. (a -> b) -> a -> b
$ ((Certificate (LedgerEra era), AnyWitness (LedgerEra era))
 -> (Certificate era,
     BuildTxWith
       BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))))
-> [(Certificate (LedgerEra era), AnyWitness (LedgerEra era))]
-> [(Certificate era,
     BuildTxWith
       BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))]
forall a b. (a -> b) -> [a] -> [b]
map (Era era
-> (Certificate (LedgerEra era), AnyWitness (LedgerEra era))
-> (Certificate era,
    BuildTxWith
      BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))
forall era.
Era era
-> (Certificate (LedgerEra era), AnyWitness (LedgerEra era))
-> (Certificate era,
    BuildTxWith
      BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))
getStakeCred Era era
forall era. IsEra era => Era era
useEra) [(Certificate (LedgerEra era), AnyWitness (LedgerEra era))]
certs
 where
  getStakeCred
    :: Era era
    -> (Certificate (LedgerEra era), AnyWitness (LedgerEra era))
    -> ( Api.Certificate era
       , Api.BuildTxWith
           Api.BuildTx
           (Maybe (Api.StakeCredential, Api.Witness Api.WitCtxStake era))
       )
  getStakeCred :: forall era.
Era era
-> (Certificate (LedgerEra era), AnyWitness (LedgerEra era))
-> (Certificate era,
    BuildTxWith
      BuildTx (Maybe (StakeCredential, Witness WitCtxStake era)))
getStakeCred Era era
ConwayEra (Certificate TxCert (LedgerEra era)
cert, AnyWitness (LedgerEra era)
AnyKeyWitnessPlaceholder) =
    (ConwayEraOnwards era
-> ConwayTxCert (ShelleyLedgerEra era) -> Certificate era
forall era.
Typeable era =>
ConwayEraOnwards era
-> ConwayTxCert (ShelleyLedgerEra era) -> Certificate era
Api.ConwayCertificate (Era era -> ConwayEraOnwards era
forall era. Era era -> ConwayEraOnwards era
forall a (f :: a -> *) (g :: a -> *) (era :: a).
Convert f g =>
f era -> g era
convert Era era
Era ConwayEra
ConwayEra) TxCert (LedgerEra era)
ConwayTxCert (ShelleyLedgerEra era)
cert, Maybe (StakeCredential, Witness WitCtxStake era)
-> BuildTxWith
     BuildTx (Maybe (StakeCredential, Witness WitCtxStake era))
forall a. a -> BuildTxWith BuildTx a
Api.BuildTxWith Maybe (StakeCredential, Witness WitCtxStake era)
forall a. Maybe a
Nothing)
  getStakeCred Era era
ConwayEra (Certificate TxCert (LedgerEra era)
cert, AnySimpleScriptWitness SimpleScriptOrReferenceInput (LedgerEra era)
ss) =
    let oldApiCert :: Certificate ConwayEra
oldApiCert = ConwayEraOnwards ConwayEra
-> ConwayTxCert (ShelleyLedgerEra ConwayEra)
-> Certificate ConwayEra
forall era.
Typeable era =>
ConwayEraOnwards era
-> ConwayTxCert (ShelleyLedgerEra era) -> Certificate era
Api.ConwayCertificate (Era ConwayEra -> ConwayEraOnwards ConwayEra
forall era. Era era -> ConwayEraOnwards era
forall a (f :: a -> *) (g :: a -> *) (era :: a).
Convert f g =>
f era -> g era
convert Era ConwayEra
ConwayEra) TxCert (LedgerEra era)
ConwayTxCert (ShelleyLedgerEra ConwayEra)
cert
        mStakeCred :: Maybe StakeCredential
mStakeCred = Certificate ConwayEra -> Maybe StakeCredential
forall era. Certificate era -> Maybe StakeCredential
Api.selectStakeCredentialWitness Certificate ConwayEra
oldApiCert
        wit :: Witness WitCtxStake ConwayEra
wit = ScriptWitnessInCtx WitCtxStake
-> ScriptWitness WitCtxStake ConwayEra
-> Witness WitCtxStake ConwayEra
forall witctx era.
ScriptWitnessInCtx witctx
-> ScriptWitness witctx era -> Witness witctx era
Api.ScriptWitness ScriptWitnessInCtx WitCtxStake
Api.ScriptWitnessForStakeAddr (ScriptWitness WitCtxStake ConwayEra
 -> Witness WitCtxStake ConwayEra)
-> ScriptWitness WitCtxStake ConwayEra
-> Witness WitCtxStake ConwayEra
forall a b. (a -> b) -> a -> b
$ Era ConwayEra
-> SimpleScriptOrReferenceInput (LedgerEra ConwayEra)
-> ScriptWitness WitCtxStake ConwayEra
forall era.
AllegraEraScript (LedgerEra era) =>
Era era
-> SimpleScriptOrReferenceInput (LedgerEra era)
-> ScriptWitness WitCtxStake era
newToOldSimpleScriptWitness Era ConwayEra
ConwayEra SimpleScriptOrReferenceInput (LedgerEra era)
SimpleScriptOrReferenceInput (LedgerEra ConwayEra)
ss
     in ( Certificate era
Certificate ConwayEra
oldApiCert
        , 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 ConwayEra
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
        )
  getStakeCred Era era
ConwayEra (Certificate TxCert (LedgerEra era)
cert, AnyPlutusScriptWitness PlutusScriptWitness lang purpose (LedgerEra era)
psw) =
    let oldApiCert :: Certificate ConwayEra
oldApiCert = ConwayEraOnwards ConwayEra
-> ConwayTxCert (ShelleyLedgerEra ConwayEra)
-> Certificate ConwayEra
forall era.
Typeable era =>
ConwayEraOnwards era
-> ConwayTxCert (ShelleyLedgerEra era) -> Certificate era
Api.ConwayCertificate (Era ConwayEra -> ConwayEraOnwards ConwayEra
forall era. Era era -> ConwayEraOnwards era
forall a (f :: a -> *) (g :: a -> *) (era :: a).
Convert f g =>
f era -> g era
convert Era ConwayEra
ConwayEra) TxCert (LedgerEra era)
ConwayTxCert (ShelleyLedgerEra ConwayEra)
cert
        mStakeCred :: Maybe StakeCredential
mStakeCred = Certificate ConwayEra -> Maybe StakeCredential
forall era. Certificate era -> Maybe StakeCredential
Api.selectStakeCredentialWitness Certificate ConwayEra
oldApiCert
        wit :: Witness WitCtxStake ConwayEra
wit =
          ScriptWitnessInCtx WitCtxStake
-> ScriptWitness WitCtxStake ConwayEra
-> Witness WitCtxStake ConwayEra
forall witctx era.
ScriptWitnessInCtx witctx
-> ScriptWitness witctx era -> Witness witctx era
Api.ScriptWitness ScriptWitnessInCtx WitCtxStake
Api.ScriptWitnessForStakeAddr (ScriptWitness WitCtxStake ConwayEra
 -> Witness WitCtxStake ConwayEra)
-> ScriptWitness WitCtxStake ConwayEra
-> Witness WitCtxStake ConwayEra
forall a b. (a -> b) -> a -> b
$
            Era ConwayEra
-> PlutusScriptWitness lang purpose (LedgerEra ConwayEra)
-> ScriptWitness WitCtxStake ConwayEra
forall era (lang :: Language) (purpose :: PlutusScriptPurpose).
Era era
-> PlutusScriptWitness lang purpose (LedgerEra era)
-> ScriptWitness WitCtxStake era
newToOldPlutusCertificateScriptWitness Era ConwayEra
ConwayEra PlutusScriptWitness lang purpose (LedgerEra era)
PlutusScriptWitness lang purpose (LedgerEra ConwayEra)
psw
     in ( Certificate era
Certificate ConwayEra
oldApiCert
        , 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 ConwayEra
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
    (Era ConwayEra
-> PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra)
-> PlutusScriptOrReferenceInput PlutusScriptV1
forall era (lang :: Language) oldlang.
Era era
-> PlutusScriptOrReferenceInput lang (LedgerEra era)
-> PlutusScriptOrReferenceInput oldlang
newToOldPlutusScriptOrReferenceInput Era ConwayEra
ConwayEra 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
    (Era ConwayEra
-> PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra)
-> PlutusScriptOrReferenceInput PlutusScriptV2
forall era (lang :: Language) oldlang.
Era era
-> PlutusScriptOrReferenceInput lang (LedgerEra era)
-> PlutusScriptOrReferenceInput oldlang
newToOldPlutusScriptOrReferenceInput Era ConwayEra
ConwayEra 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
    (Era ConwayEra
-> PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra)
-> PlutusScriptOrReferenceInput PlutusScriptV3
forall era (lang :: Language) oldlang.
Era era
-> PlutusScriptOrReferenceInput lang (LedgerEra era)
-> PlutusScriptOrReferenceInput oldlang
newToOldPlutusScriptOrReferenceInput Era ConwayEra
ConwayEra PlutusScriptOrReferenceInput lang (LedgerEra era)
PlutusScriptOrReferenceInput lang (LedgerEra ConwayEra)
scriptOrRef)
    ScriptDatum WitCtxStake
Api.NoScriptDatumForStake
    ScriptRedeemer
redeemer
    ExecutionUnits
execUnits

newToOldPlutusScriptOrReferenceInput
  :: Era era
  -> Exp.PlutusScriptOrReferenceInput lang (LedgerEra era)
  -> Api.PlutusScriptOrReferenceInput oldlang
newToOldPlutusScriptOrReferenceInput :: forall era (lang :: Language) oldlang.
Era era
-> PlutusScriptOrReferenceInput lang (LedgerEra era)
-> PlutusScriptOrReferenceInput oldlang
newToOldPlutusScriptOrReferenceInput Era era
ConwayEra (Exp.PReferenceScript TxIn
txin) = TxIn -> PlutusScriptOrReferenceInput oldlang
forall lang. TxIn -> PlutusScriptOrReferenceInput lang
Api.PReferenceScript TxIn
txin
newToOldPlutusScriptOrReferenceInput Era era
ConwayEra (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