Skip to content

Commit c4f71da

Browse files
committed
Propagate flat ADT refactoring to consumers
Update Compatible layer, Transaction/Query/Genesis runners, Byron, build config, and golden tests to use the new flat script types.
1 parent 275fa89 commit c4f71da

26 files changed

Lines changed: 378 additions & 339 deletions

File tree

cabal.project

Lines changed: 2 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 2026-02-17T10:15:41Z
17-
, cardano-haskell-packages 2026-03-19T11:07:17Z
16+
, hackage.haskell.org 2026-02-06T20:27:32Z
17+
, cardano-haskell-packages 2026-02-27T19:25:49Z
1818

1919
packages:
2020
cardano-cli

cardano-cli/cardano-cli.cabal

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -242,18 +242,18 @@ library
242242
binary,
243243
bytestring,
244244
canonical-json,
245-
cardano-api ^>=10.25,
245+
cardano-api ^>=10.24,
246246
cardano-binary,
247247
cardano-crypto,
248-
cardano-crypto-class ^>=2.3,
249-
cardano-crypto-wrapper ^>=1.7,
248+
cardano-crypto-class ^>=2.2.3.2,
249+
cardano-crypto-wrapper ^>=1.6,
250250
cardano-data >=1.1,
251251
cardano-git-rev ^>=0.2.2,
252252
cardano-ledger-api,
253253
cardano-ledger-conway,
254254
cardano-ledger-core,
255255
cardano-ledger-dijkstra,
256-
cardano-ping ^>=0.10,
256+
cardano-ping ^>=0.9,
257257
cardano-prelude,
258258
cardano-protocol-tpraos,
259259
cardano-slotting ^>=0.2.0.0,
@@ -282,7 +282,8 @@ library
282282
network-uri,
283283
optparse-applicative-fork,
284284
ordered-containers,
285-
ouroboros-consensus:{cardano, ouroboros-consensus},
285+
ouroboros-consensus,
286+
ouroboros-consensus-cardano,
286287
prettyprinter,
287288
prettyprinter-ansi-terminal,
288289
random,
@@ -442,8 +443,10 @@ test-suite cardano-cli-golden
442443
cardano-cli,
443444
cardano-cli:cardano-cli-test-lib,
444445
cardano-crypto-wrapper,
446+
cardano-ledger-core,
445447
cardano-strict-containers ^>=0.1,
446448
cborg,
449+
containers,
447450
directory,
448451
exceptions,
449452
extra,

cardano-cli/src/Cardano/CLI/Byron/Tx.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import Cardano.Api
2626
import Cardano.Api.Byron qualified as Byron
2727
import Cardano.Api.Consensus qualified as Byron
2828
import Cardano.Api.Ledger qualified as L
29+
import Cardano.Api.Network qualified as Net.Tx
2930

3031
import Cardano.Binary qualified as Binary
3132
import Cardano.CLI.Byron.Key (byronWitnessToVerKey)
@@ -198,12 +199,11 @@ nodeSubmitTx nodeSocketPath network gentx = do
198199
}
199200
res <- liftIO $ submitTxToNodeLocal connctInfo (TxInByronSpecial gentx)
200201
case res of
201-
TxSubmitSuccess -> liftIO $ Text.putStrLn "Transaction successfully submitted."
202-
TxSubmitFail reason ->
202+
Net.Tx.SubmitSuccess -> liftIO $ Text.putStrLn "Transaction successfully submitted."
203+
Net.Tx.SubmitFail reason ->
203204
case reason of
204205
TxValidationErrorInCardanoMode err -> left . ByronTxSubmitError . Text.pack $ show err
205206
TxValidationEraMismatch mismatchErr -> left $ ByronTxSubmitErrorEraMismatch mismatchErr
206-
TxSubmitError err -> left . ByronTxSubmitError . Text.pack $ show err
207207

208208
return ()
209209

cardano-cli/src/Cardano/CLI/Compatible/Json/Friendly.hs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ getScriptWitnessDetails era tb =
284284
where
285285
aeo = convert era
286286
friendlyRedeemers
287-
:: Ledger.Tx C.TopTx (ShelleyLedgerEra era)
287+
:: Ledger.Tx (ShelleyLedgerEra era)
288288
-> Aeson.Value
289289
friendlyRedeemers tx =
290290
alonzoEraOnwardsConstraints aeo $ do
@@ -293,7 +293,7 @@ getScriptWitnessDetails era tb =
293293
Aeson.Array $ Vector.fromList redeemerList
294294

