Logging for wallet class

This commit is contained in:
Piotr Wójcik 2025-01-02 17:16:22 +01:00
commit c8eb45808f

View file

@ -246,6 +246,10 @@ void nano::fan::value_set (nano::raw_key const & value_a)
*(values[0]) ^= value_a; *(values[0]) ^= value_a;
} }
/*
* wallet_store
*/
// Wallet version number // Wallet version number
nano::account const nano::wallet_store::version_special{}; nano::account const nano::wallet_store::version_special{};
// Random number used to salt private key encryption // Random number used to salt private key encryption
@ -738,6 +742,9 @@ nano::public_key nano::wallet::deterministic_insert (store::transaction const &
if (store.valid_password (transaction_a)) if (store.valid_password (transaction_a))
{ {
key = store.deterministic_insert (transaction_a); key = store.deterministic_insert (transaction_a);
logger.info (nano::log::type::wallet, "Deterministically inserted new account: {}", key.to_account ());
if (generate_work_a) if (generate_work_a)
{ {
work_ensure (key, key); work_ensure (key, key);
@ -745,6 +752,8 @@ nano::public_key nano::wallet::deterministic_insert (store::transaction const &
auto half_principal_weight (wallets.node.minimum_principal_weight () / 2); auto half_principal_weight (wallets.node.minimum_principal_weight () / 2);
if (wallets.check_rep (key, half_principal_weight)) if (wallets.check_rep (key, half_principal_weight))
{ {
logger.info (nano::log::type::wallet, "New account qualified as a representative: {}", key.to_account ());
nano::lock_guard<nano::mutex> lock{ representatives_mutex }; nano::lock_guard<nano::mutex> lock{ representatives_mutex };
representatives.insert (key); representatives.insert (key);
} }
@ -759,6 +768,9 @@ nano::public_key nano::wallet::deterministic_insert (uint32_t const index, bool
if (store.valid_password (transaction)) if (store.valid_password (transaction))
{ {
key = store.deterministic_insert (transaction, index); key = store.deterministic_insert (transaction, index);
logger.info (nano::log::type::wallet, "Deterministically inserted new account: {}", key.to_account ());
if (generate_work_a) if (generate_work_a)
{ {
work_ensure (key, key); work_ensure (key, key);
@ -865,6 +877,11 @@ std::shared_ptr<nano::block> nano::wallet::receive_action (nano::block_hash cons
nano::raw_key prv; nano::raw_key prv;
if (!store.fetch (transaction, account_a, prv)) if (!store.fetch (transaction, account_a, prv))
{ {
logger.info (nano::log::type::wallet, "Receiving block {} from account {}, amount: {}",
send_hash_a.to_string (),
account_a.to_account (),
pending_info->amount.number ().convert_to<std::string> ());
if (work_a == 0) if (work_a == 0)
{ {
store.work_get (transaction, account_a, work_a); store.work_get (transaction, account_a, work_a);
@ -883,17 +900,21 @@ std::shared_ptr<nano::block> nano::wallet::receive_action (nano::block_hash cons
} }
else else
{ {
logger.warn (nano::log::type::wallet, "Unable to receive, wallet locked"); logger.warn (nano::log::type::wallet, "Unable to receive, wallet locked, block {} to account: {}",
send_hash_a.to_string (),
account_a.to_account ());
} }
} }
else else
{ {
// Ledger doesn't have this marked as available to receive anymore // Ledger doesn't have this marked as available to receive anymore
logger.warn (nano::log::type::wallet, "Not receiving block {}, block already received", send_hash_a.to_string ());
} }
} }
else else
{ {
// Ledger doesn't have this block anymore. // Ledger doesn't have this block anymore.
logger.warn (nano::log::type::wallet, "Not receiving block {}, block no longer exists or pruned", send_hash_a.to_string ());
} }
} }
else else
@ -924,6 +945,10 @@ std::shared_ptr<nano::block> nano::wallet::change_action (nano::account const &
auto existing (store.find (transaction, source_a)); auto existing (store.find (transaction, source_a));
if (existing != store.end (transaction) && !wallets.node.ledger.any.account_head (block_transaction, source_a).is_zero ()) if (existing != store.end (transaction) && !wallets.node.ledger.any.account_head (block_transaction, source_a).is_zero ())
{ {
logger.info (nano::log::type::wallet, "Changing representative for account {} to {}",
source_a.to_account (),
representative_a.to_account ());
auto info = wallets.node.ledger.any.account_get (block_transaction, source_a); auto info = wallets.node.ledger.any.account_get (block_transaction, source_a);
debug_assert (info); debug_assert (info);
nano::raw_key prv; nano::raw_key prv;
@ -937,6 +962,16 @@ std::shared_ptr<nano::block> nano::wallet::change_action (nano::account const &
block = std::make_shared<nano::state_block> (source_a, info->head, representative_a, info->balance, 0, prv, source_a, work_a); block = std::make_shared<nano::state_block> (source_a, info->head, representative_a, info->balance, 0, prv, source_a, work_a);
details.epoch = info->epoch (); details.epoch = info->epoch ();
} }
else
{
logger.warn (nano::log::type::wallet, "Changing representative for account {} failed, wallet locked or account not found",
source_a.to_account ());
}
}
else
{
logger.warn (nano::log::type::wallet, "Changing representative for account {} failed, wallet locked",
source_a.to_account ());
} }
} }
if (block != nullptr) if (block != nullptr)
@ -958,7 +993,7 @@ std::shared_ptr<nano::block> nano::wallet::send_action (nano::account const & so
id_mdb_val = nano::store::lmdb::db_val (id_a->size (), const_cast<char *> (id_a->data ())); id_mdb_val = nano::store::lmdb::db_val (id_a->size (), const_cast<char *> (id_a->data ()));
} }
auto prepare_send = [&id_mdb_val, &wallets = this->wallets, &store = this->store, &source_a, &amount_a, &work_a, &account_a] (auto const & transaction) { auto prepare_send = [this, &id_mdb_val, &wallets = this->wallets, &store = this->store, &source_a, &amount_a, &work_a, &account_a, &id_a] (auto const & transaction) {
auto block_transaction = wallets.node.ledger.tx_begin_read (); auto block_transaction = wallets.node.ledger.tx_begin_read ();
auto error (false); auto error (false);
auto cached_block (false); auto cached_block (false);
@ -975,9 +1010,19 @@ std::shared_ptr<nano::block> nano::wallet::send_action (nano::account const & so
block = wallets.node.ledger.any.block_get (block_transaction, hash); block = wallets.node.ledger.any.block_get (block_transaction, hash);
if (block != nullptr) if (block != nullptr)
{ {
logger.warn (nano::log::type::wallet, "Block already exists for send action with id: {}, existing hash: {}",
id_a.value (),
hash.to_string ());
cached_block = true; cached_block = true;
wallets.node.network.flood_block (block, nano::transport::traffic_type::block_broadcast_initial); wallets.node.network.flood_block (block, nano::transport::traffic_type::block_broadcast_initial);
} }
else
{
logger.warn (nano::log::type::wallet, "Block was not found in ledger for send action with id: {}, hash: {}",
id_a.value (),
hash.to_string ());
}
} }
else if (status != MDB_NOTFOUND) else if (status != MDB_NOTFOUND)
{ {
@ -994,6 +1039,11 @@ std::shared_ptr<nano::block> nano::wallet::send_action (nano::account const & so
auto balance (wallets.node.ledger.any.account_balance (block_transaction, source_a)); auto balance (wallets.node.ledger.any.account_balance (block_transaction, source_a));
if (balance && balance.value ().number () >= amount_a) if (balance && balance.value ().number () >= amount_a)
{ {
logger.info (nano::log::type::wallet, "Sending from account: {} to: {}, amount: {}",
source_a.to_account (),
account_a.to_account (),
amount_a.convert_to<std::string> ());
auto info = wallets.node.ledger.any.account_get (block_transaction, source_a); auto info = wallets.node.ledger.any.account_get (block_transaction, source_a);
debug_assert (info); debug_assert (info);
nano::raw_key prv; nano::raw_key prv;
@ -1016,6 +1066,13 @@ std::shared_ptr<nano::block> nano::wallet::send_action (nano::account const & so
} }
} }
} }
else
{
logger.warn (nano::log::type::wallet, "Insufficient balance for send from: {}, required: {} but available: {}",
account_a.to_account (),
amount_a.convert_to<std::string> (),
balance ? balance.value ().number ().convert_to<std::string> () : "unknown");
}
} }
} }
} }
@ -1231,7 +1288,7 @@ bool nano::wallet::search_receivable (store::transaction const & wallet_transact
} }
else else
{ {
logger.warn (nano::log::type::wallet, "Stopping search, wallet is locked"); logger.warn (nano::log::type::wallet, "Unable to search receivable blocks, wallet is locked");
} }
return result; return result;
} }
@ -1277,17 +1334,23 @@ uint32_t nano::wallet::deterministic_check (store::transaction const & transacti
nano::public_key nano::wallet::change_seed (store::transaction const & transaction_a, nano::raw_key const & prv_a, uint32_t count) nano::public_key nano::wallet::change_seed (store::transaction const & transaction_a, nano::raw_key const & prv_a, uint32_t count)
{ {
logger.info (nano::log::type::wallet, "Changing wallet seed");
store.seed_set (transaction_a, prv_a); store.seed_set (transaction_a, prv_a);
auto account = deterministic_insert (transaction_a); auto account = deterministic_insert (transaction_a);
if (count == 0) if (count == 0)
{ {
count = deterministic_check (transaction_a, 0); count = deterministic_check (transaction_a, 0);
logger.info (nano::log::type::wallet, "Auto-detected {} accounts to generate", count);
} }
for (uint32_t i (0); i < count; ++i) for (uint32_t i (0); i < count; ++i)
{ {
// Disable work generation to prevent weak CPU nodes stuck // Disable work generation to prevent weak CPU nodes stuck
account = deterministic_insert (transaction_a, false); account = deterministic_insert (transaction_a, false);
} }
logger.info (nano::log::type::wallet, "Completed changing wallet seed and generating accounts");
return account; return account;
} }
@ -1754,7 +1817,7 @@ void nano::wallets::receive_confirmed (nano::block_hash const & hash_a, nano::ac
if (!node.ledger.confirmed.block_exists_or_pruned (node.ledger.tx_begin_read (), hash_a)) if (!node.ledger.confirmed.block_exists_or_pruned (node.ledger.tx_begin_read (), hash_a))
{ {
logger.warn (nano::log::type::wallet, "Confirmed block is missing: {}", hash_a.to_string ()); logger.warn (nano::log::type::wallet, "Confirmed block is missing: {}", hash_a.to_string ());
debug_assert (false, "Confirmed block is missing"); debug_assert (false, "confirmed block is missing");
} }
else else
{ {