Skip to content

Commit e0bdeb2

Browse files
committed
Propagate updated readFilePlutusScript
1 parent 59850a7 commit e0bdeb2

File tree

7 files changed

+409
-538
lines changed

7 files changed

+409
-538
lines changed

cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs

Lines changed: 59 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ module Cardano.CLI.Compatible.Transaction.ScriptWitness
1111
where
1212

1313
import 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
)
2829
import Cardano.Api.Experimental qualified as Exp
30+
import Cardano.Api.Experimental.Plutus (fromPlutusSLanguage)
31+
import Cardano.Api.Experimental.Plutus qualified as Exp
2932

3033
import Cardano.CLI.Compatible.Exception
34+
import Cardano.CLI.Compatible.Read
3135
import Cardano.CLI.EraBased.Script.Certificate.Type
32-
import Cardano.CLI.EraBased.Script.Read.Common
36+
import Cardano.CLI.EraBased.Script.Read.Common (readScriptDataOrFile)
3337
import Cardano.CLI.EraBased.Script.Type
38+
( CliScriptWitnessError (..)
39+
, NoPolicyId (..)
40+
, OnDiskPlutusScriptCliArgs (..)
41+
, ScriptRequirements (..)
42+
, SimpleRefScriptCliArgs (..)
43+
)
3444
import 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

3848
import 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

cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs

Lines changed: 26 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,17 @@ module Cardano.CLI.EraBased.Script.Certificate.Read
1212
where
1313

1414
import Cardano.Api (File (..))
15-
import Cardano.Api qualified as Api
1615
import Cardano.Api.Experimental
1716
import Cardano.Api.Experimental qualified as Exp
18-
import Cardano.Api.Ledger qualified as L
19-
import Cardano.Api.Plutus (AnyPlutusScriptVersion (..), ToLedgerPlutusLanguage)
17+
import Cardano.Api.Experimental.AnyScriptWitness
18+
import Cardano.Api.Experimental.Plutus qualified as Exp
2019

2120
import Cardano.CLI.Compatible.Exception
22-
-- import Cardano.CLI.EraBased.Script.Certificate.Type
2321
import Cardano.CLI.EraBased.Script.Read.Common
2422
import Cardano.CLI.EraBased.Script.Type
2523
import Cardano.CLI.Orphan ()
2624
import Cardano.CLI.Read
27-
import Cardano.CLI.Type.Common (CertificateFile)
28-
import Cardano.Ledger.Core qualified as L
29-
import Cardano.Ledger.Plutus.Language qualified as L
30-
import Cardano.Ledger.Plutus.Language qualified as Plutus
25+
import Cardano.CLI.Type.Common (AnySLanguage (..), CertificateFile)
3126

3227
readCertificateScriptWitness
3328
:: forall era e
@@ -36,98 +31,59 @@ readCertificateScriptWitness
3631
-> CIO e (AnyWitness (LedgerEra era))
3732
readCertificateScriptWitness (OnDiskSimpleScript scriptFp) = do
3833
let sFp = unFile scriptFp
39-
s <-
40-
readFileSimpleScript sFp
41-
let nativeScript :: SimpleScript (LedgerEra era) = convertTotimelock useEra s
42-
return $
43-
AnySimpleScriptWitness $
44-
SScript nativeScript
34+
AnySimpleScriptWitness . SScript <$> readFileSimpleScript sFp useEra
4535
readCertificateScriptWitness
4636
( OnDiskPlutusScript
4737
(OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits)
4838
) = do
4939
let plutusScriptFp = unFile scriptFp
50-
AnyPlutusScript sVer apiScript <-
51-
readFilePlutusScript plutusScriptFp
40+
Exp.AnyPlutusScript script <-
41+
readFilePlutusScript @_ @era plutusScriptFp
5242

53-
let lang = toPlutusSLanguage sVer
54-
script <- decodePlutusScript useEra sVer apiScript
43+
let
44+
lang = Exp.plutusScriptInEraSLanguage script
45+
script' = PScript script
5546

5647
redeemer <-
5748
fromExceptTCli $
5849
readScriptDataOrFile redeemerFile
50+
51+
let sw =
52+
PlutusScriptWitness
53+
lang
54+
script'
55+
NoScriptDatum
56+
redeemer
57+
execUnits
5958
return $
6059
AnyPlutusScriptWitness $
61-
PlutusScriptWitness
62-
lang
63-
script
64-
NoScriptDatum
65-
redeemer
66-
execUnits
60+
AnyPlutusCertifyingScriptWitness sw
6761
readCertificateScriptWitness
6862
( PlutusReferenceScript
6963
( PlutusRefScriptCliArgs
7064
refInput
71-
(AnyPlutusScriptVersion sVer)
65+
(AnySLanguage lang)
7266
Exp.NoScriptDatumAllowed
7367
NoPolicyId
7468
redeemerFile
7569
execUnits
7670
)
7771
) = do
78-
let lang = toPlutusSLanguage sVer
7972
redeemer <-
8073
fromExceptTCli $
8174
readScriptDataOrFile redeemerFile
8275
return $
8376
AnyPlutusScriptWitness $
84-
PlutusScriptWitness
85-
lang
86-
(PReferenceScript refInput)
87-
NoScriptDatum
88-
redeemer
89-
execUnits
77+
AnyPlutusCertifyingScriptWitness $
78+
PlutusScriptWitness
79+
lang
80+
(PReferenceScript refInput)
81+
NoScriptDatum
82+
redeemer
83+
execUnits
9084
readCertificateScriptWitness (SimpleReferenceScript (SimpleRefScriptArgs refTxin NoPolicyId)) =
9185
return . AnySimpleScriptWitness $ SReferenceScript refTxin
9286

93-
decodePlutusScript
94-
:: forall era lang e
95-
. Era era
96-
-> Api.PlutusScriptVersion lang
97-
-> Api.PlutusScript lang
98-
-> CIO e (PlutusScriptOrReferenceInput (ToLedgerPlutusLanguage lang) (LedgerEra era))
99-
decodePlutusScript era sVer (Api.PlutusScriptSerialised script) = obtainConstraints sVer $ do
100-
let runnableScriptBs = L.Plutus $ L.PlutusBinary script
101-
plutusRunnable <-
102-
fromEitherCli $
103-
Plutus.decodePlutusRunnable
104-
(getVersion era)
105-
runnableScriptBs
106-
return $ PScript (PlutusScriptInEra plutusRunnable)
107-
108-
obtainConstraints
109-
:: Api.PlutusScriptVersion lang
110-
-> (L.PlutusLanguage (ToLedgerPlutusLanguage lang) => a)
111-
-> a
112-
obtainConstraints v =
113-
case v of
114-
Api.PlutusScriptV1 -> id
115-
Api.PlutusScriptV2 -> id
116-
Api.PlutusScriptV3 -> id
117-
Api.PlutusScriptV4 -> id
118-
119-
getVersion :: forall era. Era era -> L.Version
120-
getVersion e = obtainCommonConstraints e $ L.eraProtVerLow @(LedgerEra era)
121-
122-
convertTotimelock
123-
:: forall era
124-
. Era era
125-
-> Api.Script Api.SimpleScript'
126-
-> SimpleScript (LedgerEra era)
127-
convertTotimelock era (Api.SimpleScript s) =
128-
let native :: L.NativeScript (LedgerEra era) = obtainCommonConstraints era $ Api.toAllegraTimelock s
129-
in obtainCommonConstraints era $ SimpleScript native
130-
13187
readCertificateScriptWitnesses
13288
:: IsEra era
13389
=> [(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))]

0 commit comments

Comments
 (0)