Merge pull request #4332
20171746
wallet2: factor the creation of a new wallet keys file (moneromooo-monero)be6acfd5
wallet2: factor new blockchain setup (moneromooo-monero)
This commit is contained in:
commit
dd2fc3afe3
|
@ -3707,7 +3707,8 @@ boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::pr
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_wallet->restore(m_wallet_file, std::move(rc.second).password(), device_name);
|
bool create_address_file = command_line::get_arg(vm, arg_create_address_file);
|
||||||
|
m_wallet->restore(m_wallet_file, std::move(rc.second).password(), device_name, create_address_file);
|
||||||
message_writer(console_color_white, true) << tr("Generated new wallet on hw device: ")
|
message_writer(console_color_white, true) << tr("Generated new wallet on hw device: ")
|
||||||
<< m_wallet->get_account().get_public_address_str(m_wallet->nettype());
|
<< m_wallet->get_account().get_public_address_str(m_wallet->nettype());
|
||||||
}
|
}
|
||||||
|
|
|
@ -3375,6 +3375,31 @@ void wallet2::decrypt_keys(const epee::wipeable_string &password)
|
||||||
decrypt_keys(key);
|
decrypt_keys(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wallet2::setup_new_blockchain()
|
||||||
|
{
|
||||||
|
cryptonote::block b;
|
||||||
|
generate_genesis(b);
|
||||||
|
m_blockchain.push_back(get_block_hash(b));
|
||||||
|
m_last_block_reward = cryptonote::get_outs_money_amount(b.miner_tx);
|
||||||
|
add_subaddress_account(tr("Primary account"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void wallet2::create_keys_file(const std::string &wallet_, bool watch_only, const epee::wipeable_string &password, bool create_address_file)
|
||||||
|
{
|
||||||
|
if (!wallet_.empty())
|
||||||
|
{
|
||||||
|
bool r = store_keys(m_keys_file, password, watch_only);
|
||||||
|
THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
|
||||||
|
|
||||||
|
if (create_address_file)
|
||||||
|
{
|
||||||
|
r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_nettype));
|
||||||
|
if(!r) MERROR("String with address text not saved");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Generates a wallet or restores one.
|
* \brief Generates a wallet or restores one.
|
||||||
* \param wallet_ Name of wallet file
|
* \param wallet_ Name of wallet file
|
||||||
|
@ -3452,23 +3477,8 @@ void wallet2::generate(const std::string& wallet_, const epee::wipeable_string&
|
||||||
m_key_on_device = false;
|
m_key_on_device = false;
|
||||||
setup_keys(password);
|
setup_keys(password);
|
||||||
|
|
||||||
if (!wallet_.empty())
|
create_keys_file(wallet_, false, password, m_nettype != MAINNET || create_address_file);
|
||||||
{
|
setup_new_blockchain();
|
||||||
bool r = store_keys(m_keys_file, password, false);
|
|
||||||
THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
|
|
||||||
|
|
||||||
if (m_nettype != MAINNET || create_address_file)
|
|
||||||
{
|
|
||||||
r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_nettype));
|
|
||||||
if(!r) MERROR("String with address text not saved");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cryptonote::block b;
|
|
||||||
generate_genesis(b);
|
|
||||||
m_blockchain.push_back(get_block_hash(b));
|
|
||||||
m_last_block_reward = cryptonote::get_outs_money_amount(b.miner_tx);
|
|
||||||
add_subaddress_account(tr("Primary account"));
|
|
||||||
|
|
||||||
if (!wallet_.empty())
|
if (!wallet_.empty())
|
||||||
store();
|
store();
|
||||||
|
@ -3512,23 +3522,9 @@ crypto::secret_key wallet2::generate(const std::string& wallet_, const epee::wip
|
||||||
m_refresh_from_block_height = estimate_blockchain_height();
|
m_refresh_from_block_height = estimate_blockchain_height();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wallet_.empty())
|
create_keys_file(wallet_, false, password, m_nettype != MAINNET || create_address_file);
|
||||||
{
|
|
||||||
bool r = store_keys(m_keys_file, password, false);
|
|
||||||
THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
|
|
||||||
|
|
||||||
if (m_nettype != MAINNET || create_address_file)
|
setup_new_blockchain();
|
||||||
{
|
|
||||||
r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_nettype));
|
|
||||||
if(!r) MERROR("String with address text not saved");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cryptonote::block b;
|
|
||||||
generate_genesis(b);
|
|
||||||
m_blockchain.push_back(get_block_hash(b));
|
|
||||||
m_last_block_reward = cryptonote::get_outs_money_amount(b.miner_tx);
|
|
||||||
add_subaddress_account(tr("Primary account"));
|
|
||||||
|
|
||||||
if (!wallet_.empty())
|
if (!wallet_.empty())
|
||||||
store();
|
store();
|
||||||
|
@ -3609,23 +3605,9 @@ void wallet2::generate(const std::string& wallet_, const epee::wipeable_string&
|
||||||
m_key_on_device = false;
|
m_key_on_device = false;
|
||||||
setup_keys(password);
|
setup_keys(password);
|
||||||
|
|
||||||
if (!wallet_.empty())
|
create_keys_file(wallet_, true, password, m_nettype != MAINNET || create_address_file);
|
||||||
{
|
|
||||||
bool r = store_keys(m_keys_file, password, true);
|
|
||||||
THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
|
|
||||||
|
|
||||||
if (m_nettype != MAINNET || create_address_file)
|
setup_new_blockchain();
|
||||||
{
|
|
||||||
r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_nettype));
|
|
||||||
if(!r) MERROR("String with address text not saved");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cryptonote::block b;
|
|
||||||
generate_genesis(b);
|
|
||||||
m_blockchain.push_back(get_block_hash(b));
|
|
||||||
m_last_block_reward = cryptonote::get_outs_money_amount(b.miner_tx);
|
|
||||||
add_subaddress_account(tr("Primary account"));
|
|
||||||
|
|
||||||
if (!wallet_.empty())
|
if (!wallet_.empty())
|
||||||
store();
|
store();
|
||||||
|
@ -3663,23 +3645,9 @@ void wallet2::generate(const std::string& wallet_, const epee::wipeable_string&
|
||||||
m_key_on_device = false;
|
m_key_on_device = false;
|
||||||
setup_keys(password);
|
setup_keys(password);
|
||||||
|
|
||||||
if (!wallet_.empty())
|
create_keys_file(wallet_, false, password, create_address_file);
|
||||||
{
|
|
||||||
bool r = store_keys(m_keys_file, password, false);
|
|
||||||
THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
|
|
||||||
|
|
||||||
if (m_nettype != MAINNET || create_address_file)
|
setup_new_blockchain();
|
||||||
{
|
|
||||||
r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_nettype));
|
|
||||||
if(!r) MERROR("String with address text not saved");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cryptonote::block b;
|
|
||||||
generate_genesis(b);
|
|
||||||
m_blockchain.push_back(get_block_hash(b));
|
|
||||||
m_last_block_reward = cryptonote::get_outs_money_amount(b.miner_tx);
|
|
||||||
add_subaddress_account(tr("Primary account"));
|
|
||||||
|
|
||||||
if (!wallet_.empty())
|
if (!wallet_.empty())
|
||||||
store();
|
store();
|
||||||
|
@ -3691,7 +3659,7 @@ void wallet2::generate(const std::string& wallet_, const epee::wipeable_string&
|
||||||
* \param password Password of wallet file
|
* \param password Password of wallet file
|
||||||
* \param device_name device string address
|
* \param device_name device string address
|
||||||
*/
|
*/
|
||||||
void wallet2::restore(const std::string& wallet_, const epee::wipeable_string& password, const std::string &device_name)
|
void wallet2::restore(const std::string& wallet_, const epee::wipeable_string& password, const std::string &device_name, bool create_address_file)
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
prepare_file_names(wallet_);
|
prepare_file_names(wallet_);
|
||||||
|
@ -3710,24 +3678,14 @@ void wallet2::restore(const std::string& wallet_, const epee::wipeable_string& p
|
||||||
m_multisig_signers.clear();
|
m_multisig_signers.clear();
|
||||||
setup_keys(password);
|
setup_keys(password);
|
||||||
|
|
||||||
if (!wallet_.empty()) {
|
create_keys_file(wallet_, false, password, m_nettype != MAINNET || create_address_file);
|
||||||
bool r = store_keys(m_keys_file, password, false);
|
|
||||||
THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
|
|
||||||
|
|
||||||
r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_nettype));
|
|
||||||
if(!r) MERROR("String with address text not saved");
|
|
||||||
}
|
|
||||||
cryptonote::block b;
|
|
||||||
generate_genesis(b);
|
|
||||||
m_blockchain.push_back(get_block_hash(b));
|
|
||||||
if (m_subaddress_lookahead_major == SUBADDRESS_LOOKAHEAD_MAJOR && m_subaddress_lookahead_minor == SUBADDRESS_LOOKAHEAD_MINOR)
|
if (m_subaddress_lookahead_major == SUBADDRESS_LOOKAHEAD_MAJOR && m_subaddress_lookahead_minor == SUBADDRESS_LOOKAHEAD_MINOR)
|
||||||
{
|
{
|
||||||
// the default lookahead setting (50:200) is clearly too much for hardware wallet
|
// the default lookahead setting (50:200) is clearly too much for hardware wallet
|
||||||
m_subaddress_lookahead_major = 5;
|
m_subaddress_lookahead_major = 5;
|
||||||
m_subaddress_lookahead_minor = 20;
|
m_subaddress_lookahead_minor = 20;
|
||||||
}
|
}
|
||||||
m_last_block_reward = cryptonote::get_outs_money_amount(b.miner_tx);
|
setup_new_blockchain();
|
||||||
add_subaddress_account(tr("Primary account"));
|
|
||||||
if (!wallet_.empty()) {
|
if (!wallet_.empty()) {
|
||||||
store();
|
store();
|
||||||
}
|
}
|
||||||
|
@ -3823,23 +3781,9 @@ std::string wallet2::make_multisig(const epee::wipeable_string &password,
|
||||||
// re-encrypt keys
|
// re-encrypt keys
|
||||||
keys_reencryptor = epee::misc_utils::auto_scope_leave_caller();
|
keys_reencryptor = epee::misc_utils::auto_scope_leave_caller();
|
||||||
|
|
||||||
if (!m_wallet_file.empty())
|
create_keys_file(m_wallet_file, false, password, boost::filesystem::exists(m_wallet_file + ".address.txt"));
|
||||||
{
|
|
||||||
bool r = store_keys(m_keys_file, password, false);
|
|
||||||
THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
|
|
||||||
|
|
||||||
if (boost::filesystem::exists(m_wallet_file + ".address.txt"))
|
setup_new_blockchain();
|
||||||
{
|
|
||||||
r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_nettype));
|
|
||||||
if(!r) MERROR("String with address text not saved");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cryptonote::block b;
|
|
||||||
generate_genesis(b);
|
|
||||||
m_blockchain.push_back(get_block_hash(b));
|
|
||||||
m_last_block_reward = cryptonote::get_outs_money_amount(b.miner_tx);
|
|
||||||
add_subaddress_account(tr("Primary account"));
|
|
||||||
|
|
||||||
if (!m_wallet_file.empty())
|
if (!m_wallet_file.empty())
|
||||||
store();
|
store();
|
||||||
|
@ -3941,17 +3885,7 @@ bool wallet2::finalize_multisig(const epee::wipeable_string &password, std::unor
|
||||||
// keys are encrypted again
|
// keys are encrypted again
|
||||||
keys_reencryptor = epee::misc_utils::auto_scope_leave_caller();
|
keys_reencryptor = epee::misc_utils::auto_scope_leave_caller();
|
||||||
|
|
||||||
if (!m_wallet_file.empty())
|
create_keys_file(m_wallet_file, false, password, boost::filesystem::exists(m_wallet_file + ".address.txt"));
|
||||||
{
|
|
||||||
bool r = store_keys(m_keys_file, password, false);
|
|
||||||
THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
|
|
||||||
|
|
||||||
if (boost::filesystem::exists(m_wallet_file + ".address.txt"))
|
|
||||||
{
|
|
||||||
r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_nettype));
|
|
||||||
if(!r) MERROR("String with address text not saved");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_subaddresses.clear();
|
m_subaddresses.clear();
|
||||||
m_subaddress_labels.clear();
|
m_subaddress_labels.clear();
|
||||||
|
@ -4762,12 +4696,7 @@ void wallet2::rescan_blockchain(bool refresh)
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
cryptonote::block genesis;
|
setup_new_blockchain();
|
||||||
generate_genesis(genesis);
|
|
||||||
crypto::hash genesis_hash = get_block_hash(genesis);
|
|
||||||
m_blockchain.push_back(genesis_hash);
|
|
||||||
m_last_block_reward = cryptonote::get_outs_money_amount(genesis.miner_tx);
|
|
||||||
add_subaddress_account(tr("Primary account"));
|
|
||||||
|
|
||||||
if (refresh)
|
if (refresh)
|
||||||
this->refresh(false);
|
this->refresh(false);
|
||||||
|
|
|
@ -544,8 +544,9 @@ namespace tools
|
||||||
* \param wallet_ Name of wallet file
|
* \param wallet_ Name of wallet file
|
||||||
* \param password Password of wallet file
|
* \param password Password of wallet file
|
||||||
* \param device_name name of HW to use
|
* \param device_name name of HW to use
|
||||||
|
* \param create_address_file Whether to create an address file
|
||||||
*/
|
*/
|
||||||
void restore(const std::string& wallet_, const epee::wipeable_string& password, const std::string &device_name);
|
void restore(const std::string& wallet_, const epee::wipeable_string& password, const std::string &device_name, bool create_address_file);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Creates a multisig wallet
|
* \brief Creates a multisig wallet
|
||||||
|
@ -1235,6 +1236,9 @@ namespace tools
|
||||||
|
|
||||||
void cache_tx_data(const cryptonote::transaction& tx, const crypto::hash &txid, tx_cache_data &tx_cache_data) const;
|
void cache_tx_data(const cryptonote::transaction& tx, const crypto::hash &txid, tx_cache_data &tx_cache_data) const;
|
||||||
|
|
||||||
|
void setup_new_blockchain();
|
||||||
|
void create_keys_file(const std::string &wallet_, bool watch_only, const epee::wipeable_string &password, bool create_address_file);
|
||||||
|
|
||||||
cryptonote::account_base m_account;
|
cryptonote::account_base m_account;
|
||||||
boost::optional<epee::net_utils::http::login> m_daemon_login;
|
boost::optional<epee::net_utils::http::login> m_daemon_login;
|
||||||
std::string m_daemon_address;
|
std::string m_daemon_address;
|
||||||
|
|
Loading…
Reference in New Issue