Skip to content

Commit

Permalink
Adds new query for a snapshot of big ledger peers
Browse files Browse the repository at this point in the history
This change introduces a new query tag and handler
to support retrieval of a snapshot of big ledger peers
from the current tip of a node.
  • Loading branch information
crocodile-dentist authored and palas committed Jul 6, 2024
1 parent 19da63d commit e799c03
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 2 deletions.
10 changes: 10 additions & 0 deletions cardano-api/internal/Cardano/Api/Query.hs
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ import qualified Ouroboros.Consensus.Shelley.Ledger as Consensus
import qualified Ouroboros.Consensus.Shelley.Ledger.Query.Types as Consensus
import Ouroboros.Network.Block (Serialised (..))
import Ouroboros.Network.NodeToClient.Version (NodeToClientVersion (..))
import Ouroboros.Network.PeerSelection.LedgerPeers.Type (LedgerPeerSnapshot)
import Ouroboros.Network.Protocol.LocalStateQuery.Client (Some (..))

-- ----------------------------------------------------------------------------
Expand Down Expand Up @@ -291,6 +292,8 @@ data QueryInShelleyBasedEra era result where
QueryStakeVoteDelegatees
:: Set StakeCredential
-> QueryInShelleyBasedEra era (Map StakeCredential (Ledger.DRep StandardCrypto))
QueryLedgerPeerSnapshot
:: QueryInShelleyBasedEra era (Serialised LedgerPeerSnapshot)

-- | Mapping for queries in Shelley-based eras returning minimal node-to-client protocol versions. More
-- information about queries versioning can be found:
Expand All @@ -309,6 +312,7 @@ instance NodeToClientVersionOf (QueryInShelleyBasedEra era result) where
nodeToClientVersionOf QueryDebugLedgerState = NodeToClientV_9
nodeToClientVersionOf QueryProtocolState = NodeToClientV_9
nodeToClientVersionOf QueryCurrentEpochState = NodeToClientV_9
nodeToClientVersionOf QueryLedgerPeerSnapshot = NodeToClientV_9
-- Babbage >= v13
nodeToClientVersionOf (QueryPoolState _) = NodeToClientV_14
nodeToClientVersionOf (QueryPoolDistribution _) = NodeToClientV_14
Expand Down Expand Up @@ -690,6 +694,8 @@ toConsensusQueryShelleyBased sbe = \case
where
creds' :: Set (Shelley.Credential Shelley.Staking StandardCrypto)
creds' = Set.map toShelleyStakeCredential creds
QueryLedgerPeerSnapshot ->
Some (consensusQueryInEraInMode era (Consensus.GetCBOR Consensus.GetBigLedgerPeerSnapshot))
where
era = toCardanoEra sbe

Expand Down Expand Up @@ -966,6 +972,10 @@ fromConsensusQueryResultShelleyBased sbe sbeQuery q' r' =
Consensus.GetFilteredVoteDelegatees {} ->
Map.mapKeys fromShelleyStakeCredential r'
_ -> fromConsensusQueryResultMismatch
fromConsensusQueryResultShelleyBased _ QueryLedgerPeerSnapshot q' serLedgerPeerSnapshot =
case q' of
Consensus.GetCBOR Consensus.GetBigLedgerPeerSnapshot -> serLedgerPeerSnapshot
_ -> fromConsensusQueryResultMismatch

-- | This should /only/ happen if we messed up the mapping in 'toConsensusQuery'
-- and 'fromConsensusQueryResult' so they are inconsistent with each other.
Expand Down
19 changes: 17 additions & 2 deletions cardano-api/internal/Cardano/Api/Query/Expr.hs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ module Cardano.Api.Query.Expr
, queryStakeSnapshot
, querySystemStart
, queryUtxo
, queryLedgerPeerSnapshot
, L.MemberStatus (..)
, L.CommitteeMembersState (..)
, queryCommitteeMembersState
Expand Down Expand Up @@ -65,6 +66,8 @@ import Data.Map (Map)
import Data.Set (Set)
import qualified Data.Set as S
import Ouroboros.Consensus.HardFork.Combinator.AcrossEras as Consensus
import Ouroboros.Network.Block (Serialised)
import Ouroboros.Network.PeerSelection.LedgerPeers (LedgerPeerSnapshot)

queryChainBlockNo
:: ()
Expand Down Expand Up @@ -129,6 +132,19 @@ queryDebugLedgerState
queryDebugLedgerState sbe =
queryExpr $ QueryInEra $ QueryInShelleyBasedEra sbe QueryDebugLedgerState

queryLedgerPeerSnapshot
:: ()
=> ShelleyBasedEra era
-> LocalStateQueryExpr
block
point
QueryInMode
r
IO
(Either UnsupportedNtcVersionError (Either EraMismatch (Serialised LedgerPeerSnapshot)))
queryLedgerPeerSnapshot sbe =
queryExpr $ QueryInEra $ QueryInShelleyBasedEra sbe QueryLedgerPeerSnapshot

queryEraHistory
:: ()
=> LocalStateQueryExpr block point QueryInMode r IO (Either UnsupportedNtcVersionError EraHistory)
Expand Down Expand Up @@ -300,8 +316,7 @@ queryStakePoolParameters
(Either UnsupportedNtcVersionError (Either EraMismatch (Map PoolId StakePoolParameters)))
queryStakePoolParameters sbe poolIds
| S.null poolIds = pure . pure $ pure mempty
| otherwise =
queryExpr $ QueryInEra $ QueryInShelleyBasedEra sbe $ QueryStakePoolParameters poolIds
| otherwise = queryExpr $ QueryInEra $ QueryInShelleyBasedEra sbe $ QueryStakePoolParameters poolIds

queryStakePools
:: ()
Expand Down
1 change: 1 addition & 0 deletions cardano-api/src/Cardano/Api.hs
Original file line number Diff line number Diff line change
Expand Up @@ -941,6 +941,7 @@ module Cardano.Api
, queryCurrentEpochState
, queryCurrentEra
, queryDebugLedgerState
, queryLedgerPeerSnapshot
, queryEpoch
, queryConstitutionHash
, queryEraHistory
Expand Down

0 comments on commit e799c03

Please sign in to comment.