Skip to content

Commit

Permalink
Merge pull request #984 from IntersectMBO/smelc/cl/implement-query-pr…
Browse files Browse the repository at this point in the history
…oposals

Implement command "query proposals"
  • Loading branch information
smelc authored Dec 11, 2024
2 parents e192227 + 54f4a6d commit 3c0af7a
Show file tree
Hide file tree
Showing 9 changed files with 203 additions and 0 deletions.
13 changes: 13 additions & 0 deletions cardano-cli/src/Cardano/CLI/EraBased/Commands/Query.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ module Cardano.CLI.EraBased.Commands.Query
, QueryProtocolParametersCmdArgs (..)
, QueryTipCmdArgs (..)
, QueryStakePoolsCmdArgs (..)
, QueryProposalsCmdArgs (..)
, QueryStakeDistributionCmdArgs (..)
, QueryStakeAddressInfoCmdArgs (..)
, QueryUTxOCmdArgs (..)
Expand All @@ -32,6 +33,7 @@ module Cardano.CLI.EraBased.Commands.Query
)
where

import qualified Cardano.Api.Ledger as L
import qualified Cardano.Api.Network as Consensus
import Cardano.Api.Shelley hiding (QueryInShelleyBasedEra (..))

Expand Down Expand Up @@ -66,6 +68,7 @@ data QueryCmds era
| QuerySPOStakeDistributionCmd !(QuerySPOStakeDistributionCmdArgs era)
| QueryCommitteeMembersStateCmd !(QueryCommitteeMembersStateCmdArgs era)
| QueryTreasuryValueCmd !(QueryTreasuryValueCmdArgs era)
| QueryProposalsCmd !(QueryProposalsCmdArgs era)
deriving (Generic, Show)

-- | Fields that are common to most queries
Expand Down Expand Up @@ -204,6 +207,14 @@ data QueryDRepStateCmdArgs era = QueryDRepStateCmdArgs
}
deriving Show

data QueryProposalsCmdArgs era = QueryProposalsCmdArgs
{ eon :: !(ConwayEraOnwards era)
, commons :: !QueryCommons
, govActionIds :: !(AllOrOnly (L.GovActionId L.StandardCrypto))
, mOutFile :: !(Maybe (File () Out))
}
deriving Show

data QueryDRepStakeDistributionCmdArgs era = QueryDRepStakeDistributionCmdArgs
{ eon :: !(ConwayEraOnwards era)
, commons :: !QueryCommons
Expand Down Expand Up @@ -269,6 +280,8 @@ renderQueryCmds = \case
"query slot-number"
QueryRefScriptSizeCmd{} ->
"query ref-script-size"
QueryProposalsCmd{} ->
"query proposals"
QueryConstitutionCmd{} ->
"constitution"
QueryGovStateCmd{} ->
Expand Down
27 changes: 27 additions & 0 deletions cardano-cli/src/Cardano/CLI/EraBased/Options/Common.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3483,6 +3483,33 @@ pAllOrOnlySPOHashSource = pAll <|> pOnly
, Opt.help "Query for all DReps."
]

pAllOrOnlyGovActionIds
:: ()
=> ConwayEraOnwards era
-> Parser (AllOrOnly (L.GovActionId L.StandardCrypto))
pAllOrOnlyGovActionIds era = pAll <|> pOnly
where
pOnly = Only <$> pGovActionIds era
pAll =
Opt.flag' All $
mconcat
[ Opt.long "all-proposals"
, Opt.help "Query for all governance proposals."
]

pGovActionIds
:: forall era
. ()
=> ConwayEraOnwards era
-> Parser [L.GovActionId L.StandardCrypto]
pGovActionIds era = conwayEraOnwardsConstraints era (some pLedgerGovernanceAction)
where
pLedgerGovernanceAction :: Parser (L.GovActionId L.StandardCrypto)
pLedgerGovernanceAction = uncurry L.GovActionId <$> pairParser

pairParser :: Parser (L.TxId L.StandardCrypto, L.GovActionIx)
pairParser = bimap toShelleyTxId L.GovActionIx <$> pGovernanceActionId

pDRepVerificationKeyHash :: Parser (Hash DRepKey)
pDRepVerificationKeyHash =
Opt.option (rBech32KeyHash AsDRepKey <|> rHexHash AsDRepKey Nothing) $
Expand Down
20 changes: 20 additions & 0 deletions cardano-cli/src/Cardano/CLI/EraBased/Options/Query.hs
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,7 @@ pQueryCmds era envCli =
, pQuerySPOStakeDistributionCmd era envCli
, pQueryGetCommitteeStateCmd era envCli
, pQueryTreasuryValueCmd era envCli
, pQueryProposalsCmd era envCli
]

