Add validator sets RPC functions necessary for the coordinator

This commit is contained in:
Luke Parker
2025-11-16 17:27:58 -05:00
parent 0ea16f9e01
commit fa0ed4b180
6 changed files with 219 additions and 8 deletions

View File

@@ -1,6 +1,11 @@
use sp_core::sr25519::Public;
use serai_abi::primitives::{crypto::SignedEmbeddedEllipticCurveKeys, network_id::*};
use serai_abi::primitives::{
crypto::{
EmbeddedEllipticCurveKeys as EmbeddedEllipticCurveKeysStruct, SignedEmbeddedEllipticCurveKeys,
},
network_id::*,
};
use frame_support::storage::StorageDoubleMap;
@@ -11,8 +16,8 @@ pub(crate) trait EmbeddedEllipticCurveKeysStorage {
type EmbeddedEllipticCurveKeys: StorageDoubleMap<
ExternalNetworkId,
Public,
serai_abi::primitives::crypto::EmbeddedEllipticCurveKeys,
Query = Option<serai_abi::primitives::crypto::EmbeddedEllipticCurveKeys>,
EmbeddedEllipticCurveKeysStruct,
Query = Option<EmbeddedEllipticCurveKeysStruct>,
>;
}
@@ -23,6 +28,13 @@ pub(crate) trait EmbeddedEllipticCurveKeys {
validator: Public,
keys: SignedEmbeddedEllipticCurveKeys,
) -> Result<(), ()>;
/// Get a validator's embedded elliptic curve keys, for an external network.
fn embedded_elliptic_curve_keys(
validator: Public,
network: ExternalNetworkId,
) -> Option<EmbeddedEllipticCurveKeysStruct>;
/// Check if a validator still needs to set embedded elliptic curve keys.
fn still_needs_to_set_embedded_elliptic_curve_keys(network: NetworkId, validator: Public)
-> bool;
@@ -39,6 +51,14 @@ impl<S: EmbeddedEllipticCurveKeysStorage> EmbeddedEllipticCurveKeys for S {
Ok(())
}
/// Get a validator's embedded elliptic curve keys, for an external network.
fn embedded_elliptic_curve_keys(
validator: Public,
network: ExternalNetworkId,
) -> Option<EmbeddedEllipticCurveKeysStruct> {
S::EmbeddedEllipticCurveKeys::get(network, validator)
}
/// Check if a validator still needs to set embedded elliptic curve keys.
fn still_needs_to_set_embedded_elliptic_curve_keys(
network: NetworkId,

View File

@@ -32,7 +32,10 @@ mod pallet {
use serai_abi::{
primitives::{
crypto::{SignedEmbeddedEllipticCurveKeys, ExternalKey, KeyPair, Signature},
crypto::{
EmbeddedEllipticCurveKeys as EmbeddedEllipticCurveKeysStruct,
SignedEmbeddedEllipticCurveKeys, ExternalKey, KeyPair, Signature,
},
network_id::*,
coin::*,
balance::*,
@@ -315,6 +318,19 @@ mod pallet {
Abstractions::<T>::external_key(set)
}
pub fn pending_slash_report(network: ExternalNetworkId) -> bool {
Abstractions::<T>::waiting_for_slash_report(network).is_some()
}
pub fn embedded_elliptic_curve_keys(
validator: Public,
network: ExternalNetworkId,
) -> Option<EmbeddedEllipticCurveKeysStruct> {
<Abstractions<T> as crate::EmbeddedEllipticCurveKeys>::embedded_elliptic_curve_keys(
validator, network,
)
}
/* TODO
pub fn distribute_block_rewards(
network: NetworkId,