Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
Jimbo4350 committed Jan 31, 2025
1 parent 8605c01 commit 43a5509
Show file tree
Hide file tree
Showing 12 changed files with 173 additions and 177 deletions.
2 changes: 2 additions & 0 deletions cardano-cli/cardano-cli.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,11 @@ library
Cardano.CLI.EraBased.Script.Certificate.Types
Cardano.CLI.EraBased.Script.Mint.Read
Cardano.CLI.EraBased.Script.Mint.Types
Cardano.CLI.EraBased.Script.Read.Common
Cardano.CLI.EraBased.Script.Spend.Read
Cardano.CLI.EraBased.Script.Spend.Types
Cardano.CLI.EraBased.Script.Types
Cardano.CLI.EraBased.Script.Vote.Read
Cardano.CLI.EraBased.Script.Vote.Types
Cardano.CLI.EraBased.Transaction.HashCheck
Cardano.CLI.Helpers
Expand Down
6 changes: 4 additions & 2 deletions cardano-cli/src/Cardano/CLI/Compatible/Transaction.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import Cardano.CLI.EraBased.Run.Transaction
import Cardano.CLI.EraBased.Script.Certificate.Read
import Cardano.CLI.EraBased.Script.Certificate.Types
import Cardano.CLI.EraBased.Script.Types
import Cardano.CLI.EraBased.Script.Vote.Types (CliVoteScriptRequirements,
VoteScriptWitness (..))
import Cardano.CLI.Parser
import Cardano.CLI.Read
import Cardano.CLI.Types.Common
Expand Down Expand Up @@ -182,7 +184,7 @@ data CompatibleTransactionCmds era
[TxOutAnyEra]
!(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile)))
!(Maybe (Featured ConwayEraOnwards era [(ProposalFile In, Maybe (ScriptWitnessFiles WitCtxStake))]))
![(VoteFile In, Maybe (ScriptWitnessFiles WitCtxStake))]
![(VoteFile In, Maybe CliVoteScriptRequirements)]
[WitnessSigningData]
-- ^ Signing keys
(Maybe NetworkId)
Expand Down Expand Up @@ -272,7 +274,7 @@ runCompatibleTransactionCmd
readVotingProceduresFiles w mVotes
votingProcedures <-
firstExceptT CompatibleVoteMergeError . hoistEither $
mkTxVotingProcedures votesAndWits
mkTxVotingProcedures [(v, vswScriptWitness <$> mSwit) | (v, mSwit) <- votesAndWits]
return (prop, VotingProcedures w votingProcedures)
)
sbe
Expand Down
7 changes: 4 additions & 3 deletions cardano-cli/src/Cardano/CLI/EraBased/Run/Governance/Vote.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import qualified Cardano.Api.Ledger as L
import Cardano.Api.Shelley

import qualified Cardano.CLI.EraBased.Commands.Governance.Vote as Cmd
import Cardano.CLI.Read (readSingleVote)
import Cardano.CLI.EraBased.Script.Vote.Read
import Cardano.CLI.Run.Hash (carryHashChecks)
import Cardano.CLI.Types.Common
import Cardano.CLI.Types.Errors.CmdError
Expand Down Expand Up @@ -108,8 +108,9 @@ runGovernanceVoteViewCmd

shelleyBasedEraConstraints sbe $ do
voteProcedures <-
fmap fst . firstExceptT GovernanceVoteCmdReadVoteFileError . newExceptT $
readSingleVote eon (voteFile, Nothing)
fmap fst $
firstExceptT GovernanceVoteCmdReadVoteFileError $
readVoteScriptWitness eon (voteFile, Nothing)
firstExceptT GovernanceVoteCmdWriteError
. newExceptT
. ( case outFormat of
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ import Cardano.Api
import Cardano.Api.Shelley

import Cardano.CLI.EraBased.Script.Certificate.Types
import Cardano.CLI.EraBased.Script.Read.Common
import Cardano.CLI.EraBased.Script.Types
import Cardano.CLI.Read
import Cardano.CLI.Types.Common
import Cardano.CLI.Types.Common (CertificateFile)

import Control.Monad

Expand Down
2 changes: 1 addition & 1 deletion cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import Cardano.Api
import Cardano.Api.Shelley

import Cardano.CLI.EraBased.Script.Mint.Types
import Cardano.CLI.EraBased.Script.Read.Common
import Cardano.CLI.EraBased.Script.Types
import Cardano.CLI.Read

readMintScriptWitness
:: MonadIOTransError (FileError CliScriptWitnessError) t m
Expand Down
1 change: 1 addition & 0 deletions cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ where
import Cardano.Api
import Cardano.Api.Shelley

import Cardano.CLI.EraBased.Script.Read.Common
import Cardano.CLI.EraBased.Script.Spend.Types
import Cardano.CLI.EraBased.Script.Types
import Cardano.CLI.Read
Expand Down
15 changes: 13 additions & 2 deletions cardano-cli/src/Cardano/CLI/EraBased/Script/Types.hs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}

