Skip to content

Commit

Permalink
Merge pull request #2 from mickvandijke/sk_wallet_file-create
Browse files Browse the repository at this point in the history
refactor: auto select wallet from env if exists
  • Loading branch information
ermineJose authored Dec 13, 2024
2 parents e9eba6b + 0843bba commit 26aeb3e
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 17 deletions.
4 changes: 2 additions & 2 deletions ant-cli/src/wallet/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ pub enum Error {
FailedToCreateWalletsFolder,
#[error("Could not find private key file")]
PrivateKeyFileNotFound,
#[error("No wallets found and No secret Keys found in ENV, create one using `wallet create`")]
NoWalletsFoundAndNoSecretKeysInEnv,
#[error("No wallets found. Create one using `wallet create` or supply a private key using the `SECRET_KEY` environment variable")]
NoWalletsFound,
#[error("Invalid wallet selection input")]
InvalidSelection,
}
23 changes: 8 additions & 15 deletions ant-cli/src/wallet/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// KIND, either express or implied. Please review the Licences for the specific language governing
// permissions and limitations relating to use of the SAFE Network Software.

use crate::keys::get_secret_key_from_env;
use crate::keys::load_evm_wallet_from_env;
use crate::wallet::encryption::{decrypt_private_key, encrypt_private_key};
use crate::wallet::error::Error;
use crate::wallet::input::{get_password_input, get_wallet_selection_input};
Expand All @@ -15,7 +15,7 @@ use autonomi::{get_evm_network_from_env, RewardsAddress, Wallet};
use const_hex::traits::FromHex;
use prettytable::{Cell, Row, Table};
use std::ffi::OsString;
use std::io::{Read, Write};
use std::io::Read;
use std::path::PathBuf;
use std::sync::OnceLock;

Expand Down Expand Up @@ -115,6 +115,11 @@ pub(crate) fn load_wallet_from_address(wallet_address: &str) -> Result<Wallet, E
}

pub(crate) fn select_wallet() -> Result<Wallet, Error> {
// try if there is a wallet set in the ENV first
if let Ok(env_wallet) = load_evm_wallet_from_env() {
return Ok(env_wallet);
}

let wallet_address = select_wallet_address()?;
load_wallet_from_address(&wallet_address)
}
Expand All @@ -134,19 +139,7 @@ pub(crate) fn select_wallet_address() -> Result<String, Error> {
let wallet_files = get_wallet_files(&wallets_folder)?;

let wallet_address = match wallet_files.len() {
0 => {
let secret_key =
get_secret_key_from_env().map_err(|_| Error::NoWalletsFoundAndNoSecretKeysInEnv)?;
let network = get_evm_network_from_env().expect("Could not load EVM network from environment");
let wallet = Wallet::new_from_private_key(network, &secret_key).expect("Could not initialize wallet");
let public_key = wallet.address().to_string();
let wallet_directory = get_client_wallet_dir_path()?;
let file_path = std::path::Path::new(&wallet_directory).join(&public_key);
let mut file = std::fs::File::create(&file_path).expect("Could not create file on disk");
file.write_all(secret_key.as_bytes()).expect("Could not write secret key to file");

Ok(public_key)
}
0 => Err(Error::NoWalletsFound),
1 => Ok(filter_wallet_file_extension(&wallet_files[0])),
_ => get_wallet_selection(wallet_files),
}?;
Expand Down

0 comments on commit 26aeb3e

Please sign in to comment.