pallet_session_validator_management_rpc/
lib.rs

1//! RPC interface for session validator management
2#![deny(missing_docs)]
3use derive_new::new;
4use jsonrpsee::{
5	core::RpcResult,
6	core::async_trait,
7	proc_macros::rpc,
8	types::{ErrorObject, ErrorObjectOwned},
9};
10use sidechain_domain::{McEpochNumber, StakePoolPublicKey};
11use sp_session_validator_management_query::SessionValidatorManagementQueryApi;
12use sp_session_validator_management_query::types::*;
13use std::sync::Arc;
14
15#[rpc(client, server, namespace = "sidechain")]
16pub trait SessionValidatorManagementRpcApi {
17	/// Returns the committee for given sidechain epoch. The order of the list represents the order of slot allocation.
18	#[method(name = "getEpochCommittee")]
19	fn get_epoch_committee(&self, epoch_number: u64) -> RpcResult<GetCommitteeResponse>;
20
21	///
22	/// returns: Last active and valid registration followed by all newer invalid registrations for mc_epoch_number and mc_public_key.
23	/// Regardless of `mc_epoch_number` value, it always uses validation api from the latest sidechain block.
24	///
25	#[method(name = "getRegistrations")]
26	async fn get_registrations(
27		&self,
28		mc_epoch_number: McEpochNumber,
29		#[argument(rename = "mc_public_key")] stake_pool_public_key: StakePoolPublicKey,
30	) -> RpcResult<Vec<CandidateRegistrationEntry>>;
31
32	/// Regardless of `epoch_number` value, all the candidates data validation is done based on the validation api from the latest sidechain block.
33	#[method(name = "getAriadneParameters")]
34	async fn get_ariadne_parameters(
35		&self,
36		epoch_number: McEpochNumber,
37	) -> RpcResult<AriadneParameters>;
38}
39
40#[derive(new)]
41/// Type wrapping RPC API
42pub struct SessionValidatorManagementRpc<T> {
43	query_api: Arc<T>,
44}
45
46#[async_trait]
47impl<T> SessionValidatorManagementRpcApiServer for SessionValidatorManagementRpc<T>
48where
49	T: SessionValidatorManagementQueryApi + Send + Sync + 'static,
50{
51	fn get_epoch_committee(&self, epoch_number: u64) -> RpcResult<GetCommitteeResponse> {
52		self.query_api.get_epoch_committee(epoch_number).map_err(error_object_from_str)
53	}
54
55	async fn get_registrations(
56		&self,
57		mc_epoch_number: McEpochNumber,
58		stake_pool_public_key: StakePoolPublicKey,
59	) -> RpcResult<Vec<CandidateRegistrationEntry>> {
60		self.query_api
61			.get_registrations(mc_epoch_number, stake_pool_public_key)
62			.await
63			.map_err(error_object_from_str)
64	}
65
66	async fn get_ariadne_parameters(
67		&self,
68		epoch_number: McEpochNumber,
69	) -> RpcResult<AriadneParameters> {
70		self.query_api
71			.get_ariadne_parameters(epoch_number)
72			.await
73			.map_err(error_object_from_str)
74	}
75}
76
77fn error_object_from_str(msg: impl Into<String>) -> ErrorObjectOwned {
78	ErrorObject::owned::<u8>(-1, msg, None)
79}