use snarkos_node::{bft::MEMORY_POOL_PORT, router::DEFAULT_NODE_PORT};
use snarkvm::{console::network::Network, prelude::PrivateKey};
use anyhow::Result;
use rand::SeedableRng;
use rand_chacha::ChaChaRng;
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
pub const DEVELOPMENT_MODE_RNG_SEED: u64 = 1234567890u64;
pub const DEVELOPMENT_MODE_NUM_GENESIS_COMMITTEE_MEMBERS: u16 = 4;
pub const DEVNET_NUM_VALIDATORS_PER_CLIENT: u16 = 2;
pub fn get_development_key<N: Network>(index: u16) -> Result<PrivateKey<N>> {
let mut rng = ChaChaRng::seed_from_u64(DEVELOPMENT_MODE_RNG_SEED);
for _ in 0..index {
let _ = PrivateKey::<N>::new(&mut rng)?;
}
PrivateKey::<N>::new(&mut rng)
}
pub fn get_devnet_validators_for_client(dev: u16, num_validators: u16) -> Vec<u16> {
(0..DEVNET_NUM_VALIDATORS_PER_CLIENT).map(|i| (dev + i) % num_validators).collect()
}
pub fn get_devnet_gateway_address_for_validator(dev: u16) -> SocketAddr {
SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, MEMORY_POOL_PORT + dev))
}
pub fn get_devnet_router_address_for_node(dev: u16) -> SocketAddr {
SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, DEFAULT_NODE_PORT + dev))
}