libmonero 0.1.9

Batteries-included Monero Library
Documentation
/*
 * This file is part of Monume's library libmonero
 *
 * Copyright (c) 2023-2024, Monume (monume.xyz)
 * All Rights Reserved
 * The code is distributed under MIT license, see LICENSE file for details.
 * Generated by Monume
 *
 */

//! # Wallet
//! 
//! This module contains everything about wallets

use std::collections::HashMap;
use crate::keys;

/// Wallet struct contains all the information about a wallet
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>
}

/// Wallet implementation
impl Wallet {
    /// Creates a new wallet with given parameters
    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()
        }
    }

    /// Opens a wallet with given mnemonic and network
    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()
        }
    }
}