mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 12:19:24 +00:00
Fixes to the validator sets RPC
This commit is contained in:
@@ -6,7 +6,7 @@ license = "MIT"
|
|||||||
repository = "https://github.com/serai-dex/serai/tree/develop/networks/bitcoin"
|
repository = "https://github.com/serai-dex/serai/tree/develop/networks/bitcoin"
|
||||||
authors = ["Luke Parker <lukeparker5132@gmail.com>", "Vrx <vrx00@proton.me>"]
|
authors = ["Luke Parker <lukeparker5132@gmail.com>", "Vrx <vrx00@proton.me>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version = "1.85"
|
rust-version = "1.89"
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
all-features = true
|
all-features = true
|
||||||
|
|||||||
@@ -155,6 +155,7 @@ impl Rpc {
|
|||||||
Err(RpcError::RequestError(Error { code, message }))
|
Err(RpcError::RequestError(Error { code, message }))
|
||||||
}
|
}
|
||||||
// `invalidateblock` yields this edge case
|
// `invalidateblock` yields this edge case
|
||||||
|
// TODO: https://github.com/core-json/core-json/issues/18
|
||||||
RpcResponse { result: None, error: None } => {
|
RpcResponse { result: None, error: None } => {
|
||||||
if core::any::TypeId::of::<Response>() == core::any::TypeId::of::<()>() {
|
if core::any::TypeId::of::<Response>() == core::any::TypeId::of::<()>() {
|
||||||
Ok(Default::default())
|
Ok(Default::default())
|
||||||
|
|||||||
@@ -109,10 +109,10 @@ impl Serai {
|
|||||||
Response { result: None, error: Some(error) } => {
|
Response { result: None, error: Some(error) } => {
|
||||||
Err(RpcError::ErrorInResponse(error.message))
|
Err(RpcError::ErrorInResponse(error.message))
|
||||||
}
|
}
|
||||||
Response { result: Some(_), error: Some(_) } | Response { result: None, error: None } => {
|
// TODO: https://github.com/core-json/core-json/issues/18
|
||||||
Err(RpcError::InvalidNode(
|
Response { result: None, error: None } => Ok(Default::default()),
|
||||||
"node didn't exclusively provide either `result` or `error`".to_string(),
|
Response { result: Some(_), error: Some(_) } => {
|
||||||
))
|
Err(RpcError::InvalidNode("node didn't provided both `result` and `error`".to_string()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ impl<'a> ValidatorSets<'a> {
|
|||||||
.call::<Option<String>>(
|
.call::<Option<String>>(
|
||||||
"validator-sets/keys",
|
"validator-sets/keys",
|
||||||
&format!(
|
&format!(
|
||||||
r#", "set": {{ "network": {}, "session": {} }} "#,
|
r#", "network": {}, "session": {} "#,
|
||||||
rpc_network(set.network)?,
|
rpc_network(set.network)?,
|
||||||
set.session.0
|
set.session.0
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -131,14 +131,22 @@ async fn validator_sets() {
|
|||||||
serai.as_of(serai.block_by_number(0).await.unwrap().header.hash()).await.unwrap();
|
serai.as_of(serai.block_by_number(0).await.unwrap().header.hash()).await.unwrap();
|
||||||
let serai = serai.validator_sets();
|
let serai = serai.validator_sets();
|
||||||
for network in NetworkId::all() {
|
for network in NetworkId::all() {
|
||||||
|
match network {
|
||||||
|
NetworkId::Serai => {
|
||||||
assert_eq!(serai.current_session(network).await.unwrap(), Some(Session(0)));
|
assert_eq!(serai.current_session(network).await.unwrap(), Some(Session(0)));
|
||||||
assert_eq!(serai.current_stake(network).await.unwrap(), Some(Amount(0)));
|
assert_eq!(serai.current_stake(network).await.unwrap(), Some(Amount(0)));
|
||||||
match network {
|
}
|
||||||
NetworkId::Serai => {}
|
NetworkId::External(external) => {
|
||||||
NetworkId::External(network) => assert_eq!(
|
assert!(serai.current_session(network).await.unwrap().is_none());
|
||||||
serai.keys(ExternalValidatorSet { network, session: Session(0) }).await.unwrap(),
|
assert!(serai.current_stake(network).await.unwrap().is_none());
|
||||||
|
assert_eq!(
|
||||||
|
serai
|
||||||
|
.keys(ExternalValidatorSet { network: external, session: Session(0) })
|
||||||
|
.await
|
||||||
|
.unwrap(),
|
||||||
None
|
None
|
||||||
),
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ pub(crate) fn module<
|
|||||||
let Ok(key_pair) = client.runtime_api().keys(block_hash, set) else {
|
let Ok(key_pair) = client.runtime_api().keys(block_hash, set) else {
|
||||||
Err(Error::Internal("couldn't fetch the keys for the requested validator set"))?
|
Err(Error::Internal("couldn't fetch the keys for the requested validator set"))?
|
||||||
};
|
};
|
||||||
Ok(hex::encode(borsh::to_vec(&key_pair).unwrap()))
|
Ok(key_pair.map(|key_pair| hex::encode(borsh::to_vec(&key_pair).unwrap())))
|
||||||
});
|
});
|
||||||
|
|
||||||
module
|
module
|
||||||
|
|||||||
Reference in New Issue
Block a user