diff --git a/src/gui/qt-daemon/application/mainwindow.cpp b/src/gui/qt-daemon/application/mainwindow.cpp index dcb5f2b6..468b8aaf 100644 --- a/src/gui/qt-daemon/application/mainwindow.cpp +++ b/src/gui/qt-daemon/application/mainwindow.cpp @@ -2127,6 +2127,27 @@ QString MainWindow::get_mining_estimate(const QString& param) return MAKE_RESPONSE(ar); CATCH_ENTRY_FAIL_API_RESPONCE(); } +QString MainWindow::add_custom_asset_id(const QString& param) +{ + TRY_ENTRY(); + LOG_API_TIMING(); + PREPARE_ARG_FROM_JSON(view::wallet_and_asset_id, waid); + PREPARE_RESPONSE(currency::COMMAND_RPC_GET_ASSET_INFO::response, ar); + + ar.error_code = m_backend.add_custom_asset_id(waid.wallet_id, waid.asset_id, ar.response_data.asset_descriptor); + ar.response_data.status = ar.error_code; + return MAKE_RESPONSE(ar); + CATCH_ENTRY_FAIL_API_RESPONCE(); +} +QString MainWindow::remove_custom_asset_id(const QString& param) +{ + TRY_ENTRY(); + LOG_API_TIMING(); + PREPARE_ARG_FROM_JSON(view::wallet_and_asset_id, waid); + default_ar.error_code = m_backend.delete_custom_asset_id(waid.wallet_id, waid.asset_id); + return MAKE_RESPONSE(default_ar); + CATCH_ENTRY_FAIL_API_RESPONCE(); +} QString MainWindow::backup_wallet_keys(const QString& param) { TRY_ENTRY(); diff --git a/src/gui/qt-daemon/application/mainwindow.h b/src/gui/qt-daemon/application/mainwindow.h index 98a3d03b..64bdd6d3 100644 --- a/src/gui/qt-daemon/application/mainwindow.h +++ b/src/gui/qt-daemon/application/mainwindow.h @@ -168,7 +168,10 @@ public: QString get_default_fee(); QString get_options(); void bool_toggle_icon(const QString& param); - + QString add_custom_asset_id(const QString& param); + QString remove_custom_asset_id(const QString& param); + + bool get_is_disabled_notifications(); bool set_is_disabled_notifications(const bool& param); QString export_wallet_history(const QString& param); diff --git a/src/rpc/core_rpc_server_commands_defs.h b/src/rpc/core_rpc_server_commands_defs.h index b611cb52..ce904da3 100644 --- a/src/rpc/core_rpc_server_commands_defs.h +++ b/src/rpc/core_rpc_server_commands_defs.h @@ -82,16 +82,19 @@ namespace currency }; }; + struct asset_id_kv + { + crypto::hash asset_id; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE_POD_AS_HEX_STRING(asset_id) + END_KV_SERIALIZE_MAP() + }; + + struct COMMAND_RPC_GET_ASSET_INFO { - struct request - { - crypto::hash asset_id; - - BEGIN_KV_SERIALIZE_MAP() - KV_SERIALIZE_POD_AS_HEX_STRING(asset_id) - END_KV_SERIALIZE_MAP() - }; + typedef asset_id_kv request; struct response { diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp index e3d3019a..246ed80a 100644 --- a/src/simplewallet/simplewallet.cpp +++ b/src/simplewallet/simplewallet.cpp @@ -766,7 +766,7 @@ bool simple_wallet::show_balance(const std::vector& args/* = std::v std::stringstream ss; for (const tools::wallet_public::asset_balance_entry& b : balances) { - ss << std::setw(21) << print_fixed_decimal_point(b.total, b.asset_info.decimal_point) << "\t" << b.asset_info.ticker << ENDL; + ss << std::setw(21) << print_fixed_decimal_point(b.total, b.asset_info.decimal_point) << "\t" << b.asset_info.ticker << "\t" << b.asset_info.asset_id << ENDL; } success_msg_writer() << "Balance: " << ENDL << ss.str(); return true; diff --git a/src/wallet/view_iface.h b/src/wallet/view_iface.h index 70d60bfe..16b82069 100644 --- a/src/wallet/view_iface.h +++ b/src/wallet/view_iface.h @@ -426,10 +426,10 @@ public: struct get_recent_transfers_request { - uint64_t wallet_id; - uint64_t offset; - uint64_t count; - bool exclude_mining_txs; + uint64_t wallet_id = 0; + uint64_t offset = 0; + uint64_t count = 0; + bool exclude_mining_txs = false; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(wallet_id) @@ -439,9 +439,20 @@ public: END_KV_SERIALIZE_MAP() }; + struct wallet_and_asset_id + { + uint64_t wallet_id = 0; + crypto::hash asset_id = currency::null_hash; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(wallet_id) + KV_SERIALIZE_POD_AS_HEX_STRING(asset_id) + END_KV_SERIALIZE_MAP() + }; + struct reset_pass_request { - uint64_t wallet_id; + uint64_t wallet_id = 0; std::string pass; BEGIN_KV_SERIALIZE_MAP() diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 7c844b97..84c3435e 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -3152,7 +3152,10 @@ bool wallet2::balance(std::list& balances, u for (auto& own_asset : m_own_asset_descriptors) { - custom_assets_local[own_asset.first] = own_asset.second.asset_descriptor; + if (m_whitelisted_assets.find(own_asset.first) == m_whitelisted_assets.end()) + { + custom_assets_local[own_asset.first] = own_asset.second.asset_descriptor; + } } asset_descriptor_base native_asset_info = AUTO_VAL_INIT(native_asset_info); @@ -3218,6 +3221,7 @@ bool wallet2::add_custom_asset_id(const crypto::hash& asset_id, asset_descriptor { currency::COMMAND_RPC_GET_ASSET_INFO::request req = AUTO_VAL_INIT(req); currency::COMMAND_RPC_GET_ASSET_INFO::response resp = AUTO_VAL_INIT(resp); + req.asset_id = asset_id; bool r = m_core_proxy->call_COMMAND_RPC_GET_ASSET_INFO(req, resp); if (resp.status == API_RETURN_CODE_OK) diff --git a/src/wallet/wallets_manager.cpp b/src/wallet/wallets_manager.cpp index ac3c266e..31e37d80 100644 --- a/src/wallet/wallets_manager.cpp +++ b/src/wallet/wallets_manager.cpp @@ -1361,7 +1361,7 @@ std::string wallets_manager::request_alias_update(const currency::alias_rpc_deta } -std::string wallets_manager::transfer(size_t wallet_id, const view::transfer_params& tp, currency::transaction& res_tx) +std::string wallets_manager::transfer(uint64_t wallet_id, const view::transfer_params& tp, currency::transaction& res_tx) { std::vector dsts; @@ -1675,6 +1675,23 @@ std::string wallets_manager::reset_wallet_password(uint64_t wallet_id, const std else return API_RETURN_CODE_FAIL; } +std::string wallets_manager::add_custom_asset_id(uint64_t wallet_id, const crypto::hash& asset_id, currency::asset_descriptor_base& asset_descriptor) +{ + GET_WALLET_OPT_BY_ID(wallet_id, w); + if(w.w->get()->add_custom_asset_id(asset_id, asset_descriptor)) + return API_RETURN_CODE_OK; + else + return API_RETURN_CODE_FAIL; +} +std::string wallets_manager::delete_custom_asset_id(uint64_t wallet_id, const crypto::hash& asset_id) +{ + GET_WALLET_OPT_BY_ID(wallet_id, w); + if (w.w->get()->delete_custom_asset_id(asset_id)) + return API_RETURN_CODE_OK; + else + return API_RETURN_CODE_FAIL; + +} std::string wallets_manager::is_wallet_password_valid(uint64_t wallet_id, const std::string& pass) { GET_WALLET_OPT_BY_ID(wallet_id, w); diff --git a/src/wallet/wallets_manager.h b/src/wallet/wallets_manager.h index 45dec851..8f09475f 100644 --- a/src/wallet/wallets_manager.h +++ b/src/wallet/wallets_manager.h @@ -148,7 +148,7 @@ public: std::vector& days); std::string is_pos_allowed(); void toggle_pos_mining(); - std::string transfer(size_t wallet_id, const view::transfer_params& tp, currency::transaction& res_tx); + std::string transfer(uint64_t wallet_id, const view::transfer_params& tp, currency::transaction& res_tx); std::string get_config_folder(); std::string is_valid_brain_restore_data(const std::string& seed_phrase, const std::string& seed_password); std::string get_seed_phrase_info(const std::string& seed_phrase, const std::string& seed_password, view::seed_phrase_info& result); @@ -162,6 +162,9 @@ public: std::string get_qt_dev_tools_option() const { return m_qt_dev_tools; } void set_use_deffered_global_outputs(bool use) { m_use_deffered_global_outputs = use; } bool set_use_tor(bool use_tor); + std::string add_custom_asset_id(uint64_t wallet_id, const crypto::hash& asset_id, currency::asset_descriptor_base& asset_descriptor); + std::string delete_custom_asset_id(uint64_t wallet_id, const crypto::hash& asset_id); + private: void main_worker(const po::variables_map& vm); bool init_local_daemon();