@@ -11,10 +11,11 @@ module Cardano.CLI.Compatible.Transaction.ScriptWitness
1111where
1212
1313import Cardano.Api
14- ( AnyPlutusScriptVersion (.. )
15- , AnyShelleyBasedEra (.. )
14+ ( AnyShelleyBasedEra (.. )
1615 , File (.. )
16+ , IsPlutusScriptLanguage
1717 , PlutusScriptOrReferenceInput (.. )
18+ , PlutusScriptVersion (.. )
1819 , Script (.. )
1920 , ScriptDatum (.. )
2021 , ScriptLanguage (.. )
@@ -26,14 +27,23 @@ import Cardano.Api
2627 , shelleyBasedEraConstraints
2728 )
2829import Cardano.Api.Experimental qualified as Exp
30+ import Cardano.Api.Experimental.Plutus (fromPlutusSLanguage )
31+ import Cardano.Api.Experimental.Plutus qualified as Exp
2932
3033import Cardano.CLI.Compatible.Exception
34+ import Cardano.CLI.Compatible.Read
3135import Cardano.CLI.EraBased.Script.Certificate.Type
32- import Cardano.CLI.EraBased.Script.Read.Common
36+ import Cardano.CLI.EraBased.Script.Read.Common ( readScriptDataOrFile )
3337import Cardano.CLI.EraBased.Script.Type
38+ ( CliScriptWitnessError (.. )
39+ , NoPolicyId (.. )
40+ , OnDiskPlutusScriptCliArgs (.. )
41+ , ScriptRequirements (.. )
42+ , SimpleRefScriptCliArgs (.. )
43+ )
3444import Cardano.CLI.EraBased.Script.Type qualified as Exp
35- import Cardano.CLI.Read
36- import Cardano.CLI.Type.Common ( CertificateFile )
45+ import Cardano.CLI.Type.Common ( AnySLanguage ( .. ), CertificateFile )
46+ import Cardano.Ledger.Plutus.Language qualified as L
3747
3848import Control.Monad
3949
@@ -64,8 +74,7 @@ readCertificateScriptWitness sbe certScriptReq =
6474 OnDiskPlutusScript
6575 (OnDiskPlutusScriptCliArgs scriptFp Exp. NoScriptDatumAllowed redeemerFile execUnits) -> do
6676 let plutusScriptFp = unFile scriptFp
67- plutusScript <-
68- readFilePlutusScript plutusScriptFp
77+ plutusScript <- readFilePlutusScript plutusScriptFp
6978 redeemer <-
7079 fromExceptTCli $
7180 readScriptDataOrFile redeemerFile
@@ -75,7 +84,7 @@ readCertificateScriptWitness sbe certScriptReq =
7584 sLangSupported <-
7685 fromMaybeCli
7786 ( PlutusScriptWitnessLanguageNotSupportedInEra
78- (AnyPlutusScriptVersion lang)
87+ (fromOldScriptLanguage lang)
7988 (shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe)
8089 )
8190 $ scriptLanguageSupportedInEra sbe
@@ -98,33 +107,51 @@ readCertificateScriptWitness sbe certScriptReq =
98107 PlutusReferenceScript
99108 ( PlutusRefScriptCliArgs
100109 refTxIn
101- anyPlutusScriptVersion
110+ ( AnySLanguage lang)
102111 Exp. NoScriptDatumAllowed
103112 Exp. NoPolicyId
104113 redeemerFile
105114 execUnits
106115 ) -> do
107- case anyPlutusScriptVersion of
108- AnyPlutusScriptVersion lang -> do
109- let pScript = PReferenceScript refTxIn
110- redeemer <-
111- fromExceptTCli $
112- readScriptDataOrFile redeemerFile
113- sLangSupported <-
114- fromMaybeCli
115- ( PlutusScriptWitnessLanguageNotSupportedInEra
116- ( AnyPlutusScriptVersion lang )
117- (shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe)
118- )
119- $ scriptLanguageSupportedInEra sbe
120- $ PlutusScriptLanguage lang
116+ let pScript = PReferenceScript refTxIn
117+ redeemer <-
118+ fromExceptTCli $
119+ readScriptDataOrFile redeemerFile
120+ sLangSupported <-
121+ fromMaybeCli
122+ ( PlutusScriptWitnessLanguageNotSupportedInEra
123+ ( L. plutusLanguage lang)
124+ (shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe)
125+ )
126+ $ scriptLanguageSupportedInEra sbe
127+ $ obtainIsPlutusScriptLanguage (fromPlutusSLanguage lang )
128+ $ PlutusScriptLanguage
129+ $ Exp. fromPlutusSLanguage lang
121130
122- return $
123- CertificateScriptWitness $
124- PlutusScriptWitness
125- sLangSupported
126- lang
127- pScript
128- NoScriptDatumForStake
129- redeemer
130- execUnits
131+ return $
132+ CertificateScriptWitness $
133+ obtainIsPlutusScriptLanguage (fromPlutusSLanguage lang) $
134+ PlutusScriptWitness
135+ sLangSupported
136+ (Exp. fromPlutusSLanguage lang)
137+ pScript
138+ NoScriptDatumForStake
139+ redeemer
140+ execUnits
141+
142+ fromOldScriptLanguage :: PlutusScriptVersion lang -> L. Language
143+ fromOldScriptLanguage PlutusScriptV1 = L. PlutusV1
144+ fromOldScriptLanguage PlutusScriptV2 = L. PlutusV2
145+ fromOldScriptLanguage PlutusScriptV3 = L. PlutusV3
146+ fromOldScriptLanguage PlutusScriptV4 = L. PlutusV4
147+
148+ obtainIsPlutusScriptLanguage
149+ :: PlutusScriptVersion lang
150+ -> (IsPlutusScriptLanguage lang => a )
151+ -> a
152+ obtainIsPlutusScriptLanguage lang f =
153+ case lang of
154+ PlutusScriptV1 -> f
155+ PlutusScriptV2 -> f
156+ PlutusScriptV3 -> f
157+ PlutusScriptV4 -> f
0 commit comments