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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 13 additions & 0 deletions cardano-cli/src/Cardano/CLI/EraBased/Query/Command.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ module Cardano.CLI.EraBased.Query.Command
, QueryLedgerPeerSnapshotCmdArgs (..)
, QueryStakePoolDefaultVoteCmdArgs (..)
, QueryEraHistoryCmdArgs (..)
, QueryGovActionStatusCmdArgs (..)
, renderQueryCmds
, IncludeStake (..)
, CliLedgerPeers (..)
Expand Down Expand Up @@ -79,6 +80,7 @@ data QueryCmds era
| QueryLedgerPeerSnapshotCmd !QueryLedgerPeerSnapshotCmdArgs
| QueryStakePoolDefaultVoteCmd !(QueryStakePoolDefaultVoteCmdArgs era)
| QueryEraHistoryCmd !QueryEraHistoryCmdArgs
| QueryGovActionStatusCmd !(QueryGovActionStatusCmdArgs era)
deriving (Generic, Show)

-- | Fields that are common to most queries
Expand Down Expand Up @@ -294,6 +296,15 @@ data QueryEraHistoryCmdArgs = QueryEraHistoryCmdArgs
}
deriving (Generic, Show)

data QueryGovActionStatusCmdArgs era = QueryGovActionStatusCmdArgs
{ eon :: !(ConwayEraOnwards era)
, commons :: !QueryCommons
, govActionId :: !L.GovActionId
, outputFormat :: !(Vary [FormatJson, FormatYaml])
, mOutFile :: !(Maybe (File () Out))
}
deriving Show

renderQueryCmds :: QueryCmds era -> Text
renderQueryCmds = \case
QueryLeadershipScheduleCmd{} ->
Expand Down Expand Up @@ -352,6 +363,8 @@ renderQueryCmds = \case
"query stake-pool-default-vote"
QueryEraHistoryCmd{} ->
"query era-history"
QueryGovActionStatusCmd{} ->
"query gov-action-status"

renderTxMempoolQuery :: TxMempoolQuery -> Text
renderTxMempoolQuery = \case
Expand Down
46 changes: 46 additions & 0 deletions cardano-cli/src/Cardano/CLI/EraBased/Query/Option.hs
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,21 @@ where
import Cardano.Api hiding (QueryInShelleyBasedEra (..))
import Cardano.Api qualified as MemberStatus (MemberStatus (..))
import Cardano.Api.Experimental
import Cardano.Api.Ledger qualified as L

import Cardano.CLI.Environment (EnvCli (..))
import Cardano.CLI.EraBased.Common.Option
import Cardano.CLI.EraBased.Query.Command
import Cardano.CLI.Option.Flag
import Cardano.CLI.Parser
import Cardano.CLI.Read
import Cardano.CLI.Read.GovernanceActionId (readGoveranceActionIdHexText)
import Cardano.CLI.Type.Common
import Cardano.CLI.Type.Key

import Data.Foldable
import Data.Function
import Data.Text qualified as Text
import GHC.Exts (IsList (..))
import Options.Applicative hiding (help, str)
import Options.Applicative qualified as Opt
Expand Down Expand Up @@ -224,6 +227,7 @@ pQueryCmds envCli =
, pQueryDRepStakeDistributionCmd envCli
, Just $ pQueryEraHistoryCmd envCli
, pQueryFuturePParamsCmd envCli
, pQueryGovActionStatusCmd envCli
, pQueryGetGovStateCmd envCli
, Just
. Opt.hsubparser
Expand Down Expand Up @@ -952,6 +956,48 @@ pQueryEraHistoryCmd envCli =
<$> pQueryCommons @era envCli
<*> pMaybeOutputFile

pQueryGovActionStatusCmd
:: forall era
. IsEra era
=> EnvCli
-> Maybe (Parser (QueryCmds era))
pQueryGovActionStatusCmd envCli = do
pure
. Opt.hsubparser
. commandWithMetavar "gov-action-status"
. Opt.info (QueryGovActionStatusCmd <$> pQueryGovActionStatusCmdArgs useEra)
$ Opt.progDesc "Query the ratification status of a governance action."
where
pQueryGovActionStatusCmdArgs
:: Era era -> Parser (QueryGovActionStatusCmdArgs era)
pQueryGovActionStatusCmdArgs w =
QueryGovActionStatusCmdArgs (convert w)
<$> pQueryCommons @era envCli
<*> pGovActionIdFlag
<*> pFormatQueryOutputFlags "gov-action-status" [flagFormatJson & setDefault, flagFormatYaml]
<*> pMaybeOutputFile

pGovActionIdFlag :: Parser L.GovActionId
pGovActionIdFlag =
Opt.option readGovActionId $
mconcat
[ Opt.long "gov-action-id"
, Opt.metavar "GOV-ACTION-ID"
, Opt.help "Governance action ID (bech32 gov_action1... or txid#index)."
]

readGovActionId :: Opt.ReadM L.GovActionId
readGovActionId = do
s <- Opt.str
let t = Text.pack s
if "gov_action1" `Text.isPrefixOf` t
then case deserialiseFromBech32Cip129 t of
Left err -> Opt.readerError (show err)
Right gaid -> pure gaid
else case readGoveranceActionIdHexText t of
Left err -> Opt.readerError err
Right gaid -> pure gaid

pFormatQueryOutputFlags
:: String
-> [Flag (Vary fs)]
Expand Down
Loading
Loading