pQueryProtocolParametersCmd :: EnvCli -> Parser (QueryCmds era)
Expand Down Expand Up @@ -520,6 +521,25 @@ pQueryDRepStakeDistributionCmd era envCli = do
<*> pAllOrOnlyDRepHashSource
<*> pMaybeOutputFile

pQueryProposalsCmd
:: ()
=> ShelleyBasedEra era
-> EnvCli
-> Maybe (Parser (QueryCmds era))
pQueryProposalsCmd era envCli = do
w <- forShelleyBasedEraMaybeEon era
pure $
subParser "proposals" $
Opt.info (QueryProposalsCmd <$> pQueryProposalsCmdArgs w) $
Opt.progDesc "Get the governance proposals."
where
pQueryProposalsCmdArgs :: ConwayEraOnwards era -> Parser (QueryProposalsCmdArgs era)
pQueryProposalsCmdArgs w =
QueryProposalsCmdArgs w
<$> pQueryCommons (convert w) envCli
<*> pAllOrOnlyGovActionIds w
<*> optional pOutputFile

pQuerySPOStakeDistributionCmd
:: ()
=> ShelleyBasedEra era
Expand Down
29 changes: 29 additions & 0 deletions cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ import qualified Data.List as List
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map
import Data.Proxy (Proxy (..))
import qualified Data.Sequence as Seq
import Data.Set (Set)
import qualified Data.Set as Set
import Data.String
Expand Down Expand Up @@ -117,6 +118,7 @@ runQueryCmds = \case
Cmd.QuerySPOStakeDistributionCmd args -> runQuerySPOStakeDistribution args
Cmd.QueryCommitteeMembersStateCmd args -> runQueryCommitteeMembersState args
Cmd.QueryTreasuryValueCmd args -> runQueryTreasuryValue args
Cmd.QueryProposalsCmd args -> runQueryProposals args

runQueryProtocolParametersCmd
:: ()
Expand Down Expand Up @@ -1802,6 +1804,33 @@ runQueryTreasuryValue
writeLazyByteStringFile outFile $
LBS.pack treasuryString

runQueryProposals
:: Cmd.QueryProposalsCmdArgs era
-> ExceptT QueryCmdError IO ()
runQueryProposals
Cmd.QueryProposalsCmdArgs
{ Cmd.eon
, Cmd.commons =
Cmd.QueryCommons
{ Cmd.nodeSocketPath
, Cmd.consensusModeParams
, Cmd.networkId
, Cmd.target
}
, Cmd.govActionIds = govActionIds'
, Cmd.mOutFile
} = conwayEraOnwardsConstraints eon $ do
let localNodeConnInfo = LocalNodeConnectInfo consensusModeParams networkId nodeSocketPath

let govActionIds = case govActionIds' of
All -> []
Only l -> l

govActionStates :: (Seq.Seq (L.GovActionState (ShelleyLedgerEra era))) <-
runQuery localNodeConnInfo target $ queryProposals eon $ Set.fromList govActionIds

writeOutput mOutFile govActionStates

runQuery
:: LocalNodeConnectInfo
-> Consensus.Target ChainPoint
Expand Down
32 changes: 32 additions & 0 deletions cardano-cli/test/cardano-cli-golden/files/golden/help.cli
Original file line number Diff line number Diff line change
Expand Up @@ -7243,6 +7243,7 @@ Usage: cardano-cli conway query
| spo-stake-distribution
| committee-state
| treasury
| proposals
)

Node query commands. Will query the local node whose Unix domain socket is
Expand Down Expand Up @@ -7608,6 +7609,21 @@ Usage: cardano-cli conway query treasury --socket-path SOCKET_PATH

Get the treasury value

Usage: cardano-cli conway query proposals --socket-path SOCKET_PATH
[--cardano-mode
[--epoch-slots SLOTS]]
( --mainnet
| --testnet-magic NATURAL
)
[--volatile-tip | --immutable-tip]
( --all-proposals
| (--governance-action-tx-id TXID
--governance-action-index WORD16)
)
[--out-file FILEPATH]

Get the governance proposals.

Usage: cardano-cli conway stake-address
( key-gen
| key-hash
Expand Down Expand Up @@ -9243,6 +9259,7 @@ Usage: cardano-cli latest query
| spo-stake-distribution
| committee-state
| treasury
| proposals
)