295295
friendlyRedeemerInfo
296-
:: Ledger.Tx C.TopTx (ShelleyLedgerEra era)
296+
:: Ledger.Tx (ShelleyLedgerEra era)
297297
-> Ledger.PlutusPurpose Ledger.AsIx (ShelleyLedgerEra era)
298298
-> (Ledger.Data (ShelleyLedgerEra era), ExUnits)
299299
-> Aeson.Value
@@ -373,7 +373,7 @@ getScriptWitnessDetails era tb =
373373
addLabelToPurpose Proposing pp = Aeson.object ["submitting a proposal following proposal policy" .= pp]
374374
addLabelToPurpose Guarding _ = error "TODO Dijkstra"
375375

376-
friendlyScriptData :: Ledger.Tx C.TopTx (ShelleyLedgerEra era) -> Aeson.Value
376+
friendlyScriptData :: Ledger.Tx (ShelleyLedgerEra era) -> Aeson.Value
377377
friendlyScriptData tx =
378378
alonzoEraOnwardsConstraints aeo $ do
379379
Aeson.Array $
@@ -386,7 +386,7 @@ getScriptWitnessDetails era tb =
386386
| (scriptHash, scriptData) <- Map.toList $ tx ^. Ledger.witsTxL . Ledger.scriptTxWitsL
387387
]
388388

389-
friendlyDats :: Ledger.Tx C.TopTx (ShelleyLedgerEra era) -> Aeson.Value
389+
friendlyDats :: Ledger.Tx (ShelleyLedgerEra era) -> Aeson.Value
390390
friendlyDats tx =
391391
alonzoEraOnwardsConstraints aeo $
392392
let Ledger.TxDats dats = tx ^. Ledger.witsTxL . Ledger.datsTxWitsL
@@ -633,7 +633,7 @@ renderCertificate sbe (Exp.Certificate c) =
633633

634634
renderDrepCredential
635635
:: ()
636-
=> L.Credential L.DRepRole
636+
=> L.Credential 'L.DRepRole
637637
-> Aeson.Value
638638
renderDrepCredential =
639639
object . \case

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

