Skip to content

Commit c8dd84b

Browse files
committed
WIP
1 parent e0bdeb2 commit c8dd84b

File tree

22 files changed

+374
-359
lines changed

22 files changed

+374
-359
lines changed

cabal.project

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ repository cardano-haskell-packages
1313
-- See CONTRIBUTING for information about these, including some Nix commands
1414
-- you need to run if you change them
1515
index-state:
16-
, hackage.haskell.org 2025-11-05T09:40:54Z
17-
, cardano-haskell-packages 2025-11-24T10:27:41Z
16+
, hackage.haskell.org 2025-12-02T22:23:29Z
17+
, cardano-haskell-packages 2025-12-16T19:04:42Z
1818

1919
packages:
2020
cardano-cli
@@ -66,3 +66,11 @@ if impl (ghc >= 9.12)
6666
-- IMPORTANT
6767
-- Do NOT add more source-repository-package stanzas here unless they are strictly
6868
-- temporary! Please read the section in CONTRIBUTING about updating dependencies.
69+
70+
71+
source-repository-package
72+
type: git
73+
location: https://github.com/IntersectMBO/cardano-api.git
74+
tag: 2adba748a22666f6258096081680605e9ed97e70
75+
--sha256: sha256-ZBydyRVLreT723M9N8pljl4rQ6RL4qwJsfIdJC4psD4=
76+
subdir: cardano-api

cardano-cli/cardano-cli.cabal

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ library
6767
Cardano.CLI.Compatible.Governance.Types
6868
Cardano.CLI.Compatible.Json.Friendly
6969
Cardano.CLI.Compatible.Option
70+
Cardano.CLI.Compatible.Read
7071
Cardano.CLI.Compatible.Run
7172
Cardano.CLI.Compatible.StakeAddress.Command
7273
Cardano.CLI.Compatible.StakeAddress.Option
@@ -241,7 +242,7 @@ library
241242
binary,
242243
bytestring,
243244
canonical-json,
244-
cardano-api ^>=10.20,
245+
cardano-api ^>=10.21,
245246
cardano-binary,
246247
cardano-crypto,
247248
cardano-crypto-class ^>=2.2.3.2,
@@ -280,6 +281,7 @@ library
280281
network,
281282
network-uri,
282283
optparse-applicative-fork,
284+
ordered-containers,
283285
ouroboros-consensus,
284286
ouroboros-consensus-cardano,
285287
prettyprinter,

cardano-cli/src/Cardano/CLI/Compatible/Command.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ import Cardano.CLI.Compatible.StakePool.Command
2020
import Cardano.CLI.Compatible.Transaction.Command
2121

2222
import Data.Text
23-
import Data.Typeable (Typeable)
2423

2524
data AnyCompatibleCommand where
26-
AnyCompatibleCommand :: Typeable era => CompatibleCommand era -> AnyCompatibleCommand
25+
AnyCompatibleCommand :: CompatibleCommand era -> AnyCompatibleCommand
2726

2827
renderAnyCompatibleCommand :: AnyCompatibleCommand -> Text
2928
renderAnyCompatibleCommand = \case

cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import Cardano.CLI.Type.Governance
3434
import Cardano.CLI.Type.Key
3535
import Cardano.CLI.Type.Key.VerificationKey
3636
import Cardano.Ledger.BaseTypes (NonZero, nonZero)
37+
import Cardano.Ledger.Plutus.Language qualified as L
3738

