pub mod client;
pub mod error;
pub mod get;
pub mod put;
pub mod wallet;
use blsttc::SecretKey;
use client::Config;
pub use error::NetworkError;
use self::wallet::create_wallet;
use crate::index::PadInfo;
pub const DEV_TESTNET_PRIVATE_KEY_HEX: &str =
"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
use autonomi::{AttoTokens, Client, ScratchpadAddress, Wallet};
use log::debug;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
pub enum NetworkChoice {
Mainnet,
Devnet,
Alphanet,
}
impl Default for NetworkChoice {
fn default() -> Self {
NetworkChoice::Mainnet
}
}
#[derive(Debug, Clone)]
pub struct GetResult {
pub data: Vec<u8>,
pub counter: u64,
pub data_encoding: u64,
}
#[derive(Debug, Clone)]
pub struct PutResult {
pub cost: AttoTokens,
pub address: ScratchpadAddress,
}
lazy_static::lazy_static! {
pub static ref NB_CLIENTS: usize = std::env::var("MUTANT_NB_CLIENTS")
.unwrap_or_else(|_| "10".to_string())
.parse::<usize>()
.unwrap_or(10);
pub static ref BATCH_SIZE: usize = std::env::var("MUTANT_BATCH_SIZE")
.unwrap_or_else(|_| "10".to_string())
.parse::<usize>()
.unwrap_or(10);
}
pub struct Network {
wallet: Wallet,
network_choice: NetworkChoice,
secret_key: SecretKey,
}
impl Network {
pub(crate) fn new(
private_key_hex: &str,
network_choice: NetworkChoice,
) -> Result<Self, NetworkError> {
debug!(
"Creating AutonomiNetworkAdapter configuration for network: {:?}",
network_choice
);
let (wallet, secret_key) = create_wallet(private_key_hex, network_choice)?;
Ok(Self {
wallet,
network_choice,
secret_key,
})
}
pub(crate) async fn get_client(
&self,
config: Config,
) -> Result<Client, NetworkError> {
client::create_client(self.network_choice, config).await
}
pub(crate) async fn get<C: std::ops::Deref<Target = Client>>(
&self,
client: C,
address: &ScratchpadAddress,
owner_sk: Option<&SecretKey>,
) -> Result<GetResult, NetworkError> {
get::get(client.deref(), address, owner_sk).await
}
pub(crate) async fn put<C: std::ops::Deref<Target = Client>>(
&self,
client: C,
pad_info: &PadInfo,
data: &[u8],
data_encoding: u64,
is_public: bool,
) -> Result<PutResult, NetworkError> {
put::put(
client.deref(),
self.wallet.clone(),
pad_info,
data,
data_encoding,
is_public,
)
.await
}
pub fn secret_key(&self) -> &SecretKey {
&self.secret_key
}
pub fn network_choice(&self) -> NetworkChoice {
self.network_choice
}
}
#[cfg(test)]
pub mod integration_tests;