Lines changed: 48 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,23 @@
88
{-# LANGUAGE TypeFamilies #-}
99

1010
module Cardano.CLI.Compatible.Read
11-
( readFilePlutusScript
11+
( AnyPlutusScript (..)
12+
, readFilePlutusScript
1213
, readFileSimpleScript
1314
)
1415
where
1516

1617
import Cardano.Api as Api
17-
import Cardano.Api.Experimental.Plutus qualified as Exp
1818

1919
import Cardano.CLI.Compatible.Exception
2020
import Cardano.CLI.Read (readFileCli)
21+
import Cardano.CLI.Type.Error.PlutusScriptDecodeError
2122
import Cardano.CLI.Type.Error.ScriptDecodeError
2223

2324
import Prelude
2425

2526
import Data.Aeson qualified as Aeson
27+
import Data.Bifunctor
2628
import Data.ByteString qualified as BS
2729
import Data.Text qualified as Text
2830

@@ -53,21 +55,48 @@ deserialiseSimpleScript bs =
5355
teType' :: FromSomeType HasTextEnvelope (Script SimpleScript')
5456
teType' = FromSomeType (AsScript AsSimpleScript) id
5557

58+
data AnyPlutusScript where
59+
AnyPlutusScript
60+
:: IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> PlutusScript lang -> AnyPlutusScript
61+
5662
readFilePlutusScript
57-
:: forall era e
58-
. ShelleyBasedEra era
59-
-> FilePath
60-
-> CIO e (Exp.AnyPlutusScript (ShelleyLedgerEra era))
61-
readFilePlutusScript sbe plutusScriptFp = do
62-
bs <- readFileCli plutusScriptFp
63-
te <- fromEitherCli $ deserialiseFromJSON bs
64-
let scriptBs = teRawCBOR te
65-
TextEnvelopeType anyScriptType = teType te
66-
case Exp.textToPlutusLanguage (Text.pack anyScriptType) of
67-
Just lang ->
68-
fromEitherCli
69-
( shelleyBasedEraConstraints sbe (Exp.decodeAnyPlutusScript scriptBs lang)
70-
:: Either DecoderError (Exp.AnyPlutusScript (ShelleyLedgerEra era))
71-
)
72-
Nothing ->
73-
throwCliError $ "Unsupported script language: " <> anyScriptType
63+
:: FilePath
64+
-> CIO e AnyPlutusScript
65+
readFilePlutusScript plutusScriptFp = do
66+
bs <-
67+
readFileCli plutusScriptFp
68+
fromEitherCli $ deserialisePlutusScript bs
69+
70+
deserialisePlutusScript
71+
:: BS.ByteString
72+
-> Either PlutusScriptDecodeError AnyPlutusScript
73+
deserialisePlutusScript bs = do
74+
te <- first PlutusScriptJsonDecodeError $ deserialiseFromJSON bs
75+
case teType te of
76+
TextEnvelopeType s -> case s of
77+
"PlutusScriptV1" -> deserialiseAnyPlutusScriptVersion PlutusScriptV1 te
78+
"PlutusScriptV2" -> deserialiseAnyPlutusScriptVersion PlutusScriptV2 te
79+
"PlutusScriptV3" -> deserialiseAnyPlutusScriptVersion PlutusScriptV3 te
80+
unknownScriptVersion ->
81+
Left . PlutusScriptDecodeErrorUnknownVersion $ Text.pack unknownScriptVersion
82+
where
83+
deserialiseAnyPlutusScriptVersion
84+
:: IsPlutusScriptLanguage lang
85+
=> PlutusScriptVersion lang
86+
-> TextEnvelope
87+
-> Either PlutusScriptDecodeError AnyPlutusScript
88+
deserialiseAnyPlutusScriptVersion lang tEnv =
89+
first PlutusScriptDecodeTextEnvelopeError $
90+
deserialiseFromTextEnvelopeAnyOf [teTypes (AnyPlutusScriptVersion lang)] tEnv
91+
92+
teTypes :: AnyPlutusScriptVersion -> FromSomeType HasTextEnvelope AnyPlutusScript
93+
teTypes =
94+
\case
95+
AnyPlutusScriptVersion PlutusScriptV1 ->
96+
FromSomeType (AsPlutusScript AsPlutusScriptV1) (AnyPlutusScript PlutusScriptV1)
97+
AnyPlutusScriptVersion PlutusScriptV2 ->
98+
FromSomeType (AsPlutusScript AsPlutusScriptV2) (AnyPlutusScript PlutusScriptV2)
99+
AnyPlutusScriptVersion PlutusScriptV3 ->
100+
FromSomeType (AsPlutusScript AsPlutusScriptV3) (AnyPlutusScript PlutusScriptV3)
101+
AnyPlutusScriptVersion PlutusScriptV4 ->
102+
FromSomeType (AsPlutusScript AsPlutusScriptV4) (AnyPlutusScript PlutusScriptV4)

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ module Cardano.CLI.Compatible.Transaction.Command
1212
where
1313

1414
import Cardano.Api
15-
import Cardano.Api.Experimental
1615

1716
import Cardano.CLI.EraBased.Script.Type
1817
import Cardano.CLI.Type.Common
@@ -28,15 +27,15 @@ data CompatibleTransactionCmds era
2827
[TxOutAnyEra]
2928
!(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile)))
3029
!( Maybe
31-
(Featured ConwayEraOnwards era [(ProposalFile In, Maybe (ScriptRequirements ProposalItem))])
30+
(Featured ConwayEraOnwards era [(ProposalFile In, Maybe AnyNonAssetScript)])
3231
)
33-
![(VoteFile In, Maybe (ScriptRequirements VoterItem))]
32+
![(VoteFile In, Maybe AnyNonAssetScript)]
3433
[WitnessSigningData]
3534
-- ^ Signing keys
3635
(Maybe NetworkId)
3736
!Coin
3837
-- ^ Tx fee
39-
![(CertificateFile, Maybe (ScriptRequirements CertItem))]
38+
![(CertificateFile, Maybe AnyNonAssetScript)]
4039
-- ^ stake registering certs
4140
!(File () Out)
4241

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ module Cardano.CLI.Compatible.Transaction.Option
1111
where
1212

1313
import Cardano.Api
14-
import Cardano.Api.Experimental
1514

1615
import Cardano.CLI.Compatible.Transaction.Command
1716
import Cardano.CLI.Environment
@@ -161,7 +160,7 @@ pRefScriptFp =
161160
pVoteFiles
162161
:: ShelleyBasedEra era
163162
-> BalanceTxExecUnits
164-
-> Parser [(VoteFile In, Maybe (ScriptRequirements VoterItem))]
163+
-> Parser [(VoteFile In, Maybe AnyNonAssetScript)]
165164
pVoteFiles sbe bExUnits =
166165
caseShelleyToBabbageOrConwayEraOnwards
167166
(const $ pure [])

0 commit comments

Comments
 (0)