mirror of
https://github.com/serai-dex/serai.git
synced 2025-01-08 11:59:55 +00:00
9da0eb69c7
It originally wasn't an enum so software which had yet to update before an integration wouldn't error (as now enums are strictly typed). The strict typing is preferable though.
68 lines
2.2 KiB
Rust
68 lines
2.2 KiB
Rust
use rand_core::{RngCore, OsRng};
|
|
|
|
use sp_core::{sr25519::Public, Pair};
|
|
|
|
use serai_client::{
|
|
primitives::{NETWORKS, NetworkId, insecure_pair_from_name},
|
|
validator_sets::{
|
|
primitives::{Session, ValidatorSet},
|
|
ValidatorSetsEvent,
|
|
},
|
|
Serai,
|
|
};
|
|
|
|
mod common;
|
|
use common::{serai, validator_sets::vote_in_keys};
|
|
|
|
serai_test!(
|
|
async fn vote_keys() {
|
|
let network = NetworkId::Bitcoin;
|
|
let set = ValidatorSet { session: Session(0), network };
|
|
|
|
let public = insecure_pair_from_name("Alice").public();
|
|
|
|
// Neither of these keys are validated
|
|
// The external key is infeasible to validate on-chain, the Ristretto key is feasible
|
|
// TODO: Should the Ristretto key be validated?
|
|
let mut ristretto_key = [0; 32];
|
|
OsRng.fill_bytes(&mut ristretto_key);
|
|
let mut external_key = vec![0; 33];
|
|
OsRng.fill_bytes(&mut external_key);
|
|
let key_pair = (Public(ristretto_key), external_key.try_into().unwrap());
|
|
|
|
let serai = serai().await;
|
|
|
|
// Make sure the genesis is as expected
|
|
assert_eq!(
|
|
serai
|
|
.get_new_set_events(serai.get_block_by_number(0).await.unwrap().unwrap().hash())
|
|
.await
|
|
.unwrap(),
|
|
[NetworkId::Bitcoin, NetworkId::Ethereum, NetworkId::Monero]
|
|
.iter()
|
|
.copied()
|
|
.map(|network| ValidatorSetsEvent::NewSet {
|
|
set: ValidatorSet { session: Session(0), network }
|
|
})
|
|
.collect::<Vec<_>>(),
|
|
);
|
|
|
|
let set_data = serai.get_validator_set(set).await.unwrap().unwrap();
|
|
assert_eq!(set_data.network, NETWORKS[&NetworkId::Bitcoin]);
|
|
let participants_ref: &[_] = set_data.participants.as_ref();
|
|
assert_eq!(participants_ref, [(public, set_data.bond)].as_ref());
|
|
|
|
let block = vote_in_keys(set, key_pair.clone()).await;
|
|
|
|
// While the vote_in_keys function should handle this, it's beneficial to independently test it
|
|
assert_eq!(
|
|
serai.get_vote_events(block).await.unwrap(),
|
|
vec![ValidatorSetsEvent::Vote { voter: public, set, key_pair: key_pair.clone(), votes: 1 }]
|
|
);
|
|
assert_eq!(
|
|
serai.get_key_gen_events(block).await.unwrap(),
|
|
vec![ValidatorSetsEvent::KeyGen { set, key_pair: key_pair.clone() }]
|
|
);
|
|
assert_eq!(serai.get_keys(set).await.unwrap(), Some(key_pair));
|
|
}
|
|
);
|