From f2037b5d6fb93c1c2f908739801e9cf015567a79 Mon Sep 17 00:00:00 2001 From: Carl Hammann Date: Mon, 13 Nov 2023 18:42:29 +0100 Subject: [PATCH] Add vote delegatee to 'stake-address-info' output --- .../src/Cardano/CLI/EraBased/Run/Query.hs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs b/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs index 4e484b2a08..5fc8edd29f 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs @@ -40,6 +40,7 @@ module Cardano.CLI.EraBased.Run.Query import Cardano.Api hiding (QueryInShelleyBasedEra (..)) import qualified Cardano.Api as Api import Cardano.Api.Byron hiding (QueryInShelleyBasedEra (..)) +import qualified Cardano.Api.Ledger as L import qualified Cardano.Api.Ledger as Ledger import Cardano.Api.Shelley hiding (QueryInShelleyBasedEra (..)) @@ -820,11 +821,16 @@ runQueryStakeAddressInfoCmd & onLeft (left . QueryCmdUnsupportedNtcVersion) & onLeft (left . QueryCmdLocalStateQueryError . EraMismatchError) + stakeVoteDelegatees <- lift (queryStakeVoteDelegatees sbe stakeAddr) + & onLeft (left . QueryCmdUnsupportedNtcVersion) + & onLeft (left . QueryCmdLocalStateQueryError . EraMismatchError) + return $ do writeStakeAddressInfo mOutFile (DelegationsAndRewards (stakeRewardAccountBalances, stakePools)) (Map.mapKeys (makeStakeAddress networkId) stakeDelegDeposits) + (Map.mapKeys (makeStakeAddress networkId) stakeVoteDelegatees) ) & onLeft (left . QueryCmdAcquireFailure) & onLeft left @@ -835,37 +841,42 @@ writeStakeAddressInfo :: Maybe (File () Out) -> DelegationsAndRewards -> Map StakeAddress Lovelace -- ^ deposits + -> Map StakeAddress (L.DRep L.StandardCrypto) -- ^ vote delegatees -> ExceptT QueryCmdError IO () writeStakeAddressInfo mOutFile (DelegationsAndRewards (stakeAccountBalances, stakePools)) - stakeDelegDeposits = + stakeDelegDeposits + voteDelegatees = firstExceptT QueryCmdWriteFileError . newExceptT $ writeLazyByteStringOutput mOutFile (encodePretty jsonInfo) where jsonInfo :: [Aeson.Value] jsonInfo = map - (\(addr, mBalance, mPoolId, mDeposit) -> + (\(addr, mBalance, mPoolId, mDRep, mDeposit) -> Aeson.object [ "address" .= addr , "delegation" .= mPoolId + , "voteDelegation" .= mDRep , "rewardAccountBalance" .= mBalance , "delegationDeposit" .= mDeposit ] ) merged - merged :: [(StakeAddress, Maybe Lovelace, Maybe PoolId, Maybe Lovelace)] + merged :: [(StakeAddress, Maybe Lovelace, Maybe PoolId, Maybe (L.DRep L.StandardCrypto), Maybe Lovelace)] merged = - [ (addr, mBalance, mPoolId, mDeposit) + [ (addr, mBalance, mPoolId, mDRep, mDeposit) | addr <- Set.toList (Set.unions [ Map.keysSet stakeAccountBalances , Map.keysSet stakePools , Map.keysSet stakeDelegDeposits + , Map.keysSet voteDelegatees ]) , let mBalance = Map.lookup addr stakeAccountBalances mPoolId = Map.lookup addr stakePools mDeposit = Map.lookup addr stakeDelegDeposits + mDRep = Map.lookup addr voteDelegatees ] writeLedgerState :: forall era ledgerera.