Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ repository cardano-haskell-packages
-- See CONTRIBUTING for information about these, including some Nix commands
-- you need to run if you change them
index-state:
, hackage.haskell.org 2025-11-05T09:40:54Z
, cardano-haskell-packages 2025-11-24T10:27:41Z
, hackage.haskell.org 2025-12-02T22:23:29Z
, cardano-haskell-packages 2025-12-16T19:04:42Z

packages:
cardano-cli
Expand Down Expand Up @@ -66,3 +66,11 @@ if impl (ghc >= 9.12)
-- IMPORTANT
-- Do NOT add more source-repository-package stanzas here unless they are strictly
-- temporary! Please read the section in CONTRIBUTING about updating dependencies.


source-repository-package
type: git
location: https://github.com/IntersectMBO/cardano-api.git
tag: 39c329a37062f2affa3d11fa0e6c84de4ac06758
--sha256: sha256-JDuxiTh256DrLqZNB2m31deuXr9StoPDUhQL7h5YtOY=
subdir: cardano-api
4 changes: 3 additions & 1 deletion cardano-cli/cardano-cli.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ library
Cardano.CLI.Compatible.Governance.Types
Cardano.CLI.Compatible.Json.Friendly
Cardano.CLI.Compatible.Option
Cardano.CLI.Compatible.Read
Cardano.CLI.Compatible.Run
Cardano.CLI.Compatible.StakeAddress.Command
Cardano.CLI.Compatible.StakeAddress.Option
Expand Down Expand Up @@ -241,7 +242,7 @@ library
binary,
bytestring,
canonical-json,
cardano-api ^>=10.20,
cardano-api ^>=10.21,
cardano-binary,
cardano-crypto,
cardano-crypto-class ^>=2.2.3.2,
Expand Down Expand Up @@ -280,6 +281,7 @@ library
network,
network-uri,
optparse-applicative-fork,
ordered-containers,
ouroboros-consensus,
ouroboros-consensus-cardano,
prettyprinter,
Expand Down
1 change: 0 additions & 1 deletion cardano-cli/src/Cardano/CLI/Byron/Genesis.hs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ import Data.ByteString.Lazy qualified as LB
import Data.List qualified as List
import Data.Map.Strict qualified as Map
import Data.String (IsString)
import Data.Text (Text)
import Data.Text.Encoding qualified as Text
import Data.Text.Lazy (toStrict)
import Data.Text.Lazy.Builder (toLazyText)
Expand Down
1 change: 0 additions & 1 deletion cardano-cli/src/Cardano/CLI/Byron/Key.hs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import Control.Exception (Exception (..))
import Data.ByteString qualified as SB
import Data.ByteString.UTF8 qualified as UTF8
import Data.String (IsString, fromString)
import Data.Text (Text)
import Data.Text qualified as T
import Formatting (build, sformat, (%))

Expand Down
1 change: 0 additions & 1 deletion cardano-cli/src/Cardano/CLI/Byron/Parser.hs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ import Data.ByteString.Char8 qualified as BSC
import Data.ByteString.Lazy.Char8 qualified as C8
import Data.Char qualified as Char
import Data.Foldable
import Data.Text (Text)
import Data.Text qualified as Text
import Data.Time (UTCTime)
import Data.Time.Clock.POSIX (posixSecondsToUTCTime)
Expand Down
1 change: 0 additions & 1 deletion cardano-cli/src/Cardano/CLI/Byron/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ import Cardano.Crypto.Hashing qualified as Crypto
import Cardano.Crypto.Signing qualified as Crypto

import Data.ByteString.Char8 qualified as BS
import Data.Text (Text)
import Data.Text.IO qualified as Text
import Data.Text.Lazy.Builder qualified as Builder
import Data.Text.Lazy.IO qualified as TL
Expand Down
1 change: 0 additions & 1 deletion cardano-cli/src/Cardano/CLI/Byron/Tx.hs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ import Data.Map.Strict (Map)
import Data.Map.Strict qualified as Map
import Data.Maybe (fromMaybe, mapMaybe)
import Data.String (IsString)
import Data.Text (Text)
import Data.Text qualified as Text
import Data.Text.IO qualified as Text
import Formatting (sformat, (%))
Expand Down
3 changes: 1 addition & 2 deletions cardano-cli/src/Cardano/CLI/Compatible/Command.hs
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,9 @@ import Cardano.CLI.Compatible.StakePool.Command
import Cardano.CLI.Compatible.Transaction.Command

import Data.Text
import Data.Typeable (Typeable)

data AnyCompatibleCommand where
AnyCompatibleCommand :: Typeable era => CompatibleCommand era -> AnyCompatibleCommand
AnyCompatibleCommand :: CompatibleCommand era -> AnyCompatibleCommand

renderAnyCompatibleCommand :: AnyCompatibleCommand -> Text
renderAnyCompatibleCommand = \case
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ import Cardano.CLI.Compatible.Governance.Types
import Cardano.CLI.EraBased.Governance.Option
import Cardano.CLI.Type.Key (VerificationKeyOrHashOrFile)

import Data.Text

