use std::collections::HashMap;
use crate::keys;
pub struct Wallet {
pub mnemonic: Vec<String>,
pub hex_seed: String,
pub priv_sk: String,
pub priv_vk: String,
pub pub_sk: String,
pub pub_vk: String,
pub main_address: String,
pub sub_adresses: Vec<String>,
pub transactions: Vec<Transaction>,
pub main_node: DaemonNode,
pub processes: HashMap<String, String>
}
impl Wallet {
pub fn new(language: &str, seed_type: &str, network: u8, default_node: DaemonNode) -> Wallet {
let mnemonic = keys::generate_seed(language, seed_type);
let hex_seed = keys::derive_hex_seed(mnemonic.clone());
let priv_keys = keys::derive_priv_keys(hex_seed.clone());
let priv_sk = &priv_keys[0];
let priv_vk = &priv_keys[1];
let pub_sk = keys::derive_pub_key(priv_sk.to_string());
let pub_vk = keys::derive_pub_key(priv_vk.to_string());
let address = keys::derive_address(pub_sk.clone(), pub_vk.clone(), network);
Wallet {
mnemonic,
hex_seed,
priv_sk: priv_sk.to_string(),
priv_vk: priv_vk.to_string(),
pub_sk,
pub_vk,
main_address: address,
sub_adresses: Vec::new(),
transactions: Vec::new(),
main_node: default_node,
processes: HashMap::new()
}
}
pub fn open_wallet(mnemonic: Vec<String>, network: u8, default_node: DaemonNode) -> Wallet {
let hex_seed = keys::derive_hex_seed(mnemonic.clone());
let priv_keys = keys::derive_priv_keys(hex_seed.clone());
let priv_sk = &priv_keys[0];
let priv_vk = &priv_keys[1];
let pub_sk = keys::derive_pub_key(priv_sk.to_string());
let pub_vk = keys::derive_pub_key(priv_vk.to_string());
let address = keys::derive_address(pub_sk.clone(), pub_vk.clone(), network);
Wallet {
mnemonic,
hex_seed,
priv_sk: priv_sk.to_string(),
priv_vk: priv_vk.to_string(),
pub_sk,
pub_vk,
main_address: address,
sub_adresses: Vec::new(),
transactions: Vec::new(),
main_node: default_node,
processes: HashMap::new()
}
}
}