mirror of
https://github.com/monero-project/monero.git
synced 2025-08-19 01:47:52 -04:00
hw_device: support for multiple devices added [for review]
- device name is a new wallet property - full device name is now a bit more structured so we can address particular device vendor + device path. Example: 'Ledger', 'Trezor:udp', 'Trezor:udp:127.0.0.1:21324', 'Trezor:bridge:usb01'. The part before ':' identifies HW device implementation, the optional part after ':' is device path to look for. - new --hw-device parameter added to the wallet, can name the hardware device - device reconnect added
This commit is contained in:
parent
d743994086
commit
f9b22a7b01
8 changed files with 160 additions and 32 deletions
|
@ -2523,6 +2523,10 @@ simple_wallet::simple_wallet()
|
|||
boost::bind(&simple_wallet::import_key_images, this, _1),
|
||||
tr("import_key_images <file>"),
|
||||
tr("Import a signed key images list and verify their spent status."));
|
||||
m_cmd_binder.set_handler("hw_reconnect",
|
||||
boost::bind(&simple_wallet::hw_reconnect, this, _1),
|
||||
tr("hw_reconnect"),
|
||||
tr("Attempts to reconnect HW wallet."));
|
||||
m_cmd_binder.set_handler("export_outputs",
|
||||
boost::bind(&simple_wallet::export_outputs, this, _1),
|
||||
tr("export_outputs <file>"),
|
||||
|
@ -2650,6 +2654,7 @@ bool simple_wallet::set_variable(const std::vector<std::string> &args)
|
|||
success_msg_writer() << "subaddress-lookahead = " << lookahead.first << ":" << lookahead.second;
|
||||
success_msg_writer() << "segregation-height = " << m_wallet->segregation_height();
|
||||
success_msg_writer() << "ignore-fractional-outputs = " << m_wallet->ignore_fractional_outputs();
|
||||
success_msg_writer() << "device_name = " << m_wallet->device_name();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
@ -3295,7 +3300,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
|
|||
{
|
||||
m_wallet_file = m_generate_from_device;
|
||||
// create wallet
|
||||
auto r = new_wallet(vm, "Ledger");
|
||||
auto r = new_wallet(vm);
|
||||
CHECK_AND_ASSERT_MES(r, false, tr("account creation failed"));
|
||||
password = *r;
|
||||
// if no block_height is specified, assume its a new account and start it "now"
|
||||
|
@ -3703,8 +3708,8 @@ boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::pr
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
|
||||
const std::string &device_name) {
|
||||
boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::program_options::variables_map& vm)
|
||||
{
|
||||
auto rc = tools::wallet2::make_new(vm, false, password_prompter);
|
||||
m_wallet = std::move(rc.first);
|
||||
if (!m_wallet)
|
||||
|
@ -3723,10 +3728,11 @@ boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::pr
|
|||
if (m_restore_height)
|
||||
m_wallet->set_refresh_from_block_height(m_restore_height);
|
||||
|
||||
auto device_desc = tools::wallet2::device_name_option(vm);
|
||||
try
|
||||
{
|
||||
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);
|
||||
m_wallet->restore(m_wallet_file, std::move(rc.second).password(), device_desc.empty() ? "Ledger" : device_desc, create_address_file);
|
||||
message_writer(console_color_white, true) << tr("Generated new wallet on hw device: ")
|
||||
<< m_wallet->get_account().get_public_address_str(m_wallet->nettype());
|
||||
}
|
||||
|
@ -7745,6 +7751,31 @@ bool simple_wallet::import_key_images(const std::vector<std::string> &args)
|
|||
return true;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool simple_wallet::hw_reconnect(const std::vector<std::string> &args)
|
||||
{
|
||||
if (!m_wallet->key_on_device())
|
||||
{
|
||||
fail_msg_writer() << tr("command only supported by HW wallet");
|
||||
return true;
|
||||
}
|
||||
|
||||
LOCK_IDLE_SCOPE();
|
||||
try
|
||||
{
|
||||
bool r = m_wallet->reconnect_device();
|
||||
if (!r){
|
||||
fail_msg_writer() << tr("Failed to reconnect device");
|
||||
}
|
||||
}
|
||||
catch (const std::exception &e)
|
||||
{
|
||||
fail_msg_writer() << tr("Failed to reconnect device: ") << tr(e.what());
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool simple_wallet::export_outputs(const std::vector<std::string> &args)
|
||||
{
|
||||
if (m_wallet->key_on_device())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue