use crate::{
chain_api::{get_api, get_rpc, EntropyConfig},
spawn_testing_validators,
substrate_context::test_node_process_testing_state,
ChainSpecType, TestNodeProcess,
};
use entropy_protocol::PartyId;
use rand::{rngs::StdRng, SeedableRng};
use subxt::{backend::legacy::LegacyRpcMethods, utils::AccountId32, OnlineClient};
pub use tdx_quote::encode_verifying_key;
pub struct ChainConnection {
pub api: OnlineClient<EntropyConfig>,
pub rpc: LegacyRpcMethods<EntropyConfig>,
}
pub struct TssTestingResult {
pub substrate_context: Vec<TestNodeProcess<EntropyConfig>>,
pub chain_connection: ChainConnection,
pub validator_ips: Vec<String>,
pub validator_ids: Vec<PartyId>,
}
pub async fn spawn_tss_nodes_and_start_chain(chain_spec_type: ChainSpecType) -> TssTestingResult {
let (validator_ips, validator_ids) = spawn_testing_validators(chain_spec_type).await;
let force_authoring = false;
let substrate_context = test_node_process_testing_state(chain_spec_type, force_authoring).await;
let api = get_api(&substrate_context[0].ws_url).await.unwrap();
let rpc = get_rpc(&substrate_context[0].ws_url).await.unwrap();
TssTestingResult {
substrate_context,
chain_connection: ChainConnection { api, rpc },
validator_ips,
validator_ids,
}
}
pub fn derive_mock_pck_verifying_key(tss_account_id: &AccountId32) -> tdx_quote::VerifyingKey {
let mut pck_seeder = StdRng::from_seed(tss_account_id.0);
let pck = tdx_quote::SigningKey::random(&mut pck_seeder);
tdx_quote::VerifyingKey::from(pck)
}
pub fn print_test_pck_verifying_keys() {
for tss_account in crate::constants::TSS_ACCOUNTS.iter() {
let pck = derive_mock_pck_verifying_key(tss_account);
println!("{:?}", encode_verifying_key(&pck));
}
}