Skip to content

Commit dc105a5

Browse files
committed
Add support for querying multiple stake pool.
1 parent 535f703 commit dc105a5

File tree

5 files changed

+24
-24
lines changed

5 files changed

+24
-24
lines changed

cardano-api/src/Cardano/Api/Orphans.hs

+11-11
Original file line numberDiff line numberDiff line change
@@ -686,27 +686,27 @@ instance Crypto.Crypto crypto => ToJSON (VMap VB VP (Shelley.Credential 'Shelley
686686

687687
-----
688688

689-
instance ToJSON (Consensus.StakeSnapshots crypto) where
689+
instance Crypto.Crypto crypto => ToJSON (Consensus.StakeSnapshots crypto) where
690690
toJSON = object . stakeSnapshotsToPair
691691
toEncoding = pairs . mconcat . stakeSnapshotsToPair
692692

693-
stakeSnapshotsToPair :: Aeson.KeyValue a => Consensus.StakeSnapshots crypto -> [a]
693+
stakeSnapshotsToPair :: (Aeson.KeyValue a, Crypto.Crypto crypto) => Consensus.StakeSnapshots crypto -> [a]
694694
stakeSnapshotsToPair Consensus.StakeSnapshots
695695
{ Consensus.ssStakeSnapshots
696696
, Consensus.ssMarkTotal
697697
, Consensus.ssSetTotal
698698
, Consensus.ssGoTotal
699-
} = mconcat
700-
-- Only output the first pool in order to preserve backwards compatibility of the output
701-
-- format. The output format will have to change to support multiple pools when that
702-
-- functionality is added.
703-
[ take 1 (Map.elems ssStakeSnapshots) >>= stakeSnapshotToPair
704-
, [ "activeStakeMark" .= ssMarkTotal
705-
, "activeStakeSet" .= ssSetTotal
706-
, "activeStakeGo" .= ssGoTotal
707-
]
699+
} =
700+
[ "pools" .= ssStakeSnapshots
701+
, "activeStakeMark" .= ssMarkTotal
702+
, "activeStakeSet" .= ssSetTotal
703+
, "activeStakeGo" .= ssGoTotal
708704
]
709705

706+
instance ToJSON (Consensus.StakeSnapshot crypto) where
707+
toJSON = object . stakeSnapshotToPair
708+
toEncoding = pairs . mconcat . stakeSnapshotToPair
709+
710710
stakeSnapshotToPair :: Aeson.KeyValue a => Consensus.StakeSnapshot crypto -> [a]
711711
stakeSnapshotToPair Consensus.StakeSnapshot
712712
{ Consensus.ssMarkPool

cardano-api/src/Cardano/Api/Query.hs

+3-3
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ data QueryInShelleyBasedEra era result where
250250
-> QueryInShelleyBasedEra era (SerialisedPoolState era)
251251

252252
QueryStakeSnapshot
253-
:: PoolId
253+
:: Maybe (Set PoolId)
254254
-> QueryInShelleyBasedEra era (SerialisedStakeSnapshots era)
255255

256256
deriving instance Show (QueryInShelleyBasedEra era result)
@@ -605,8 +605,8 @@ toConsensusQueryShelleyBased erainmode QueryCurrentEpochState =
605605
toConsensusQueryShelleyBased erainmode (QueryPoolState poolIds) =
606606
Some (consensusQueryInEraInMode erainmode (Consensus.GetCBOR (Consensus.GetPoolState (Set.map unStakePoolKeyHash <$> poolIds))))
607607

608-
toConsensusQueryShelleyBased erainmode (QueryStakeSnapshot poolId) =
609-
Some (consensusQueryInEraInMode erainmode (Consensus.GetCBOR (Consensus.GetStakeSnapshots (Just (Set.singleton (unStakePoolKeyHash poolId))))))
608+
toConsensusQueryShelleyBased erainmode (QueryStakeSnapshot mPoolIds) =
609+
Some (consensusQueryInEraInMode erainmode (Consensus.GetCBOR (Consensus.GetStakeSnapshots (fmap (Set.map unStakePoolKeyHash) mPoolIds))))
610610

611611
consensusQueryInEraInMode
612612
:: forall era mode erablock modeblock result result' xs.

cardano-cli/src/Cardano/CLI/Shelley/Commands.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ data QueryCmd =
365365
| QueryUTxO' AnyConsensusModeParams QueryUTxOFilter NetworkId (Maybe OutputFile)
366366
| QueryDebugLedgerState' AnyConsensusModeParams NetworkId (Maybe OutputFile)
367367
| QueryProtocolState' AnyConsensusModeParams NetworkId (Maybe OutputFile)
368-
| QueryStakeSnapshot' AnyConsensusModeParams NetworkId (Hash StakePoolKey)
368+
| QueryStakeSnapshot' AnyConsensusModeParams NetworkId [Hash StakePoolKey]
369369
| QueryKesPeriodInfo
370370
AnyConsensusModeParams
371371
NetworkId

cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1002,7 +1002,7 @@ pQueryCmd =
10021002
pQueryStakeSnapshot = QueryStakeSnapshot'
10031003
<$> pConsensusModeParams
10041004
<*> pNetworkId
1005-
<*> pStakePoolVerificationKeyHash
1005+
<*> many pStakePoolVerificationKeyHash
10061006

10071007
pQueryPoolState :: Parser QueryCmd
10081008
pQueryPoolState = QueryPoolState'

cardano-cli/src/Cardano/CLI/Shelley/Run/Query.hs

+8-8
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ runQueryCmd cmd =
187187
runQueryStakeAddressInfo consensusModeParams addr network mOutFile
188188
QueryDebugLedgerState' consensusModeParams network mOutFile ->
189189
runQueryLedgerState consensusModeParams network mOutFile
190-
QueryStakeSnapshot' consensusModeParams network poolid ->
191-
runQueryStakeSnapshot consensusModeParams network poolid
190+
QueryStakeSnapshot' consensusModeParams network mPoolIds ->
191+
runQueryStakeSnapshot consensusModeParams network mPoolIds
192192
QueryProtocolState' consensusModeParams network mOutFile ->
193193
runQueryProtocolState consensusModeParams network mOutFile
194194
QueryUTxO' consensusModeParams qFilter networkId mOutFile ->
@@ -625,9 +625,9 @@ runQueryPoolState (AnyConsensusModeParams cModeParams) network poolIds = do
625625
runQueryStakeSnapshot
626626
:: AnyConsensusModeParams
627627
-> NetworkId
628-
-> Hash StakePoolKey
628+
-> [Hash StakePoolKey]
629629
-> ExceptT ShelleyQueryCmdError IO ()
630-
runQueryStakeSnapshot (AnyConsensusModeParams cModeParams) network poolId = do
630+
runQueryStakeSnapshot (AnyConsensusModeParams cModeParams) network mPoolIds = do
631631
SocketPath sockPath <- firstExceptT ShelleyQueryCmdEnvVarSocketErr readEnvSocketPath
632632
let localNodeConnInfo = LocalNodeConnectInfo cModeParams network sockPath
633633

@@ -638,9 +638,9 @@ runQueryStakeSnapshot (AnyConsensusModeParams cModeParams) network poolId = do
638638
eInMode <- toEraInMode era cMode
639639
& hoistMaybe (ShelleyQueryCmdEraConsensusModeMismatch (AnyConsensusMode cMode) anyE)
640640

641-
let qInMode = QueryInEra eInMode . QueryInShelleyBasedEra sbe $ QueryStakeSnapshot poolId
641+
let qInMode = QueryInEra eInMode . QueryInShelleyBasedEra sbe $ QueryStakeSnapshot $ Just $ Set.fromList mPoolIds
642642
result <- executeQuery era cModeParams localNodeConnInfo qInMode
643-
obtainLedgerEraClassConstraints sbe writeStakeSnapshot result
643+
obtainLedgerEraClassConstraints sbe writeStakeSnapshots result
644644

645645

646646
runQueryLedgerState
@@ -789,12 +789,12 @@ writeLedgerState mOutFile qState@(SerialisedDebugLedgerState serLedgerState) =
789789
handleIOExceptT (ShelleyQueryCmdWriteFileError . FileIOError fpath)
790790
$ LBS.writeFile fpath $ unSerialised serLedgerState
791791

792-
writeStakeSnapshot :: forall era ledgerera. ()
792+
writeStakeSnapshots :: forall era ledgerera. ()
793793
=> ShelleyLedgerEra era ~ ledgerera
794794
=> Era.Crypto ledgerera ~ StandardCrypto
795795
=> SerialisedStakeSnapshots era
796796
-> ExceptT ShelleyQueryCmdError IO ()
797-
writeStakeSnapshot qState =
797+
writeStakeSnapshots qState =
798798
case decodeStakeSnapshot qState of
799799
Left err -> left (ShelleyQueryCmdStakeSnapshotDecodeError err)
800800

0 commit comments

Comments
 (0)