-- TODO: After QA confirmms that the new compatibility commands meet their needs
-- we can remove all remaining legacy commands. We can also remove/move the exising
-- byron era commands under the new compatiblilty commands.
Expand Down
112 changes: 112 additions & 0 deletions cardano-cli/src/Cardano/CLI/Compatible/Read.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}

module Cardano.CLI.Compatible.Read
( AnyPlutusScript (..)
, readFilePlutusScript
, readFileSimpleScript
)
where

import Cardano.Api as Api

import Cardano.CLI.Compatible.Exception
import Cardano.CLI.Read (readFileCli)
import Cardano.CLI.Type.Error.ScriptDecodeError
import Prelude

import Data.Aeson qualified as Aeson
import Data.ByteString qualified as BS

import Cardano.CLI.Type.Error.PlutusScriptDecodeError

import Data.Bifunctor

import Data.Text qualified as Text


readFileSimpleScript
:: FilePath
-> CIO e (Script SimpleScript')
readFileSimpleScript file = do
scriptBytes <- readFileCli file
fromEitherCli $
deserialiseSimpleScript scriptBytes


deserialiseSimpleScript
:: BS.ByteString
-> Either ScriptDecodeError (Script SimpleScript')
deserialiseSimpleScript bs =
case deserialiseFromJSON bs of
Left _ ->
-- In addition to the TextEnvelope format, we also try to
-- deserialize the JSON representation of SimpleScripts.
case Aeson.eitherDecodeStrict' bs of
Left err -> Left (ScriptDecodeSimpleScriptError $ JsonDecodeError err)
Right script -> Right $ SimpleScript script
Right te ->
case deserialiseFromTextEnvelopeAnyOf [teType'] te of
Left err -> Left (ScriptDecodeTextEnvelopeError err)
Right script -> Right script
where
teType' :: FromSomeType HasTextEnvelope (Script SimpleScript')
teType' = FromSomeType (AsScript AsSimpleScript) id



data AnyPlutusScript where
AnyPlutusScript
:: IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> PlutusScript lang -> AnyPlutusScript

readFilePlutusScript
:: FilePath
-> CIO e AnyPlutusScript
readFilePlutusScript plutusScriptFp = do
bs <-
readFileCli plutusScriptFp
fromEitherCli $ deserialisePlutusScript bs

deserialisePlutusScript
:: BS.ByteString
-> Either PlutusScriptDecodeError AnyPlutusScript
deserialisePlutusScript bs = do
te <- first PlutusScriptJsonDecodeError $ deserialiseFromJSON bs
case teType te of
TextEnvelopeType s -> case s of
sVer@"PlutusScriptV1" -> deserialiseAnyPlutusScriptVersion sVer PlutusScriptV1 te
sVer@"PlutusScriptV2" -> deserialiseAnyPlutusScriptVersion sVer PlutusScriptV2 te
sVer@"PlutusScriptV3" -> deserialiseAnyPlutusScriptVersion sVer PlutusScriptV3 te
unknownScriptVersion ->
Left . PlutusScriptDecodeErrorUnknownVersion $ Text.pack unknownScriptVersion
where
deserialiseAnyPlutusScriptVersion
:: IsPlutusScriptLanguage lang
=> String
-> PlutusScriptVersion lang
-> TextEnvelope
-> Either PlutusScriptDecodeError AnyPlutusScript
deserialiseAnyPlutusScriptVersion v lang tEnv =
if v == show lang
then
first PlutusScriptDecodeTextEnvelopeError $
deserialiseFromTextEnvelopeAnyOf [teTypes (AnyPlutusScriptVersion lang)] tEnv
else Left $ PlutusScriptDecodeErrorVersionMismatch (Text.pack v) (AnyPlutusScriptVersion lang)

teTypes :: AnyPlutusScriptVersion -> FromSomeType HasTextEnvelope AnyPlutusScript
teTypes =
\case
AnyPlutusScriptVersion PlutusScriptV1 ->
FromSomeType (AsPlutusScript AsPlutusScriptV1) (AnyPlutusScript PlutusScriptV1)
AnyPlutusScriptVersion PlutusScriptV2 ->
FromSomeType (AsPlutusScript AsPlutusScriptV2) (AnyPlutusScript PlutusScriptV2)
AnyPlutusScriptVersion PlutusScriptV3 ->
FromSomeType (AsPlutusScript AsPlutusScriptV3) (AnyPlutusScript PlutusScriptV3)
AnyPlutusScriptVersion PlutusScriptV4 ->
FromSomeType (AsPlutusScript AsPlutusScriptV4) (AnyPlutusScript PlutusScriptV4)
2 changes: 0 additions & 2 deletions cardano-cli/src/Cardano/CLI/Compatible/StakePool/Command.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ import Cardano.CLI.Type.Key

import Prelude

import Data.Text (Text)

newtype CompatibleStakePoolCmds era
= CompatibleStakePoolRegistrationCertificateCmd
(CompatibleStakePoolRegistrationCertificateCmdArgs era)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ import Cardano.CLI.EraBased.Script.Type
import Cardano.CLI.Type.Common
import Cardano.CLI.Type.Governance

import Data.Text (Text)

-- TODO: After QA confirmms that the new compatibility commands meet their needs
-- we can remove all remaining legacy commands. We can also remove/move the exising
-- byron era commands under the new compatiblilty commands.
Expand Down
Loading
Loading