From 15b80bf7be6dbd108349db452c8b788cf3236577 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 17 Nov 2022 20:20:54 +0800 Subject: [PATCH 01/12] remove zhtlc_enter_enabling and zhtlc_leave_enabling --- src/core/atomicdex/events/events.hpp | 2 - .../atomicdex/services/mm2/mm2.service.cpp | 39 ------------------- .../atomicdex/services/mm2/mm2.service.hpp | 6 --- 3 files changed, 47 deletions(-) diff --git a/src/core/atomicdex/events/events.hpp b/src/core/atomicdex/events/events.hpp index 9f19cd0f7f..02d69dd4b5 100644 --- a/src/core/atomicdex/events/events.hpp +++ b/src/core/atomicdex/events/events.hpp @@ -30,8 +30,6 @@ namespace atomic_dex using gui_leave_trading = entt::tag<"gui_leave_trading"_hs>; using mm2_initialized = entt::tag<"mm2_running_and_enabling"_hs>; using default_coins_enabled = entt::tag<"default_coins_enabled"_hs>; - using zhtlc_enter_enabling = entt::tag<"zhtlc_enter_enabling"_hs>; - using zhtlc_leave_enabling = entt::tag<"zhtlc_leave_enabling"_hs>; using band_oracle_refreshed = entt::tag<"band_oracle_refreshed"_hs>; using current_currency_changed = entt::tag<"update_orders_and_swap_values"_hs>; using force_update_providers = entt::tag<"force_update_providers"_hs>; diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 087c206c1f..fb360d255f 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -283,8 +283,6 @@ namespace atomic_dex { m_orderbook_clock = std::chrono::high_resolution_clock::now(); m_info_clock = std::chrono::high_resolution_clock::now(); - dispatcher_.sink().connect<&mm2_service::on_zhtlc_enter_enabling>(*this); - dispatcher_.sink().connect<&mm2_service::on_zhtlc_leave_enabling>(*this); dispatcher_.sink().connect<&mm2_service::on_gui_enter_trading>(*this); dispatcher_.sink().connect<&mm2_service::on_gui_leave_trading>(*this); dispatcher_.sink().connect<&mm2_service::on_refresh_orderbook>(*this); @@ -342,8 +340,6 @@ namespace atomic_dex dispatcher_.sink().disconnect<&mm2_service::on_gui_enter_trading>(*this); dispatcher_.sink().disconnect<&mm2_service::on_gui_leave_trading>(*this); dispatcher_.sink().disconnect<&mm2_service::on_refresh_orderbook>(*this); - dispatcher_.sink().disconnect<&mm2_service::on_zhtlc_enter_enabling>(*this); - dispatcher_.sink().disconnect<&mm2_service::on_zhtlc_leave_enabling>(*this); SPDLOG_INFO("mm2 signals successfully disconnected"); bool mm2_stopped = false; if (m_mm2_running) @@ -1202,7 +1198,6 @@ namespace atomic_dex void mm2_service::enable_zhtlc(const t_coins& coins) { - dispatcher_.trigger(); auto request_functor = [this](coin_config coin_info) -> std::pair> { t_init_z_coin_request request{ @@ -1320,30 +1315,19 @@ namespace atomic_dex if (z_answers[0].at("result").at("details").contains("UpdatingBlocksCache")) { event = "UpdatingBlocksCache"; - std::size_t current_scanned_block = z_answers[0].at("result").at("details").at("UpdatingBlocksCache").at("current_scanned_block"); - std::size_t latest_block = z_answers[0].at("result").at("details").at("UpdatingBlocksCache").at("latest_block"); - // SPDLOG_DEBUG("Waiting for {} to enable [{}: {}] {}/{} blocks scanned", tickers[idx], status, event, current_scanned_block, latest_block); } else if (z_answers[0].at("result").at("details").contains("BuildingWalletDb")) { event = "BuildingWalletDb"; - std::size_t current_scanned_block = z_answers[0].at("result").at("details").at("BuildingWalletDb").at("current_scanned_block"); - std::size_t latest_block = z_answers[0].at("result").at("details").at("BuildingWalletDb").at("latest_block"); - // SPDLOG_DEBUG("Waiting for {} to enable [{}: {}] {}/{} blocks scanned", tickers[idx], status, event, current_scanned_block, latest_block); } else { event = z_answers[0].at("result").at("details").get(); - // SPDLOG_DEBUG("Waiting for {} to enable [{}: {}]...", tickers[idx], status, event); - // Do we need to handle this? Happens when running init_zcoin_enable twice - // {"mmrpc":"2.0","result":{"status":"InProgress","details":{"TemporaryError":"z_rpc:387] UNIQUE constraint failed: blocks.height"}},"id":null} } if (event != last_event) { SPDLOG_DEBUG("Waiting for {} to enable [{}: {}]...", tickers[idx], status, event); - // After an event change, full activation is just a matter of time (earlier it might fail). - // We tag it as activated, so it shows up in portfolio and not enable list. if (!m_coins_informations[tickers[idx]].currently_enabled && event != "ActivatingCoin") { std::unique_lock lock(m_coin_cfg_mutex); @@ -1436,7 +1420,6 @@ namespace atomic_dex this->handle_exception_pplx_task(previous_task, "batch_enable_coins", batch); update_coin_status(this->m_current_wallet_name, tickers, false, m_coins_informations, m_coin_cfg_mutex); }); - dispatcher_.trigger(); this->m_nb_update_required += 1; }; @@ -2078,22 +2061,6 @@ namespace atomic_dex } } - void - mm2_service::on_zhtlc_enter_enabling([[maybe_unused]] const zhtlc_enter_enabling& evt) - { - SPDLOG_DEBUG("{} l{} f[{}]", __FUNCTION__, __LINE__, fs::path(__FILE__).filename().string()); - - m_zhtlc_enable_thread_active = true; - } - - void - mm2_service::on_zhtlc_leave_enabling([[maybe_unused]] const zhtlc_leave_enabling& evt) - { - SPDLOG_DEBUG("{} l{} f[{}]", __FUNCTION__, __LINE__, fs::path(__FILE__).filename().string()); - - m_zhtlc_enable_thread_active = false; - } - void mm2_service::on_gui_enter_trading([[maybe_unused]] const gui_enter_trading& evt) { @@ -2138,12 +2105,6 @@ namespace atomic_dex return this->m_orderbook_thread_active.load(); } - bool - mm2_service::is_zhtlc_enable_thread_active() const - { - return this->m_zhtlc_enable_thread_active.load(); - } - nlohmann::json mm2_service::get_raw_mm2_ticker_cfg(const std::string& ticker) const { diff --git a/src/core/atomicdex/services/mm2/mm2.service.hpp b/src/core/atomicdex/services/mm2/mm2.service.hpp index e991955d45..cbe5e456e9 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.hpp +++ b/src/core/atomicdex/services/mm2/mm2.service.hpp @@ -92,7 +92,6 @@ namespace atomic_dex //! Atomicity / Threads std::atomic_bool m_mm2_running{false}; std::atomic_bool m_orderbook_thread_active{false}; - std::atomic_bool m_zhtlc_enable_thread_active{false}; std::atomic_size_t m_nb_update_required{0}; std::thread m_mm2_init_thread; @@ -154,10 +153,6 @@ namespace atomic_dex void on_gui_leave_trading(const gui_leave_trading& evt); - void on_zhtlc_enter_enabling(const zhtlc_enter_enabling& evt); - - void on_zhtlc_leave_enabling(const zhtlc_leave_enabling& evt); - //! Spawn mm2 instance with given seed void spawn_mm2_instance(std::string wallet_name, std::string passphrase, bool with_pin_cfg = false); @@ -251,7 +246,6 @@ namespace atomic_dex [[nodiscard]] bool do_i_have_enough_funds(const std::string& ticker, const t_float_50& amount) const; [[nodiscard]] bool is_orderbook_thread_active() const; - [[nodiscard]] bool is_zhtlc_enable_thread_active() const; [[nodiscard]] nlohmann::json get_raw_mm2_ticker_cfg(const std::string& ticker) const; From be19d122ad6c0e080dfaffba7511829272a73487 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 26 Nov 2022 01:01:01 +0800 Subject: [PATCH 02/12] fix infinite fees loading issue --- .../Dex/Exchange/Trade/ConfirmTradeModal.qml | 17 ++++++++++ .../Dex/Exchange/Trade/DefaultSweetModal.qml | 34 ------------------- src/core/atomicdex/pages/qt.trading.page.cpp | 10 ++---- 3 files changed, 19 insertions(+), 42 deletions(-) delete mode 100644 atomic_defi_design/Dex/Exchange/Trade/DefaultSweetModal.qml diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index 1bc9e6e007..82f157e019 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -20,6 +20,23 @@ MultipageModal horizontalPadding: 30 verticalPadding: 30 + Component.onCompleted: { + API.app.trading_pg.determine_fees() + } + + Connections { + target: API.app.trading_pg + function onFeesChanged() { + // console.log("onFeesChanged::fees: " + JSON.stringify(fees)) + } + } + Connections { + target: API.app.trading_pg + function onPreImageRpcStatusChanged(){ + // console.log("onPreImageRpcStatusChanged::preimage_rpc_busy: " + API.app.trading_pg.preimage_rpc_busy) + } + } + MultipageModalContent { titleText: qsTr("Confirm Exchange Details") diff --git a/atomic_defi_design/Dex/Exchange/Trade/DefaultSweetModal.qml b/atomic_defi_design/Dex/Exchange/Trade/DefaultSweetModal.qml deleted file mode 100644 index e0af2164c5..0000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/DefaultSweetModal.qml +++ /dev/null @@ -1,34 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import "../../Components" -import "../../Constants" -import ".." - -import "Orders/" - -DefaultModal { - id: root - - width: API.app.trading_pg.preimage_rpc_busy? 300 : 1100 - - onOpened: reset() - - function reset() { - API.app.trading_pg.determine_fees() - - } - Connections { - target: API.app.trading_pg - function onFeesChanged() { - console.log(JSON.stringify(API.app.trading_pg.fees)) - } - } - Connections { - target: API.app.trading_pg - function onPreImageRpcStatusChanged(){ - console.log(API.app.trading_pg.preimage_rpc_busy) - } - } -} diff --git a/src/core/atomicdex/pages/qt.trading.page.cpp b/src/core/atomicdex/pages/qt.trading.page.cpp index 22bfe71ccc..5d0b0c4297 100644 --- a/src/core/atomicdex/pages/qt.trading.page.cpp +++ b/src/core/atomicdex/pages/qt.trading.page.cpp @@ -722,10 +722,6 @@ namespace atomic_dex this->cap_volume(); this->get_orderbook_wrapper()->refresh_best_orders(); - if (!m_price.isEmpty() || m_price != "0") - { - this->determine_fees(); - } } } @@ -1070,7 +1066,6 @@ namespace atomic_dex this->set_volume(QString::fromStdString(m_preferred_order->at("initial_input_volume").get())); } this->get_orderbook_wrapper()->refresh_best_orders(); - this->determine_fees(); emit preferredOrderChangeFinished(); } } @@ -1164,10 +1159,9 @@ namespace atomic_dex } if (volume == "0") { - volume = "0.0001"; + return; } - SPDLOG_DEBUG("get_volume().toStdString(): {}", get_volume().toStdString()); t_trade_preimage_request req{ .base_coin = base, .rel_coin = rel, @@ -1181,7 +1175,7 @@ namespace atomic_dex mm2::to_json(preimage_request, req); batch.push_back(preimage_request); preimage_request["userpass"] = "******"; - SPDLOG_DEBUG("trade_preimage request: {}", preimage_request.dump(-1)); + SPDLOG_DEBUG("trade_preimage request: {}", preimage_request.dump(4)); this->set_preimage_busy(true); auto answer_functor = [this, &mm2](web::http::http_response resp) From 9417aa93c193fa7daa5323cadac2a930013635ca Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 26 Nov 2022 01:58:24 +0800 Subject: [PATCH 03/12] handle error in fees response --- .../Dex/Exchange/Trade/ConfirmTradeModal.qml | 21 +++++++++++++++++++ src/core/atomicdex/pages/qt.trading.page.cpp | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index 82f157e019..94a055f1cf 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -181,6 +181,27 @@ MultipageModal } } + ColumnLayout + { + id: fees_error + width: parent.width - 20 + anchors.centerIn: parent + visible: root.fees.hasOwnProperty('error') + + DefaultText + { + text_value: { + if (root.fees.hasOwnProperty('error')) + { + let error = fees["error"].split("] ").slice(-1) + return qsTr("Fees: " + error) + } + return "" + } + Layout.bottomMargin: 8 + } + } + ColumnLayout { id: fees_detail diff --git a/src/core/atomicdex/pages/qt.trading.page.cpp b/src/core/atomicdex/pages/qt.trading.page.cpp index 5d0b0c4297..98bf02d79c 100644 --- a/src/core/atomicdex/pages/qt.trading.page.cpp +++ b/src/core/atomicdex/pages/qt.trading.page.cpp @@ -489,7 +489,8 @@ namespace atomic_dex if (m_models_actions[orderbook_need_a_reset] && this->m_current_trading_mode == TradingModeGadget::Pro) { - this->set_preferred_settings(); + // This goes to a function which looks like it is for bot trading. We dont need to run it at this stage. + // this->set_preferred_settings(); } else { From c5d7402692d71c8501e65b0fd87bf0b8fda71ec9 Mon Sep 17 00:00:00 2001 From: syl Date: Sat, 26 Nov 2022 10:05:35 +0100 Subject: [PATCH 04/12] Remove batch failed event references It is never triggered --- .../Dex/Dashboard/NotificationsModal.qml | 23 ------------------- src/core/atomicdex/events/events.hpp | 6 ----- .../managers/notification.manager.cpp | 11 --------- .../managers/notification.manager.hpp | 1 - 4 files changed, 41 deletions(-) diff --git a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml index 0ab0902d52..69f8f60482 100644 --- a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml +++ b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml @@ -30,7 +30,6 @@ DexPopup readonly property string disablingCoinFailedStatus: "onDisablingCoinFailedStatus" readonly property string endpointNonReacheableStatus: "onEndpointNonReacheableStatus" readonly property string mismatchCustomCoinConfigurationNotification: "onMismatchCustomCoinConfiguration" - readonly property string batchFailedNotification: "onBatchFailed" readonly property string check_internet_connection_text: qsTr("Please check your internet connection (e.g. VPN service or firewall might block it).") @@ -184,8 +183,6 @@ DexPopup return qsTr("Endpoint not reachable") case mismatchCustomCoinConfigurationNotification: return qsTr("Mismatch at %1 custom asset configuration", "TICKER").arg(notification.params.asset) - case batchFailedNotification: - return qsTr("Batch %1 failed. Reason: %2").arg(notification.params.from).arg(notification.params.reason) } } @@ -207,8 +204,6 @@ DexPopup return notification.params.base_uri case mismatchCustomCoinConfigurationNotification: return qsTr("Application needs to be restarted for %1 custom asset.", "TICKER").arg(notification.params.asset) - case batchFailedNotification: - return notification.params.reason } } @@ -376,22 +371,6 @@ DexPopup toast.show(title, General.time_toast_important_error, "", true, true) } - function onBatchFailed(reason, from, human_date, timestamp) - { - newNotification( - batchFailedNotification, - { - human_date, - timestamp, - reason, - from - }, - timestamp, - human_date) - - toast.show(title, General.time_toast_important_error, reason) - } - Component.onCompleted: { API.app.notification_mgr.updateSwapStatus.connect(onUpdateSwapStatus) @@ -401,7 +380,6 @@ DexPopup API.app.notification_mgr.disablingCoinFailedStatus.connect(onDisablingCoinFailedStatus) API.app.notification_mgr.endpointNonReacheableStatus.connect(onEndpointNonReacheableStatus) API.app.notification_mgr.mismatchCustomCoinConfiguration.connect(onMismatchCustomCoinConfiguration) - API.app.notification_mgr.batchFailed.connect(onBatchFailed) } Component.onDestruction: @@ -413,7 +391,6 @@ DexPopup API.app.notification_mgr.disablingCoinFailedStatus.disconnect(onDisablingCoinFailedStatus) API.app.notification_mgr.endpointNonReacheableStatus.disconnect(onEndpointNonReacheableStatus) API.app.notification_mgr.mismatchCustomCoinConfiguration.disconnect(onMismatchCustomCoinConfiguration) - API.app.notification_mgr.batchFailed.disconnect(onBatchFailed) } SystemTrayIcon diff --git a/src/core/atomicdex/events/events.hpp b/src/core/atomicdex/events/events.hpp index 9f19cd0f7f..a2ab517a0c 100644 --- a/src/core/atomicdex/events/events.hpp +++ b/src/core/atomicdex/events/events.hpp @@ -68,12 +68,6 @@ namespace atomic_dex std::string reason; }; - struct batch_failed - { - std::string from; - std::string reason; - }; - struct mismatch_configuration_custom_coin { std::string coin; diff --git a/src/core/atomicdex/managers/notification.manager.cpp b/src/core/atomicdex/managers/notification.manager.cpp index b39c71c857..0f9a209192 100644 --- a/src/core/atomicdex/managers/notification.manager.cpp +++ b/src/core/atomicdex/managers/notification.manager.cpp @@ -37,7 +37,6 @@ namespace atomic_dex void notification_manager::connect_signals() { - m_dispatcher.sink().connect<¬ification_manager::on_batch_failed>(*this); m_dispatcher.sink().connect<¬ification_manager::on_swap_status_notification>(*this); m_dispatcher.sink().connect<¬ification_manager::on_balance_update_notification>(*this); m_dispatcher.sink().connect<¬ification_manager::on_enabling_z_coin_status>(*this); @@ -51,7 +50,6 @@ namespace atomic_dex void notification_manager::disconnect_signals() { - m_dispatcher.sink().disconnect<¬ification_manager::on_batch_failed>(*this); m_dispatcher.sink().disconnect<¬ification_manager::on_swap_status_notification>(*this); m_dispatcher.sink().disconnect<¬ification_manager::on_balance_update_notification>(*this); m_dispatcher.sink().disconnect<¬ification_manager::on_enabling_coin_failed>(*this); @@ -120,13 +118,4 @@ namespace atomic_dex { emit fatalNotification(QString::fromStdString(evt.message)); } - - void - notification_manager::on_batch_failed(const batch_failed& evt) - { - using namespace std::chrono; - qint64 timestamp = duration_cast(system_clock::now().time_since_epoch()).count(); - QString human_date = QString::fromStdString(utils::to_human_date(timestamp, "%e %b %Y, %H:%M")); - emit batchFailed(QString::fromStdString(evt.reason), QString::fromStdString(evt.from), human_date, timestamp); - } } // namespace atomic_dex diff --git a/src/core/atomicdex/managers/notification.manager.hpp b/src/core/atomicdex/managers/notification.manager.hpp index a9c01ecd87..657e642139 100644 --- a/src/core/atomicdex/managers/notification.manager.hpp +++ b/src/core/atomicdex/managers/notification.manager.hpp @@ -40,7 +40,6 @@ namespace atomic_dex void disconnect_signals() ; //! Callbacks - void on_batch_failed(const batch_failed& evt);; void on_swap_status_notification(const swap_status_notification& evt); void on_enabling_z_coin_status(const enabling_z_coin_status& evt); void on_enabling_coin_failed(const enabling_coin_failed& evt); From a84ec965b3635a1cc0a60ded9b8020ace9fa26c9 Mon Sep 17 00:00:00 2001 From: syl Date: Sat, 26 Nov 2022 10:08:00 +0100 Subject: [PATCH 05/12] Remove mismatch custom coin config event It's never triggered --- .../Dex/Dashboard/NotificationsModal.qml | 41 ------------------- src/core/atomicdex/events/events.hpp | 5 --- .../managers/notification.manager.cpp | 10 ----- .../managers/notification.manager.hpp | 1 - 4 files changed, 57 deletions(-) diff --git a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml index 69f8f60482..c6d8fa9e79 100644 --- a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml +++ b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml @@ -29,7 +29,6 @@ DexPopup readonly property string enablingCoinFailedStatusNotification: "onEnablingCoinFailedStatus" readonly property string disablingCoinFailedStatus: "onDisablingCoinFailedStatus" readonly property string endpointNonReacheableStatus: "onEndpointNonReacheableStatus" - readonly property string mismatchCustomCoinConfigurationNotification: "onMismatchCustomCoinConfiguration" readonly property string check_internet_connection_text: qsTr("Please check your internet connection (e.g. VPN service or firewall might block it).") @@ -181,8 +180,6 @@ DexPopup return qsTr("Failed to disable %1", "TICKER").arg(notification.params.coin) case endpointNonReacheableStatus: return qsTr("Endpoint not reachable") - case mismatchCustomCoinConfigurationNotification: - return qsTr("Mismatch at %1 custom asset configuration", "TICKER").arg(notification.params.asset) } } @@ -202,8 +199,6 @@ DexPopup return "" case endpointNonReacheableStatus: return notification.params.base_uri - case mismatchCustomCoinConfigurationNotification: - return qsTr("Application needs to be restarted for %1 custom asset.", "TICKER").arg(notification.params.asset) } } @@ -296,16 +291,6 @@ DexPopup return } - // Check if there is mismatch error, ignore this one - for (let n of notifications_list) - { - if (n.event_name === mismatchCustomCoinConfigurationNotification && n.params.asset === coin) - { - console.trace() - return - } - } - error = check_internet_connection_text + "\n\n" + error newNotification( @@ -356,21 +341,6 @@ DexPopup toast.show(qsTr("Endpoint not reachable"), General.time_toast_important_error, error) } - function onMismatchCustomCoinConfiguration(asset, human_date, timestamp) - { - newNotification( - mismatchCustomCoinConfigurationNotification, - { - asset, - human_date, - timestamp - }, - timestamp, - human_date) - - toast.show(title, General.time_toast_important_error, "", true, true) - } - Component.onCompleted: { API.app.notification_mgr.updateSwapStatus.connect(onUpdateSwapStatus) @@ -379,7 +349,6 @@ DexPopup API.app.notification_mgr.enablingCoinFailedStatus.connect(onEnablingCoinFailedStatus) API.app.notification_mgr.disablingCoinFailedStatus.connect(onDisablingCoinFailedStatus) API.app.notification_mgr.endpointNonReacheableStatus.connect(onEndpointNonReacheableStatus) - API.app.notification_mgr.mismatchCustomCoinConfiguration.connect(onMismatchCustomCoinConfiguration) } Component.onDestruction: @@ -390,7 +359,6 @@ DexPopup API.app.notification_mgr.enablingCoinFailedStatus.disconnect(onEnablingCoinFailedStatus) API.app.notification_mgr.disablingCoinFailedStatus.disconnect(onDisablingCoinFailedStatus) API.app.notification_mgr.endpointNonReacheableStatus.disconnect(onEndpointNonReacheableStatus) - API.app.notification_mgr.mismatchCustomCoinConfiguration.disconnect(onMismatchCustomCoinConfiguration) } SystemTrayIcon @@ -599,9 +567,6 @@ DexPopup case enablingCoinFailedStatusNotification: name = "repeat" break - case mismatchCustomCoinConfigurationNotification: - name = "restart-alert" - break default: name = "check" break @@ -630,12 +595,6 @@ DexPopup API.app.enable_coins([event_before_removal.params.coin]) break - case mismatchCustomCoinConfigurationNotification: - console.log("Restarting for", event_before_removal.params.asset, "custom asset configuration mismatch...") - root.close() - restart_modal.open() - break - default: removeNotification() break diff --git a/src/core/atomicdex/events/events.hpp b/src/core/atomicdex/events/events.hpp index a2ab517a0c..084e39b9f5 100644 --- a/src/core/atomicdex/events/events.hpp +++ b/src/core/atomicdex/events/events.hpp @@ -68,11 +68,6 @@ namespace atomic_dex std::string reason; }; - struct mismatch_configuration_custom_coin - { - std::string coin; - }; - struct endpoint_nonreacheable { std::string base_uri; diff --git a/src/core/atomicdex/managers/notification.manager.cpp b/src/core/atomicdex/managers/notification.manager.cpp index 0f9a209192..e57fb22971 100644 --- a/src/core/atomicdex/managers/notification.manager.cpp +++ b/src/core/atomicdex/managers/notification.manager.cpp @@ -43,7 +43,6 @@ namespace atomic_dex m_dispatcher.sink().connect<¬ification_manager::on_enabling_coin_failed>(*this); m_dispatcher.sink().connect<¬ification_manager::on_disabling_coin_failed>(*this); m_dispatcher.sink().connect<¬ification_manager::on_endpoint_nonreacheable>(*this); - m_dispatcher.sink().connect<¬ification_manager::on_mismatch_custom_coins_configuration>(*this); m_dispatcher.sink().connect<¬ification_manager::on_fatal_notification>(*this); } @@ -56,7 +55,6 @@ namespace atomic_dex m_dispatcher.sink().disconnect<¬ification_manager::on_disabling_coin_failed>(*this); m_dispatcher.sink().disconnect<¬ification_manager::on_enabling_z_coin_status>(*this); m_dispatcher.sink().disconnect<¬ification_manager::on_endpoint_nonreacheable>(*this); - m_dispatcher.sink().disconnect<¬ification_manager::on_mismatch_custom_coins_configuration>(*this); m_dispatcher.sink().disconnect<¬ification_manager::on_fatal_notification>(*this); } @@ -104,14 +102,6 @@ namespace atomic_dex QString human_date = QString::fromStdString(utils::to_human_date(timestamp, "%e %b %Y, %H:%M")); emit endpointNonReacheableStatus(QString::fromStdString(evt.base_uri), human_date, timestamp); } - void - notification_manager::on_mismatch_custom_coins_configuration(const mismatch_configuration_custom_coin& evt) - { - using namespace std::chrono; - qint64 timestamp = duration_cast(system_clock::now().time_since_epoch()).count(); - QString human_date = QString::fromStdString(utils::to_human_date(timestamp, "%e %b %Y, %H:%M")); - emit mismatchCustomCoinConfiguration(QString::fromStdString(evt.coin), human_date, timestamp); - } void notification_manager::on_fatal_notification(const fatal_notification& evt) diff --git a/src/core/atomicdex/managers/notification.manager.hpp b/src/core/atomicdex/managers/notification.manager.hpp index 657e642139..a6c201cf4f 100644 --- a/src/core/atomicdex/managers/notification.manager.hpp +++ b/src/core/atomicdex/managers/notification.manager.hpp @@ -46,7 +46,6 @@ namespace atomic_dex void on_disabling_coin_failed(const disabling_coin_failed& evt); void on_balance_update_notification(const balance_update_notification& evt); void on_endpoint_nonreacheable(const endpoint_nonreacheable& evt); - void on_mismatch_custom_coins_configuration(const mismatch_configuration_custom_coin& evt); void on_fatal_notification(const fatal_notification& evt); signals: From 092cdd5ec872ac5c761922a611647a0c28c4bbd4 Mon Sep 17 00:00:00 2001 From: SirSevenG Date: Mon, 28 Nov 2022 17:13:42 +0300 Subject: [PATCH 06/12] add optional to hpp --- src/core/atomicdex/api/mm2/enable_slp_rpc.hpp | 2 ++ src/core/atomicdex/api/mm2/get_public_key_rpc.hpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/core/atomicdex/api/mm2/enable_slp_rpc.hpp b/src/core/atomicdex/api/mm2/enable_slp_rpc.hpp index f06ce0dfb0..f3bce14e44 100644 --- a/src/core/atomicdex/api/mm2/enable_slp_rpc.hpp +++ b/src/core/atomicdex/api/mm2/enable_slp_rpc.hpp @@ -16,6 +16,8 @@ #pragma once +#include + #include #include //> nlohmann::json diff --git a/src/core/atomicdex/api/mm2/get_public_key_rpc.hpp b/src/core/atomicdex/api/mm2/get_public_key_rpc.hpp index 609ae0261e..fefb0235e2 100644 --- a/src/core/atomicdex/api/mm2/get_public_key_rpc.hpp +++ b/src/core/atomicdex/api/mm2/get_public_key_rpc.hpp @@ -16,6 +16,8 @@ #pragma once +#include + #include #include From da6b2f65b27fe8b053c54fdb7054c2028489bd75 Mon Sep 17 00:00:00 2001 From: syl Date: Mon, 28 Nov 2022 17:07:37 +0100 Subject: [PATCH 07/12] Swaping was showing two toast messages instead of one --- atomic_defi_design/Dex/Exchange/Trade/ProView.qml | 1 + atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml index 82261e5005..d0ddc17124 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml @@ -75,6 +75,7 @@ RowLayout Connections { target: exchange_trade + enabled: form.enabled function onBuy_sell_rpc_busyChanged() { if (buy_sell_rpc_busy) diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml index 31bd8e7915..db75ac93f9 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml @@ -75,6 +75,7 @@ ClipRRect // Trade Card Connections { + enabled: parent.enabled target: Constants.API.app.trading_pg.orderbook.bids function onBetterOrderDetected(newOrder) @@ -645,7 +646,7 @@ ClipRRect // Trade Card DexGradientAppButton { - enabled: !Constants.API.app.trading_pg.preimage_rpc_busy && !_swapAlert.visible + enabled: parent.enabled && !Constants.API.app.trading_pg.preimage_rpc_busy && !_swapAlert.visible opacity: enabled ? 1 : .6 radius: 10 anchors.fill: parent @@ -660,6 +661,7 @@ ClipRRect // Trade Card Connections { + enabled: parent.enabled target: exchange_trade function onBuy_sell_rpc_busyChanged() { From 4b5f594fc23420fd03fb2622bbf5331f65b319f3 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 29 Nov 2022 01:03:54 +0800 Subject: [PATCH 08/12] move preimage wait to before confirm modal --- .../Exchange/ProView/PlaceOrderForm/Main.qml | 87 ++++++++++++++++++- .../ProView/PlaceOrderForm/OrderForm.qml | 3 - .../Dex/Exchange/Trade/ConfirmTradeModal.qml | 29 +------ .../Dex/Exchange/Trade/SimpleView/Trade.qml | 5 +- src/core/atomicdex/pages/qt.trading.page.cpp | 11 ++- src/core/atomicdex/pages/qt.trading.page.hpp | 1 + 6 files changed, 100 insertions(+), 36 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml index cd2a8cff33..7020713b87 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml @@ -9,15 +9,35 @@ import "../../../Constants" import Dex.Themes 1.0 as Dex import Dex.Components 1.0 as Dex import AtomicDEX.MarketMode 1.0 +import AtomicDEX.TradingError 1.0 Widget { title: qsTr("Place Order") + property int loop_count: 0 + property bool show_waiting_for_trade_preimage: false; + property var fees: API.app.trading_pg.fees + property var preimage_rpc_busy: API.app.trading_pg.preimage_rpc_busy property string protocolIcon: General.platformIcon(General.coinPlatform(left_ticker)) + property var trade_preimage_error: fees.hasOwnProperty('error') ? fees["error"].split("] ").slice(-1) : "" + readonly property bool trade_preimage_ready: fees.hasOwnProperty('base_transaction_fees_ticker') + readonly property bool can_submit_trade: last_trading_error === TradingError.None margins: 15 collapsable: false + Connections { + target: API.app.trading_pg + + function onFeesChanged() { + // console.log("onFeesChanged::fees: " + JSON.stringify(fees)) + } + + function onPreImageRpcStatusChanged(){ + // console.log("onPreImageRpcStatusChanged::preimage_rpc_busy: " + API.app.trading_pg.preimage_rpc_busy) + } + } + // Market mode selector RowLayout { @@ -191,6 +211,7 @@ Widget DexGradientAppButton { + id: swap_btn height: 40 Layout.preferredWidth: parent.width - 20 Layout.alignment: Qt.AlignHCenter @@ -198,7 +219,69 @@ Widget radius: 18 text: qsTr("START SWAP") font.weight: Font.Medium - enabled: formBase.can_submit_trade - onClicked: confirm_trade_modal.open() + enabled: can_submit_trade && !show_waiting_for_trade_preimage + onClicked: + { + console.log("Getting fees info...") + API.app.trading_pg.determine_fees() + show_waiting_for_trade_preimage = true; + } + + Item + { + visible: show_waiting_for_trade_preimage + height: parent.height - 10 + width: parent.width - 10 + anchors.fill: parent + anchors.centerIn: parent + + DefaultBusyIndicator + { + id: preimage_BusyIndicator + anchors.fill: parent + anchors.centerIn: parent + indicatorSize: 32 + indicatorDotSize: 5 + } + } + + DexMouseArea + { + id: areaAlert + hoverEnabled: true + anchors.fill: parent + onClicked: + { + console.log("Getting fees info...") + API.app.trading_pg.determine_fees() + show_waiting_for_trade_preimage = true; + check_trade_preimage.start() + } + } + } + + Timer { + id: check_trade_preimage + interval: 500; + running: false; + repeat: true; + triggeredOnStart: true; + onTriggered: { + loop_count++; + console.log("Getting fees info... " + loop_count + "/50") + if (trade_preimage_ready) + { + show_waiting_for_trade_preimage = false; + loop_count = 0; + stop(); + confirm_trade_modal.open() + } + else if (loop_count > 50) + { + show_waiting_for_trade_preimage = false; + trade_preimage_error = "Timed Out" + stop() + } + } } } diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml index bf74c7183d..99f66e762d 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml @@ -3,8 +3,6 @@ import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import QtGraphicalEffects 1.0 -import AtomicDEX.MarketMode 1.0 -import AtomicDEX.TradingError 1.0 import "../../../Components" import App 1.0 import Dex.Themes 1.0 as Dex @@ -23,7 +21,6 @@ ColumnLayout readonly property int input_height: 70 readonly property int subfield_margin: 5 - readonly property bool can_submit_trade: last_trading_error === TradingError.None // Will move to backend: Minimum Fee function getMaxBalance() diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index 94a055f1cf..73089be9dc 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -20,23 +20,6 @@ MultipageModal horizontalPadding: 30 verticalPadding: 30 - Component.onCompleted: { - API.app.trading_pg.determine_fees() - } - - Connections { - target: API.app.trading_pg - function onFeesChanged() { - // console.log("onFeesChanged::fees: " + JSON.stringify(fees)) - } - } - Connections { - target: API.app.trading_pg - function onPreImageRpcStatusChanged(){ - // console.log("onPreImageRpcStatusChanged::preimage_rpc_busy: " + API.app.trading_pg.preimage_rpc_busy) - } - } - MultipageModalContent { titleText: qsTr("Confirm Exchange Details") @@ -186,18 +169,12 @@ MultipageModal id: fees_error width: parent.width - 20 anchors.centerIn: parent - visible: root.fees.hasOwnProperty('error') + visible: root.fees.hasOwnProperty('error') // Should be handled before this modal, but leaving here as a fallback DefaultText { - text_value: { - if (root.fees.hasOwnProperty('error')) - { - let error = fees["error"].split("] ").slice(-1) - return qsTr("Fees: " + error) - } - return "" - } + width: parent.width + text_value: root.fees.hasOwnProperty('error') ? root.fees["error"].split("] ").slice(-1) : "" Layout.bottomMargin: 8 } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml index 31bd8e7915..8cc991ad70 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml @@ -944,9 +944,10 @@ ClipRRect // Trade Card DefaultBusyIndicator { id: fees_busy - width: 30 - height: 30 + anchors.fill: parent anchors.centerIn: parent + indicatorSize: 32 + indicatorDotSize: 5 visible: Constants.API.app.trading_pg.preimage_rpc_busy || _feesList.count == 0 } } diff --git a/src/core/atomicdex/pages/qt.trading.page.cpp b/src/core/atomicdex/pages/qt.trading.page.cpp index 98bf02d79c..3c2c01331d 100644 --- a/src/core/atomicdex/pages/qt.trading.page.cpp +++ b/src/core/atomicdex/pages/qt.trading.page.cpp @@ -1153,12 +1153,17 @@ namespace atomic_dex const auto rel = market_pair->get_right_selected_coin().toStdString(); const auto swap_method = m_market_mode == MarketMode::Sell ? "sell"s : "buy"s; std::string volume = get_volume().toStdString(); + std::string price = get_price().toStdString(); - if (base == rel) + if (base == rel) // trade_preimage::BaseEqualRel { return; } - if (volume == "0") + if (volume == "0") // trade_preimage::VolumeTooLow (can also occur if trade vol + fees is > balance) + { + return; + } + if (std::stof(price) < 0.00000001) // trade_preimage::PriceTooLow { return; } @@ -1168,7 +1173,7 @@ namespace atomic_dex .rel_coin = rel, .swap_method = swap_method, .volume = volume, - .price = get_price().toStdString() + .price = price }; nlohmann::json batch; diff --git a/src/core/atomicdex/pages/qt.trading.page.hpp b/src/core/atomicdex/pages/qt.trading.page.hpp index 0e8af4be11..95938cca65 100644 --- a/src/core/atomicdex/pages/qt.trading.page.hpp +++ b/src/core/atomicdex/pages/qt.trading.page.hpp @@ -16,6 +16,7 @@ #pragma once +#include #include #include From dd8d4db842a9decd0a5a5905e0a49b61d6fb304c Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 29 Nov 2022 01:43:41 +0800 Subject: [PATCH 09/12] no autoclose, reset fees after confirm/cancel --- .../Dex/Exchange/Trade/ConfirmTradeModal.qml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index 73089be9dc..fa1feb49e7 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -19,6 +19,7 @@ MultipageModal width: 720 horizontalPadding: 30 verticalPadding: 30 + closePolicy: Popup.NoAutoClose MultipageModalContent { @@ -406,7 +407,10 @@ MultipageModal leftPadding: 45 rightPadding: 45 radius: 10 - onClicked: root.close() + onClicked: { + root.close() + API.app.trading_pg.reset_fees() + } }, Item { Layout.fillWidth: true }, @@ -425,7 +429,8 @@ MultipageModal is_dpow_configurable: config_section.is_dpow_configurable, enable_dpow_confs: enable_dpow_confs.checked, required_confirmation_count: required_confirmation_count.value, }, - config_section.default_config) + config_section.default_config) + API.app.trading_pg.reset_fees() } }, From 0ff1d93a2663e0b3bd1c94269d2888312044bb32 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 29 Nov 2022 03:16:14 +0800 Subject: [PATCH 10/12] show preimage error message, clear message on change --- .../Exchange/ProView/PlaceOrderForm/Main.qml | 56 ++++++++++++++++--- .../Exchange/Trade/BestOrder/ListDelegate.qml | 5 +- .../Exchange/Trade/OrderBook/ListDelegate.qml | 2 +- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml index 7020713b87..62e2c1675d 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml @@ -36,6 +36,36 @@ Widget function onPreImageRpcStatusChanged(){ // console.log("onPreImageRpcStatusChanged::preimage_rpc_busy: " + API.app.trading_pg.preimage_rpc_busy) } + function onPrefferedOrderChanged(){ + reset_fees_state() + } + } + + Connections + { + target: app + function onPairChanged(left, right) + { + reset_fees_state() + } + } + + Connections + { + target: exchange_trade + function onOrderSelected() + { + reset_fees_state() + } + } + + function reset_fees_state() + { + show_waiting_for_trade_preimage = false; + check_trade_preimage.stop() + loop_count = 0 + API.app.trading_pg.reset_fees() + errors.text_value = "" } // Market mode selector @@ -145,7 +175,10 @@ Widget Layout.preferredWidth: 30 Layout.rightMargin: 5 foregroundColor: Dex.CurrentTheme.noColor - onClicked: API.app.trading_pg.reset_order() + onClicked: { + API.app.trading_pg.reset_order() + reset_fees_state() + } Qaterial.ColorIcon { @@ -219,7 +252,7 @@ Widget radius: 18 text: qsTr("START SWAP") font.weight: Font.Medium - enabled: can_submit_trade && !show_waiting_for_trade_preimage + enabled: can_submit_trade && !show_waiting_for_trade_preimage && errors.text_value == "" onClicked: { console.log("Getting fees info...") @@ -271,15 +304,24 @@ Widget console.log("Getting fees info... " + loop_count + "/50") if (trade_preimage_ready) { - show_waiting_for_trade_preimage = false; - loop_count = 0; - stop(); + show_waiting_for_trade_preimage = false + loop_count = 0 + stop() confirm_trade_modal.open() } + else if (trade_preimage_error != "") + { + loop_count = 0 + errors.text_value = trade_preimage_error.toString() + show_waiting_for_trade_preimage = false + stop() + + } else if (loop_count > 50) { - show_waiting_for_trade_preimage = false; - trade_preimage_error = "Timed Out" + loop_count = 0 + show_waiting_for_trade_preimage = false + trade_preimage_error = "Trade preimage timed out, try again." stop() } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml index 08cccfba5a..b3afd35291 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml @@ -6,10 +6,10 @@ import Qaterial 1.0 as Qaterial import "../../../Components" import "../../../Constants" -import Dex.Themes 1.0 as Dex -import AtomicDEX.MarketMode 1.0 import App 1.0 as App +import Dex.Themes 1.0 as Dex import Dex.Components 1.0 as Dex +import AtomicDEX.MarketMode 1.0 Item { @@ -177,7 +177,6 @@ Item app.pairChanged(base_ticker, coin) } API.app.trading_pg.orderbook.select_best_order(uuid) - orderSelected() } } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml index a665959c08..f73505853a 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml @@ -5,9 +5,9 @@ import QtQuick.Controls 2.15 import Qaterial 1.0 as Qaterial import "../../../Components" +import "../../../Constants" import App 1.0 import bignumberjs 1.0 -import "../../../Constants" import Dex.Themes 1.0 as Dex import Dex.Components 1.0 as Dex import AtomicDEX.MarketMode 1.0 From 6c4160aae708396f0899ec53d3ca873c49bff02a Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 30 Nov 2022 01:52:53 +0800 Subject: [PATCH 11/12] restore best order amount values --- .../Exchange/Trade/OrderBook/ListDelegate.qml | 7 +++--- .../Dex/Exchange/Trade/ProView.qml | 5 +--- .../Trade/SimpleView/SubBestOrder.qml | 2 +- .../api/mm2/orderbook.order.contents.cpp | 1 - .../api/mm2/orderbook.order.contents.hpp | 2 +- src/core/atomicdex/api/mm2/rpc.orderbook.cpp | 22 +++++++++--------- .../atomicdex/models/qt.orderbook.model.cpp | 23 ------------------- .../atomicdex/models/qt.orderbook.model.hpp | 3 --- .../models/qt.orderbook.proxy.model.cpp | 6 ----- .../pages/widgets/dex/qt.orderbook.cpp | 3 --- 10 files changed, 17 insertions(+), 57 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml index a665959c08..f96c220045 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml @@ -109,9 +109,8 @@ Item { orderbook_list.currentIndex = index - selectOrder(isAsk, coin, price, quantity, price_denom, - price_numer, quantity_denom, quantity_numer, - min_volume, base_min_volume, base_max_volume, + selectOrder(isAsk, coin, price, price_denom, + price_numer, min_volume, base_min_volume, base_max_volume, rel_min_volume, rel_max_volume, base_max_volume_denom, base_max_volume_numer, uuid) @@ -189,7 +188,7 @@ Item { anchors.verticalCenter: parent.verticalCenter width: parent.width * 0.37 - text: { new BigNumber(quantity).toFixed(6) } + text: { new BigNumber(rel_max_volume).toFixed(6) } font.family: DexTypo.fontFamily font.pixelSize: 12 horizontalAlignment: Text.AlignRight diff --git a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml index d0ddc17124..35bd225904 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml @@ -46,18 +46,15 @@ RowLayout property alias bestOrders: bestOrders property alias placeOrderForm: placeOrderForm - function selectOrder(is_asks, coin, price, quantity, price_denom, price_numer, quantity_denom, quantity_numer, min_volume, base_min_volume, base_max_volume, rel_min_volume, rel_max_volume, base_max_volume_denom, base_max_volume_numer, uuid) + function selectOrder(is_asks, coin, price, price_denom, price_numer, min_volume, base_min_volume, base_max_volume, rel_min_volume, rel_max_volume, base_max_volume_denom, base_max_volume_numer, uuid) { setMarketMode(!is_asks ? MarketMode.Sell : MarketMode.Buy) API.app.trading_pg.preffered_order = { "coin": coin, "price": price, - "quantity": quantity, "price_denom": price_denom, "price_numer": price_numer, - "quantity_denom": quantity_denom, - "quantity_numer": quantity_numer, "min_volume": min_volume, "base_min_volume": base_min_volume, "base_max_volume": base_max_volume, diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml index 5283df1664..cad1265732 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml @@ -183,7 +183,7 @@ DexListView { Layout.preferredWidth: _quantityColumnSize horizontalAlignment: Text.AlignRight - text_value: parseFloat(General.formatDouble(quantity, General.amountPrecision, true)).toFixed(8) + text_value: parseFloat(General.formatDouble(rel_max_volume, General.amountPrecision, true)).toFixed(8) font.pixelSize: 14 } diff --git a/src/core/atomicdex/api/mm2/orderbook.order.contents.cpp b/src/core/atomicdex/api/mm2/orderbook.order.contents.cpp index d33c7aeed3..7c066603fd 100644 --- a/src/core/atomicdex/api/mm2/orderbook.order.contents.cpp +++ b/src/core/atomicdex/api/mm2/orderbook.order.contents.cpp @@ -75,7 +75,6 @@ namespace atomic_dex::mm2 ss << "coin: " << coin << " "; ss << "address: " << address << " "; ss << "price: " << price << " "; - ss << "max_volume: " << maxvolume << " "; ss << "depth_percent: " << depth_percent << " "; ss << "base_max_volume: " << base_max_volume << " "; ss << "rel_max_volume: " << rel_max_volume << " "; diff --git a/src/core/atomicdex/api/mm2/orderbook.order.contents.hpp b/src/core/atomicdex/api/mm2/orderbook.order.contents.hpp index 7fd2bd47a2..0f350e8dab 100644 --- a/src/core/atomicdex/api/mm2/orderbook.order.contents.hpp +++ b/src/core/atomicdex/api/mm2/orderbook.order.contents.hpp @@ -33,7 +33,7 @@ namespace atomic_dex::mm2 std::string min_volume; std::string min_volume_fraction_numer; std::string min_volume_fraction_denom; - std::string maxvolume; + std::string max_volume; std::string max_volume_fraction_numer; std::string max_volume_fraction_denom; std::string base_min_volume; diff --git a/src/core/atomicdex/api/mm2/rpc.orderbook.cpp b/src/core/atomicdex/api/mm2/rpc.orderbook.cpp index 7dc053145c..a76afe8dcb 100644 --- a/src/core/atomicdex/api/mm2/rpc.orderbook.cpp +++ b/src/core/atomicdex/api/mm2/rpc.orderbook.cpp @@ -45,7 +45,7 @@ namespace atomic_dex::mm2 cur_asks.min_volume = cur_asks.base_min_volume; cur_asks.min_volume_fraction_numer = cur_asks.base_min_volume_numer; cur_asks.min_volume_fraction_denom = cur_asks.base_min_volume_denom; - cur_asks.maxvolume = cur_asks.base_max_volume; + cur_asks.max_volume = cur_asks.base_max_volume; cur_asks.max_volume_fraction_numer = cur_asks.base_max_volume_numer; cur_asks.max_volume_fraction_denom = cur_asks.base_max_volume_denom; @@ -54,10 +54,10 @@ namespace atomic_dex::mm2 boost::trim_right_if(cur_asks.price, boost::is_any_of("0")); cur_asks.price = cur_asks.price; } - cur_asks.maxvolume = atomic_dex::utils::adjust_precision(cur_asks.maxvolume); - t_float_50 total_f = safe_float(cur_asks.price) * safe_float(cur_asks.maxvolume); + cur_asks.max_volume = atomic_dex::utils::adjust_precision(cur_asks.max_volume); + t_float_50 total_f = safe_float(cur_asks.price) * safe_float(cur_asks.max_volume); cur_asks.total = atomic_dex::utils::adjust_precision(total_f.str()); - result_asks_f = result_asks_f + safe_float(cur_asks.maxvolume); + result_asks_f = result_asks_f + safe_float(cur_asks.max_volume); } answer.asks_total_volume = result_asks_f.str(); @@ -67,33 +67,33 @@ namespace atomic_dex::mm2 cur_bids.min_volume = cur_bids.base_min_volume; cur_bids.min_volume_fraction_numer = cur_bids.base_min_volume_numer; cur_bids.min_volume_fraction_denom = cur_bids.base_min_volume_denom; - cur_bids.maxvolume = cur_bids.base_max_volume; + cur_bids.max_volume = cur_bids.base_max_volume; cur_bids.max_volume_fraction_numer = cur_bids.base_max_volume_numer; cur_bids.max_volume_fraction_denom = cur_bids.base_max_volume_denom; - cur_bids.total = cur_bids.maxvolume; + cur_bids.total = cur_bids.max_volume; if (cur_bids.price.find('.') != std::string::npos) { boost::trim_right_if(cur_bids.price, boost::is_any_of("0")); cur_bids.price = cur_bids.price; } - cur_bids.maxvolume = atomic_dex::utils::adjust_precision(cur_bids.maxvolume); - t_float_50 total_f = safe_float(cur_bids.price) * safe_float(cur_bids.maxvolume); + cur_bids.max_volume = atomic_dex::utils::adjust_precision(cur_bids.max_volume); + t_float_50 total_f = safe_float(cur_bids.price) * safe_float(cur_bids.max_volume); cur_bids.total = atomic_dex::utils::adjust_precision(total_f.str()); - result_bids_f = result_bids_f + safe_float(cur_bids.maxvolume); + result_bids_f = result_bids_f + safe_float(cur_bids.max_volume); } answer.bids_total_volume = result_bids_f.str(); for (auto&& cur_asks: answer.asks) { - t_float_50 percent_f = safe_float(cur_asks.maxvolume) / result_asks_f; + t_float_50 percent_f = safe_float(cur_asks.max_volume) / result_asks_f; cur_asks.depth_percent = atomic_dex::utils::adjust_precision(percent_f.str()); // SPDLOG_INFO("cur_asks: {}", cur_asks.to_string()); } for (auto&& cur_bids: answer.bids) { - t_float_50 percent_f = safe_float(cur_bids.maxvolume) / result_bids_f; + t_float_50 percent_f = safe_float(cur_bids.max_volume) / result_bids_f; cur_bids.depth_percent = atomic_dex::utils::adjust_precision(percent_f.str()); // SPDLOG_INFO("cur_bids: {}", cur_bids.to_string()); } diff --git a/src/core/atomicdex/models/qt.orderbook.model.cpp b/src/core/atomicdex/models/qt.orderbook.model.cpp index 9f6b9344c5..3feab699f2 100644 --- a/src/core/atomicdex/models/qt.orderbook.model.cpp +++ b/src/core/atomicdex/models/qt.orderbook.model.cpp @@ -104,8 +104,6 @@ namespace atomic_dex return QString::fromStdString(m_model_data.at(index.row()).price_fraction_denom); case PriceNumerRole: return QString::fromStdString(m_model_data.at(index.row()).price_fraction_numer); - case QuantityRole: - return QString::fromStdString(m_model_data.at(index.row()).maxvolume); case TotalRole: return QString::fromStdString(m_model_data.at(index.row()).total); case UUIDRole: @@ -114,10 +112,6 @@ namespace atomic_dex return m_model_data.at(index.row()).is_mine; case PercentDepthRole: return QString::fromStdString(m_model_data.at(index.row()).depth_percent); - case QuantityDenomRole: - return QString::fromStdString(m_model_data.at(index.row()).max_volume_fraction_denom); - case QuantityNumerRole: - return QString::fromStdString(m_model_data.at(index.row()).max_volume_fraction_numer); case BaseMinVolumeRole: return QString::fromStdString(m_model_data.at(index.row()).base_min_volume); case BaseMinVolumeDenomRole: @@ -269,9 +263,6 @@ namespace atomic_dex case IsMineRole: order.is_mine = value.toBool(); break; - case QuantityRole: - order.maxvolume = value.toString().toStdString(); - break; case TotalRole: order.total = value.toString().toStdString(); break; @@ -281,12 +272,6 @@ namespace atomic_dex case PercentDepthRole: order.depth_percent = value.toString().toStdString(); break; - case QuantityDenomRole: - order.max_volume_fraction_denom = value.toString().toStdString(); - break; - case QuantityNumerRole: - order.max_volume_fraction_numer = value.toString().toStdString(); - break; case CoinRole: order.coin = value.toString().toStdString(); break; @@ -352,14 +337,11 @@ namespace atomic_dex return { {PriceRole, "price"}, {CoinRole, "coin"}, - {QuantityRole, "quantity"}, {TotalRole, "total"}, {UUIDRole, "uuid"}, {IsMineRole, "is_mine"}, {PriceDenomRole, "price_denom"}, {PriceNumerRole, "price_numer"}, - {QuantityDenomRole, "quantity_denom"}, - {QuantityNumerRole, "quantity_numer"}, {PercentDepthRole, "depth"}, {MinVolumeRole, "min_volume"}, {EnoughFundsToPayMinVolume, "enough_funds_to_pay_min_volume"}, @@ -461,7 +443,6 @@ namespace atomic_dex update_value(OrderbookRoles::PriceNumerRole, QString::fromStdString(order.price_fraction_numer), idx, *this); update_value(OrderbookRoles::PriceDenomRole, QString::fromStdString(order.price_fraction_denom), idx, *this); update_value(OrderbookRoles::IsMineRole, order.is_mine, idx, *this); - update_value(OrderbookRoles::QuantityRole, QString::fromStdString(order.maxvolume), idx, *this); update_value(OrderbookRoles::TotalRole, QString::fromStdString(order.total), idx, *this); update_value(OrderbookRoles::PercentDepthRole, QString::fromStdString(order.depth_percent), idx, *this); update_value(OrderbookRoles::BaseMinVolumeRole, QString::fromStdString(order.base_min_volume), idx, *this); @@ -488,7 +469,6 @@ namespace atomic_dex OrderbookRoles::PriceNumerRole, OrderbookRoles::PriceDenomRole, OrderbookRoles::IsMineRole, - OrderbookRoles::QuantityRole, OrderbookRoles::TotalRole, OrderbookRoles::PercentDepthRole, OrderbookRoles::BaseMinVolumeRole, @@ -651,11 +631,8 @@ namespace atomic_dex const bool is_buy = trading_pg.get_market_mode() == MarketMode::Buy; out["coin"] = QString::fromStdString(is_buy ? order.rel_coin.value() : order.coin); out["price"] = QString::fromStdString(order.price); - out["quantity"] = QString::fromStdString(order.maxvolume); out["price_denom"] = QString::fromStdString(order.price_fraction_denom); out["price_numer"] = QString::fromStdString(order.price_fraction_numer); - out["quantity_denom"] = QString::fromStdString(order.max_volume_fraction_denom); - out["quantity_numer"] = QString::fromStdString(order.max_volume_fraction_numer); out["min_volume"] = QString::fromStdString(order.min_volume); out["base_min_volume"] = QString::fromStdString(order.base_min_volume); out["base_max_volume"] = QString::fromStdString(order.base_max_volume); diff --git a/src/core/atomicdex/models/qt.orderbook.model.hpp b/src/core/atomicdex/models/qt.orderbook.model.hpp index 6b84565e20..6e320e68f9 100644 --- a/src/core/atomicdex/models/qt.orderbook.model.hpp +++ b/src/core/atomicdex/models/qt.orderbook.model.hpp @@ -52,14 +52,11 @@ namespace atomic_dex { PriceRole = Qt::UserRole + 1, // 257 CoinRole, - QuantityRole, TotalRole, UUIDRole, IsMineRole, PriceDenomRole, PriceNumerRole, - QuantityDenomRole, - QuantityNumerRole, PercentDepthRole, MinVolumeRole, EnoughFundsToPayMinVolume, diff --git a/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp b/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp index 1b61227097..16b1a350d4 100644 --- a/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp +++ b/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp @@ -48,8 +48,6 @@ namespace atomic_dex { case orderbook_model::PriceRole: return safe_float(left_data.toString().toStdString()) < safe_float(right_data.toString().toStdString()); - case orderbook_model::QuantityRole: - break; case orderbook_model::TotalRole: break; case orderbook_model::UUIDRole: @@ -62,10 +60,6 @@ namespace atomic_dex break; case orderbook_model::PercentDepthRole: break; - case orderbook_model::QuantityDenomRole: - break; - case orderbook_model::QuantityNumerRole: - break; case orderbook_model::CoinRole: break; case orderbook_model::MinVolumeRole: diff --git a/src/core/atomicdex/pages/widgets/dex/qt.orderbook.cpp b/src/core/atomicdex/pages/widgets/dex/qt.orderbook.cpp index 9721138a9b..9cc1563d25 100644 --- a/src/core/atomicdex/pages/widgets/dex/qt.orderbook.cpp +++ b/src/core/atomicdex/pages/widgets/dex/qt.orderbook.cpp @@ -194,11 +194,8 @@ namespace atomic_dex t_order_contents order = m_best_orders->get_order_content(idx); out["coin"] = QString::fromStdString(is_buy ? order.rel_coin.value() : order.coin); out["price"] = QString::fromStdString(order.price); - out["quantity"] = QString::fromStdString(order.maxvolume); out["price_denom"] = QString::fromStdString(order.price_fraction_denom); out["price_numer"] = QString::fromStdString(order.price_fraction_numer); - out["quantity_denom"] = QString::fromStdString(order.max_volume_fraction_denom); - out["quantity_numer"] = QString::fromStdString(order.max_volume_fraction_numer); out["min_volume"] = QString::fromStdString(order.min_volume); out["base_min_volume"] = QString::fromStdString(order.base_min_volume); out["base_max_volume"] = QString::fromStdString(order.base_max_volume); From 3ac5962a9d7c020f66e53ef60de55a4f12a76cb4 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 1 Dec 2022 04:25:30 +0800 Subject: [PATCH 12/12] reduce extra calls, ensure fees display in simple mode --- atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml | 7 ++++--- src/core/atomicdex/pages/qt.trading.page.cpp | 7 +------ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml index fbfa8feebc..c3c52290d3 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml @@ -19,6 +19,7 @@ ClipRRect // Trade Card { id: _tradeCard + readonly property var fees: API.app.trading_pg.fees property string selectedTicker: API.app.get_balance(left_ticker) > 0 ? left_ticker : "" property var selectedOrder: undefined property bool best: false @@ -32,7 +33,6 @@ ClipRRect // Trade Card if (typeof selectedOrder !== 'undefined' && selectedOrder.from_best_order) Constants.API.app.trading_pg.orderbook.select_best_order(selectedOrder.uuid) else if (typeof selectedOrder !== 'undefined') Constants.API.app.trading_pg.preffered_order = selectedOrder else Constants.API.app.trading_pg.reset_order() - Constants.API.app.trading_pg.determine_fees() } @@ -65,6 +65,7 @@ ClipRRect // Trade Card return if (parseFloat(_fromValue.text) > Constants.API.app.trading_pg.max_volume) _fromValue.text = Constants.API.app.trading_pg.max_volume + Constants.API.app.trading_pg.determine_fees() } function onVolumeChanged() @@ -480,7 +481,7 @@ ClipRRect // Trade Card DefaultText // Amount In Fiat { - enabled: parseFloat(_toValue.text) > 0 + enabled: parseFloat(_toValue.text) > 0 && _toValue.text != "" anchors.top: _toValue.bottom anchors.topMargin: -3 anchors.left: _toValue.left @@ -914,7 +915,7 @@ ClipRRect // Trade Card } enabled: parent.enabled - model: Constants.API.app.trading_pg.fees.total_fees + model: _tradeCard.fees.hasOwnProperty('base_transaction_fees_ticker') ? _tradeCard.fees.total_fees : [] delegate: RowLayout { diff --git a/src/core/atomicdex/pages/qt.trading.page.cpp b/src/core/atomicdex/pages/qt.trading.page.cpp index 3c2c01331d..d23196fcc1 100644 --- a/src/core/atomicdex/pages/qt.trading.page.cpp +++ b/src/core/atomicdex/pages/qt.trading.page.cpp @@ -94,7 +94,7 @@ namespace atomic_dex market_selector_mdl->set_base_selected_coin(m_market_mode == MarketMode::Sell ? base : rel); market_selector_mdl->set_rel_selected_coin(m_market_mode == MarketMode::Sell ? rel : base); - if (to_change) + if (to_change && m_current_trading_mode != TradingModeGadget::Simple) { SPDLOG_DEBUG("set_current_orderbook"); this->get_orderbook_wrapper()->clear_orderbook(); @@ -1061,11 +1061,6 @@ namespace atomic_dex { this->set_volume(QString::fromStdString(utils::extract_large_float(available_quantity))); } - else if (this->m_current_trading_mode == TradingModeGadget::Simple && m_preferred_order->contains("initial_input_volume")) - { - SPDLOG_DEBUG("From simple view, using initial_input_volume from selection to use."); - this->set_volume(QString::fromStdString(m_preferred_order->at("initial_input_volume").get())); - } this->get_orderbook_wrapper()->refresh_best_orders(); emit preferredOrderChangeFinished(); }