Node query commands. Will query the local node whose Unix domain socket is
Expand Down Expand Up @@ -9608,6 +9625,21 @@ Usage: cardano-cli latest query treasury --socket-path SOCKET_PATH

Get the treasury value

Usage: cardano-cli latest query proposals --socket-path SOCKET_PATH
[--cardano-mode
[--epoch-slots SLOTS]]
( --mainnet
| --testnet-magic NATURAL
)
[--volatile-tip | --immutable-tip]
( --all-proposals
| (--governance-action-tx-id TXID
--governance-action-index WORD16)
)
[--out-file FILEPATH]

Get the governance proposals.

Usage: cardano-cli latest stake-address
( key-gen
| key-hash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Usage: cardano-cli conway query
| spo-stake-distribution
| committee-state
| treasury
| proposals
)

Node query commands. Will query the local node whose Unix domain socket is
Expand Down Expand Up @@ -64,3 +65,4 @@ Available commands:
spo-stake-distribution Get the SPO stake distribution.
committee-state Get the committee state
treasury Get the treasury value
proposals Get the governance proposals.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
Usage: cardano-cli conway query proposals --socket-path SOCKET_PATH
[--cardano-mode
[--epoch-slots SLOTS]]
( --mainnet
| --testnet-magic NATURAL
)
[--volatile-tip | --immutable-tip]
( --all-proposals
| (--governance-action-tx-id TXID
--governance-action-index WORD16)
)
[--out-file FILEPATH]

Get the governance proposals.

Available options:
--socket-path SOCKET_PATH
Path to the node socket. This overrides the
CARDANO_NODE_SOCKET_PATH environment variable. The
argument is optional if CARDANO_NODE_SOCKET_PATH is
defined and mandatory otherwise.
--cardano-mode For talking to a node running in full Cardano mode
(default).
--epoch-slots SLOTS The number of slots per epoch for the Byron era.
(default: 21600)
--mainnet Use the mainnet magic id. This overrides the
CARDANO_NODE_NETWORK_ID environment variable
--testnet-magic NATURAL Specify a testnet magic id. This overrides the
CARDANO_NODE_NETWORK_ID environment variable
--volatile-tip Use the volatile tip as a target. (This is the
default)
--immutable-tip Use the immutable tip as a target.
--all-proposals Query for all governance proposals.
--governance-action-tx-id TXID
Txid of the governance action.
--governance-action-index WORD16
Tx's governance action index.
--out-file FILEPATH The output file.
-h,--help Show this help text
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Usage: cardano-cli latest query
| spo-stake-distribution
| committee-state
| treasury
| proposals
)

Node query commands. Will query the local node whose Unix domain socket is
Expand Down Expand Up @@ -64,3 +65,4 @@ Available commands:
spo-stake-distribution Get the SPO stake distribution.
committee-state Get the committee state
treasury Get the treasury value
proposals Get the governance proposals.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
Usage: cardano-cli latest query proposals --socket-path SOCKET_PATH
[--cardano-mode
[--epoch-slots SLOTS]]
( --mainnet
| --testnet-magic NATURAL
)
[--volatile-tip | --immutable-tip]
( --all-proposals
| (--governance-action-tx-id TXID
--governance-action-index WORD16)
)
[--out-file FILEPATH]

Get the governance proposals.

Available options:
--socket-path SOCKET_PATH
Path to the node socket. This overrides the
CARDANO_NODE_SOCKET_PATH environment variable. The
argument is optional if CARDANO_NODE_SOCKET_PATH is
defined and mandatory otherwise.
--cardano-mode For talking to a node running in full Cardano mode
(default).
--epoch-slots SLOTS The number of slots per epoch for the Byron era.
(default: 21600)
--mainnet Use the mainnet magic id. This overrides the
CARDANO_NODE_NETWORK_ID environment variable
--testnet-magic NATURAL Specify a testnet magic id. This overrides the
CARDANO_NODE_NETWORK_ID environment variable
--volatile-tip Use the volatile tip as a target. (This is the
default)
--immutable-tip Use the immutable tip as a target.
--all-proposals Query for all governance proposals.
--governance-action-tx-id TXID
Txid of the governance action.
--governance-action-index WORD16
Tx's governance action index.
--out-file FILEPATH The output file.
-h,--help Show this help text

0 comments on commit 3c0af7a

Please sign in to comment.