3839
import Control.Monad (void, when)
3940
import Data.Aeson qualified as Aeson
@@ -1125,7 +1126,7 @@ pVoteReferencePlutusScriptWitness prefix autoBalanceExecUnits =
11251126
let appendedPrefix = prefix ++ "-"
11261127
in Voting.createPlutusReferenceScriptFromCliArgs
11271128
<$> pReferenceTxIn appendedPrefix "plutus"
1128-
<*> plutusP appendedPrefix PlutusScriptV3 "v3"
1129+
<*> plutusSLanguageP appendedPrefix L.SPlutusV3 "v3"
11291130
<*> pScriptRedeemerOrFile (appendedPrefix ++ "reference-tx-in")
11301131
<*> ( case autoBalanceExecUnits of
11311132
AutoBalance -> pure (ExecutionUnits 0 0)
@@ -1183,7 +1184,7 @@ pProposalReferencePlutusScriptWitness prefix autoBalanceExecUnits =
11831184
let appendedPrefix = prefix ++ "-"
11841185
in Proposing.createPlutusReferenceScriptFromCliArgs
11851186
<$> pReferenceTxIn appendedPrefix "plutus"
1186-
<*> plutusP appendedPrefix PlutusScriptV3 "v3"
1187+
<*> plutusSLanguageP appendedPrefix L.SPlutusV3 "v3"
11871188
<*> pScriptRedeemerOrFile (appendedPrefix ++ "reference-tx-in")
11881189
<*> ( case autoBalanceExecUnits of
11891190
AutoBalance -> pure (ExecutionUnits 0 0)
@@ -1383,7 +1384,7 @@ pCertificateReferencePlutusScriptWitness prefix autoBalanceExecUnits =
13831384
let appendedPrefix = prefix ++ "-"
13841385
in Certifying.createPlutusReferenceScriptFromCliArgs
13851386
<$> pReferenceTxIn appendedPrefix "plutus"
1386-
<*> pPlutusScriptLanguage appendedPrefix
1387+
<*> pAnyPlutusSLanguage appendedPrefix
13871388
<*> pScriptRedeemerOrFile (appendedPrefix ++ "reference-tx-in")
13881389
<*> ( case autoBalanceExecUnits of
13891390
AutoBalance -> pure (ExecutionUnits 0 0)
@@ -1498,7 +1499,7 @@ pWithdrawalReferencePlutusScriptWitness prefix autoBalanceExecUnits =
14981499
let appendedPrefix = prefix ++ "-"
14991500
in Withdrawal.createPlutusReferenceScriptFromCliArgs
15001501
<$> pReferenceTxIn appendedPrefix "plutus"
1501-
<*> pPlutusScriptLanguage appendedPrefix
1502+
<*> pAnyPlutusSLanguage appendedPrefix
15021503
<*> pScriptRedeemerOrFile (appendedPrefix ++ "reference-tx-in")
15031504
<*> ( case autoBalanceExecUnits of
15041505
AutoBalance -> pure (ExecutionUnits 0 0)
@@ -1508,6 +1509,20 @@ pWithdrawalReferencePlutusScriptWitness prefix autoBalanceExecUnits =
15081509
pPlutusScriptLanguage :: String -> Parser AnyPlutusScriptVersion
15091510
pPlutusScriptLanguage prefix = plutusP prefix PlutusScriptV2 "v2" <|> plutusP prefix PlutusScriptV3 "v3"
15101511

1512+
pAnyPlutusSLanguage :: String -> Parser AnySLanguage
1513+
pAnyPlutusSLanguage prefix =
1514+
plutusSLanguageP prefix L.SPlutusV2 "v2" <|> plutusSLanguageP prefix L.SPlutusV3 "v3"
1515+
1516+
plutusSLanguageP
1517+
:: L.PlutusLanguage lang
1518+
=> String -> L.SLanguage lang -> String -> Parser AnySLanguage
1519+
plutusSLanguageP prefix plutusVersion versionString =
1520+
Opt.flag'
1521+
(AnySLanguage plutusVersion)
1522+
( Opt.long (prefix <> "plutus-script-" <> versionString)
1523+
<> Opt.help ("Specify a plutus script " <> versionString <> " reference script.")
1524+
)
1525+
15111526
plutusP
15121527
:: IsPlutusScriptLanguage lang
15131528
=> String -> PlutusScriptVersion lang -> String -> Parser AnyPlutusScriptVersion
@@ -1955,7 +1970,7 @@ pTxIn balance =
19551970
pPlutusReferenceSpendScriptWitness autoBalanceExecUnits =
19561971
PlutusSpend.createPlutusReferenceScriptFromCliArgs
19571972
<$> pReferenceTxIn "spending-" "plutus"
1958-
<*> pPlutusScriptLanguage "spending-"
1973+
<*> pAnyPlutusSLanguage "spending-"
19591974
<*> pScriptDatumOrFileSpendingCip69 "spending-reference-tx-in"
19601975
<*> pScriptRedeemerOrFile "spending-reference-tx-in"
19611976
<*> ( case autoBalanceExecUnits of
@@ -2167,7 +2182,7 @@ pMintMultiAsset balanceExecUnits =
21672182
pPlutusMintReferenceScriptWitnessFiles autoBalanceExecUnits =
21682183
createPlutusReferenceScriptFromCliArgs
21692184
<$> pReferenceTxIn "mint-" "plutus"
2170-
<*> pPlutusScriptLanguage "mint-"
2185+
<*> pAnyPlutusSLanguage "mint-"
21712186
<*> pScriptRedeemerOrFile "mint-reference-tx-in"
21722187
<*> ( case autoBalanceExecUnits of
21732188
AutoBalance -> pure (ExecutionUnits 0 0)

cardano-cli/src/Cardano/CLI/EraBased/Governance/Actions/Run.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import Cardano.CLI.Compatible.Json.Friendly
2727
import Cardano.CLI.EraBased.Governance.Actions.Command
2828
import Cardano.CLI.EraBased.Governance.Actions.Command qualified as Cmd
2929
import Cardano.CLI.EraBased.Script.Proposal.Read
30-
import Cardano.CLI.EraBased.Script.Proposal.Type
3130
import Cardano.CLI.EraIndependent.Hash.Internal.Common (getByteStringFromURL, httpsAndIpfsSchemes)
3231
import Cardano.CLI.Read
3332
import Cardano.CLI.Type.Common
@@ -72,7 +71,7 @@ runGovernanceActionViewCmd
7271
, Cmd.mOutFile
7372
, Cmd.era
7473
} = Exp.obtainCommonConstraints era $ do
75-
proposal :: (Proposal era, Maybe (ProposalScriptWitness era)) <-
74+
proposal :: (Proposal era, Exp.AnyWitness (Exp.LedgerEra era)) <-
7675
readProposal (actionFile, Nothing)
7776

7877
void $ friendlyProposal outputFormat mOutFile $ fst proposal

cardano-cli/src/Cardano/CLI/EraBased/Governance/Vote/Run.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ where
1515

1616
import Cardano.Api
1717
import Cardano.Api.Experimental (obtainCommonConstraints)
18+
import Cardano.Api.Experimental qualified as Exp
1819
import Cardano.Api.Ledger qualified as L
1920

2021
import Cardano.CLI.Compatible.Exception
@@ -103,7 +104,8 @@ runGovernanceVoteViewCmd
103104
, mOutFile
104105
} = do
105106
obtainCommonConstraints era $ do
106-
voteProcedures <- fst <$> readVoteScriptWitness (convert era) (voteFile, Nothing)
107+
voteProcedures :: VotingProcedures era <-
108+
fst <$> obtainCommonConstraints (era :: Exp.Era era) (readVoteScriptWitness (voteFile, Nothing))
107109

108110
let output =
109111
outputFormat

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{-# LANGUAGE DataKinds #-}
22
{-# LANGUAGE FlexibleContexts #-}
33
{-# LANGUAGE GADTs #-}
4+
{-# LANGUAGE KindSignatures #-}
45

56
module Cardano.CLI.EraBased.Script.Certificate.Type
67
( CertificateScriptWitness (..)
@@ -14,7 +15,7 @@ import Cardano.Api
1415
import Cardano.Api.Experimental
1516

1617
import Cardano.CLI.EraBased.Script.Type
17-
import Cardano.CLI.Type.Common (ScriptDataOrFile)
18+
import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile)
1819

1920
newtype CertificateScriptWitness era
2021
= CertificateScriptWitness {cswScriptWitness :: ScriptWitness WitCtxStake era}
@@ -31,10 +32,10 @@ createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing =
3132

3233
createPlutusReferenceScriptFromCliArgs
3334
:: TxIn
34-
-> AnyPlutusScriptVersion
35+
-> AnySLanguage
3536
-> ScriptDataOrFile
3637
-> ExecutionUnits
3738
-> ScriptRequirements CertItem
38-
createPlutusReferenceScriptFromCliArgs txIn version redeemer execUnits =
39+
createPlutusReferenceScriptFromCliArgs txIn l redeemer execUnits =
3940
PlutusReferenceScript $
40-
PlutusRefScriptCliArgs txIn version NoScriptDatumAllowed NoPolicyId redeemer execUnits
41+
PlutusRefScriptCliArgs txIn l NoScriptDatumAllowed NoPolicyId redeemer execUnits

cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Type.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Cardano.Api.Experimental
1616
import Cardano.Api.Experimental qualified as Exp
1717

1818
import Cardano.CLI.EraBased.Script.Type
19-
import Cardano.CLI.Type.Common (ScriptDataOrFile)
19+
import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile)
2020

2121
-- We always need the policy id when constructing a transaction that mints.
2222
-- In the case of reference scripts, the user currently must provide the policy id (script hash)
@@ -47,7 +47,7 @@ createSimpleReferenceScriptFromCliArgs txin polid =
4747

4848
createPlutusReferenceScriptFromCliArgs
4949
:: TxIn
50-
-> AnyPlutusScriptVersion
50+
-> AnySLanguage
5151
-> ScriptDataOrFile
5252
-> ExecutionUnits
5353
-> PolicyId

cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Type.hs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
module Cardano.CLI.EraBased.Script.Proposal.Type
66
( PlutusRefScriptCliArgs (..)
7-
, ProposalScriptWitness (..)
87
, createSimpleOrPlutusScriptFromCliArgs
98
, createPlutusReferenceScriptFromCliArgs
109
)
@@ -15,11 +14,7 @@ import Cardano.Api.Experimental
1514
import Cardano.Api.Experimental qualified as Exp
1615

1716
import Cardano.CLI.EraBased.Script.Type
18-
import Cardano.CLI.Type.Common (ScriptDataOrFile)
19-
20-
newtype ProposalScriptWitness era
21-
= ProposalScriptWitness {pswScriptWitness :: ScriptWitness WitCtxStake era}
22-
deriving Show
17+
import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile)
2318

2419
createSimpleOrPlutusScriptFromCliArgs
2520
:: File ScriptInAnyLang In
@@ -32,10 +27,10 @@ createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing =
3227

3328
createPlutusReferenceScriptFromCliArgs
3429
:: TxIn
35-
-> AnyPlutusScriptVersion
30+
-> AnySLanguage
3631
-> ScriptDataOrFile
3732
-> ExecutionUnits
3833
-> ScriptRequirements ProposalItem
39-
createPlutusReferenceScriptFromCliArgs txIn version redeemer execUnits =
34+
createPlutusReferenceScriptFromCliArgs txIn anySLang redeemer execUnits =
4035
PlutusReferenceScript $
41-
PlutusRefScriptCliArgs txIn version Exp.NoScriptDatumAllowed NoPolicyId redeemer execUnits
36+
PlutusRefScriptCliArgs txIn anySLang Exp.NoScriptDatumAllowed NoPolicyId redeemer execUnits

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

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{-# LANGUAGE FlexibleContexts #-}
22
{-# LANGUAGE GADTs #-}
33
{-# LANGUAGE RankNTypes #-}
4+
{-# LANGUAGE ScopedTypeVariables #-}
45

56
module Cardano.CLI.EraBased.Script.Read.Common
67
( -- * Plutus Script Related
@@ -12,12 +13,14 @@ module Cardano.CLI.EraBased.Script.Read.Common
1213
where
1314

1415
import Cardano.Api as Api
16+
import Cardano.Api.Experimental (obtainCommonConstraints)
17+
import Cardano.Api.Experimental qualified as Exp
1518

1619
import Cardano.CLI.Compatible.Exception
1720
import Cardano.CLI.Read (readFileCli)
1821
import Cardano.CLI.Type.Common
1922
import Cardano.CLI.Type.Error.ScriptDataError
20-
import Cardano.CLI.Type.Error.ScriptDecodeError
23+
import Cardano.Ledger.Core qualified as L
2124

2225
import Prelude
2326

@@ -26,32 +29,26 @@ import Data.Bifunctor
2629
import Data.ByteString qualified as BS
2730
import Data.ByteString.Lazy.Char8 qualified as LBS
2831

29-
deserialiseSimpleScript
30-
:: BS.ByteString
31-
-> Either ScriptDecodeError (Script SimpleScript')
32-
deserialiseSimpleScript bs =
32+
-- TODO: Update to handle hex script bytes directly as well!
33+
readFileSimpleScript
34+
:: forall era e
35+
. FilePath
36+
-> Exp.Era era
37+
-> CIO e (Exp.SimpleScript (Exp.LedgerEra era))
38+
readFileSimpleScript file era = do
39+
bs <- readFileCli file
3340
case deserialiseFromJSON bs of
34-
Left _ ->
41+
Left _ -> do
3542
-- In addition to the TextEnvelope format, we also try to
36-
-- deserialize the JSON representation of SimpleScripts.
37-
case Aeson.eitherDecodeStrict' bs of
38-
Left err -> Left (ScriptDecodeSimpleScriptError $ JsonDecodeError err)
39-
Right script -> Right $ SimpleScript script
40-
Right te ->
41-
case deserialiseFromTextEnvelopeAnyOf [teType'] te of
42-
Left err -> Left (ScriptDecodeTextEnvelopeError err)
43-
Right script -> Right script
44-
where
45-
teType' :: FromSomeType HasTextEnvelope (Script SimpleScript')
46-
teType' = FromSomeType (AsScript AsSimpleScript) id
47-
48-
readFileSimpleScript
49-
:: FilePath
50-
-> CIO e (Script SimpleScript')
51-
readFileSimpleScript file = do
52-
scriptBytes <- readFileCli file
53-
fromEitherCli $
54-
deserialiseSimpleScript scriptBytes
43+
-- deserialize the JSON representation of SimpleScripts..
44+
script :: SimpleScript <- fromEitherCli $ Aeson.eitherDecodeStrict' bs
45+
let s :: L.NativeScript (Exp.LedgerEra era) = obtainCommonConstraints era $ toAllegraTimelock script
46+
return $ obtainCommonConstraints (era :: Exp.Era era) $ Exp.SimpleScript s
47+
Right te -> do
48+
let scriptBs = teRawCBOR te
49+
obtainCommonConstraints era $
50+
fromEitherCli $
51+
Exp.deserialiseSimpleScript scriptBs
5552

5653
readScriptDataOrFile
5754
:: MonadIO m

0 commit comments

Comments
 (0)