module Cardano.CLI.EraBased.Script.Types
( -- * Errors
CliScriptWitnessError (..)
( AnyPlutusScript (..)

-- * Errors
, CliScriptWitnessError (..)
)
where

Expand All @@ -12,17 +15,25 @@ import Cardano.CLI.Types.Errors.PlutusScriptDecodeError
import Cardano.CLI.Types.Errors.ScriptDataError
import Cardano.CLI.Types.Errors.ScriptDecodeError

-- TODO: Move to cardano-api
data AnyPlutusScript where
AnyPlutusScript
:: IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> PlutusScript lang -> AnyPlutusScript

data CliScriptWitnessError
= SimpleScriptWitnessDecodeError ScriptDecodeError
| TextEnvelopeError TextEnvelopeError
| PlutusScriptWitnessDecodeError PlutusScriptDecodeError
| PlutusScriptWitnessLanguageNotSupportedInEra
AnyPlutusScriptVersion
AnyShelleyBasedEra
| PlutusScriptWitnessRedeemerError ScriptDataError
deriving Show

instance Error CliScriptWitnessError where
prettyError = \case
SimpleScriptWitnessDecodeError err -> prettyError err
TextEnvelopeError err -> prettyError err
PlutusScriptWitnessDecodeError err -> prettyError err
PlutusScriptWitnessLanguageNotSupportedInEra version era ->
"Plutus script version " <> pshow version <> " is not supported in era " <> pshow era
Expand Down
120 changes: 120 additions & 0 deletions cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}

module Cardano.CLI.EraBased.Script.Vote.Read
( readVoteScriptWitness
)
where

import Cardano.Api
import Cardano.Api.Shelley

import Cardano.CLI.EraBased.Script.Read.Common
import Cardano.CLI.EraBased.Script.Types
import Cardano.CLI.EraBased.Script.Vote.Types
import Cardano.CLI.Types.Governance

readVoteScriptWitness
:: MonadIOTransError (FileError CliScriptWitnessError) t m
=> ConwayEraOnwards era
-> (VoteFile In, Maybe CliVoteScriptRequirements)
-> t m (VotingProcedures era, Maybe (VoteScriptWitness era))
readVoteScriptWitness w (voteFp, Nothing) = do
votProceds <-
conwayEraOnwardsConstraints w $
modifyError (fmap TextEnvelopeError) $
hoistIOEither $
readFileTextEnvelope AsVotingProcedures voteFp
return (votProceds, Nothing)
readVoteScriptWitness w (voteFp, Just certScriptReq) = do
let sbe = convert w
votProceds <-
conwayEraOnwardsConstraints w $
modifyError (fmap TextEnvelopeError) $
hoistIOEither $
readFileTextEnvelope AsVotingProcedures voteFp
case certScriptReq of
OnDiskSimpleScript scriptFp -> do
let sFp = unFile scriptFp
s <-
modifyError (fmap SimpleScriptWitnessDecodeError) $
readFileSimpleScript sFp
case s of
SimpleScript ss -> do
return
( votProceds
, Just $
VoteScriptWitness
( SimpleScriptWitness (sbeToSimpleScriptLanguageInEra sbe) $
SScript ss
)
)
OnDiskPlutusScript (OnDiskPlutusScriptCliArgs scriptFp redeemerFile execUnits) -> do
let plutusScriptFp = unFile scriptFp
plutusScript <-
modifyError (fmap PlutusScriptWitnessDecodeError) $
readFilePlutusScript plutusScriptFp
redeemer <-
modifyError (FileError plutusScriptFp . PlutusScriptWitnessRedeemerError) $
readScriptDataOrFile redeemerFile
case plutusScript of
AnyPlutusScript lang script -> do
let pScript = PScript script
sLangSupported <-
modifyError (FileError plutusScriptFp)
$ hoistMaybe
( PlutusScriptWitnessLanguageNotSupportedInEra
(AnyPlutusScriptVersion lang)
(shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe)
)
$ scriptLanguageSupportedInEra sbe
$ PlutusScriptLanguage lang
return
( votProceds
, Just $
VoteScriptWitness $
PlutusScriptWitness
sLangSupported
lang
pScript
NoScriptDatumForStake
redeemer
execUnits
)
OnDiskPlutusRefScript (PlutusRefScriptCliArgs refTxIn anyPlutusScriptVersion redeemerFile execUnits) -> do
case anyPlutusScriptVersion of
AnyPlutusScriptVersion lang -> do
let pScript = PReferenceScript refTxIn
redeemer <-
-- TODO: Implement a new error type to capture this. FileError is not representative of cases
-- where we do not have access to the script.
modifyError
( FileError "Reference script filepath not available"
. PlutusScriptWitnessRedeemerError
)
$ readScriptDataOrFile redeemerFile
sLangSupported <-
-- TODO: Implement a new error type to capture this. FileError is not representative of cases
-- where we do not have access to the script.
modifyError (FileError "Reference script filepath not available")
$ hoistMaybe
( PlutusScriptWitnessLanguageNotSupportedInEra
(AnyPlutusScriptVersion lang)
(shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe)
)
$ scriptLanguageSupportedInEra sbe
$ PlutusScriptLanguage lang

return
( votProceds
, Just $
VoteScriptWitness $
PlutusScriptWitness
sLangSupported
lang
pScript
NoScriptDatumForStake
redeemer
execUnits
)
Loading

0 comments on commit 43a5509

Please sign in to comment.