{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE RankNTypes #-} module Cardano.CLI.EraBased.Script.Mint.Read ( readMintScriptWitness ) where import Cardano.Api import Cardano.Api.Experimental qualified as Exp import Cardano.CLI.Compatible.Exception import Cardano.CLI.EraBased.Script.Mint.Type (MintScriptWitnessWithPolicyId (..)) import Cardano.CLI.EraBased.Script.Read.Common import Cardano.CLI.EraBased.Script.Type ( AnyPlutusScript (..) , CliScriptWitnessError (..) , OnDiskPlutusScriptCliArgs (..) , PlutusRefScriptCliArgs (..) , ScriptRequirements (..) , SimpleRefScriptCliArgs (..) ) import Cardano.CLI.Read readMintScriptWitness :: Exp.IsEra era => ScriptRequirements Exp.MintItem -> CIO e (MintScriptWitnessWithPolicyId era) readMintScriptWitness :: forall era e. IsEra era => ScriptRequirements 'MintItem -> CIO e (MintScriptWitnessWithPolicyId era) readMintScriptWitness (OnDiskSimpleScript File ScriptInAnyLang 'In scriptFp) = do let sFp :: FilePath sFp = File ScriptInAnyLang 'In -> FilePath forall content (direction :: FileDirection). File content direction -> FilePath unFile File ScriptInAnyLang 'In scriptFp Script SimpleScript' s <- FilePath -> CIO e (Script SimpleScript') forall e. FilePath -> CIO e (Script SimpleScript') readFileSimpleScript FilePath sFp case Script SimpleScript' s of SimpleScript SimpleScript ss -> do let polId :: PolicyId polId = ScriptHash -> PolicyId PolicyId (ScriptHash -> PolicyId) -> ScriptHash -> PolicyId forall a b. (a -> b) -> a -> b $ Script SimpleScript' -> ScriptHash forall lang. Script lang -> ScriptHash hashScript Script SimpleScript' s MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era) forall a. a -> RIO e a forall (m :: * -> *) a. Monad m => a -> m a return (MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era)) -> MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era) forall a b. (a -> b) -> a -> b $ PolicyId -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era forall era. PolicyId -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era MintScriptWitnessWithPolicyId PolicyId polId (ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era) -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era forall a b. (a -> b) -> a -> b $ ScriptLanguageInEra SimpleScript' era -> SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness WitCtxMint era forall era witctx. ScriptLanguageInEra SimpleScript' era -> SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness witctx era 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 forall era. IsEra era => Era era Exp.useEra) (SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness WitCtxMint era) -> SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness WitCtxMint era forall a b. (a -> b) -> a -> b $ SimpleScript -> SimpleScriptOrReferenceInput SimpleScript' forall lang. SimpleScript -> SimpleScriptOrReferenceInput lang SScript SimpleScript ss readMintScriptWitness ( OnDiskPlutusScript (OnDiskPlutusScriptCliArgs File ScriptInAnyLang 'In scriptFp NoScriptDatum OptionalDatum 'MintItem Exp.NoScriptDatumAllowed ScriptDataOrFile redeemerFile ExecutionUnits execUnits) ) = do let plutusScriptFp :: FilePath plutusScriptFp = File ScriptInAnyLang 'In -> FilePath forall content (direction :: FileDirection). File content direction -> FilePath unFile File ScriptInAnyLang 'In scriptFp AnyPlutusScript plutusScript <- FilePath -> CIO e AnyPlutusScript forall e. FilePath -> CIO e AnyPlutusScript readFilePlutusScript FilePath plutusScriptFp HashableScriptData redeemer <- ExceptT ScriptDataError IO HashableScriptData -> RIO e HashableScriptData forall e (m :: * -> *) a. (HasCallStack, MonadIO m, Show e, Typeable e, Error e) => ExceptT e IO a -> m a fromExceptTCli (ExceptT ScriptDataError IO HashableScriptData -> RIO e HashableScriptData) -> ExceptT ScriptDataError IO HashableScriptData -> RIO e HashableScriptData forall a b. (a -> b) -> a -> b $ ScriptDataOrFile -> ExceptT ScriptDataError IO HashableScriptData forall (m :: * -> *). MonadIO m => ScriptDataOrFile -> ExceptT ScriptDataError m HashableScriptData readScriptDataOrFile ScriptDataOrFile redeemerFile case AnyPlutusScript plutusScript of AnyPlutusScript PlutusScriptVersion lang lang PlutusScript lang script -> do let pScript :: PlutusScriptOrReferenceInput lang pScript = PlutusScript lang -> PlutusScriptOrReferenceInput lang forall lang. PlutusScript lang -> PlutusScriptOrReferenceInput lang PScript PlutusScript lang script sbe :: ShelleyBasedEra era sbe = 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 Exp.useEra polId :: PolicyId polId = Script lang -> PolicyId forall lang. Script lang -> PolicyId scriptPolicyId (Script lang -> PolicyId) -> Script lang -> PolicyId forall a b. (a -> b) -> a -> b $ PlutusScriptVersion lang -> PlutusScript lang -> Script lang forall lang. IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> PlutusScript lang -> Script lang PlutusScript PlutusScriptVersion lang lang PlutusScript lang script ScriptLanguageInEra lang era sLangSupported <- CliScriptWitnessError -> Maybe (ScriptLanguageInEra lang era) -> CIO e (ScriptLanguageInEra lang era) forall err a e. (Show err, Typeable err, Error err) => err -> Maybe a -> CIO e a fromMaybeCli ( AnyPlutusScriptVersion -> AnyShelleyBasedEra -> CliScriptWitnessError PlutusScriptWitnessLanguageNotSupportedInEra (PlutusScriptVersion lang -> AnyPlutusScriptVersion forall lang. IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> AnyPlutusScriptVersion AnyPlutusScriptVersion PlutusScriptVersion lang lang) (ShelleyBasedEra era -> (ShelleyBasedEraConstraints era => AnyShelleyBasedEra) -> AnyShelleyBasedEra forall era a. ShelleyBasedEra era -> (ShelleyBasedEraConstraints era => a) -> a shelleyBasedEraConstraints ShelleyBasedEra era sbe ((ShelleyBasedEraConstraints era => AnyShelleyBasedEra) -> AnyShelleyBasedEra) -> (ShelleyBasedEraConstraints era => AnyShelleyBasedEra) -> AnyShelleyBasedEra forall a b. (a -> b) -> a -> b $ ShelleyBasedEra era -> AnyShelleyBasedEra forall era. Typeable era => ShelleyBasedEra era -> AnyShelleyBasedEra AnyShelleyBasedEra ShelleyBasedEra era sbe) ) (Maybe (ScriptLanguageInEra lang era) -> CIO e (ScriptLanguageInEra lang era)) -> Maybe (ScriptLanguageInEra lang era) -> CIO e (ScriptLanguageInEra lang era) forall a b. (a -> b) -> a -> b $ ShelleyBasedEra era -> ScriptLanguage lang -> Maybe (ScriptLanguageInEra lang era) forall era lang. ShelleyBasedEra era -> ScriptLanguage lang -> Maybe (ScriptLanguageInEra lang era) scriptLanguageSupportedInEra ShelleyBasedEra era sbe (ScriptLanguage lang -> Maybe (ScriptLanguageInEra lang era)) -> ScriptLanguage lang -> Maybe (ScriptLanguageInEra lang era) forall a b. (a -> b) -> a -> b $ PlutusScriptVersion lang -> ScriptLanguage lang forall lang. IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> ScriptLanguage lang PlutusScriptLanguage PlutusScriptVersion lang lang MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era) forall a. a -> RIO e a forall (m :: * -> *) a. Monad m => a -> m a return (MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era)) -> MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era) forall a b. (a -> b) -> a -> b $ PolicyId -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era forall era. PolicyId -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era MintScriptWitnessWithPolicyId PolicyId polId (ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era) -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era forall a b. (a -> b) -> a -> b $ ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum WitCtxMint -> HashableScriptData -> ExecutionUnits -> ScriptWitness WitCtxMint era forall lang era witctx. IsPlutusScriptLanguage lang => ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum witctx -> HashableScriptData -> ExecutionUnits -> ScriptWitness witctx era PlutusScriptWitness ScriptLanguageInEra lang era sLangSupported PlutusScriptVersion lang lang PlutusScriptOrReferenceInput lang pScript ScriptDatum WitCtxMint NoScriptDatumForMint HashableScriptData redeemer ExecutionUnits execUnits readMintScriptWitness ( PlutusReferenceScript ( PlutusRefScriptCliArgs TxIn refTxIn AnyPlutusScriptVersion anyPlutusScriptVersion NoScriptDatum OptionalDatum 'MintItem Exp.NoScriptDatumAllowed MintPolicyId 'MintItem polId ScriptDataOrFile redeemerFile ExecutionUnits execUnits ) ) = do case AnyPlutusScriptVersion anyPlutusScriptVersion of AnyPlutusScriptVersion PlutusScriptVersion lang lang -> do let pScript :: PlutusScriptOrReferenceInput lang pScript = TxIn -> PlutusScriptOrReferenceInput lang forall lang. TxIn -> PlutusScriptOrReferenceInput lang PReferenceScript TxIn refTxIn sbe :: ShelleyBasedEra era sbe = 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 Exp.useEra HashableScriptData redeemer <- ExceptT ScriptDataError IO HashableScriptData -> RIO e HashableScriptData forall e (m :: * -> *) a. (HasCallStack, MonadIO m, Show e, Typeable e, Error e) => ExceptT e IO a -> m a fromExceptTCli (ExceptT ScriptDataError IO HashableScriptData -> RIO e HashableScriptData) -> ExceptT ScriptDataError IO HashableScriptData -> RIO e HashableScriptData forall a b. (a -> b) -> a -> b $ ScriptDataOrFile -> ExceptT ScriptDataError IO HashableScriptData forall (m :: * -> *). MonadIO m => ScriptDataOrFile -> ExceptT ScriptDataError m HashableScriptData readScriptDataOrFile ScriptDataOrFile redeemerFile ScriptLanguageInEra lang era sLangSupported <- CliScriptWitnessError -> Maybe (ScriptLanguageInEra lang era) -> CIO e (ScriptLanguageInEra lang era) forall err a e. (Show err, Typeable err, Error err) => err -> Maybe a -> CIO e a fromMaybeCli ( AnyPlutusScriptVersion -> AnyShelleyBasedEra -> CliScriptWitnessError PlutusScriptWitnessLanguageNotSupportedInEra (PlutusScriptVersion lang -> AnyPlutusScriptVersion forall lang. IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> AnyPlutusScriptVersion AnyPlutusScriptVersion PlutusScriptVersion lang lang) (ShelleyBasedEra era -> (ShelleyBasedEraConstraints era => AnyShelleyBasedEra) -> AnyShelleyBasedEra forall era a. ShelleyBasedEra era -> (ShelleyBasedEraConstraints era => a) -> a shelleyBasedEraConstraints ShelleyBasedEra era sbe ((ShelleyBasedEraConstraints era => AnyShelleyBasedEra) -> AnyShelleyBasedEra) -> (ShelleyBasedEraConstraints era => AnyShelleyBasedEra) -> AnyShelleyBasedEra forall a b. (a -> b) -> a -> b $ ShelleyBasedEra era -> AnyShelleyBasedEra forall era. Typeable era => ShelleyBasedEra era -> AnyShelleyBasedEra AnyShelleyBasedEra ShelleyBasedEra era sbe) ) (Maybe (ScriptLanguageInEra lang era) -> CIO e (ScriptLanguageInEra lang era)) -> Maybe (ScriptLanguageInEra lang era) -> CIO e (ScriptLanguageInEra lang era) forall a b. (a -> b) -> a -> b $ ShelleyBasedEra era -> ScriptLanguage lang -> Maybe (ScriptLanguageInEra lang era) forall era lang. ShelleyBasedEra era -> ScriptLanguage lang -> Maybe (ScriptLanguageInEra lang era) scriptLanguageSupportedInEra ShelleyBasedEra era sbe (ScriptLanguage lang -> Maybe (ScriptLanguageInEra lang era)) -> ScriptLanguage lang -> Maybe (ScriptLanguageInEra lang era) forall a b. (a -> b) -> a -> b $ PlutusScriptVersion lang -> ScriptLanguage lang forall lang. IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> ScriptLanguage lang PlutusScriptLanguage PlutusScriptVersion lang lang MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era) forall a. a -> RIO e a forall (m :: * -> *) a. Monad m => a -> m a return (MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era)) -> MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era) forall a b. (a -> b) -> a -> b $ PolicyId -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era forall era. PolicyId -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era MintScriptWitnessWithPolicyId PolicyId MintPolicyId 'MintItem polId (ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era) -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era forall a b. (a -> b) -> a -> b $ ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum WitCtxMint -> HashableScriptData -> ExecutionUnits -> ScriptWitness WitCtxMint era forall lang era witctx. IsPlutusScriptLanguage lang => ScriptLanguageInEra lang era -> PlutusScriptVersion lang -> PlutusScriptOrReferenceInput lang -> ScriptDatum witctx -> HashableScriptData -> ExecutionUnits -> ScriptWitness witctx era PlutusScriptWitness ScriptLanguageInEra lang era sLangSupported PlutusScriptVersion lang lang PlutusScriptOrReferenceInput lang pScript ScriptDatum WitCtxMint NoScriptDatumForMint HashableScriptData redeemer ExecutionUnits execUnits readMintScriptWitness (SimpleReferenceScript (SimpleRefScriptArgs TxIn refTxIn MintPolicyId 'MintItem polId)) = MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era) forall a. a -> RIO e a forall (m :: * -> *) a. Monad m => a -> m a return (MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era)) -> MintScriptWitnessWithPolicyId era -> RIO e (MintScriptWitnessWithPolicyId era) forall a b. (a -> b) -> a -> b $ PolicyId -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era forall era. PolicyId -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era MintScriptWitnessWithPolicyId PolicyId MintPolicyId 'MintItem polId (ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era) -> ScriptWitness WitCtxMint era -> MintScriptWitnessWithPolicyId era forall a b. (a -> b) -> a -> b $ ScriptLanguageInEra SimpleScript' era -> SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness WitCtxMint era forall era witctx. ScriptLanguageInEra SimpleScript' era -> SimpleScriptOrReferenceInput SimpleScript' -> ScriptWitness witctx era 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 forall era. IsEra era => Era era Exp.useEra) (TxIn -> SimpleScriptOrReferenceInput SimpleScript' forall lang. TxIn -> SimpleScriptOrReferenceInput lang SReferenceScript TxIn refTxIn)