From 2feaa347c4012d65d2c52b6dacf9af28e9936806 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 19:15:01 +0800 Subject: [PATCH 001/251] add selector for ticker badges in confirm swap / swap details modals --- assets/themes/Default - Dark/colors.json | 9 ++++++--- assets/themes/Default - Light/colors.json | 3 +++ atomic_defi_design/Dex/Components/PairItemBadge.qml | 3 +++ atomic_defi_design/Dex/Themes/CurrentTheme.qml | 6 ++++++ atomic_defi_design/Dex/Themes/DefaultTheme.js | 3 +++ atomic_defi_design/Dex/Themes/ThemeData.qml | 3 +++ 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 544b99ec49..23d3c1e8b3 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -31,8 +31,9 @@ "gradientButtonTextHoveredColor": "#FFFFFFFF", "gradientButtonTextPressedColor": "#FFFFFFFF", - "checkBoxGradientStartColor": "#8892EBFF", - "checkBoxGradientEndColor": "#9DD4F3FF", + "checkBoxTickColor": "#FFFFFFFF", + "checkBoxGradientStartColor": "#6673E3FF", + "checkBoxGradientEndColor": "#5EBBF0FF", "switchGradientStartColor": "#1D80B0FF", "switchGradientEndColor": "#5B69E6FF", @@ -66,7 +67,9 @@ "textFieldBackgroundColor": "#313555FF", "textFieldActiveBackgroundColor": "#313555CC", "textFieldPrefixColor": "#8790B2FF", - "textFieldSuffixColor": "#456078FF#", + "textFieldSuffixColor": "#456078FF", + + "tickerBadgeBackgroundColor": "#202337FF", "chartTradingLineBackgroundColor": "#24283dFF", "chartTradingLineColor": "#74fbeeFF", diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index de78473e02..44392ce5c3 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -28,6 +28,7 @@ "gradientButtonTextHoveredColor": "#FFFFFFFF", "gradientButtonTextPressedColor": "#FFFFFFFF", + "checkBoxTickColor": "#456078FF", "checkBoxGradientStartColor": "#8892EBFF", "checkBoxGradientEndColor": "#9DD4F3FF", @@ -65,6 +66,8 @@ "textFieldPrefixColor": "#45607894", "textFieldSuffixColor": "#456078FF", + "tickerBadgeBackgroundColor": "#D5DCF8FF", + "chartTradingLineBackgroundColor": "#C5F2EFFF", "chartTradingLineColor": "#53EBD7FF", diff --git a/atomic_defi_design/Dex/Components/PairItemBadge.qml b/atomic_defi_design/Dex/Components/PairItemBadge.qml index a256f6a174..3c5dd89a93 100644 --- a/atomic_defi_design/Dex/Components/PairItemBadge.qml +++ b/atomic_defi_design/Dex/Components/PairItemBadge.qml @@ -4,10 +4,12 @@ import QtQuick.Layouts 1.15 import bignumberjs 1.0 import "../Constants" +import Dex.Themes 1.0 as Dex DefaultRectangle { id: root + property alias source: icon.source property alias ticker: ticker.text property alias fullname: fullname.text property string amount @@ -15,6 +17,7 @@ DefaultRectangle width: 260 height: 66 radius: 10 + color: Dex.CurrentTheme.tickerBadgeBackgroundColor RowLayout { diff --git a/atomic_defi_design/Dex/Themes/CurrentTheme.qml b/atomic_defi_design/Dex/Themes/CurrentTheme.qml index c0e64238fa..32b9290e02 100644 --- a/atomic_defi_design/Dex/Themes/CurrentTheme.qml +++ b/atomic_defi_design/Dex/Themes/CurrentTheme.qml @@ -118,6 +118,7 @@ ThemeData gradientButtonTextHoveredColor = Dex.Color.argbStrFromRgbaStr(themeData.gradientButtonTextHoveredColor || defaultTheme.gradientButtonTextHoveredColor); gradientButtonTextPressedColor = Dex.Color.argbStrFromRgbaStr(themeData.gradientButtonTextPressedColor || defaultTheme.gradientButtonTextPressedColor); + checkBoxTickColor = Dex.Color.argbStrFromRgbaStr(themeData.checkBoxTickColor || defaultTheme.checkBoxTickColor); checkBoxGradientStartColor = Dex.Color.argbStrFromRgbaStr(themeData.checkBoxGradientStartColor || defaultTheme.checkBoxGradientStartColor); checkBoxGradientEndColor = Dex.Color.argbStrFromRgbaStr(themeData.checkBoxGradientEndColor || defaultTheme.checkBoxGradientEndColor); @@ -155,6 +156,8 @@ ThemeData textFieldPrefixColor = Dex.Color.argbStrFromRgbaStr(themeData.textFieldPrefixColor || defaultTheme.textFieldPrefixColor); textFieldSuffixColor = Dex.Color.argbStrFromRgbaStr(themeData.textFieldSuffixColor || defaultTheme.textFieldSuffixColor); + tickerBadgeBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.tickerBadgeBackgroundColor || defaultTheme.tickerBadgeBackgroundColor); + chartTradingLineBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.chartTradingLineBackgroundColor || defaultTheme.chartTradingLineBackgroundColor); chartTradingLineColor = Dex.Color.argbStrFromRgbaStr(themeData.chartTradingLineColor || defaultTheme.chartTradingLineColor); @@ -240,6 +243,7 @@ ThemeData console.info("Dex.Themes.CurrentTheme.printValues.gradientButtonTextHoveredColor : %1".arg(gradientButtonTextHoveredColor)); console.info("Dex.Themes.CurrentTheme.printValues.gradientButtonTextPressedColor : %1".arg(gradientButtonTextPressedColor)); + console.info("Dex.Themes.CurrentTheme.printValues.checkBoxTickColor : %1".arg(checkBoxTickColor)); console.info("Dex.Themes.CurrentTheme.printValues.checkBoxGradientStartColor : %1".arg(checkBoxGradientStartColor)); console.info("Dex.Themes.CurrentTheme.printValues.checkBoxGradientEndColor : %1".arg(checkBoxGradientEndColor)); @@ -276,6 +280,8 @@ ThemeData console.info("Dex.Themes.CurrentTheme.printValues.textFieldPrefixColor : %1".arg(textFieldPrefixColor)); console.info("Dex.Themes.CurrentTheme.printValues.textFieldSuffixColor : %1".arg(textFieldSuffixColor)); + console.info("Dex.Themes.CurrentTheme.printValues.tickerBadgeBackgroundColor : %1".arg(tickerBadgeBackgroundColor)); + console.info("Dex.Themes.CurrentTheme.printValues.chartTradingLineBackgroundColor : %1".arg(chartTradingLineBackgroundColor)); console.info("Dex.Themes.CurrentTheme.printValues.chartTradingLineColor : %1".arg(chartTradingLineColor)); diff --git a/atomic_defi_design/Dex/Themes/DefaultTheme.js b/atomic_defi_design/Dex/Themes/DefaultTheme.js index b04267315a..d657ade142 100644 --- a/atomic_defi_design/Dex/Themes/DefaultTheme.js +++ b/atomic_defi_design/Dex/Themes/DefaultTheme.js @@ -34,6 +34,7 @@ function getHardcoded() gradientButtonTextHoveredColor: "#FFFFFFFF", gradientButtonTextPressedColor: "#FFFFFFFF", + checkBoxTickColor: "#000000FF", checkBoxGradientStartColor: "#8892EBFF", checkBoxGradientEndColor: "#9DD4F3FF", @@ -71,6 +72,8 @@ function getHardcoded() textFieldPrefixColor: "#45607894", textFieldSuffixColor: "#456078FF", + tickerBadgeBackgroundColor: "#D5DCF8FF", + chartTradingLineBackgroundColor: "#C5F2EFFF", chartTradingLineColor: "#53EBD7FF", diff --git a/atomic_defi_design/Dex/Themes/ThemeData.qml b/atomic_defi_design/Dex/Themes/ThemeData.qml index e6684febbf..b77d786ff7 100644 --- a/atomic_defi_design/Dex/Themes/ThemeData.qml +++ b/atomic_defi_design/Dex/Themes/ThemeData.qml @@ -33,6 +33,7 @@ QtObject property color gradientButtonTextHoveredColor property color gradientButtonTextPressedColor + property color checkBoxTickColor property color checkBoxGradientStartColor property color checkBoxGradientEndColor @@ -70,6 +71,8 @@ QtObject property color textFieldPrefixColor property color textFieldSuffixColor + property color tickerBadgeBackgroundColor + property color chartTradingLineBackgroundColor property color chartTradingLineColor From 571e04ce9e445280835968505aa7b1a2a8b1f84e Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 19:49:59 +0800 Subject: [PATCH 002/251] fix dextypo cyclic dependency --- atomic_defi_design/Dex/Constants/DexTypo.qml | 4 +--- atomic_defi_design/Dex/Constants/General.qml | 5 +++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/DexTypo.qml b/atomic_defi_design/Dex/Constants/DexTypo.qml index 55f4e4c55e..6abbef1e44 100644 --- a/atomic_defi_design/Dex/Constants/DexTypo.qml +++ b/atomic_defi_design/Dex/Constants/DexTypo.qml @@ -4,15 +4,13 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 -import App 1.0 as App - QtObject { id: _font property real fontDensity: 1.0 property real languageDensity: { - switch (App.API.app.settings_pg.lang) { + switch (General.getLanguage()) { case "en": return 0.99999 case "fr": diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 8faf8f4bd9..5ded9d14d5 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -58,6 +58,11 @@ QtObject { return API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker).is_wallet_only } + function getLanguage() + { + return API.app.settings_pg.lang + } + function isZhtlc(ticker) { const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) From 6c4a774ac75091179f4b4bd932f10dc82447de30 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 19:51:57 +0800 Subject: [PATCH 003/251] noColor -> warningColor; greenColor -> okColor --- assets/themes/Binance - Dark/colors.json | 2 +- assets/themes/Default - Dark/colors.json | 2 +- assets/themes/Default - Light/colors.json | 6 +++--- atomic_defi_design/Dex/Addressbook/AddAddressForm.qml | 2 +- .../Dex/Addressbook/AssetFromStandardSelector.qml | 2 +- .../Dex/Components/DefaultProgressBar.qml | 2 +- atomic_defi_design/Dex/Components/DexAppTextArea.qml | 2 +- atomic_defi_design/Dex/Components/DexAppTextField.qml | 2 +- .../Dex/Components/DexDialogManager.qml | 2 +- atomic_defi_design/Dex/Components/DexKeyChecker.qml | 2 +- atomic_defi_design/Dex/Components/LogoutModal.qml | 2 +- atomic_defi_design/Dex/Components/PasswordField.qml | 2 +- atomic_defi_design/Dex/Components/PopupManager.qml | 2 +- atomic_defi_design/Dex/Components/Toast.qml | 2 +- atomic_defi_design/Dex/Constants/DexTheme.qml | 11 +++++------ .../Dex/Exchange/ProView/DexComboBoxLine.qml | 2 +- .../Dex/Exchange/ProView/PlaceOrderForm/Main.qml | 10 +++++----- .../Dex/Exchange/ProView/TradingInfo/OrderLine.qml | 4 ++-- .../Dex/Exchange/ProView/TradingInfo/PriceLine.qml | 4 ++-- .../Dex/Exchange/ProView/TradingInfo/SwapProgress.qml | 4 ++-- .../Dex/Exchange/Trade/BestOrder/ListDelegate.qml | 2 +- .../Dex/Exchange/Trade/ConfirmTradeModal.qml | 2 +- .../Dex/Exchange/Trade/OrderBook/ListDelegate.qml | 6 +++--- .../Dex/Exchange/Trade/PriceLineSimplified.qml | 4 ++-- .../Dex/Exchange/Trade/SimpleView/List.qml | 6 +++--- .../Dex/Exchange/Trade/SimpleView/SubBestOrder.qml | 2 +- atomic_defi_design/Dex/Portfolio/AssetsList.qml | 6 +++--- atomic_defi_design/Dex/Screens/Dashboard.qml | 2 +- .../Dex/Screens/Startup/ImportWallet.qml | 6 +++--- atomic_defi_design/Dex/Screens/Startup/Login.qml | 2 +- atomic_defi_design/Dex/Screens/Startup/NewWallet.qml | 8 ++++---- .../Dex/Screens/Startup/WalletsView.qml | 4 ++-- atomic_defi_design/Dex/Settings/RecoverSeedModal.qml | 2 +- atomic_defi_design/Dex/Settings/SettingModal.qml | 2 +- atomic_defi_design/Dex/Sidebar/Bottom.qml | 2 +- atomic_defi_design/Dex/Themes/CurrentTheme.qml | 4 ++-- atomic_defi_design/Dex/Themes/DefaultTheme.js | 2 +- atomic_defi_design/Dex/Themes/ThemeData.qml | 2 +- atomic_defi_design/Dex/Wallet/Main.qml | 2 +- atomic_defi_design/Dex/Wallet/SendModal.qml | 10 +++++----- atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml | 2 +- .../Dex/Wallet/TransactionDetailsModal.qml | 4 ++-- atomic_defi_design/Dex/Wallet/Transactions.qml | 2 +- 43 files changed, 75 insertions(+), 76 deletions(-) diff --git a/assets/themes/Binance - Dark/colors.json b/assets/themes/Binance - Dark/colors.json index ba1e99ec58..2343b39fea 100644 --- a/assets/themes/Binance - Dark/colors.json +++ b/assets/themes/Binance - Dark/colors.json @@ -69,7 +69,7 @@ "sidebarLineTextHovered": "#8B6900FF", "okColor": "#74fbeeFF", - "noColor": "#d13990FF", + "warningColor": "#d13990FF", "senderColorStart": "#F85757FF", "receiverColorStart": "#845FEFFF", diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 23d3c1e8b3..ec458f54bd 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -102,7 +102,7 @@ "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], "okColor": "#00C058FF", - "noColor": "#E52167FF", + "warningColor": "#E52167FF", "senderColorStart": "#F85757FF", "receiverColorStart": "#845FEFFF", diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 44392ce5c3..98e46ae970 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -99,10 +99,10 @@ "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], "okColor": "#00C058FF", - "noColor": "#E52167FF", + "warningColor": "#E52167FF", - "senderColorStart": "#F85757", - "receiverColorStart": "#845FEF", + "senderColorStart": "#F85757FF", + "receiverColorStart": "#845FEFFF", "arrowUpColor": "#F85757FF", "arrowDownColor": "#845FEFFF", diff --git a/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml b/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml index 7b73c27e05..000a189b2a 100644 --- a/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml +++ b/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml @@ -159,7 +159,7 @@ Dex.Rectangle Layout.preferredWidth: 458 Layout.preferredHeight: 60 visible: text !== "" - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor wrapMode: Dex.Text.WordWrap elide: Dex.Text.ElideRight horizontalAlignment: Text.AlignHCenter diff --git a/atomic_defi_design/Dex/Addressbook/AssetFromStandardSelector.qml b/atomic_defi_design/Dex/Addressbook/AssetFromStandardSelector.qml index c7416f1727..26a103de95 100644 --- a/atomic_defi_design/Dex/Addressbook/AssetFromStandardSelector.qml +++ b/atomic_defi_design/Dex/Addressbook/AssetFromStandardSelector.qml @@ -90,7 +90,7 @@ Dex.MultipageModal anchors.leftMargin: 6 anchors.verticalCenter: parent.verticalCenter text: qsTr("Disabled") - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor font: Dex.DexTypo.caption } diff --git a/atomic_defi_design/Dex/Components/DefaultProgressBar.qml b/atomic_defi_design/Dex/Components/DefaultProgressBar.qml index ed56dd814b..ca5e1a7c3a 100644 --- a/atomic_defi_design/Dex/Components/DefaultProgressBar.qml +++ b/atomic_defi_design/Dex/Components/DefaultProgressBar.qml @@ -13,7 +13,7 @@ RowLayout id: root property double label_width: 175 property double bar_width_pct: 0 - property color bar_color: Dex.DexTheme.greenColor + property color bar_color: Dex.DexTheme.okColor property alias label: _label property alias pct_bar: _pct_bar property alias pct_value: _pct_value diff --git a/atomic_defi_design/Dex/Components/DexAppTextArea.qml b/atomic_defi_design/Dex/Components/DexAppTextArea.qml index ff29faec4d..55efcd599f 100644 --- a/atomic_defi_design/Dex/Components/DexAppTextArea.qml +++ b/atomic_defi_design/Dex/Components/DexAppTextArea.qml @@ -51,7 +51,7 @@ Item { height: parent.height radius: 4 color: DexTheme.surfaceColor - border.color: control.error ? DexTheme.redColor : input_field.focus ? DexTheme.accentColor : DexTheme.rectangleBorderColor + border.color: control.error ? DexTheme.warningColor : input_field.focus ? DexTheme.accentColor : DexTheme.rectangleBorderColor border.width: input_field.focus ? 1 : 0 Behavior on x { NumberAnimation { diff --git a/atomic_defi_design/Dex/Components/DexAppTextField.qml b/atomic_defi_design/Dex/Components/DexAppTextField.qml index 9fd086e981..727f2dbb9d 100644 --- a/atomic_defi_design/Dex/Components/DexAppTextField.qml +++ b/atomic_defi_design/Dex/Components/DexAppTextField.qml @@ -76,7 +76,7 @@ Item height: parent.height radius: 4 color: Dex.CurrentTheme.backgroundColor - border.color: control.error ? Dex.CurrentTheme.noColor : input_field.focus ? Dex.CurrentTheme.accentColor : color + border.color: control.error ? Dex.CurrentTheme.warningColor : input_field.focus ? Dex.CurrentTheme.accentColor : color border.width: input_field.focus ? 1 : 0 Behavior on x diff --git a/atomic_defi_design/Dex/Components/DexDialogManager.qml b/atomic_defi_design/Dex/Components/DexDialogManager.qml index 8bf9ab578c..e68193fd92 100644 --- a/atomic_defi_design/Dex/Components/DexDialogManager.qml +++ b/atomic_defi_design/Dex/Components/DexDialogManager.qml @@ -224,7 +224,7 @@ Popup { topInset: 0 opacity: enabled ? 1 : .6 enabled: DialogButtonBox.buttonRole === DialogButtonBox.RejectRole ? true : dialog.enableAcceptButton - backgroundColor: DialogButtonBox.buttonRole === DialogButtonBox.RejectRole ? 'transparent' : dialog.warning ? DexTheme.redColor : DexTheme.accentColor + backgroundColor: DialogButtonBox.buttonRole === DialogButtonBox.RejectRole ? 'transparent' : dialog.warning ? DexTheme.warningColor : DexTheme.accentColor property alias cursorShape: mouseArea.cursorShape Component.onCompleted: { if (text === "Yes" && dialog.yesButtonText !== "") { diff --git a/atomic_defi_design/Dex/Components/DexKeyChecker.qml b/atomic_defi_design/Dex/Components/DexKeyChecker.qml index fe8634f5e2..aa48c9771d 100644 --- a/atomic_defi_design/Dex/Components/DexKeyChecker.qml +++ b/atomic_defi_design/Dex/Components/DexKeyChecker.qml @@ -49,7 +49,7 @@ ColumnLayout { } function hintColor(valid) { - return valid ? DexTheme.greenColor : DexTheme.redColor + return valid ? DexTheme.okColor : DexTheme.warningColor } function hintPrefix(valid) { diff --git a/atomic_defi_design/Dex/Components/LogoutModal.qml b/atomic_defi_design/Dex/Components/LogoutModal.qml index f205e15293..029a275a1f 100644 --- a/atomic_defi_design/Dex/Components/LogoutModal.qml +++ b/atomic_defi_design/Dex/Components/LogoutModal.qml @@ -25,7 +25,7 @@ MultipageModal { Layout.alignment: Qt.AlignHCenter horizontalAlignment: Text.AlignHCenter Layout.fillWidth: true - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor text_value: { for (let i = 0; i < orders.count; i++) diff --git a/atomic_defi_design/Dex/Components/PasswordField.qml b/atomic_defi_design/Dex/Components/PasswordField.qml index 163d44ac01..6e7301354e 100644 --- a/atomic_defi_design/Dex/Components/PasswordField.qml +++ b/atomic_defi_design/Dex/Components/PasswordField.qml @@ -46,7 +46,7 @@ ColumnLayout { } function hintColor(valid) { - return valid ? DexTheme.greenColor : DexTheme.redColor + return valid ? DexTheme.okColor : DexTheme.warningColor } function hintPrefix(valid) { diff --git a/atomic_defi_design/Dex/Components/PopupManager.qml b/atomic_defi_design/Dex/Components/PopupManager.qml index 8d2a3d7f66..de6db72de1 100644 --- a/atomic_defi_design/Dex/Components/PopupManager.qml +++ b/atomic_defi_design/Dex/Components/PopupManager.qml @@ -348,7 +348,7 @@ Popup topInset: 0 opacity: enabled ? 1 : .6 enabled: DialogButtonBox.buttonRole === DialogButtonBox.RejectRole ? true : dialog.enableAcceptButton - backgroundColor: DialogButtonBox.buttonRole === DialogButtonBox.RejectRole ? 'transparent' : dialog.warning ? DexTheme.redColor : DexTheme.accentColor + backgroundColor: DialogButtonBox.buttonRole === DialogButtonBox.RejectRole ? 'transparent' : dialog.warning ? DexTheme.warningColor : DexTheme.accentColor property alias cursorShape: mouseArea.cursorShape Component.onCompleted: { diff --git a/atomic_defi_design/Dex/Components/Toast.qml b/atomic_defi_design/Dex/Components/Toast.qml index 3351d60831..e67142167d 100644 --- a/atomic_defi_design/Dex/Components/Toast.qml +++ b/atomic_defi_design/Dex/Components/Toast.qml @@ -36,7 +36,7 @@ AnimatedRectangle { radius: margin / 3 opacity: 0 - color: isError ? DexTheme.redColor : Style.colorTheme1 + color: isError ? DexTheme.warningColor : Style.colorTheme1 z: 1000 DexLabel { diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 4104684b0b..2088cacf25 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -118,8 +118,8 @@ QtObject { property bool portfolioPieGradient: false - property color senderColorStart: redColor - property color receiverColorStart: greenColor + property color senderColorStart: warningColor + property color receiverColorStart: okColor @@ -131,7 +131,6 @@ QtObject { property color dexBoxBackgroundColor: backgroundDarkColor6 property color hightlightColor: accentDarkColor3 - property color hoverColor: buttonColorHovered property color modalStepColor: accentColor property color modelStepBorderColor: hightlightColor @@ -174,8 +173,8 @@ QtObject { property color colorScrollbarGradient1: Style.colorScrollbarGradient1 property color colorScrollbarGradient2: Style.colorScrollbarGradient2 - property color greenColor: Dex.CurrentTheme.okColor - property color redColor: Dex.CurrentTheme.noColor + property color okColor: Dex.CurrentTheme.okColor + property color warningColor: Dex.CurrentTheme.warningColor // Widget settings @@ -359,7 +358,7 @@ QtObject { function getValueColor(v) { v = parseFloat(v) if(v !== 0) - return v > 0 ? greenColor : redColor + return v > 0 ? okColor : warningColor return Style.colorWhite4 } diff --git a/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml index 368bce3c3c..6e1cba552f 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml @@ -54,7 +54,7 @@ RowLayout verticalAlignment: Text.AlignVCenter text: activation_progress + "%" font: Dex.DexTypo.body2 - color: Dex.DexTheme.greenColor + color: Dex.DexTheme.okColor } ColumnLayout diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml index 62e2c1675d..2f5d00b066 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml @@ -163,7 +163,7 @@ Widget DefaultText { Layout.leftMargin: 15 - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor text: qsTr("Order Selected") } @@ -174,7 +174,7 @@ Widget Layout.preferredHeight: parent.height Layout.preferredWidth: 30 Layout.rightMargin: 5 - foregroundColor: Dex.CurrentTheme.noColor + foregroundColor: Dex.CurrentTheme.warningColor onClicked: { API.app.trading_pg.reset_order() reset_fees_state() @@ -184,7 +184,7 @@ Widget { anchors.centerIn: parent iconSize: 16 - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor source: Qaterial.Icons.close } } @@ -196,7 +196,7 @@ Widget anchors.fill: parent radius: 8 color: 'transparent' - border.color: Dex.CurrentTheme.noColor + border.color: Dex.CurrentTheme.warningColor } } @@ -225,7 +225,7 @@ Widget anchors.centerIn: parent horizontalAlignment: Text.AlignHCenter font.pixelSize: Style.textSizeSmall4 - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor text_value: General.getTradingError( last_trading_error, curr_fee_info, diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderLine.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderLine.qml index fc880aa0ea..87d5456f62 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderLine.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderLine.qml @@ -273,7 +273,7 @@ FloatingBackground visible: (!is_history ? details.cancellable ?? false : false) === true ? (mouseArea.containsMouse || hovered) ? true : false : false - outlinedColor: Dex.CurrentTheme.noColor + outlinedColor: Dex.CurrentTheme.warningColor hoverEnabled: true onClicked: if (details) cancelOrder(details.order_id) @@ -289,7 +289,7 @@ FloatingBackground { anchors.centerIn: parent iconSize: 16 - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor source: Qaterial.Icons.close scale: parent.visible ? 1 : 0 } diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml index 63cbdaf723..aa54e2761b 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml @@ -72,7 +72,7 @@ ColumnLayout Layout.topMargin: 10 Layout.bottomMargin: Layout.topMargin Layout.alignment: Qt.AlignHCenter - color: parseFloat(cexPriceDiff) <= 0 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.noColor + color: parseFloat(cexPriceDiff) <= 0 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.warningColor text_value: (parseFloat(cexPriceDiff) > 0 ? qsTr("Expensive") : qsTr("Expedient")) + ":    " + qsTr("%1 compared to CEX", "PRICE_DIFF%").arg("" + General.formatPercent(General.limitDigits(cexPriceDiff)) + "") font.pixelSize: fontSize } @@ -92,7 +92,7 @@ ColumnLayout height: 6 start_color: Dex.CurrentTheme.okColor - end_color: Dex.CurrentTheme.noColor + end_color: Dex.CurrentTheme.warningColor AnimatedRectangle { width: 4 diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/SwapProgress.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/SwapProgress.qml index ad019be3da..3f0963b269 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/SwapProgress.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/SwapProgress.qml @@ -248,10 +248,10 @@ ColumnLayout if (event) { // Red for the Finished if swap failed - if (event.state === "Finished" && details.order_status === "failed") return Dex.CurrentTheme.noColor + if (event.state === "Finished" && details.order_status === "failed") return Dex.CurrentTheme.warningColor // Red for error event, green for the others - return details.error_events.indexOf(event.state) === -1 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.noColor + return details.error_events.indexOf(event.state) === -1 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.warningColor } // In progress one is orange diff --git a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml index b3afd35291..9c0daa7477 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml @@ -100,7 +100,7 @@ Item parseFloat(cex_rates).toFixed(2) + "%" color: cex_rates === "0" ? Qt.darker(Dex.CurrentTheme.foregroundColor) : parseFloat(cex_rates) < 0 ? Dex.CurrentTheme.okColor : - Dex.CurrentTheme.noColor + Dex.CurrentTheme.warningColor Behavior on rightPadding { diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index 8a4f6bf1ea..0793bdbc31 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -215,7 +215,7 @@ MultipageModal width: parent.width horizontalAlignment: DefaultText.AlignHCenter font: DexTypo.caption - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor text_value: General.getTradingError( last_trading_error, curr_fee_info, diff --git a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml index 1e405b2477..3aee857e8c 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml @@ -135,7 +135,7 @@ Item height: 6 radius: width / 2 visible: is_mine - color: isAsk ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor + color: isAsk ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor } // Progress bar @@ -156,7 +156,7 @@ Item Behavior on width { NumberAnimation { duration: 1000 } } radius: 3 opacity: 0.8 - color: isAsk ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor + color: isAsk ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor Component.onCompleted: width = ((depth * 100) * (mouse_area.width + 40)) / 100 } } @@ -176,7 +176,7 @@ Item text: { new BigNumber(price).toFixed(8) } font.family: DexTypo.fontFamily font.pixelSize: 12 - color: isAsk ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor + color: isAsk ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor horizontalAlignment: Text.AlignRight wrapMode: Text.NoWrap } diff --git a/atomic_defi_design/Dex/Exchange/Trade/PriceLineSimplified.qml b/atomic_defi_design/Dex/Exchange/Trade/PriceLineSimplified.qml index a9c257204d..1c14921fda 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/PriceLineSimplified.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/PriceLineSimplified.qml @@ -111,7 +111,7 @@ ColumnLayout Layout.preferredHeight: 6 start_color: Dex.CurrentTheme.okColor - end_color: Dex.CurrentTheme.noColor + end_color: Dex.CurrentTheme.warningColor AnimatedRectangle { @@ -146,7 +146,7 @@ ColumnLayout id: price_diff_text Layout.topMargin: 10 Layout.alignment: Qt.AlignHCenter - color: parseFloat(cexPriceDiff) <= 0 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.noColor + color: parseFloat(cexPriceDiff) <= 0 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.warningColor text_value: (parseFloat(cexPriceDiff) > 0 ? qsTr("Expensive") : qsTr("Expedient")) + ":    " + qsTr("%1 compared to CEX", "PRICE_DIFF%").arg("" + General.formatPercent(General.limitDigits(cexPriceDiff)) + "") font.pixelSize: fontSize } diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/List.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/List.qml index 1605adb463..c9ea3a02df 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/List.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/List.qml @@ -302,7 +302,7 @@ DexListView Layout.fillHeight: true bottomInset: 0 topInset: 0 - outlinedColor: DexTheme.redColor + outlinedColor: DexTheme.warningColor visible: !main_order.is_history && details.cancellable onClicked: { if(details) cancelOrder(details.order_id) } Row { @@ -312,12 +312,12 @@ DexListView anchors.verticalCenter: parent.verticalCenter source: Qaterial.Icons.close iconSize: 17 - color: DexTheme.redColor + color: DexTheme.warningColor } DexLabel { anchors.verticalCenter: parent.verticalCenter text: "Cancel " - color: DexTheme.redColor + color: DexTheme.warningColor } } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml index cad1265732..0c1fcd5e92 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml @@ -206,7 +206,7 @@ DexListView { Layout.preferredWidth: _cexRateColumnSize horizontalAlignment: Text.AlignRight - color: cex_rates=== "0" ? Qt.darker(DexTheme.foregroundColor) : parseFloat(cex_rates)>0? DexTheme.redColor : DexTheme.greenColor + color: cex_rates=== "0" ? Qt.darker(DexTheme.foregroundColor) : parseFloat(cex_rates)>0? DexTheme.warningColor : DexTheme.okColor text_value: cex_rates=== "0" ? "N/A" : parseFloat(cex_rates)>0? "+"+parseFloat(cex_rates).toFixed(2)+"%" : parseFloat(cex_rates).toFixed(2)+"%" } diff --git a/atomic_defi_design/Dex/Portfolio/AssetsList.qml b/atomic_defi_design/Dex/Portfolio/AssetsList.qml index ded8fd3eda..aa28f0ef62 100644 --- a/atomic_defi_design/Dex/Portfolio/AssetsList.qml +++ b/atomic_defi_design/Dex/Portfolio/AssetsList.qml @@ -142,7 +142,7 @@ Dex.DexListView verticalAlignment: Text.AlignVCenter text: activation_progress + "%" font: Dex.DexTypo.head8 - color: Dex.DexTheme.greenColor + color: Dex.DexTheme.okColor } } @@ -177,7 +177,7 @@ Dex.DexListView text: "IDO" font: Dex.DexTypo.overLine opacity: .7 - color: Dex.DexTheme.redColor + color: Dex.DexTheme.warningColor } } } @@ -203,7 +203,7 @@ Dex.DexListView return parseFloat(balance).toFixed(8) } - color: text_value == parseFloat(balance).toFixed(8) ? Qt.darker(Dex.DexTheme.foregroundColor, 0.8) : Dex.DexTheme.redColor + color: text_value == parseFloat(balance).toFixed(8) ? Qt.darker(Dex.DexTheme.foregroundColor, 0.8) : Dex.DexTheme.warningColor privacy: true } diff --git a/atomic_defi_design/Dex/Screens/Dashboard.qml b/atomic_defi_design/Dex/Screens/Dashboard.qml index 56192a4cdb..e25c8b6170 100644 --- a/atomic_defi_design/Dex/Screens/Dashboard.qml +++ b/atomic_defi_design/Dex/Screens/Dashboard.qml @@ -366,7 +366,7 @@ Item return Dex.CurrentTheme.sidebarLineTextHovered case "failed": default: - return DexTheme.redColor + return DexTheme.warningColor } } diff --git a/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml index acb83d2be4..ba82ad690a 100644 --- a/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml @@ -205,7 +205,7 @@ SetupPage id: _seedError visible: _seedField.error text: qsTr("Your seed is not BIP39 compliant.\nTry again or select 'Allow custom seed' to continue.") - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor Layout.preferredWidth: parent.width - 40 font: DexTypo.body2 } @@ -267,7 +267,7 @@ SetupPage DefaultText { text_value: text_error - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor visible: text !== '' } @@ -364,7 +364,7 @@ SetupPage DefaultText { text_value: text_error - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor visible: text !== '' } } diff --git a/atomic_defi_design/Dex/Screens/Startup/Login.qml b/atomic_defi_design/Dex/Screens/Startup/Login.qml index 299c505ea2..485b0fd5a5 100644 --- a/atomic_defi_design/Dex/Screens/Startup/Login.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Login.qml @@ -98,7 +98,7 @@ SetupPage Layout.alignment: Qt.AlignHCenter height: 14 text: _isPasswordWrong ? qsTr("Incorrect Password") : "" - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor } GradientButton diff --git a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml index 2a2f30e59a..dcc574bb1c 100644 --- a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml @@ -335,7 +335,7 @@ SetupPage Layout.topMargin: 10 Layout.bottomMargin: Layout.topMargin Layout.fillWidth: true - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor height: warning_texts.height + 20 radius: 20 @@ -457,7 +457,7 @@ SetupPage DefaultText { text_value: text_error - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor visible: text !== '' } @@ -664,7 +664,7 @@ SetupPage DefaultText { text_value: guess_text_error - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor visible: input_seed_word.error DexVisibleBehavior on visible {} @@ -742,7 +742,7 @@ SetupPage DefaultText { text_value: text_error - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor visible: text !== '' } } diff --git a/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml b/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml index 6d21be4af2..7db17d6390 100644 --- a/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml +++ b/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml @@ -225,7 +225,7 @@ SetupPage iconSize: 18 anchors.centerIn: parent opacity: .8 - color: _deleteArea.containsMouse ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.foregroundColor + color: _deleteArea.containsMouse ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.foregroundColor } DexMouseArea @@ -242,7 +242,7 @@ SetupPage text: qsTr("Enter password to confirm deletion of") + " %1 ".arg(wallet_name) + qsTr("wallet"), standardButtons: Dialog.Yes | Dialog.Cancel, warning: true, - iconColor: Dex.CurrentTheme.noColor, + iconColor: Dex.CurrentTheme.warningColor, isPassword: true, placeholderText: qsTr("Type password"), yesButtonText: qsTr("Delete"), diff --git a/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml b/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml index dfa997fa03..5f0c820744 100644 --- a/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml +++ b/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml @@ -80,7 +80,7 @@ MultipageModal Layout.alignment: Qt.AlignHCenter height: 14 text: _isPasswordWrong ? qsTr("Incorrect Password") : "" - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor } // Footer diff --git a/atomic_defi_design/Dex/Settings/SettingModal.qml b/atomic_defi_design/Dex/Settings/SettingModal.qml index b278a3ff74..40aad6ae50 100644 --- a/atomic_defi_design/Dex/Settings/SettingModal.qml +++ b/atomic_defi_design/Dex/Settings/SettingModal.qml @@ -462,7 +462,7 @@ Qaterial.Dialog standardButtons: Dialog.Yes | Dialog.Cancel, closePolicy: Popup.NoAutoClose, warning: true, - iconColor: Dex.CurrentTheme.noColor, + iconColor: Dex.CurrentTheme.warningColor, isPassword: true, placeholderText: qsTr("Type password"), yesButtonText: qsTr("Confirm"), diff --git a/atomic_defi_design/Dex/Sidebar/Bottom.qml b/atomic_defi_design/Dex/Sidebar/Bottom.qml index 18067aba60..775caf2b55 100644 --- a/atomic_defi_design/Dex/Sidebar/Bottom.qml +++ b/atomic_defi_design/Dex/Sidebar/Bottom.qml @@ -99,7 +99,7 @@ MouseArea standardButtons: Dialog.Yes | Dialog.Cancel, closePolicy: Popup.NoAutoClose, warning: true, - iconColor: Dex.CurrentTheme.noColor, + iconColor: Dex.CurrentTheme.warningColor, isPassword: true, placeholderText: qsTr("Type password"), yesButtonText: qsTr("Confirm"), diff --git a/atomic_defi_design/Dex/Themes/CurrentTheme.qml b/atomic_defi_design/Dex/Themes/CurrentTheme.qml index 32b9290e02..33fb9dbd09 100644 --- a/atomic_defi_design/Dex/Themes/CurrentTheme.qml +++ b/atomic_defi_design/Dex/Themes/CurrentTheme.qml @@ -193,7 +193,7 @@ ThemeData } okColor = Dex.Color.argbStrFromRgbaStr(themeData.okColor || defaultTheme.okColor); - noColor = Dex.Color.argbStrFromRgbaStr(themeData.noColor || defaultTheme.noColor); + warningColor = Dex.Color.argbStrFromRgbaStr(themeData.warningColor || defaultTheme.warningColor); senderColorStart = Dex.Color.argbStrFromRgbaStr(themeData.senderColorStart || defaultTheme.senderColorStart); receiverColorStart = Dex.Color.argbStrFromRgbaStr(themeData.receiverColorStart || defaultTheme.receiverColorStart); @@ -313,7 +313,7 @@ ThemeData console.info("Dex.Themes.CurrentTheme.printValues.addressBookTagColors : %1".arg(addressBookTagColors)); console.info("Dex.Themes.CurrentTheme.printValues.okColor : %1".arg(okColor)); - console.info("Dex.Themes.CurrentTheme.printValues.noColor : %1".arg(noColor)); + console.info("Dex.Themes.CurrentTheme.printValues.warningColor : %1".arg(warningColor)); console.info("Dex.Themes.CurrentTheme.printValues.senderColorStart : %1".arg(senderColorStart)); console.info("Dex.Themes.CurrentTheme.printValues.receiverColorStart : %1".arg(receiverColorStart)); diff --git a/atomic_defi_design/Dex/Themes/DefaultTheme.js b/atomic_defi_design/Dex/Themes/DefaultTheme.js index d657ade142..442e438c1b 100644 --- a/atomic_defi_design/Dex/Themes/DefaultTheme.js +++ b/atomic_defi_design/Dex/Themes/DefaultTheme.js @@ -105,7 +105,7 @@ function getHardcoded() addressBookTagColors: ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], okColor: "#00C058FF", - noColor: "#E52167FF", + warningColor: "#E52167FF", senderColorStart: "#F85757FF", receiverColorStart: "#845FEFFF", diff --git a/atomic_defi_design/Dex/Themes/ThemeData.qml b/atomic_defi_design/Dex/Themes/ThemeData.qml index b77d786ff7..2f3ea0e245 100644 --- a/atomic_defi_design/Dex/Themes/ThemeData.qml +++ b/atomic_defi_design/Dex/Themes/ThemeData.qml @@ -109,7 +109,7 @@ QtObject // Colors used to tell when something is good or wrong. property color okColor - property color noColor + property color warningColor property color senderColorStart property color receiverColorStart diff --git a/atomic_defi_design/Dex/Wallet/Main.qml b/atomic_defi_design/Dex/Wallet/Main.qml index f046780849..a08fffe105 100644 --- a/atomic_defi_design/Dex/Wallet/Main.qml +++ b/atomic_defi_design/Dex/Wallet/Main.qml @@ -112,7 +112,7 @@ Item verticalAlignment: Text.AlignVCenter text: activation_progress + "%" font: DexTypo.head8 - color: DexTheme.greenColor + color: DexTheme.okColor } } diff --git a/atomic_defi_design/Dex/Wallet/SendModal.qml b/atomic_defi_design/Dex/Wallet/SendModal.qml index e48aefb716..c521d97e5e 100644 --- a/atomic_defi_design/Dex/Wallet/SendModal.qml +++ b/atomic_defi_design/Dex/Wallet/SendModal.qml @@ -342,7 +342,7 @@ MultipageModal Layout.preferredWidth: 320 wrapMode: Label.Wrap - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor text_value: qsTr("The address has to be mixed case.") } @@ -589,7 +589,7 @@ MultipageModal font.pixelSize: 14 Layout.alignment: Qt.AlignHCenter horizontalAlignment: DefaultText.AlignHCenter - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor } DefaultText @@ -598,7 +598,7 @@ MultipageModal font.pixelSize: 14 Layout.alignment: Qt.AlignHCenter horizontalAlignment: DefaultText.AlignHCenter - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor text_value: qsTr("Only use custom fees if you know what you are doing! ") } @@ -608,7 +608,7 @@ MultipageModal font.pixelSize: 14 Layout.alignment: Qt.AlignHCenter horizontalAlignment: DefaultText.AlignHCenter - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor text_value: qsTr("Only use custom fees if you know what you are doing! ") + General.cex_icon DefaultInfoTrigger { triggerModal: gas_info_modal } } @@ -699,7 +699,7 @@ MultipageModal wrapMode: Label.Wrap visible: !fee_error.visible && !hasFunds() - color: Dex.CurrentTheme.noColor + color: Dex.CurrentTheme.warningColor text_value: qsTr("Not enough funds.") + "\n" + qsTr("You have %1", "AMT TICKER").arg(General.formatCrypto("", API.app.get_balance(api_wallet_page.ticker), api_wallet_page.ticker)) diff --git a/atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml b/atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml index 8d3a1ad757..f4743e9c69 100644 --- a/atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml +++ b/atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml @@ -78,7 +78,7 @@ GradientRectangle verticalAlignment: Text.AlignVCenter text: activation_progress + "%" font: Dex.DexTypo.head8 - color: Dex.DexTheme.greenColor + color: Dex.DexTheme.okColor } } diff --git a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml index 25380f302a..006b51d45a 100644 --- a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml +++ b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml @@ -56,7 +56,7 @@ MultipageModal { title: qsTr("Amount") text: !details ? "" : General.formatCrypto(!details.am_i_sender, details.amount, api_wallet_page.ticker, details.amount_fiat, API.app.settings_pg.current_currency) - value_color: !details ? "white" : details.am_i_sender ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor + value_color: !details ? "white" : details.am_i_sender ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor privacy: true label.font.pixelSize: 13 } @@ -66,7 +66,7 @@ MultipageModal { title: qsTr("Fees") text: !details ? "" : General.formatCrypto(parseFloat(details.fees) < 0, Math.abs(parseFloat(details.fees)), current_ticker_infos.fee_ticker, details.fees_amount_fiat, API.app.settings_pg.current_currency) - value_color: !details ? "white" : parseFloat(details.fees) > 0 ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor + value_color: !details ? "white" : parseFloat(details.fees) > 0 ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor privacy: true label.font.pixelSize: 13 } diff --git a/atomic_defi_design/Dex/Wallet/Transactions.qml b/atomic_defi_design/Dex/Wallet/Transactions.qml index 30e94fa2b8..319b61c3c1 100644 --- a/atomic_defi_design/Dex/Wallet/Transactions.qml +++ b/atomic_defi_design/Dex/Wallet/Transactions.qml @@ -93,7 +93,7 @@ Dex.ListView } font.pixelSize: description.font.pixelSize - color: am_i_sender ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor + color: am_i_sender ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor privacy: true } From 846b707ee3d6acbce1a9484c57f666cf06648b07 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 19:55:46 +0800 Subject: [PATCH 004/251] surfaceColor -> backgroundDarkColor2 --- atomic_defi_design/Dex/Components/DexAmountField.qml | 4 ++-- atomic_defi_design/Dex/Components/DexAppTextArea.qml | 4 ++-- atomic_defi_design/Dex/Components/DexDialogManager.qml | 4 ++-- atomic_defi_design/Dex/Constants/DexTheme.qml | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/atomic_defi_design/Dex/Components/DexAmountField.qml b/atomic_defi_design/Dex/Components/DexAmountField.qml index 6699d59e81..c42949bb18 100644 --- a/atomic_defi_design/Dex/Components/DexAmountField.qml +++ b/atomic_defi_design/Dex/Components/DexAmountField.qml @@ -22,7 +22,7 @@ Item { id: _background anchors.fill: parent radius: 4 - color: DexTheme.surfaceColor + color: DexTheme.backgroundDarkColor2 border.color: DexTheme.accentColor border.width: input_field.focus ? 1 : 0 } @@ -56,7 +56,7 @@ Item { anchors.topMargin: 1 anchors.bottomMargin: 1 radius: 0 - color: DexTheme.surfaceColor + color: DexTheme.backgroundDarkColor2 DexTextField { id: input_field validator: RegExpValidator { diff --git a/atomic_defi_design/Dex/Components/DexAppTextArea.qml b/atomic_defi_design/Dex/Components/DexAppTextArea.qml index 55efcd599f..1a1ecda547 100644 --- a/atomic_defi_design/Dex/Components/DexAppTextArea.qml +++ b/atomic_defi_design/Dex/Components/DexAppTextArea.qml @@ -50,7 +50,7 @@ Item { width: parent.width height: parent.height radius: 4 - color: DexTheme.surfaceColor + color: DexTheme.backgroundDarkColor2 border.color: control.error ? DexTheme.warningColor : input_field.focus ? DexTheme.accentColor : DexTheme.rectangleBorderColor border.width: input_field.focus ? 1 : 0 Behavior on x { @@ -72,7 +72,7 @@ Item { anchors.topMargin: 1 anchors.bottomMargin: 1 radius: _background.radius - color: DexTheme.surfaceColor + color: DexTheme.backgroundDarkColor2 DexFlickable { anchors.fill: parent contentHeight: input_field.height diff --git a/atomic_defi_design/Dex/Components/DexDialogManager.qml b/atomic_defi_design/Dex/Components/DexDialogManager.qml index e68193fd92..1d9b1861fb 100644 --- a/atomic_defi_design/Dex/Components/DexDialogManager.qml +++ b/atomic_defi_design/Dex/Components/DexDialogManager.qml @@ -56,7 +56,7 @@ Popup { DexRectangle { anchors.fill: parent radius: 4 - color: DexTheme.surfaceColor + color: DexTheme.backgroundDarkColor2 } } @@ -155,7 +155,7 @@ Popup { anchors.centerIn: parent iconSize: 19 source: Qaterial.Icons.keyVariant - color: DexTheme.surfaceColor + color: DexTheme.backgroundDarkColor2 } } diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 2088cacf25..1ce0de39c8 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -126,7 +126,7 @@ QtObject { // Old Theme property string chartTheme: Style.dark_theme ? "dark" : "light" - property color surfaceColor: backgroundDarkColor2 + property color backgroundDarkColor2: backgroundDarkColor2 property color backgroundColorDeep: backgroundDarkColor2 property color dexBoxBackgroundColor: backgroundDarkColor6 From 435d50dc31222ce51a94a0af59f8b79924c36118 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 20:07:47 +0800 Subject: [PATCH 005/251] dexBoxBackgroundColor -> backgroundDarkColor6 --- .../Dex/Components/DexDialogManager.qml | 6 +++--- atomic_defi_design/Dex/Components/DexItemBox.qml | 6 +++--- atomic_defi_design/Dex/Components/DexModal.qml | 4 ++-- atomic_defi_design/Dex/Components/PopupManager.qml | 2 +- atomic_defi_design/Dex/Constants/DexTheme.qml | 12 ++---------- atomic_defi_design/Dex/Portfolio/AmountChart.qml | 2 +- 6 files changed, 12 insertions(+), 20 deletions(-) diff --git a/atomic_defi_design/Dex/Components/DexDialogManager.qml b/atomic_defi_design/Dex/Components/DexDialogManager.qml index 1d9b1861fb..fc3726ec11 100644 --- a/atomic_defi_design/Dex/Components/DexDialogManager.qml +++ b/atomic_defi_design/Dex/Components/DexDialogManager.qml @@ -18,7 +18,7 @@ Popup { Overlay.modal: Item { DexRectangle { anchors.fill: parent - color: Qt.darker(DexTheme.dexBoxBackgroundColor) + color: Qt.darker(DexTheme.backgroundDarkColor6) opacity: .8 } } @@ -128,7 +128,7 @@ Popup { height: 45 error: false visible: dialog.getText - defaultBorderColor: DexTheme.dexBoxBackgroundColor + defaultBorderColor: DexTheme.backgroundDarkColor6 background.border.width: 1 field.font: DexTypo.body2 placeholderText: dialog.placeholderText @@ -215,7 +215,7 @@ Popup { onReset: dialog.reset() topPadding: 25 background: Rectangle { - color: DexTheme.dexBoxBackgroundColor + color: DexTheme.backgroundDarkColor6 } delegate: Qaterial.Button { id: _dialogManagerButton diff --git a/atomic_defi_design/Dex/Components/DexItemBox.qml b/atomic_defi_design/Dex/Components/DexItemBox.qml index 67cdd130d2..eaec5d467e 100644 --- a/atomic_defi_design/Dex/Components/DexItemBox.qml +++ b/atomic_defi_design/Dex/Components/DexItemBox.qml @@ -64,7 +64,7 @@ InnerBackground { } //shadowOff: true - color: DexTheme.portfolioPieGradient ? 'transparent' : DexTheme.dexBoxBackgroundColor + color: DexTheme.portfolioPieGradient ? 'transparent' : DexTheme.backgroundDarkColor6 property alias titleLabel: _texto onExpandedVertChanged: { @@ -139,7 +139,7 @@ InnerBackground { width: parent.width height: 40 radius: parent.parent.height < 41 ? parent.parent.radius : 0 - color: DexTheme.portfolioPieGradient ? 'transparent' : DexTheme.dexBoxBackgroundColor + color: DexTheme.portfolioPieGradient ? 'transparent' : DexTheme.backgroundDarkColor6 visible: visibility && !_control.hideHeader RowLayout { anchors.fill: parent @@ -237,7 +237,7 @@ InnerBackground { height: parent.height anchors.right: parent.right radius: parent.parent.height < 41 ? parent.parent.radius : 0 - color: DexTheme.dexBoxBackgroundColor + color: DexTheme.backgroundDarkColor6 visible: !isVertical && hidden DefaultText { id: _texto2 diff --git a/atomic_defi_design/Dex/Components/DexModal.qml b/atomic_defi_design/Dex/Components/DexModal.qml index 7b476bca3a..5ee466fbcb 100644 --- a/atomic_defi_design/Dex/Components/DexModal.qml +++ b/atomic_defi_design/Dex/Components/DexModal.qml @@ -16,7 +16,7 @@ Popup { modal: true padding: 0 Overlay.modeless: DefaultRectangle { - color: Dex.CurrentTheme.dexBoxBackgroundColor + color: Dex.CurrentTheme.backgroundDarkColor6 opacity: .3 } @@ -27,7 +27,7 @@ Popup { anchors.fill: parent border.width: 2 radius: parent.radius - color: Dex.CurrentTheme.dexBoxBackgroundColor + color: Dex.CurrentTheme.backgroundDarkColor6 Container { id: _header width: parent.width diff --git a/atomic_defi_design/Dex/Components/PopupManager.qml b/atomic_defi_design/Dex/Components/PopupManager.qml index de6db72de1..a35025bea7 100644 --- a/atomic_defi_design/Dex/Components/PopupManager.qml +++ b/atomic_defi_design/Dex/Components/PopupManager.qml @@ -338,7 +338,7 @@ Popup topPadding: 25 background: Rectangle { - color: DexTheme.dexBoxBackgroundColor + color: DexTheme.backgroundDarkColor6 } delegate: Qaterial.Button { diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 1ce0de39c8..18adf00bf1 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -90,18 +90,14 @@ QtObject { property color headTextColor: accentColor - property color proviewItemBoxBackgroundColor: dexBoxBackgroundColor + property color proviewItemBoxBackgroundColor: backgroundDarkColor6 property color proviewItemBoxBorderColor: 'transparent' property color proviewItemBoxTitleColor: headTextColor property color proviewItemBoxIconColor: accentColor property int proviewItemBoxBorderWidth: 0 property color comboBoxBorderColor: rectangleBorderColor - property color comboBoxBackgroundColor: dexBoxBackgroundColor - - - property bool walletSidebarShadowVisibility: true - property color walletSidebarLeftBorderColor: backgroundColorDeep + property color comboBoxBackgroundColor: backgroundDarkColor6 property color leftSidebarBorderColor: rectangleBorderColor @@ -126,10 +122,6 @@ QtObject { // Old Theme property string chartTheme: Style.dark_theme ? "dark" : "light" - property color backgroundDarkColor2: backgroundDarkColor2 - property color backgroundColorDeep: backgroundDarkColor2 - property color dexBoxBackgroundColor: backgroundDarkColor6 - property color hightlightColor: accentDarkColor3 property color modalStepColor: accentColor property color modelStepBorderColor: hightlightColor diff --git a/atomic_defi_design/Dex/Portfolio/AmountChart.qml b/atomic_defi_design/Dex/Portfolio/AmountChart.qml index ec3bef155b..1f7bca35d2 100644 --- a/atomic_defi_design/Dex/Portfolio/AmountChart.qml +++ b/atomic_defi_design/Dex/Portfolio/AmountChart.qml @@ -217,7 +217,7 @@ InnerBackground { Rectangle { anchors.fill: parent opacity: .6 - color: DexTheme.dexBoxBackgroundColor + color: DexTheme.backgroundDarkColor6 visible: portfolio_asset_chart.isProgress radius: parent.radius DefaultBusyIndicator { From fbf964d6808b1546f93727b7005c16e981afdca9 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 20:26:32 +0800 Subject: [PATCH 006/251] rm old theme code --- atomic_defi_design/Dex/Constants/DexTheme.qml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 18adf00bf1..876b2ec7b1 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -117,25 +117,8 @@ QtObject { property color senderColorStart: warningColor property color receiverColorStart: okColor - - - // Old Theme - property string chartTheme: Style.dark_theme ? "dark" : "light" - - property color hightlightColor: accentDarkColor3 - property color modalStepColor: accentColor - property color modelStepBorderColor: hightlightColor - - property int sidebarShadowRadius: 32 - property real sideBarAnimationDuration: Style.animationDuration - - property color chartTradingLineColor: Dex.CurrentTheme.chartTradingLineColor - property color chartTradingLineBackgroundColor: Dex.CurrentTheme.chartTradingLineBackgroundColor - property color lineChartColor: accentColor property color chartGridLineColor: Qt.rgba(255,255,255,0.4) - property color busyIndicatorColor: Dex.CurrentTheme.busyIndicatorColor - // Button property color buttonColorDisabled: Dex.CurrentTheme.buttonColorDisabled property color buttonColorHovered: Dex.CurrentTheme.buttonColorHovered From bc6d107304c2b3fa277fabe5804cf228540e54a5 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 20:32:47 +0800 Subject: [PATCH 007/251] rename unused chart file --- .../Dex/Portfolio/{SmartChartView.qml => TradingViewChart.qml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename atomic_defi_design/Dex/Portfolio/{SmartChartView.qml => TradingViewChart.qml} (100%) diff --git a/atomic_defi_design/Dex/Portfolio/SmartChartView.qml b/atomic_defi_design/Dex/Portfolio/TradingViewChart.qml similarity index 100% rename from atomic_defi_design/Dex/Portfolio/SmartChartView.qml rename to atomic_defi_design/Dex/Portfolio/TradingViewChart.qml From 1101e1956d4b2c96f93f9cf640b9a8bf25e22908 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 20:56:22 +0800 Subject: [PATCH 008/251] match buy/sell buttons to orderbook coloring --- assets/themes/Default - Dark/colors.json | 8 ++++---- assets/themes/Default - Light/colors.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index ec458f54bd..3a62740cbd 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -93,10 +93,10 @@ "sidebarLineTextHovered": "#2C87B9FF", "sidebarLineTextSelected": "#FFFFFFFF", - "tradeBuyModeSelectorBackgroundColorStart": "#6A4DE3FF", - "tradeBuyModeSelectorBackgroundColorEnd": "#2279F1FF", - "tradeSellModeSelectorBackgroundColorStart": "#E52167FF", - "tradeSellModeSelectorBackgroundColorEnd": "#E216A9FF", + "tradeBuyModeSelectorBackgroundColorStart": "#E52167FF", + "tradeBuyModeSelectorBackgroundColorEnd": "#CD0F53FF", + "tradeSellModeSelectorBackgroundColorStart": "#0F713CFF", + "tradeSellModeSelectorBackgroundColorEnd": "#037B3AFF", "tradeMarketModeSelectorNotSelectedBackgroundColor": "#89B6FF21", "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 98e46ae970..0579c513f2 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -90,10 +90,10 @@ "sidebarLineTextHovered": "#2C87B9FF", "sidebarLineTextSelected": "#FFFFFFFF", - "tradeBuyModeSelectorBackgroundColorStart": "#6A4DE3FF", - "tradeBuyModeSelectorBackgroundColorEnd": "#2279F1FF", - "tradeSellModeSelectorBackgroundColorStart": "#E52167FF", - "tradeSellModeSelectorBackgroundColorEnd": "#E216A9FF", + "tradeBuyModeSelectorBackgroundColorStart": "#E52167FF", + "tradeBuyModeSelectorBackgroundColorEnd": "#CD0F53FF", + "tradeSellModeSelectorBackgroundColorStart": "#0F713CFF", + "tradeSellModeSelectorBackgroundColorEnd": "#037B3AFF", "tradeMarketModeSelectorNotSelectedBackgroundColor": "#89B6FF21", "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], From f5a8e918149323d8693abdd506a6df183e0f9ebb Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 21:07:22 +0800 Subject: [PATCH 009/251] use opacity when disabled to avoid ugly border pixels --- .../PlaceOrderForm/MarketModeSelector.qml | 23 +------------------ 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/MarketModeSelector.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/MarketModeSelector.qml index 6eb535000b..b4ffbdbf17 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/MarketModeSelector.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/MarketModeSelector.qml @@ -11,6 +11,7 @@ Rectangle property string ticker: "" radius: 18 + opacity: marketMode != API.app.trading_pg.market_mode ? 0.1 : 1 gradient: Gradient { @@ -32,28 +33,6 @@ Rectangle } } - // Background on topover of gradient to hide it when the market mode is different - DefaultRectangle - { - anchors.centerIn: parent - width: parent.width - 2 - height: parent.height - 2 - radius: parent.radius - 1 - color: Dex.CurrentTheme.backgroundColor - visible: marketMode != API.app.trading_pg.market_mode - } - - // Background when market mode is different - DefaultRectangle - { - anchors.centerIn: parent - width: parent.width - 2 - height: parent.height - 2 - radius: parent.radius - 1 - color: Dex.CurrentTheme.tradeMarketModeSelectorNotSelectedBackgroundColor - visible: marketMode != API.app.trading_pg.market_mode - } - DefaultText { anchors.centerIn: parent From 1ab70e0bb6d0754865d4ea0d32dcd3974fcf348e Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Dec 2022 22:20:07 +0800 Subject: [PATCH 010/251] styling login password input --- assets/themes/Default - Dark/colors.json | 4 +++- assets/themes/Default - Light/colors.json | 4 +++- .../Dex/Components/DexAppPasswordField.qml | 2 +- .../ProView/PlaceOrderForm/OrderFormSubfield.qml | 9 +++------ atomic_defi_design/Dex/Themes/CurrentTheme.qml | 6 ++++-- atomic_defi_design/Dex/Themes/DefaultTheme.js | 3 ++- atomic_defi_design/Dex/Themes/ThemeData.qml | 5 ++++- 7 files changed, 20 insertions(+), 13 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 3a62740cbd..4762eed1b5 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -97,7 +97,9 @@ "tradeBuyModeSelectorBackgroundColorEnd": "#CD0F53FF", "tradeSellModeSelectorBackgroundColorStart": "#0F713CFF", "tradeSellModeSelectorBackgroundColorEnd": "#037B3AFF", - "tradeMarketModeSelectorNotSelectedBackgroundColor": "#89B6FF21", + + "inputModifierBackgroundColor": "#89B6FF21", + "inputPasswordBackgroundColor": "#24273DFF", "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 0579c513f2..4be82b0837 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -94,7 +94,9 @@ "tradeBuyModeSelectorBackgroundColorEnd": "#CD0F53FF", "tradeSellModeSelectorBackgroundColorStart": "#0F713CFF", "tradeSellModeSelectorBackgroundColorEnd": "#037B3AFF", - "tradeMarketModeSelectorNotSelectedBackgroundColor": "#89B6FF21", + + "inputModifierBackgroundColor": "#89B6FF21", + "inputPasswordBackgroundColor": "#A9BDDCFF", "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/atomic_defi_design/Dex/Components/DexAppPasswordField.qml b/atomic_defi_design/Dex/Components/DexAppPasswordField.qml index a071c90e17..ccbc900359 100644 --- a/atomic_defi_design/Dex/Components/DexAppPasswordField.qml +++ b/atomic_defi_design/Dex/Components/DexAppPasswordField.qml @@ -14,7 +14,7 @@ DexAppTextField property bool forceFocus: false property string leftIcon: Qaterial.Icons.keyVariant - property color leftIconColor: Dex.CurrentTheme.foregroundColor + property color leftIconColor: Dex.CurrentTheme.inputPasswordBackgroundColor property alias hideFieldButton: _hideFieldButton height: 50 diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderFormSubfield.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderFormSubfield.qml index 1370518b6a..c39c0619c4 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderFormSubfield.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderFormSubfield.qml @@ -33,13 +33,12 @@ RowLayout width: btn_width height: parent.height - // Background when market mode is different DefaultRectangle { anchors.centerIn: parent width: parent.width height: parent.height - color: Dex.CurrentTheme.tradeMarketModeSelectorNotSelectedBackgroundColor + color: Dex.CurrentTheme.inputModifierBackgroundColor } DefaultText @@ -94,13 +93,12 @@ RowLayout width: btn_width height: parent.height - // Background when market mode is different DefaultRectangle { anchors.centerIn: parent width: parent.width height: parent.height - color: Dex.CurrentTheme.tradeMarketModeSelectorNotSelectedBackgroundColor + color: Dex.CurrentTheme.inputModifierBackgroundColor DefaultMouseArea { @@ -155,14 +153,13 @@ RowLayout width: btn_width height: parent.height - // Background when market mode is different DefaultRectangle { id: right_rect anchors.centerIn: parent width: parent.width height: parent.height - color: Dex.CurrentTheme.tradeMarketModeSelectorNotSelectedBackgroundColor + color: Dex.CurrentTheme.inputModifierBackgroundColor } DefaultText diff --git a/atomic_defi_design/Dex/Themes/CurrentTheme.qml b/atomic_defi_design/Dex/Themes/CurrentTheme.qml index 33fb9dbd09..47a1d30907 100644 --- a/atomic_defi_design/Dex/Themes/CurrentTheme.qml +++ b/atomic_defi_design/Dex/Themes/CurrentTheme.qml @@ -184,7 +184,9 @@ ThemeData tradeBuyModeSelectorBackgroundColorEnd = Dex.Color.argbStrFromRgbaStr(themeData.tradeBuyModeSelectorBackgroundColorEnd || defaultTheme.tradeBuyModeSelectorBackgroundColorEnd); tradeSellModeSelectorBackgroundColorStart = Dex.Color.argbStrFromRgbaStr(themeData.tradeSellModeSelectorBackgroundColorStart || defaultTheme.tradeSellModeSelectorBackgroundColorStart); tradeSellModeSelectorBackgroundColorEnd = Dex.Color.argbStrFromRgbaStr(themeData.tradeSellModeSelectorBackgroundColorEnd || defaultTheme.tradeSellModeSelectorBackgroundColorEnd); - tradeMarketModeSelectorNotSelectedBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.tradeMarketModeSelectorNotSelectedBackgroundColor || defaultTheme.tradeMarketModeSelectorNotSelectedBackgroundColor); + + inputModifierBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputModifierBackgroundColor || defaultTheme.inputModifierBackgroundColor); + inputPasswordBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputPasswordBackgroundColor || defaultTheme.inputPasswordBackgroundColor); addressBookTagColors = themeData.addressBookTagColors || defaultTheme.addressBookTagColors for (var i = 0; i < addressBookTagColors.length; i++) @@ -308,7 +310,7 @@ ThemeData console.info("Dex.Themes.CurrentTheme.printValues.tradeBuyModeSelectorBackgroundColorEnd : %1".arg(tradeBuyModeSelectorBackgroundColorEnd)); console.info("Dex.Themes.CurrentTheme.printValues.tradeSellModeSelectorBackgroundColorStart : %1".arg(tradeSellModeSelectorBackgroundColorStart)); console.info("Dex.Themes.CurrentTheme.printValues.tradeSellModeSelectorBackgroundColorEnd : %1".arg(tradeSellModeSelectorBackgroundColorEnd)); - console.info("Dex.Themes.CurrentTheme.printValues.tradeMarketModeSelectorNotSelectedBackgroundColor : %1".arg(tradeMarketModeSelectorNotSelectedBackgroundColor)); + console.info("Dex.Themes.CurrentTheme.printValues.inputModifierBackgroundColor : %1".arg(inputModifierBackgroundColor)); console.info("Dex.Themes.CurrentTheme.printValues.addressBookTagColors : %1".arg(addressBookTagColors)); diff --git a/atomic_defi_design/Dex/Themes/DefaultTheme.js b/atomic_defi_design/Dex/Themes/DefaultTheme.js index 442e438c1b..5b101b2425 100644 --- a/atomic_defi_design/Dex/Themes/DefaultTheme.js +++ b/atomic_defi_design/Dex/Themes/DefaultTheme.js @@ -100,7 +100,8 @@ function getHardcoded() tradeBuyModeSelectorBackgroundColorEnd: "#2279F1FF", tradeSellModeSelectorBackgroundColorStart: "#E52167FF", tradeSellModeSelectorBackgroundColorEnd: "#E216A9FF", - tradeMarketModeSelectorNotSelectedBackgroundColor: "#89B6FF21", + inputModifierBackgroundColor: "#89B6FF21", + inputPasswordBackgroundColor: "#A9BDDCFF", addressBookTagColors: ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/atomic_defi_design/Dex/Themes/ThemeData.qml b/atomic_defi_design/Dex/Themes/ThemeData.qml index 2f3ea0e245..7935814cb4 100644 --- a/atomic_defi_design/Dex/Themes/ThemeData.qml +++ b/atomic_defi_design/Dex/Themes/ThemeData.qml @@ -102,7 +102,10 @@ QtObject property color tradeBuyModeSelectorBackgroundColorEnd property color tradeSellModeSelectorBackgroundColorStart property color tradeSellModeSelectorBackgroundColorEnd - property color tradeMarketModeSelectorNotSelectedBackgroundColor + + // Inputs styling + property color inputModifierBackgroundColor + property color inputPasswordBackgroundColor // Address book page related property var addressBookTagColors From c85ab20ee2eed2b4de1bc7ae035811dfd13e4335 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 8 Dec 2022 14:13:34 +0800 Subject: [PATCH 011/251] red/green sell/buy trade mode button colors --- assets/themes/Default - Dark/colors.json | 8 ++++---- assets/themes/Default - Light/colors.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 4762eed1b5..f1e7c878ec 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -93,10 +93,10 @@ "sidebarLineTextHovered": "#2C87B9FF", "sidebarLineTextSelected": "#FFFFFFFF", - "tradeBuyModeSelectorBackgroundColorStart": "#E52167FF", - "tradeBuyModeSelectorBackgroundColorEnd": "#CD0F53FF", - "tradeSellModeSelectorBackgroundColorStart": "#0F713CFF", - "tradeSellModeSelectorBackgroundColorEnd": "#037B3AFF", + "tradeSellModeSelectorBackgroundColorStart": "#E52167FF", + "tradeSellModeSelectorBackgroundColorEnd": "#CD0F53FF", + "tradeBuyModeSelectorBackgroundColorStart": "#0F713CFF", + "tradeBuyModeSelectorBackgroundColorEnd": "#037B3AFF", "inputModifierBackgroundColor": "#89B6FF21", "inputPasswordBackgroundColor": "#24273DFF", diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 4be82b0837..dde66c9703 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -90,10 +90,10 @@ "sidebarLineTextHovered": "#2C87B9FF", "sidebarLineTextSelected": "#FFFFFFFF", - "tradeBuyModeSelectorBackgroundColorStart": "#E52167FF", - "tradeBuyModeSelectorBackgroundColorEnd": "#CD0F53FF", - "tradeSellModeSelectorBackgroundColorStart": "#0F713CFF", - "tradeSellModeSelectorBackgroundColorEnd": "#037B3AFF", + "tradeSellModeSelectorBackgroundColorStart": "#E52167FF", + "tradeSellModeSelectorBackgroundColorEnd": "#CD0F53FF", + "tradeBuyModeSelectorBackgroundColorStart": "#0F713CFF", + "tradeBuyModeSelectorBackgroundColorEnd": "#037B3AFF", "inputModifierBackgroundColor": "#89B6FF21", "inputPasswordBackgroundColor": "#A9BDDCFF", From 682ddb1cc4d4170fae824a921e75a5085b138be6 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 8 Dec 2022 19:55:09 +0800 Subject: [PATCH 012/251] theme updates for password/text input fields --- assets/themes/Default - Dark/colors.json | 22 ++++++++++++------- assets/themes/Default - Light/colors.json | 14 ++++++++---- .../Dex/Components/DexAppPasswordField.qml | 19 +++++++--------- .../Dex/Components/DexAppTextField.qml | 13 +++++------ atomic_defi_design/Dex/Constants/DexTheme.qml | 18 --------------- atomic_defi_design/Dex/Constants/DexTypo.qml | 13 +++++++++++ .../Dex/Screens/Startup/ImportWallet.qml | 5 +---- .../Dex/Screens/Startup/Login.qml | 4 ---- .../Dex/Screens/Startup/NewWallet.qml | 3 +-- .../Dex/Settings/RecoverSeedModal.qml | 3 --- .../Dex/Themes/CurrentTheme.qml | 8 ++++++- atomic_defi_design/Dex/Themes/DefaultTheme.js | 14 ++++++++---- atomic_defi_design/Dex/Themes/ThemeData.qml | 7 +++++- atomic_defi_design/Dex/main.qml | 11 ++++++---- 14 files changed, 83 insertions(+), 71 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index f1e7c878ec..4a2002f990 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -1,6 +1,6 @@ { "accentColor": "#2C3D66FF", - "foregroundColor": "#ffffffFF", + "foregroundColor": "#FFFFFFFF", "foregroundColor2": "#7A8EA1FF", "foregroundColor3": "#ABC0D3FF", "backgroundColor": "#202337FF", @@ -14,9 +14,9 @@ "buttonColorHovered": "#4068B929", "buttonColorPressed": "#2932546C", "buttonTextDisabledColor": "#444444FF", - "buttonTextEnabledColor": "#ffffffFF", - "buttonTextHoveredColor": "#ffffffFF", - "buttonTextPressedColor": "#ffffffFF", + "buttonTextEnabledColor": "#FFFFFFFF", + "buttonTextHoveredColor": "#FFFFFFFF", + "buttonTextPressedColor": "#FFFFFFFF", "gradientButtonStartColor": "#4986EAAD", "gradientButtonEndColor": "#5A68E6FF", @@ -94,12 +94,18 @@ "sidebarLineTextSelected": "#FFFFFFFF", "tradeSellModeSelectorBackgroundColorStart": "#E52167FF", - "tradeSellModeSelectorBackgroundColorEnd": "#CD0F53FF", - "tradeBuyModeSelectorBackgroundColorStart": "#0F713CFF", - "tradeBuyModeSelectorBackgroundColorEnd": "#037B3AFF", + "tradeSellModeSelectorBackgroundColorEnd": "#CD0F53FF", + "tradeBuyModeSelectorBackgroundColorStart": "#0F713CFF", + "tradeBuyModeSelectorBackgroundColorEnd": "#037B3AFF", "inputModifierBackgroundColor": "#89B6FF21", - "inputPasswordBackgroundColor": "#24273DFF", + "inputFieldBackgroundColor": "#313555FF", + + "inputFieldBorderColor": "#24273DFF", + "inputPlaceholderTextColor": "#FFFFFFFF", + "inputRightIconColor": "#FFFFFFFF", + "inputLeftIconColor": "#FFFFFFFF", + "inputLeftIconBackgroundColor": "#2C3D66FF", "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index dde66c9703..8c7e328953 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -91,12 +91,18 @@ "sidebarLineTextSelected": "#FFFFFFFF", "tradeSellModeSelectorBackgroundColorStart": "#E52167FF", - "tradeSellModeSelectorBackgroundColorEnd": "#CD0F53FF", - "tradeBuyModeSelectorBackgroundColorStart": "#0F713CFF", - "tradeBuyModeSelectorBackgroundColorEnd": "#037B3AFF", + "tradeSellModeSelectorBackgroundColorEnd": "#CD0F53FF", + "tradeBuyModeSelectorBackgroundColorStart": "#0F713CFF", + "tradeBuyModeSelectorBackgroundColorEnd": "#037B3AFF", "inputModifierBackgroundColor": "#89B6FF21", - "inputPasswordBackgroundColor": "#A9BDDCFF", + "inputFieldBackgroundColor": "#F3F5F6FF", + + "inputFieldBorderColor": "#A9BDDCFF", + "inputPlaceholderTextColor": "#456078FF", + "inputRightIconColor": "#456078FF", + "inputLeftIconColor": "#456078FF", + "inputLeftIconBackgroundColor": "#F0F2FFFF", "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/atomic_defi_design/Dex/Components/DexAppPasswordField.qml b/atomic_defi_design/Dex/Components/DexAppPasswordField.qml index ccbc900359..a0024ca302 100644 --- a/atomic_defi_design/Dex/Components/DexAppPasswordField.qml +++ b/atomic_defi_design/Dex/Components/DexAppPasswordField.qml @@ -14,25 +14,22 @@ DexAppTextField property bool forceFocus: false property string leftIcon: Qaterial.Icons.keyVariant - property color leftIconColor: Dex.CurrentTheme.inputPasswordBackgroundColor + property color leftIconColor: Dex.CurrentTheme.inputLeftIconColor + property color rightIconColor: Dex.CurrentTheme.inputRightIconColor property alias hideFieldButton: _hideFieldButton height: 50 width: 300 background.radius: 25 max_length: General.max_std_pw_length + field.echoMode: TextField.Password - field.font: Qt.font( - { - pixelSize: (16 * DexTypo.fontDensity) * (Screen.pixelDensity / 160), - letterSpacing: 0.5, - family: DexTypo.fontFamily, - weight: Font.Normal - }) + field.font: DexTypo.inputFieldFont field.horizontalAlignment: Qt.AlignLeft field.leftPadding: 75 field.rightPadding: 60 field.placeholderText: qsTr("Type password") + Component.onCompleted: { if (forceFocus) field.forceActiveFocus() @@ -44,8 +41,8 @@ DexAppTextField height: 40 width: 60 radius: 20 - color: Dex.CurrentTheme.accentColor - border.color: Dex.CurrentTheme.accentColor + color: Dex.CurrentTheme.inputLeftIconBackgroundColor + border.color: Dex.CurrentTheme.inputFieldBorderColor border.width: _inputPassword.focus ? 2 : 0 anchors.verticalCenter: parent.verticalCenter @@ -66,7 +63,7 @@ DexAppTextField icon { source: _inputPassword.field.echoMode === TextField.Password ? Qaterial.Icons.eyeOffOutline : Qaterial.Icons.eyeOutline - color: Dex.CurrentTheme.foregroundColor + color: rightIconColor } anchors { diff --git a/atomic_defi_design/Dex/Components/DexAppTextField.qml b/atomic_defi_design/Dex/Components/DexAppTextField.qml index 727f2dbb9d..3c3035f75c 100644 --- a/atomic_defi_design/Dex/Components/DexAppTextField.qml +++ b/atomic_defi_design/Dex/Components/DexAppTextField.qml @@ -5,6 +5,7 @@ import QtQuick.Layouts 1.5 import App 1.0 import Dex.Themes 1.0 as Dex +import "../Constants" Item { @@ -75,7 +76,7 @@ Item width: parent.width height: parent.height radius: 4 - color: Dex.CurrentTheme.backgroundColor + color: Dex.CurrentTheme.inputFieldBackgroundColor border.color: control.error ? Dex.CurrentTheme.warningColor : input_field.focus ? Dex.CurrentTheme.accentColor : color border.width: input_field.focus ? 1 : 0 @@ -126,7 +127,7 @@ Item anchors.topMargin: 1 anchors.bottomMargin: 1 radius: _background.radius - color: background.color + color: Dex.CurrentTheme.inputFieldBackgroundColor DexTextField { @@ -157,13 +158,12 @@ Item text: control.placeholderText anchors.verticalCenter: parent.verticalCenter leftPadding: input_field.leftPadding - color: Dex.CurrentTheme.foregroundColor - font: DexTypo.body1 + color: Dex.CurrentTheme.inputPlaceholderTextColor + font: DexTypo.inputFieldFont elide: DexLabel.ElideRight width: parent.width - 10 wrapMode: DexLabel.NoWrap visible: input_field.text === "" - opacity: .2 } } } @@ -182,8 +182,7 @@ Item text: rightText color: Dex.CurrentTheme.foregroundColor opacity: .4 - font.pixelSize: 14 - font.weight: Font.Medium + font: DexTypo.inputFieldSuffixFont } } } diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 876b2ec7b1..19cde78f3f 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -154,24 +154,6 @@ QtObject { // Widget settings property int rectangleRadius: Style.rectangleCornerRadius - - - - - - - - - - - - - - - - - - diff --git a/atomic_defi_design/Dex/Constants/DexTypo.qml b/atomic_defi_design/Dex/Constants/DexTypo.qml index 6abbef1e44..93db4733f9 100644 --- a/atomic_defi_design/Dex/Constants/DexTypo.qml +++ b/atomic_defi_design/Dex/Constants/DexTypo.qml @@ -3,6 +3,7 @@ pragma Singleton import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 +import QtQuick.Window 2.15 QtObject { id: _font @@ -153,4 +154,16 @@ QtObject { family: "Courier", weight: Font.Normal }) + property font inputFieldFont: Qt.font({ + pixelSize: (16 * DexTypo.fontDensity) * (Screen.pixelDensity / 160), + letterSpacing: 0.5, + family: DexTypo.fontFamily, + weight: Font.Normal + }) + property font inputFieldSuffixFont: Qt.font({ + pixelSize: (14 * DexTypo.fontDensity) * (Screen.pixelDensity / 160), + letterSpacing: 0.1, + family: fontFamily, + weight: Font.Medium + }) } diff --git a/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml index ba82ad690a..889173856a 100644 --- a/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml @@ -166,14 +166,12 @@ SetupPage height: 40 width: 60 radius: 20 - color: Dex.CurrentTheme.accentColor anchors.verticalCenter: parent.verticalCenter Qaterial.ColorIcon { anchors.centerIn: parent iconSize: 19 source: Qaterial.Icons.wallet - color: Dex.CurrentTheme.foregroundColor } } } @@ -306,7 +304,7 @@ SetupPage DexAppPasswordField { id: _inputPassword - field.font: DexTypo.body2 + field.placeholderText: qsTr("Enter password") Layout.fillWidth: true Layout.preferredHeight: 50 field.onAccepted: trySubmit() @@ -324,7 +322,6 @@ SetupPage DexAppPasswordField { id: _inputPasswordConfirm - field.font: DexTypo.body2 field.placeholderText: qsTr("Enter the same password to confirm") Layout.fillWidth: true Layout.preferredHeight: 50 diff --git a/atomic_defi_design/Dex/Screens/Startup/Login.qml b/atomic_defi_design/Dex/Screens/Startup/Login.qml index 485b0fd5a5..115fcf981b 100644 --- a/atomic_defi_design/Dex/Screens/Startup/Login.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Login.qml @@ -67,7 +67,6 @@ SetupPage max_length: General.max_pw_length height: 50 width: 300 - background.color: Dex.CurrentTheme.floatingBackgroundColor forceFocus: true field.onTextChanged: { _isPasswordWrong = false } field.onAccepted: @@ -88,9 +87,6 @@ SetupPage return false; } } - - leftIconColor: Dex.CurrentTheme.foregroundColor - hideFieldButton.icon.color: Dex.CurrentTheme.foregroundColor } DexLabel diff --git a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml index dcc574bb1c..cedcc1be87 100644 --- a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml @@ -318,14 +318,12 @@ SetupPage height: 40 width: 60 radius: 20 - color: Dex.CurrentTheme.accentColor anchors.verticalCenter: parent.verticalCenter Qaterial.ColorIcon { anchors.centerIn: parent iconSize: 19 source: Qaterial.Icons.wallet - color: Dex.CurrentTheme.foregroundColor } } } @@ -685,6 +683,7 @@ SetupPage id: _inputPassword Layout.fillWidth: true Layout.preferredHeight: 50 + field.placeholderText: qsTr("Enter password") field.onAccepted: _keyChecker.isValid() ? eula_modal.open() : undefined } diff --git a/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml b/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml index 5f0c820744..c76588a941 100644 --- a/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml +++ b/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml @@ -69,10 +69,7 @@ MultipageModal Layout.margins: 20 Layout.alignment: Qt.AlignHCenter field.onAccepted: tryViewKeysAndSeed() - leftIconColor: Dex.CurrentTheme.foregroundColor field.onTextChanged: { _isPasswordWrong = false } - background.color: Dex.CurrentTheme.accentColor - hideFieldButton.icon.color: Dex.CurrentTheme.foregroundColor } DexLabel diff --git a/atomic_defi_design/Dex/Themes/CurrentTheme.qml b/atomic_defi_design/Dex/Themes/CurrentTheme.qml index 47a1d30907..805b3192fe 100644 --- a/atomic_defi_design/Dex/Themes/CurrentTheme.qml +++ b/atomic_defi_design/Dex/Themes/CurrentTheme.qml @@ -186,7 +186,13 @@ ThemeData tradeSellModeSelectorBackgroundColorEnd = Dex.Color.argbStrFromRgbaStr(themeData.tradeSellModeSelectorBackgroundColorEnd || defaultTheme.tradeSellModeSelectorBackgroundColorEnd); inputModifierBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputModifierBackgroundColor || defaultTheme.inputModifierBackgroundColor); - inputPasswordBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputPasswordBackgroundColor || defaultTheme.inputPasswordBackgroundColor); + inputFieldBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputFieldBackgroundColor || defaultTheme.inputFieldBackgroundColor); + + inputFieldBorderColor = Dex.Color.argbStrFromRgbaStr(themeData.inputFieldBorderColor || defaultTheme.inputFieldBorderColor); + inputPlaceholderTextColor = Dex.Color.argbStrFromRgbaStr(themeData.inputPlaceholderTextColor || defaultTheme.inputPlaceholderTextColor); + inputRightIconColor = Dex.Color.argbStrFromRgbaStr(themeData.inputRightIconColor || defaultTheme.inputRightIconColor); + inputLeftIconColor = Dex.Color.argbStrFromRgbaStr(themeData.inputLeftIconColor || defaultTheme.inputLeftIconColor); + inputLeftIconBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputLeftIconBackgroundColor || defaultTheme.inputLeftIconBackgroundColor); addressBookTagColors = themeData.addressBookTagColors || defaultTheme.addressBookTagColors for (var i = 0; i < addressBookTagColors.length; i++) diff --git a/atomic_defi_design/Dex/Themes/DefaultTheme.js b/atomic_defi_design/Dex/Themes/DefaultTheme.js index 5b101b2425..f22050ea8b 100644 --- a/atomic_defi_design/Dex/Themes/DefaultTheme.js +++ b/atomic_defi_design/Dex/Themes/DefaultTheme.js @@ -96,12 +96,18 @@ function getHardcoded() sidebarLineTextHovered: "#2C87B9FF", sidebarLineTextSelected: "#FFFFFFFF", - tradeBuyModeSelectorBackgroundColorStart: "#6A4DE3FF", - tradeBuyModeSelectorBackgroundColorEnd: "#2279F1FF", + tradeBuyModeSelectorBackgroundColorStart: "#6A4DE3FF", + tradeBuyModeSelectorBackgroundColorEnd: "#2279F1FF", tradeSellModeSelectorBackgroundColorStart: "#E52167FF", - tradeSellModeSelectorBackgroundColorEnd: "#E216A9FF", + tradeSellModeSelectorBackgroundColorEnd: "#E216A9FF", + inputModifierBackgroundColor: "#89B6FF21", - inputPasswordBackgroundColor: "#A9BDDCFF", + inputFieldBackgroundColor: "#A9BDDCFF", + inputFieldBorderColor: "#28272EFF", + inputPlaceholderTextColor: "#A9A9A9FF", + inputRightIconColor: "#A9A9A9FF", + inputLeftIconColor: "#FFFFFFFF", + inputLeftIconBackgroundColor: "#1C1B24FF", addressBookTagColors: ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/atomic_defi_design/Dex/Themes/ThemeData.qml b/atomic_defi_design/Dex/Themes/ThemeData.qml index 7935814cb4..fb32c63b56 100644 --- a/atomic_defi_design/Dex/Themes/ThemeData.qml +++ b/atomic_defi_design/Dex/Themes/ThemeData.qml @@ -105,7 +105,12 @@ QtObject // Inputs styling property color inputModifierBackgroundColor - property color inputPasswordBackgroundColor + property color inputFieldBackgroundColor + property color inputFieldBorderColor + property color inputPlaceholderTextColor + property color inputRightIconColor + property color inputLeftIconColor + property color inputLeftIconBackgroundColor // Address book page related property var addressBookTagColors diff --git a/atomic_defi_design/Dex/main.qml b/atomic_defi_design/Dex/main.qml index 546f406a79..7d4acf7e11 100644 --- a/atomic_defi_design/Dex/main.qml +++ b/atomic_defi_design/Dex/main.qml @@ -354,10 +354,13 @@ DexWindow iconSize: 24 icon: { - if (Dex.CurrentTheme.getColorMode() === Dex.CurrentTheme.ColorMode.Light) - return Qaterial.Icons.moonWaningCrescent; - else if (Dex.CurrentTheme.getColorMode() === Dex.CurrentTheme.ColorMode.Dark) - return Qaterial.Icons.whiteBalanceSunny; + if (Dex.CurrentTheme.getColorMode() !== Dex.CurrentTheme.ColorMode.None) + { + if (Dex.CurrentTheme.getColorMode() === Dex.CurrentTheme.ColorMode.Light) + return Qaterial.Icons.moonWaningCrescent; + else if (Dex.CurrentTheme.getColorMode() === Dex.CurrentTheme.ColorMode.Dark) + return Qaterial.Icons.whiteBalanceSunny; + } } onClicked: { From f2de8c580d9b6f59c772bdb7d1cb9ec5eb4ed0bc Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 8 Dec 2022 20:31:41 +0800 Subject: [PATCH 013/251] input border and icon on light mode fix --- assets/themes/Default - Dark/colors.json | 4 ++-- assets/themes/Default - Light/colors.json | 4 ++-- atomic_defi_design/Dex/Components/DexAppPasswordField.qml | 1 - atomic_defi_design/Dex/Components/DexAppTextField.qml | 2 +- atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml | 1 + atomic_defi_design/Dex/Screens/Startup/NewWallet.qml | 3 +++ 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 4a2002f990..34bd571e16 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -101,11 +101,11 @@ "inputModifierBackgroundColor": "#89B6FF21", "inputFieldBackgroundColor": "#313555FF", - "inputFieldBorderColor": "#24273DFF", + "inputFieldBorderColor": "#20233788", "inputPlaceholderTextColor": "#FFFFFFFF", "inputRightIconColor": "#FFFFFFFF", "inputLeftIconColor": "#FFFFFFFF", - "inputLeftIconBackgroundColor": "#2C3D66FF", + "inputLeftIconBackgroundColor": "#202337FF", "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 8c7e328953..bbaf927cce 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -98,11 +98,11 @@ "inputModifierBackgroundColor": "#89B6FF21", "inputFieldBackgroundColor": "#F3F5F6FF", - "inputFieldBorderColor": "#A9BDDCFF", + "inputFieldBorderColor": "#DCE8FD88", "inputPlaceholderTextColor": "#456078FF", "inputRightIconColor": "#456078FF", "inputLeftIconColor": "#456078FF", - "inputLeftIconBackgroundColor": "#F0F2FFFF", + "inputLeftIconBackgroundColor": "#DCE8FDFF", "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/atomic_defi_design/Dex/Components/DexAppPasswordField.qml b/atomic_defi_design/Dex/Components/DexAppPasswordField.qml index a0024ca302..6fde726c1a 100644 --- a/atomic_defi_design/Dex/Components/DexAppPasswordField.qml +++ b/atomic_defi_design/Dex/Components/DexAppPasswordField.qml @@ -42,7 +42,6 @@ DexAppTextField width: 60 radius: 20 color: Dex.CurrentTheme.inputLeftIconBackgroundColor - border.color: Dex.CurrentTheme.inputFieldBorderColor border.width: _inputPassword.focus ? 2 : 0 anchors.verticalCenter: parent.verticalCenter diff --git a/atomic_defi_design/Dex/Components/DexAppTextField.qml b/atomic_defi_design/Dex/Components/DexAppTextField.qml index 3c3035f75c..81773020b4 100644 --- a/atomic_defi_design/Dex/Components/DexAppTextField.qml +++ b/atomic_defi_design/Dex/Components/DexAppTextField.qml @@ -77,7 +77,7 @@ Item height: parent.height radius: 4 color: Dex.CurrentTheme.inputFieldBackgroundColor - border.color: control.error ? Dex.CurrentTheme.warningColor : input_field.focus ? Dex.CurrentTheme.accentColor : color + border.color: control.error ? Dex.CurrentTheme.warningColor : input_field.focus ? Dex.CurrentTheme.inputFieldBorderColor : color border.width: input_field.focus ? 1 : 0 Behavior on x diff --git a/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml index 889173856a..2abfd27ab4 100644 --- a/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml @@ -172,6 +172,7 @@ SetupPage anchors.centerIn: parent iconSize: 19 source: Qaterial.Icons.wallet + color: Dex.CurrentTheme.inputLeftIconColor } } } diff --git a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml index cedcc1be87..c6d4ab60ad 100644 --- a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml @@ -319,11 +319,14 @@ SetupPage width: 60 radius: 20 anchors.verticalCenter: parent.verticalCenter + color: Dex.CurrentTheme.inputLeftIconBackgroundColor + Qaterial.ColorIcon { anchors.centerIn: parent iconSize: 19 source: Qaterial.Icons.wallet + color: Dex.CurrentTheme.inputLeftIconColor } } } From 290bbe74fc66f1f73095ba0c94678fee613eec9e Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 8 Dec 2022 23:22:02 +0800 Subject: [PATCH 014/251] tweak list hovering styles --- assets/themes/Default - Dark/colors.json | 5 +++++ assets/themes/Default - Light/colors.json | 4 ++++ .../Dex/Exchange/Trade/SimpleView/SubBestOrder.qml | 5 +++-- .../Exchange/Trade/SimpleView/SubCoinSelector.qml | 2 +- atomic_defi_design/Dex/Portfolio/AssetsList.qml | 4 ++-- atomic_defi_design/Dex/Screens/Dashboard.qml | 1 + atomic_defi_design/Dex/Themes/CurrentTheme.qml | 9 ++++++--- atomic_defi_design/Dex/Themes/DefaultTheme.js | 14 +++++++++----- atomic_defi_design/Dex/Themes/ThemeData.qml | 4 ++++ atomic_defi_design/Dex/Wallet/Transactions.qml | 2 +- atomic_defi_design/Dex/main.qml | 1 + 11 files changed, 37 insertions(+), 14 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 34bd571e16..63b31c7787 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -107,6 +107,11 @@ "inputLeftIconColor": "#FFFFFFFF", "inputLeftIconBackgroundColor": "#202337FF", + "listItemOddBackground": "#202337FF", + "listItemEvenBackground": "#24273DFF", + "listItemHoveredBackground": "#4068B9FF", + + "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], "okColor": "#00C058FF", diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index bbaf927cce..546b78e686 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -104,6 +104,10 @@ "inputLeftIconColor": "#456078FF", "inputLeftIconBackgroundColor": "#DCE8FDFF", + "listItemOddBackground": "#FCFCFCFF", + "listItemEvenBackground": "#EDF4FFFF", + "listItemHoveredBackground": "#D7E7FFFF", + "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], "okColor": "#00C058FF", diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml index 0c1fcd5e92..73afee60fd 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml @@ -128,10 +128,10 @@ DexListView width: _rowWidth height: _rowHeight - radius: 0 + radius: mouse_area.containsMouse ? 3 : 0 border.width: 0 colorAnimation: false - color: mouse_area.containsMouse ? Dex.CurrentTheme.buttonColorHovered : 'transparent' + color: mouse_area.containsMouse ? Dex.CurrentTheme.listItemHoveredBackground : 'transparent' DexMouseArea { @@ -162,6 +162,7 @@ DexListView { property int _iconWidth: 24 Layout.preferredWidth: _tokenColumnSize + Layout.leftMargin: 3 DexImage // Order Token Icon { diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubCoinSelector.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubCoinSelector.qml index 5a89dd366d..bf1938c322 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubCoinSelector.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubCoinSelector.qml @@ -130,7 +130,7 @@ DexListView radius: 0 border.width: 0 colorAnimation: false - color: mouse_area.containsMouse ? Dex.CurrentTheme.buttonColorHovered : 'transparent' + color: mouse_area.containsMouse ? Dex.CurrentTheme.listItemHoveredBackground : 'transparent' DexMouseArea { diff --git a/atomic_defi_design/Dex/Portfolio/AssetsList.qml b/atomic_defi_design/Dex/Portfolio/AssetsList.qml index aa28f0ef62..480865d617 100644 --- a/atomic_defi_design/Dex/Portfolio/AssetsList.qml +++ b/atomic_defi_design/Dex/Portfolio/AssetsList.qml @@ -96,13 +96,13 @@ Dex.DexListView delegate: Rectangle { - property color _idleColor: index % 2 === 1 ? Dex.CurrentTheme.backgroundColor : Dex.CurrentTheme.innerBackgroundColor + property color _idleColor: index % 2 === 1 ? Dex.CurrentTheme.listItemOddBackground : Dex.CurrentTheme.listItemEvenBackground property int activation_progress: Dex.General.zhtlcActivationProgress(activation_status, ticker) width: list.width height: _assetRowHeight - color: mouseArea.containsMouse ? Dex.CurrentTheme.buttonColorHovered : _idleColor + color: mouseArea.containsMouse ? Dex.CurrentTheme.listItemHoveredBackground : _idleColor RowLayout { diff --git a/atomic_defi_design/Dex/Screens/Dashboard.qml b/atomic_defi_design/Dex/Screens/Dashboard.qml index e25c8b6170..319292f2e5 100644 --- a/atomic_defi_design/Dex/Screens/Dashboard.qml +++ b/atomic_defi_design/Dex/Screens/Dashboard.qml @@ -20,6 +20,7 @@ import "../Support" as SupportPage import "../Screens" import "../Addressbook" as Addressbook import Dex.Themes 1.0 as Dex +import AtomicDEX.TradingMode 1.0 Item { diff --git a/atomic_defi_design/Dex/Themes/CurrentTheme.qml b/atomic_defi_design/Dex/Themes/CurrentTheme.qml index 805b3192fe..1b1e1d0f96 100644 --- a/atomic_defi_design/Dex/Themes/CurrentTheme.qml +++ b/atomic_defi_design/Dex/Themes/CurrentTheme.qml @@ -186,14 +186,17 @@ ThemeData tradeSellModeSelectorBackgroundColorEnd = Dex.Color.argbStrFromRgbaStr(themeData.tradeSellModeSelectorBackgroundColorEnd || defaultTheme.tradeSellModeSelectorBackgroundColorEnd); inputModifierBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputModifierBackgroundColor || defaultTheme.inputModifierBackgroundColor); - inputFieldBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputFieldBackgroundColor || defaultTheme.inputFieldBackgroundColor); - - inputFieldBorderColor = Dex.Color.argbStrFromRgbaStr(themeData.inputFieldBorderColor || defaultTheme.inputFieldBorderColor); + inputFieldBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputFieldBackgroundColor || defaultTheme.inputFieldBackgroundColor); + inputFieldBorderColor = Dex.Color.argbStrFromRgbaStr(themeData.inputFieldBorderColor || defaultTheme.inputFieldBorderColor); inputPlaceholderTextColor = Dex.Color.argbStrFromRgbaStr(themeData.inputPlaceholderTextColor || defaultTheme.inputPlaceholderTextColor); inputRightIconColor = Dex.Color.argbStrFromRgbaStr(themeData.inputRightIconColor || defaultTheme.inputRightIconColor); inputLeftIconColor = Dex.Color.argbStrFromRgbaStr(themeData.inputLeftIconColor || defaultTheme.inputLeftIconColor); inputLeftIconBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.inputLeftIconBackgroundColor || defaultTheme.inputLeftIconBackgroundColor); + listItemOddBackground = Dex.Color.argbStrFromRgbaStr(themeData.listItemOddBackground || defaultTheme.listItemOddBackground); + listItemEvenBackground = Dex.Color.argbStrFromRgbaStr(themeData.listItemEvenBackground || defaultTheme.listItemEvenBackground); + listItemHoveredBackground = Dex.Color.argbStrFromRgbaStr(themeData.listItemHoveredBackground || defaultTheme.listItemHoveredBackground); + addressBookTagColors = themeData.addressBookTagColors || defaultTheme.addressBookTagColors for (var i = 0; i < addressBookTagColors.length; i++) { diff --git a/atomic_defi_design/Dex/Themes/DefaultTheme.js b/atomic_defi_design/Dex/Themes/DefaultTheme.js index f22050ea8b..7bb44b2ca1 100644 --- a/atomic_defi_design/Dex/Themes/DefaultTheme.js +++ b/atomic_defi_design/Dex/Themes/DefaultTheme.js @@ -102,12 +102,16 @@ function getHardcoded() tradeSellModeSelectorBackgroundColorEnd: "#E216A9FF", inputModifierBackgroundColor: "#89B6FF21", - inputFieldBackgroundColor: "#A9BDDCFF", - inputFieldBorderColor: "#28272EFF", - inputPlaceholderTextColor: "#A9A9A9FF", - inputRightIconColor: "#A9A9A9FF", + inputFieldBackgroundColor: "#313555FF", + inputFieldBorderColor: "#20233788", + inputPlaceholderTextColor: "#FFFFFFFF", + inputRightIconColor: "#FFFFFFFF", inputLeftIconColor: "#FFFFFFFF", - inputLeftIconBackgroundColor: "#1C1B24FF", + inputLeftIconBackgroundColor: "#202337FF", + + listItemOddBackground: "#202337FF", + listItemEvenBackground: "#24273DFF", + listItemHoveredBackground: "#4068B9FF", addressBookTagColors: ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], diff --git a/atomic_defi_design/Dex/Themes/ThemeData.qml b/atomic_defi_design/Dex/Themes/ThemeData.qml index fb32c63b56..c261fe832a 100644 --- a/atomic_defi_design/Dex/Themes/ThemeData.qml +++ b/atomic_defi_design/Dex/Themes/ThemeData.qml @@ -112,6 +112,10 @@ QtObject property color inputLeftIconColor property color inputLeftIconBackgroundColor + property color listItemOddBackground + property color listItemEvenBackground + property color listItemHoveredBackground + // Address book page related property var addressBookTagColors diff --git a/atomic_defi_design/Dex/Wallet/Transactions.qml b/atomic_defi_design/Dex/Wallet/Transactions.qml index 319b61c3c1..9e3edf4663 100644 --- a/atomic_defi_design/Dex/Wallet/Transactions.qml +++ b/atomic_defi_design/Dex/Wallet/Transactions.qml @@ -30,7 +30,7 @@ Dex.ListView radius: 0 border.width: 0 colorAnimation: false - color: mouse_area.containsMouse ? Dex.CurrentTheme.buttonColorHovered : 'transparent' + color: mouse_area.containsMouse ? Dex.CurrentTheme.listItemHoveredBackground : 'transparent' Dex.MouseArea { diff --git a/atomic_defi_design/Dex/main.qml b/atomic_defi_design/Dex/main.qml index 7d4acf7e11..0a18ae3c4e 100644 --- a/atomic_defi_design/Dex/main.qml +++ b/atomic_defi_design/Dex/main.qml @@ -361,6 +361,7 @@ DexWindow else if (Dex.CurrentTheme.getColorMode() === Dex.CurrentTheme.ColorMode.Dark) return Qaterial.Icons.whiteBalanceSunny; } + return Qaterial.Icons.moonWaningCrescent; } onClicked: { From 2cf1abe2d77e17b7baab99dcdfdfebbdb3f6d0ca Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 9 Dec 2022 00:10:05 +0800 Subject: [PATCH 015/251] secondary button style --- assets/themes/Default - Dark/colors.json | 5 +++++ assets/themes/Default - Light/colors.json | 5 +++++ .../Dex/Components/DexAppButton.qml | 10 ++++++---- atomic_defi_design/Dex/Constants/DexTheme.qml | 5 +++++ atomic_defi_design/Dex/Constants/DexTypo.qml | 2 +- atomic_defi_design/Dex/Portfolio/Portfolio.qml | 2 +- atomic_defi_design/Dex/Themes/CurrentTheme.qml | 5 +++++ atomic_defi_design/Dex/Themes/DefaultTheme.js | 5 +++++ atomic_defi_design/Dex/Themes/ThemeData.qml | 5 +++++ atomic_defi_design/Dex/Wallet/Sidebar.qml | 16 +++++++--------- 10 files changed, 45 insertions(+), 15 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 63b31c7787..198fd2b516 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -18,6 +18,11 @@ "buttonTextHoveredColor": "#FFFFFFFF", "buttonTextPressedColor": "#FFFFFFFF", + "buttonSecondaryColorDisabled": "#28375AFF", + "buttonSecondaryColorEnabled": "#293254FF", + "buttonSecondaryColorHovered": "#4068B929", + "buttonSecondaryColorPressed": "#2932546C", + "gradientButtonStartColor": "#4986EAAD", "gradientButtonEndColor": "#5A68E6FF", "gradientButtonDisabledStartColor": "#5A68E64D", diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 546b78e686..a66df4fe02 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -15,6 +15,11 @@ "buttonTextHoveredColor": "#2F5678FF", "buttonTextPressedColor": "#3A5B78FF", + "buttonSecondaryColorDisabled": "#D8E3F8FF", + "buttonSecondaryColorEnabled": "#F0F6FFFF", + "buttonSecondaryColorHovered": "#D7E7FFFF", + "buttonSecondaryColorPressed": "#B8D2F9FF", + "gradientButtonStartColor": "#5A68E6FF", "gradientButtonEndColor": "#4986EAAB", "gradientButtonDisabledStartColor": "#CDD0F6FF", diff --git a/atomic_defi_design/Dex/Components/DexAppButton.qml b/atomic_defi_design/Dex/Components/DexAppButton.qml index 4414add9d2..9976ae9200 100644 --- a/atomic_defi_design/Dex/Components/DexAppButton.qml +++ b/atomic_defi_design/Dex/Components/DexAppButton.qml @@ -23,6 +23,11 @@ DexRectangle property int horizontalPadding: 2 property int iconSize: _label.font.pixelSize + 2 + property color btnPressedColor: Dex.CurrentTheme.buttonColorPressed + property color btnHoveredColor: Dex.CurrentTheme.buttonColorHovered + property color btnEnabledColor: Dex.CurrentTheme.buttonColorEnabled + property color btnDisabledColor: Dex.CurrentTheme.buttonColorDisabled + property alias label: _label property alias font: _label.font property alias content: _contentRow @@ -41,10 +46,7 @@ DexRectangle colorAnimation: false color: enabled ? _controlMouseArea.containsMouse ? _controlMouseArea.containsPress ? - Dex.CurrentTheme.buttonColorPressed : - Dex.CurrentTheme.buttonColorHovered : - Dex.CurrentTheme.buttonColorEnabled : - Dex.CurrentTheme.buttonColorDisabled + btnPressedColor : btnHoveredColor : btnEnabledColor : btnDisabledColor opacity: _controlMouseArea.containsMouse ? 1 : .8 Row diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 19cde78f3f..38a1e0f48c 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -129,6 +129,11 @@ QtObject { property color buttonColorTextEnabled: Dex.CurrentTheme.buttonTextEnabledColor property color buttonColorTextPressed: Dex.CurrentTheme.buttonTextPressedColor + property color buttonSecondaryColorDisabled: Dex.CurrentTheme.buttonSecondaryColorDisabled + property color buttonSecondaryColorEnabled: Dex.CurrentTheme.buttonSecondaryColorEnabled + property color buttonSecondaryColorHovered: Dex.CurrentTheme.buttonSecondaryColorHovered + property color buttonSecondaryColorPressed: Dex.CurrentTheme.buttonSecondaryColorPressed + property color buttonGradientEnabled1: DexTheme.buttonColorEnabled property color buttonGradientEnabled2: DexTheme.buttonColorEnabled property color buttonGradientTextEnabled: DexTheme.foregroundColor diff --git a/atomic_defi_design/Dex/Constants/DexTypo.qml b/atomic_defi_design/Dex/Constants/DexTypo.qml index 93db4733f9..8df64967c7 100644 --- a/atomic_defi_design/Dex/Constants/DexTypo.qml +++ b/atomic_defi_design/Dex/Constants/DexTypo.qml @@ -161,7 +161,7 @@ QtObject { weight: Font.Normal }) property font inputFieldSuffixFont: Qt.font({ - pixelSize: (14 * DexTypo.fontDensity) * (Screen.pixelDensity / 160), + pixelSize: (14 * DexTypo.fontDensity) * (Screen.pixelDensity / 140), letterSpacing: 0.1, family: fontFamily, weight: Font.Medium diff --git a/atomic_defi_design/Dex/Portfolio/Portfolio.qml b/atomic_defi_design/Dex/Portfolio/Portfolio.qml index de0ea3394b..a8925ed9c2 100644 --- a/atomic_defi_design/Dex/Portfolio/Portfolio.qml +++ b/atomic_defi_design/Dex/Portfolio/Portfolio.qml @@ -148,7 +148,7 @@ Item { radius: 15 padding: 25 font: DexTypo.body2 - text: qsTr("ADD ASSET") + text: qsTr("ADD CRYPTO") onClicked: enable_coin_modal.open() } } diff --git a/atomic_defi_design/Dex/Themes/CurrentTheme.qml b/atomic_defi_design/Dex/Themes/CurrentTheme.qml index 1b1e1d0f96..a7940baaf5 100644 --- a/atomic_defi_design/Dex/Themes/CurrentTheme.qml +++ b/atomic_defi_design/Dex/Themes/CurrentTheme.qml @@ -105,6 +105,11 @@ ThemeData buttonTextHoveredColor = Dex.Color.argbStrFromRgbaStr(themeData.buttonTextHoveredColor || defaultTheme.buttonTextHoveredColor); buttonTextPressedColor = Dex.Color.argbStrFromRgbaStr(themeData.buttonTextPressedColor || defaultTheme.buttonTextPressedColor); + buttonSecondaryColorDisabled = Dex.Color.argbStrFromRgbaStr(themeData.buttonSecondaryColorDisabled || defaultTheme.buttonSecondaryColorDisabled); + buttonSecondaryColorEnabled = Dex.Color.argbStrFromRgbaStr(themeData.buttonSecondaryColorEnabled || defaultTheme.buttonSecondaryColorEnabled); + buttonSecondaryColorHovered = Dex.Color.argbStrFromRgbaStr(themeData.buttonSecondaryColorHovered || defaultTheme.buttonSecondaryColorHovered); + buttonSecondaryColorPressed = Dex.Color.argbStrFromRgbaStr(themeData.buttonSecondaryColorPressed || defaultTheme.buttonSecondaryColorPressed); + gradientButtonStartColor = Dex.Color.argbStrFromRgbaStr(themeData.gradientButtonStartColor || defaultTheme.gradientButtonStartColor); gradientButtonEndColor = Dex.Color.argbStrFromRgbaStr(themeData.gradientButtonEndColor || defaultTheme.gradientButtonEndColor); gradientButtonDisabledStartColor = Dex.Color.argbStrFromRgbaStr(themeData.gradientButtonDisabledStartColor || defaultTheme.gradientButtonDisabledStartColor); diff --git a/atomic_defi_design/Dex/Themes/DefaultTheme.js b/atomic_defi_design/Dex/Themes/DefaultTheme.js index 7bb44b2ca1..f8475eda3e 100644 --- a/atomic_defi_design/Dex/Themes/DefaultTheme.js +++ b/atomic_defi_design/Dex/Themes/DefaultTheme.js @@ -21,6 +21,11 @@ function getHardcoded() buttonTextHoveredColor: "#000000FF", buttonTextPressedColor: "#000000FF", + buttonSecondaryColorDisabled: "#D8E3F8FF", + buttonSecondaryColorEnabled: "#F0F6FFFF", + buttonSecondaryColorHovered: "#D7E7FFFF", + buttonSecondaryColorPressed: "#B8D2F9FF", + gradientButtonStartColor: "#5A68E6FF", gradientButtonEndColor: "#4986EAAB", gradientButtonDisabledStartColor: "#CDD0F6FF", diff --git a/atomic_defi_design/Dex/Themes/ThemeData.qml b/atomic_defi_design/Dex/Themes/ThemeData.qml index c261fe832a..8117fdcc62 100644 --- a/atomic_defi_design/Dex/Themes/ThemeData.qml +++ b/atomic_defi_design/Dex/Themes/ThemeData.qml @@ -20,6 +20,11 @@ QtObject property color buttonTextHoveredColor property color buttonTextPressedColor + property color buttonSecondaryColorDisabled + property color buttonSecondaryColorEnabled + property color buttonSecondaryColorHovered + property color buttonSecondaryColorPressed + property color gradientButtonStartColor property color gradientButtonEndColor property color gradientButtonDisabledStartColor diff --git a/atomic_defi_design/Dex/Wallet/Sidebar.qml b/atomic_defi_design/Dex/Wallet/Sidebar.qml index aca26235ad..84e6de8a12 100644 --- a/atomic_defi_design/Dex/Wallet/Sidebar.qml +++ b/atomic_defi_design/Dex/Wallet/Sidebar.qml @@ -6,7 +6,7 @@ import QtGraphicalEffects 1.0 import Qaterial 1.0 as Qaterial import "../Components" -import "../Constants" as Constants +import "../Constants" import App 1.0 import Dex.Themes 1.0 as Dex import Dex.Components 1.0 as Dex @@ -127,17 +127,15 @@ Item Layout.preferredWidth: 140 radius: 18 spacing: 2 - font: Qt.font({ - pixelSize: 9 * DexTypo.fontDensity, - letterSpacing: 1.25, - capitalization: Font.AllUppercase, - family: DexTypo.fontFamily, - weight: Font.Normal - }) - text: qsTr("Add asset") + label.font: DexTypo.overLine + text: qsTr("ADD CRYPTO") iconSource: Qaterial.Icons.plus leftPadding: 3 rightPadding: 3 + btnPressedColor: Dex.CurrentTheme.buttonSecondaryColorPressed + btnHoveredColor: Dex.CurrentTheme.buttonSecondaryColorHovered + btnEnabledColor: Dex.CurrentTheme.buttonSecondaryColorEnabled + btnDisabledColor: Dex.CurrentTheme.buttonSecondaryColorDisabled } } From 207f76fea215ec6c9ecaee199c7f143952a46f15 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 9 Dec 2022 01:56:30 +0800 Subject: [PATCH 016/251] update arrow styles --- assets/themes/Default - Dark/colors.json | 1 + assets/themes/Default - Light/colors.json | 3 +- .../Dex/Components/DexAppButton.qml | 1 + atomic_defi_design/Dex/Constants/DexTheme.qml | 3 +- .../Dex/Themes/CurrentTheme.qml | 11 ++-- atomic_defi_design/Dex/Themes/ThemeData.qml | 1 + atomic_defi_design/Dex/Wallet/Main.qml | 56 +++++++++---------- .../Dex/Wallet/Transactions.qml | 8 ++- 8 files changed, 47 insertions(+), 37 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 198fd2b516..06160e0db3 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -121,6 +121,7 @@ "okColor": "#00C058FF", "warningColor": "#E52167FF", + "swapIconColor": "#005FBEFF", "senderColorStart": "#F85757FF", "receiverColorStart": "#845FEFFF", diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index a66df4fe02..86a872165e 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -19,7 +19,7 @@ "buttonSecondaryColorEnabled": "#F0F6FFFF", "buttonSecondaryColorHovered": "#D7E7FFFF", "buttonSecondaryColorPressed": "#B8D2F9FF", - + "gradientButtonStartColor": "#5A68E6FF", "gradientButtonEndColor": "#4986EAAB", "gradientButtonDisabledStartColor": "#CDD0F6FF", @@ -117,6 +117,7 @@ "okColor": "#00C058FF", "warningColor": "#E52167FF", + "swapIconColor": "#005FBEFF", "senderColorStart": "#F85757FF", "receiverColorStart": "#845FEFFF", diff --git a/atomic_defi_design/Dex/Components/DexAppButton.qml b/atomic_defi_design/Dex/Components/DexAppButton.qml index 9976ae9200..db494f9cac 100644 --- a/atomic_defi_design/Dex/Components/DexAppButton.qml +++ b/atomic_defi_design/Dex/Components/DexAppButton.qml @@ -22,6 +22,7 @@ DexRectangle property int verticalPadding: 2 property int horizontalPadding: 2 property int iconSize: _label.font.pixelSize + 2 + property color iconColor: _label.color property color btnPressedColor: Dex.CurrentTheme.buttonColorPressed property color btnHoveredColor: Dex.CurrentTheme.buttonColorHovered diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 38a1e0f48c..99f7fa2ba6 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -133,7 +133,7 @@ QtObject { property color buttonSecondaryColorEnabled: Dex.CurrentTheme.buttonSecondaryColorEnabled property color buttonSecondaryColorHovered: Dex.CurrentTheme.buttonSecondaryColorHovered property color buttonSecondaryColorPressed: Dex.CurrentTheme.buttonSecondaryColorPressed - + property color buttonGradientEnabled1: DexTheme.buttonColorEnabled property color buttonGradientEnabled2: DexTheme.buttonColorEnabled property color buttonGradientTextEnabled: DexTheme.foregroundColor @@ -155,6 +155,7 @@ QtObject { property color okColor: Dex.CurrentTheme.okColor property color warningColor: Dex.CurrentTheme.warningColor + property color swapIconColor: Dex.CurrentTheme.swapIconColor // Widget settings diff --git a/atomic_defi_design/Dex/Themes/CurrentTheme.qml b/atomic_defi_design/Dex/Themes/CurrentTheme.qml index a7940baaf5..146d3a90bd 100644 --- a/atomic_defi_design/Dex/Themes/CurrentTheme.qml +++ b/atomic_defi_design/Dex/Themes/CurrentTheme.qml @@ -208,13 +208,14 @@ ThemeData addressBookTagColors[i] = Dex.Color.argbStrFromRgbaStr(addressBookTagColors[i]) } - okColor = Dex.Color.argbStrFromRgbaStr(themeData.okColor || defaultTheme.okColor); - warningColor = Dex.Color.argbStrFromRgbaStr(themeData.warningColor || defaultTheme.warningColor); + okColor = Dex.Color.argbStrFromRgbaStr(themeData.okColor || defaultTheme.okColor); + warningColor = Dex.Color.argbStrFromRgbaStr(themeData.warningColor || defaultTheme.warningColor); + swapIconColor = Dex.Color.argbStrFromRgbaStr(themeData.swapIconColor || defaultTheme.swapIconColor); - senderColorStart = Dex.Color.argbStrFromRgbaStr(themeData.senderColorStart || defaultTheme.senderColorStart); - receiverColorStart = Dex.Color.argbStrFromRgbaStr(themeData.receiverColorStart || defaultTheme.receiverColorStart); + senderColorStart = Dex.Color.argbStrFromRgbaStr(themeData.senderColorStart || defaultTheme.senderColorStart); + receiverColorStart = Dex.Color.argbStrFromRgbaStr(themeData.receiverColorStart || defaultTheme.receiverColorStart); - lineSeparatorColor = Dex.Color.argbStrFromRgbaStr(themeData.lineSeparatorColor || defaultTheme.lineSeparatorColor); + lineSeparatorColor = Dex.Color.argbStrFromRgbaStr(themeData.lineSeparatorColor || defaultTheme.lineSeparatorColor); } function loadLogo(themeName) diff --git a/atomic_defi_design/Dex/Themes/ThemeData.qml b/atomic_defi_design/Dex/Themes/ThemeData.qml index 8117fdcc62..28c02819a2 100644 --- a/atomic_defi_design/Dex/Themes/ThemeData.qml +++ b/atomic_defi_design/Dex/Themes/ThemeData.qml @@ -127,6 +127,7 @@ QtObject // Colors used to tell when something is good or wrong. property color okColor property color warningColor + property color swapIconColor property color senderColorStart property color receiverColorStart diff --git a/atomic_defi_design/Dex/Wallet/Main.qml b/atomic_defi_design/Dex/Wallet/Main.qml index a08fffe105..e74ef4fb7a 100644 --- a/atomic_defi_design/Dex/Wallet/Main.qml +++ b/atomic_defi_design/Dex/Wallet/Main.qml @@ -432,11 +432,11 @@ Item enabled: General.canSend(api_wallet_page.ticker, activation_progress) anchors.fill: parent radius: 18 - label.text: qsTr("Send") label.font.pixelSize: 16 content.anchors.left: content.parent.left content.anchors.leftMargin: enabled ? 23 : 48 + content.anchors.rightMargin: 23 onClicked: { @@ -444,13 +444,19 @@ Item else enable_fees_coin_modal.open() } - TransactionArrow + Row { - id: arrow_send - amISender: true anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right - anchors.rightMargin: 19 + anchors.rightMargin: 23 + + Qaterial.Icon + { + icon: Qaterial.Icons.arrowTopRight + size: 24 + anchors.verticalCenter: parent.verticalCenter + color: Dex.CurrentTheme.warningColor + } } } @@ -544,12 +550,19 @@ Item onClicked: receive_modal.open() - TransactionArrow + Row { anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right - anchors.rightMargin: 19 - amISender: false + anchors.rightMargin: 23 + + Qaterial.Icon + { + icon: Qaterial.Icons.arrowBottomRight + size: 24 + anchors.verticalCenter: parent.verticalCenter + color: Dex.CurrentTheme.okColor + } } } @@ -592,21 +605,17 @@ Item { anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right - anchors.rightMargin: arrow_send.anchors.rightMargin - spacing: 2 + anchors.rightMargin: 23 - TransactionArrow - { - amISender: true - anchors.verticalCenter: parent.verticalCenter - } - - TransactionArrow + Qaterial.Icon { - amISender: false + icon: Qaterial.Icons.swapHorizontal + size: 28 anchors.verticalCenter: parent.verticalCenter + color: Dex.CurrentTheme.swapIconColor } } + } // Swap button error icon @@ -675,23 +684,14 @@ Item { anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right - anchors.rightMargin: arrow_send.anchors.rightMargin + anchors.rightMargin: 23 Qaterial.Icon { icon: Qaterial.Icons.water size: 24 - anchors.right: parent.right - anchors.leftMargin: iconSize / 2 - anchors.rightMargin: iconSize / 2 anchors.verticalCenter: parent.verticalCenter color: "cyan" - - DefaultTooltip - { - visible: alertArea.containsMouse && tooltipText != "" - text: "" - } } } } diff --git a/atomic_defi_design/Dex/Wallet/Transactions.qml b/atomic_defi_design/Dex/Wallet/Transactions.qml index 9e3edf4663..67608f5bdb 100644 --- a/atomic_defi_design/Dex/Wallet/Transactions.qml +++ b/atomic_defi_design/Dex/Wallet/Transactions.qml @@ -1,6 +1,7 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 +import Qaterial 1.0 as Qaterial import "../Components" import "../Constants" @@ -63,10 +64,13 @@ Dex.ListView visible: transaction_note !== "" } - TransactionArrow + + Qaterial.Icon { id: received_icon - amISender: am_i_sender ? true : false + size: 16 + icon: am_i_sender ? Qaterial.Icons.arrowTopRight : Qaterial.Icons.arrowBottomRight + color: am_i_sender ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor } // Description From a293233088dc051538ca8a71ce19490a4c4de48e Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 9 Dec 2022 03:37:54 +0800 Subject: [PATCH 017/251] tweak border line separators --- assets/themes/Default - Light/colors.json | 2 +- atomic_defi_design/Dex/Screens/Dashboard.qml | 13 + atomic_defi_design/Dex/Sidebar/Main.qml | 14 +- atomic_defi_design/Dex/Wallet/Sidebar.qml | 10 +- atomic_defi_design/Dex/main.qml | 1 + .../assets/images/arrow-bottom-right.svg | 1 + .../assets/images/arrow-top-right.svg | 1 + .../assets/images/swap-horizontal.svg | 1 + .../assets/languages/atomic_defi_de.ts | 553 +++++++++--------- .../assets/languages/atomic_defi_en.ts | 547 ++++++++--------- .../assets/languages/atomic_defi_es.ts | 553 +++++++++--------- .../assets/languages/atomic_defi_fr.ts | 551 ++++++++--------- .../assets/languages/atomic_defi_ru.ts | 551 ++++++++--------- .../assets/languages/atomic_defi_tr.ts | 551 ++++++++--------- 14 files changed, 1695 insertions(+), 1654 deletions(-) create mode 100644 atomic_defi_design/assets/images/arrow-bottom-right.svg create mode 100644 atomic_defi_design/assets/images/arrow-top-right.svg create mode 100644 atomic_defi_design/assets/images/swap-horizontal.svg diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 86a872165e..83c87d43f7 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -125,5 +125,5 @@ "arrowUpColor": "#F85757FF", "arrowDownColor": "#845FEFFF", - "lineSeparatorColor": "#CDD3DCFF" + "lineSeparatorColor": "#CDD3DC88" } diff --git a/atomic_defi_design/Dex/Screens/Dashboard.qml b/atomic_defi_design/Dex/Screens/Dashboard.qml index 319292f2e5..6a8ece6f81 100644 --- a/atomic_defi_design/Dex/Screens/Dashboard.qml +++ b/atomic_defi_design/Dex/Screens/Dashboard.qml @@ -116,6 +116,7 @@ Item } } + // Right side AnimatedRectangle { @@ -124,6 +125,18 @@ Item x: sidebar.width border.color: 'transparent' + Rectangle + { + radius: 0 + anchors.fill: parent + anchors.rightMargin : - border.width + anchors.bottomMargin: - border.width + anchors.leftMargin: - border.width + border.width: 1 + border.color: Dex.CurrentTheme.lineSeparatorColor + color: 'transparent' + } + // Modals ModalLoader { diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index d4a47b7d38..3a09d8fda5 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -34,9 +34,15 @@ Item height: parent.height // Background Rectangle - Rectangle + DefaultRectangle { + radius: 0 anchors.fill: parent + anchors.rightMargin : - border.width + anchors.bottomMargin: - border.width + anchors.leftMargin: - border.width + border.width: 1 + border.color: Dex.CurrentTheme.lineSeparatorColor color: Dex.CurrentTheme.sidebarBgColor } @@ -118,11 +124,5 @@ Item onSettingsClicked: root.settingsClicked() onSupportClicked: root.supportClicked() } - - VerticalLine - { - height: parent.height - anchors.right: parent.right - } } } diff --git a/atomic_defi_design/Dex/Wallet/Sidebar.qml b/atomic_defi_design/Dex/Wallet/Sidebar.qml index 84e6de8a12..db3fe15a97 100644 --- a/atomic_defi_design/Dex/Wallet/Sidebar.qml +++ b/atomic_defi_design/Dex/Wallet/Sidebar.qml @@ -28,10 +28,16 @@ Item DefaultRectangle { id: background - anchors.right: parent.right + radius: 0 width: parent.width - height: parent.height + anchors.right: parent.right + anchors.rightMargin : - border.width + anchors.topMargin : - border.width + anchors.bottomMargin: - border.width + anchors.leftMargin: - border.width + border.width: 0 + color: 'transparent' // Panel contents Item diff --git a/atomic_defi_design/Dex/main.qml b/atomic_defi_design/Dex/main.qml index 0a18ae3c4e..81bea29475 100644 --- a/atomic_defi_design/Dex/main.qml +++ b/atomic_defi_design/Dex/main.qml @@ -158,6 +158,7 @@ DexWindow { width: _row.width height: 30 + clip: true Behavior on x { NumberAnimation diff --git a/atomic_defi_design/assets/images/arrow-bottom-right.svg b/atomic_defi_design/assets/images/arrow-bottom-right.svg new file mode 100644 index 0000000000..c667cc0ea1 --- /dev/null +++ b/atomic_defi_design/assets/images/arrow-bottom-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/atomic_defi_design/assets/images/arrow-top-right.svg b/atomic_defi_design/assets/images/arrow-top-right.svg new file mode 100644 index 0000000000..2a4d5229e1 --- /dev/null +++ b/atomic_defi_design/assets/images/arrow-top-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/atomic_defi_design/assets/images/swap-horizontal.svg b/atomic_defi_design/assets/images/swap-horizontal.svg new file mode 100644 index 0000000000..6b4d56ecb7 --- /dev/null +++ b/atomic_defi_design/assets/images/swap-horizontal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/atomic_defi_design/assets/languages/atomic_defi_de.ts b/atomic_defi_design/assets/languages/atomic_defi_de.ts index 06dad49822..47450a6cc9 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_de.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_de.ts @@ -733,83 +733,83 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 ConfirmTradeModal - + Confirm Exchange Details Bestätigen Sie die Austausch-Details - + Trade price is more than 50% different to CEX! Confirm? Der Handelspreis unterscheidet sich um mehr als 50% vom CEX-Preis. Bestätigen? - + This swap request can not be undone and is a final event! Diese Tauschanfrage kann nicht rückgängig gemacht werden und ist ein endgültiges Ereignis! - + This transaction can take up to 60 mins - DO NOT close this application! Diese Transaktion kann bis zu 60 Minuten dauern - schließen Sie diese Anwendung NICHT! - + Loading fees... Lade Gebühren... - + <b>Total %1 fees:</b> <b>Gesamt %1 Gebühren:</b> - + Security configuration Sicherheitskonfiguration - + %1 confirmations for incoming %2 transactions %1 Bestätigungen für eingehende %2 Transaktionen - + Read more about dPoW Lesen Sie mehr über dPoW - + Use custom protection settings for incoming %1 transactions TICKER Benutzerdefinierte Schutzeinstellungen für eingehende %1 Transaktionen verwenden - + Enable Komodo dPoW security Komodo dPoW-Sicherheit aktivieren - + dPoW protected dPoW-gesichert - + Required Confirmations Erforderliche Bestätigungen - + Warning, this atomic swap is not dPoW protected! Achtung, dieser Atomic Swap ist nicht dPoW-geschützt! - + Cancel Abbrechen - + Confirm Bestätigen @@ -825,182 +825,182 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Die aktuelle Anzahl aktivierter Coins stimmt nicht mit Ihrer Konfigurationsvorgabe überein. Die Konfiguration der Assets wird zurückgesetzt. - + Matching Zusammenführung - + Order Matching Order wird zusammengeführt - + Matched Zusammengeführt - + Order Matched Order wurde zusammengeführt - + Ongoing Laufend - + Swap Ongoing Austausch läuft - + Successful Erfolgreich - + Swap Successful Tausch erfolgreich - + Refunding Rückzahlung - + Failed Fehlgeschlagen - + Swap Failed Tausch fehlgeschlagen - + Unknown Unbekannt - + Unknown State Unbekannter Status - + Started Gestartet - + Negotiated Ausgehandelt - + Taker fee sent Taker-Gebühr gesendet - + Maker payment received Maker-Zahlung erhalten - + Maker payment wait confirm started Warten auf die Zahlungsbestätigung des Makers gestartet - + Maker payment validated and confirmed Maker-Zahlung validiert und bestätigt - + Taker payment sent Taker-Zahlung gesendet - + Taker payment spent Taker-Zahlung ausgegeben - + Maker payment spent Maker-Zahlung ausgegeben - + Finished Fertig - + Start failed Start fehlgeschlagen - + Negotiate failed Verhandeln fehlgeschlagen - + Taker fee validate failed Validierung der Abnehmergebühr fehlgeschlagen - + Maker payment transaction failed Maker-Zahlungstransaktion fehlgeschlagen - + Maker payment Data send failed Fehler beim Senden der Maker-Zahlungsdaten - + Maker payment wait confirm failed Warten auf die Zahlungsbestätigung des Makers fehlgeschlagen - + Taker payment validate failed Validierung der Taker-Zahlung fehlgeschlagen - + Taker payment wait confirm failed Warten auf die Zahlungsbestätigung des Takers fehlgeschlagen - + Taker payment spend failed Zahlungsausgabe des Takers fehlgeschlagen - + Maker payment wait refund started Countdown für die Rückerstattung der Maker-Zahlung hat begonnen - + Maker payment refunded Maker-Zahlung zurückerstattet - + Maker payment refund failed Rückerstattung der Maker-Zahlung fehlgeschlagen @@ -1084,7 +1084,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 DexAppPasswordField - + Type password Kennwort eingeben @@ -1385,7 +1385,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 General - + %n day(s) %n Tag @@ -1393,7 +1393,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nd day @@ -1402,7 +1402,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nh hours @@ -1411,7 +1411,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nm minutes @@ -1420,7 +1420,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %ns seconds @@ -1429,7 +1429,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nms milliseconds @@ -1438,92 +1438,117 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + - - - + <b>Taker tx fee:</b> <b>Taker tx Gebühren:</b> - + <b>Dex tx fee:</b> <b>Dex tx Gebühren:</b> - + <b>Dex fee:</b> <b>Dex Gebühren:</b> - + <b>Maker tx fee:</b> <b>Maker tx Gebühren:</b> - + + %1 balance is zero + + + + + Activating %1 (%2%) + + + + + Loading wallet... + + + + + Min: %1 + Minimum: %1 + + + + Enter an amount + Betrag eingeben + + + Trading Fee Handelsgebühr - + Minimum Trading Amount Mindesthandelsbetrag - + Wallet %1 already exists WALLETNAME Brieftasche %1 existiert bereits - + %1 balance is lower than the fees amount: %2 %3 Das %1 Guthaben ist niedriger als der Gebührenbetrag: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Handelbares %1 Guthaben (nach Gebühren) ist niedriger als der Mindesthandelsbetrag - + Please fill the price field Bitte füllen Sie das Preisfeld aus - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount %1 Volumen ist niedriger als der minimale Handelsbetrag - - + + %1 needs to be enabled in order to use %2 %1 muss aktiviert werden, um %2 verwenden zu können - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Das %1 Guthaben muss finanziert werden, ein Guthaben größer Null ist erforderlich, um das Benzin von %2 Transaktionen zu bezahlen - + Unknown Error Unbekannter Fehler @@ -1589,89 +1614,94 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456Name der Brieftasche - + Enter seed Geben Sie den Seed ein - + Your seed is not BIP39 compliant. Try again or select 'Allow custom seed' to continue. Ihr Seed ist nicht BIP39-konform. Versuchen Sie es erneut oder wählen Sie "benutzerdefinierten Seed erlauben" um fortzufahren - - + + i understand Ich verstehe - - + + я согласен - - + + je comprends - - + + entiendo - - + + anladım - - + + ich verstehe - + Ok Ok - + Allow custom seed Benutzerdefinierten Seed zulassen - + <strong>Allow custom seed</strong> <strong>Benutzerdefinierten Seed zulassen</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. Benutzerdefinierte Seed-Phrasen sind möglicherweise weniger sicher und leichter zu knacken als eine generierte BIP39-konforme Seed-Phrase oder ein privater Schlüssel (WIF).<br><br>Um zu bestätigen, dass Sie das Risiko verstehen und wissen, was Sie tun, geben Sie bitte <strong>'Ich verstehe'</strong> in das Feld unten ein. - + I understand Ich verstehe - + Next Weiter - + + Enter password + + + + Enter the same password to confirm Geben Sie zur Bestätigung dasselbe Kennwort ein - + Continue Fortsetzen @@ -1759,17 +1789,17 @@ Try again or select 'Allow custom seed' to continue. Login - + Incorrect Password Falsches Kennwort - + Log In Anmelden - + Cancel Abbrechen @@ -1857,47 +1887,47 @@ They will be removed from the orderbook until you log in again. Vertragsadresse - + Send Senden - + Enable %1 ? %1 aktivieren? - + Yes Ja - + No Nein - + Receive Empfangen - + Swap Tausch - + is wallet only nur Brieftasche (kein DEX möglich) - + Rewards Belohnungen - + Faucet Faucet @@ -1976,17 +2006,17 @@ They will be removed from the orderbook until you log in again. Historie - + Place Order Order platzieren - + Order Selected Order ausgewählt - + START SWAP TAUSCH STARTEN @@ -2040,13 +2070,13 @@ They will be removed from the orderbook until you log in again. MarketModeSelector - + Sell %1 TICKER %1 Verkaufen - + Buy %1 TICKER %1 Kaufen @@ -2226,67 +2256,72 @@ They will be removed from the orderbook until you log in again. Wählen sie ein Kennwort - + Important: Back up your seed phrase before proceeding! Wichtig: Sichern Sie Ihre Seed-Phrase, bevor Sie fortfahren! - + We recommend storing it offline. Wir empfehlen, sie offline zu speichern. - + Generated Seed Generierter Seed - + Seed phrase Seed Phrase - + copied to clipboard In die Zwischenablage kopiert - + Next Weiter - + Let's double check your seed phrase Lassen Sie uns Ihre Seed-Phrase noch einmal überprüfen - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. Ihre Seed-Phrase ist wichtig – deshalb stellen wir gerne sicher, dass sie korrekt ist. Wir stellen Ihnen drei verschiedene Fragen zu Ihrer Seed-Phrase, um sicherzustellen, dass Sie Ihre Wallet jederzeit problemlos wiederherstellen können. - + Enter the Geben Sie das - + word Wort ein - + Check Prüfen - + + Enter password + + + + Enter the same password to confirm Geben Sie zur Bestätigung dasselbe Kennwort ein - + Continue Fortsetzen @@ -2470,97 +2505,97 @@ They will be removed from the orderbook until you log in again. OrderForm - + Price Preis - + Reduce 1% relative to CEX market price. - + Use CEX market price. - + Increase 1% relative to CEX market price. - + Volume Volumen - + Amount to sell Zu verkaufender Betrag - + Amount to receive Zu erhaltender Betrag - + Max Max - + Swap 25% of your tradable balance. - + Swap 50% of your tradable balance. - + Swap 100% of your tradable balance. - + Min Volume - + Min amount to sell - + Min amount to receive - + Minimum accepted trade equals 10% of order volume. - + Minimum accepted trade equals 25% of order volume. - + Minimum accepted trade equals 50% of order volume. - + Min volume: Mindestvolumen: - + Use custom minimum trade amount Benutzerdefinierten Mindesthandelsbetrag verwenden @@ -2594,104 +2629,104 @@ They will be removed from the orderbook until you log in again. Orderdetails - + Order Type Orderart - + Maker Order Maker-Order - + Taker Order Taker-Order - + Refund State Rückerstattungsstatus - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Ihr Umtausch ist fehlgeschlagen, aber der automatische Rückerstattungsprozess für Ihre Zahlung hat bereits begonnen. Bitte warten Sie und lassen Sie die Anwendung geöffnet, bis Sie Ihre Zahlung zurückerhalten - + Date Datum - + Error ID Fehler-ID - - + + Error Log Fehlerprotokoll - + Close Schließen - + Cancel Order Order Abbrechen - - + + Swap ID Swap ID - + Maker Payment Sent Transaction ID Maker-Zahlung gesendet: Transaktions-ID - + Maker Payment Spent Transaction ID Maker-Zahlung ausgegeben: Transaktions-ID - + Maker Payment TXID Maker-Zahlung: TXID - + Taker Payment Spent Transaction ID Taker-Zahlung ausgegeben: Transaktions-ID - + Taker Payment Sent Transaction ID Taker-Zahlung gesendet: Transaktions-ID - + Taker Payment TXID Taker-Zahlung: TXID - + Recover Funds Rückerstattung der Geldmittel - + Refunding... Rückzahlung… - + View on Explorer Ansicht im Explorer @@ -2828,8 +2863,8 @@ Bitte wählen Sie eine neue Order aus. Portfolio - ADD ASSET - ASSET HINZUFÜGEN + ADD CRYPTO + @@ -2928,12 +2963,12 @@ Bitte wählen Sie eine neue Order aus. ProView - + Failed to place the order Die Order konnte nicht platziert werden - + Placed the order Order platziert @@ -2981,7 +3016,7 @@ Bitte wählen Sie eine neue Order aus. RecoverSeedModal - + View seed and private keys Seed- und privaten Schlüsseln anzeigen @@ -2991,64 +3026,64 @@ Bitte wählen Sie eine neue Order aus. Bitte geben Sie Ihr Kennwort ein, um den Seed anzuzeigen. - + Seed Seed - + Backup Seed Seed Sicherung - + Public Address copied to clipboard Öffentliche Adresse in die Zwischenablage kopiert - + Cancel Abbrechen - + Incorrect Password Falsches Kennwort - + View Ansehen - - + + copied to clipboard In die Zwischenablage kopiert - - + + RPC Password RPC Kennwort - + Search a coin. Coin suchen. - + Public Address Öffentliche Adresse - + Private Key copied to clipboard Privater Schlüssel in die Zwischenablage kopiert - + Private Key Privater Schlüssel @@ -3619,22 +3654,9 @@ Bitte wählen Sie eine neue Order aus. Suchen - - Add asset - Asset hinzufügen - - - - SmartChartView - - - Loading market data - Laden von Marktdaten - - - - There is no chart data for this ticker yet - Für diesen Ticker liegen noch keine Chartdaten vor + + ADD CRYPTO + @@ -3665,7 +3687,7 @@ Bitte wählen Sie eine neue Order aus. CEX-Kurs - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 ist nicht aktiviert - Möchten Sie es aktivieren, um die günstigsten Order von %2 auswählen zu können? <br><a href='#'>Ja</a> - <a href='#no'>Nein</a> @@ -4038,154 +4060,122 @@ Die Netzwerkgebühren können je nach ausgewähltem Handelspaar stark variieren. Trade - + Swap Tauschen - + Instant trading with best orders Sofortiger Handel mit den besten Order - + Reset form Formular zurücksetzen - + You have no tradable assets Keine handelbaren Assets vorhanden - + From Von - - Enter an amount - Betrag eingeben + + Entered amount must be higher than 0. + + + + + Select an order. + - + MAX MAX - + To Nach - + Pick an order Order auswählen - + Price Preis - + Better price found: %1. Updating forms. Besseren Preis gefunden: %1. Formulare aktualisieren. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. Besseren Preis (%1) gefunden, aber erhaltene Menge (%2) ist niedriger als Ihre aktuelle (%3). Klicken Sie hier, um den ausgewählte Order zu aktualisieren. - + %1 %1 - + Tradable: Handelbar: - - Min: %1 - Minimum: %1 - - - + Pick a coin Wählen Sie einen Coin - + SWAP NOW JETZT TAUSCHEN - + Failed to place the order Die Order konnte nicht platziert werden - + Placed the order Order platziert - - Entered amount must be superior than 0. - Der eingegebene Betrag muss größer als 0 sein. - - - - You must select an order. - Sie müssen eine Order auswählen. - - - - Entered amount is below the minimum required by this order: %1 - Der eingegebene Betrag liegt unter dem für diese Order erforderlichen Mindestbetrag: %1 - - - - - %1 needs to be enabled in order to use %2 - %1 muss aktiviert werden, um %2 verwenden zu können - - - - - %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - Das %1 Guthaben muss finanziert werden, ein Guthaben größer Null ist erforderlich, um das Benzin von %2 Transaktionen zu bezahlen - - - - %1 balance does not have enough funds to pay the gas of %2 transactions - Das Guthaben von %1 reicht nicht aus, um das Gas von %2 Transaktionen zu bezahlen - - - + No buy orders found for %1. Keine Kauforder für %1 gefunden. - + You can check later or try to sell a different coin. Sie können später nachsehen oder versuchen, einen anderen Coin zu verkaufen. - + Calculating fee estimate... Geschätzten Gebühren werden berechnet... - + Total %1 fees: %1 Gesamtgebühren: - + %2 (%3) %2 (%3) @@ -4228,6 +4218,19 @@ Die Netzwerkgebühren können je nach ausgewähltem Handelspaar stark variieren. Order platzieren + + TradingViewChart + + + Loading market data + Laden von Marktdaten + + + + There is no chart data for this ticker yet + Für diesen Ticker liegen noch keine Chartdaten vor + + TransactionDetailsModal @@ -4320,22 +4323,22 @@ Die Netzwerkgebühren können je nach ausgewähltem Handelspaar stark variieren. Transactions - + Sent Gesendet - + Received Erhalten - + fees Gebühren - + Unconfirmed Unbestätigt diff --git a/atomic_defi_design/assets/languages/atomic_defi_en.ts b/atomic_defi_design/assets/languages/atomic_defi_en.ts index 574da37ff9..1c7bae05ce 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_en.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_en.ts @@ -732,83 +732,83 @@ ConfirmTradeModal - + Confirm Exchange Details - + Trade price is more than 50% different to CEX! Confirm? - + This swap request can not be undone and is a final event! - + This transaction can take up to 60 mins - DO NOT close this application! - + Loading fees... - + <b>Total %1 fees:</b> - + Security configuration - + %1 confirmations for incoming %2 transactions - + Read more about dPoW - + Use custom protection settings for incoming %1 transactions TICKER - + Enable Komodo dPoW security - + dPoW protected - + Required Confirmations - + Warning, this atomic swap is not dPoW protected! - + Cancel Cancel - + Confirm @@ -824,182 +824,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. - + Matching - + Order Matching - + Matched - + Order Matched - + Ongoing - + Swap Ongoing - + Successful - + Swap Successful - + Refunding - + Failed - + Swap Failed - + Unknown - + Unknown State - + Started - + Negotiated - + Taker fee sent - + Maker payment received - + Maker payment wait confirm started - + Maker payment validated and confirmed - + Taker payment sent - + Taker payment spent - + Maker payment spent - + Finished - + Start failed - + Negotiate failed - + Taker fee validate failed - + Maker payment transaction failed - + Maker payment Data send failed - + Maker payment wait confirm failed - + Taker payment validate failed - + Taker payment wait confirm failed - + Taker payment spend failed - + Maker payment wait refund started - + Maker payment refunded - + Maker payment refund failed @@ -1083,7 +1083,7 @@ DexAppPasswordField - + Type password @@ -1384,7 +1384,7 @@ General - + %n day(s) @@ -1392,7 +1392,7 @@ - + %nd day @@ -1401,7 +1401,7 @@ - + %nh hours @@ -1410,7 +1410,7 @@ - + %nm minutes @@ -1419,7 +1419,7 @@ - + %ns seconds @@ -1428,7 +1428,7 @@ - + %nms milliseconds @@ -1437,92 +1437,117 @@ - + - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + + %1 balance is zero + + + + + Activating %1 (%2%) + + + + + Loading wallet... + + + + + Min: %1 + + + + + Enter an amount + + + + Trading Fee - + Minimum Trading Amount - + Wallet %1 already exists WALLETNAME - + %1 balance is lower than the fees amount: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount - + Please fill the price field - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error @@ -1588,89 +1613,94 @@ - + Enter seed - + Your seed is not BIP39 compliant. Try again or select 'Allow custom seed' to continue. - - + + i understand - - + + я согласен - - + + je comprends - - + + entiendo - - + + anladım - - + + ich verstehe - + Ok - + Allow custom seed - + <strong>Allow custom seed</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. - + I understand - + Next - + + Enter password + + + + Enter the same password to confirm - + Continue @@ -1758,17 +1788,17 @@ Try again or select 'Allow custom seed' to continue. Login - + Incorrect Password - + Log In - + Cancel Cancel @@ -1856,47 +1886,47 @@ They will be removed from the orderbook until you log in again. - + Send - + Enable %1 ? - + Yes Yes - + No - + Receive - + Swap - + is wallet only - + Rewards - + Faucet @@ -1975,17 +2005,17 @@ They will be removed from the orderbook until you log in again. - + Place Order - + Order Selected - + START SWAP @@ -2039,13 +2069,13 @@ They will be removed from the orderbook until you log in again. MarketModeSelector - + Sell %1 TICKER - + Buy %1 TICKER @@ -2225,67 +2255,72 @@ They will be removed from the orderbook until you log in again. - + Important: Back up your seed phrase before proceeding! - + We recommend storing it offline. - + Generated Seed - + Seed phrase - + copied to clipboard - + Next - + Let's double check your seed phrase - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. - + Enter the - + word - + Check - + + Enter password + + + + Enter the same password to confirm - + Continue @@ -2469,97 +2504,97 @@ They will be removed from the orderbook until you log in again. OrderForm - + Price - + Reduce 1% relative to CEX market price. - + Use CEX market price. - + Increase 1% relative to CEX market price. - + Volume - + Amount to sell - + Amount to receive - + Max - + Swap 25% of your tradable balance. - + Swap 50% of your tradable balance. - + Swap 100% of your tradable balance. - + Min Volume - + Min amount to sell - + Min amount to receive - + Minimum accepted trade equals 10% of order volume. - + Minimum accepted trade equals 25% of order volume. - + Minimum accepted trade equals 50% of order volume. - + Min volume: - + Use custom minimum trade amount @@ -2593,104 +2628,104 @@ They will be removed from the orderbook until you log in again. - + Order Type - + Maker Order - + Taker Order - + Refund State - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back - + Date - + Error ID - - + + Error Log - + Close - + Cancel Order - - + + Swap ID - + Maker Payment Sent Transaction ID - + Maker Payment Spent Transaction ID - + Maker Payment TXID - + Taker Payment Spent Transaction ID - + Taker Payment Sent Transaction ID - + Taker Payment TXID - + Recover Funds - + Refunding... - + View on Explorer @@ -2826,7 +2861,7 @@ Please select a new order. Portfolio - ADD ASSET + ADD CRYPTO @@ -2926,12 +2961,12 @@ Please select a new order. ProView - + Failed to place the order - + Placed the order @@ -2979,7 +3014,7 @@ Please select a new order. RecoverSeedModal - + View seed and private keys @@ -2989,64 +3024,64 @@ Please select a new order. - + Seed - + Backup Seed - + Public Address copied to clipboard - + Cancel Cancel - + Incorrect Password - + View - - + + copied to clipboard - - + + RPC Password - + Search a coin. - + Public Address - + Private Key copied to clipboard - + Private Key @@ -3617,21 +3652,8 @@ Please select a new order. - - Add asset - - - - - SmartChartView - - - Loading market data - - - - - There is no chart data for this ticker yet + + ADD CRYPTO @@ -3663,7 +3685,7 @@ Please select a new order. - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> @@ -4020,154 +4042,122 @@ Network fees can vary greatly depending on your selected trading pair. Trade - + Swap - + Instant trading with best orders - + Reset form - + You have no tradable assets - + From - - Enter an amount + + Entered amount must be higher than 0. - + + Select an order. + + + + MAX - + To - + Pick an order - + Price - + Better price found: %1. Updating forms. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. - + %1 - + Tradable: - - Min: %1 - - - - + Pick a coin - + SWAP NOW - + Failed to place the order - + Placed the order - - Entered amount must be superior than 0. - - - - - You must select an order. - - - - - Entered amount is below the minimum required by this order: %1 - - - - - - %1 needs to be enabled in order to use %2 - - - - - - %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - - - - - %1 balance does not have enough funds to pay the gas of %2 transactions - - - - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + Calculating fee estimate... - + Total %1 fees: - + %2 (%3) @@ -4210,6 +4200,19 @@ Network fees can vary greatly depending on your selected trading pair. + + TradingViewChart + + + Loading market data + + + + + There is no chart data for this ticker yet + + + TransactionDetailsModal @@ -4302,22 +4305,22 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Sent - + Received - + fees - + Unconfirmed diff --git a/atomic_defi_design/assets/languages/atomic_defi_es.ts b/atomic_defi_design/assets/languages/atomic_defi_es.ts index c2b1055f75..fe0b09d3c6 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_es.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_es.ts @@ -732,83 +732,83 @@ ConfirmTradeModal - + Confirm Exchange Details Confirmar Detalles de Intercambio - + Trade price is more than 50% different to CEX! Confirm? ¡El precio comercial es más del 50% diferente al de CEX! ¿Confirmar? - + This swap request can not be undone and is a final event! ¡Esta solicitud de intercambio no se puede deshacer y es un evento final! - + This transaction can take up to 60 mins - DO NOT close this application! Esta transacción puede demorar hasta 60 minutos. ¡NO cierre esta aplicación! - + Loading fees... Cargando tarifas... - + <b>Total %1 fees:</b> <b>Cuota total de %1:</b> - + Security configuration Configuración de seguridad - + %1 confirmations for incoming %2 transactions %1 confirmaciones para %2 transacciones entrantes - + Read more about dPoW Obtenga más información sobre dPoW - + Use custom protection settings for incoming %1 transactions TICKER Utilice configuraciones de protección personalizadas para %1 transacciones entrantes - + Enable Komodo dPoW security Habilite la seguridad dPoW de Komodo - + dPoW protected Protegido por dPoW - + Required Confirmations Confirmaciones Requeridas - + Warning, this atomic swap is not dPoW protected! Advertencia, este intercambio atómico no está protegido por dPoW! - + Cancel Cancelar - + Confirm Confirmar @@ -824,182 +824,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. El número actual de monedas habilitadas no coincide con su especificación de configuración. Se restablecerá la configuración de sus activos. - + Matching Emparejando - + Order Matching Emparejando Orden - + Matched Emparejado - + Order Matched Orden Emparejada - + Ongoing En Curso - + Swap Ongoing Intercambio En Curso - + Successful Exitoso - + Swap Successful Intercambio exitoso - + Refunding Reembolso - + Failed Fallo - + Swap Failed Intercambio fallido - + Unknown Desconocido - + Unknown State Estado Desconocido - + Started Iniciado - + Negotiated Negociado - + Taker fee sent Tarifa taker enviada - + Maker payment received Pago de maker recibido - + Maker payment wait confirm started Inicio de espera de confirmacion de pago de maker - + Maker payment validated and confirmed Validacion y confirmacion de pago de maker - + Taker payment sent Pago de taker enviado - + Taker payment spent Pago del taker gastado - + Maker payment spent Pago del maker gastado - + Finished Terminado - + Start failed Inicio fallido - + Negotiate failed Negociacion fallida - + Taker fee validate failed Validación de tarifa del taker fallida - + Maker payment transaction failed Transacción de pago de maker fallo - + Maker payment Data send failed Envio de data de pago de maker fallo - + Maker payment wait confirm failed Espera de confirmacion de pago de maker fallo - + Taker payment validate failed Validacion de pago de taker fallo - + Taker payment wait confirm failed Espera de confirmacion de pago de taker fallo - + Taker payment spend failed Gasto de pago de taker fallo - + Maker payment wait refund started Reembolso de espera de pago de maker iniciado - + Maker payment refunded Pago de maker reembolsado - + Maker payment refund failed Reembolso del pago de maker fallo @@ -1083,7 +1083,7 @@ DexAppPasswordField - + Type password Escriba la contraseña @@ -1384,7 +1384,7 @@ General - + %n day(s) %n día @@ -1392,7 +1392,7 @@ - + %nd day @@ -1401,7 +1401,7 @@ - + %nh hours @@ -1410,7 +1410,7 @@ - + %nm minutes @@ -1419,7 +1419,7 @@ - + %ns seconds @@ -1428,7 +1428,7 @@ - + %nms milliseconds @@ -1437,92 +1437,117 @@ - + - - - + <b>Taker tx fee:</b> <b>Cuota de tx del taker:</b> - + <b>Dex tx fee:</b> <b>Cuota de tx del Dex:</b> - + <b>Dex fee:</b> <b>Cuota Dex:</b> - + <b>Maker tx fee:</b> <b>Cuota tx del maker:</b> - + + %1 balance is zero + + + + + Activating %1 (%2%) + + + + + Loading wallet... + + + + + Min: %1 + Mín.: %1 + + + + Enter an amount + Ingrese una cantidad + + + Trading Fee Tarifa de Intercambio - + Minimum Trading Amount Cantidad Mínima de Intercambio - + Wallet %1 already exists WALLETNAME Monedero %1 ya existe - + %1 balance is lower than the fees amount: %2 %3 El saldo de %1 es inferior al monto de las tarifas: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount El saldo de %1 (después de las tarifas) es inferior al monto mínimo de intercambio - + Please fill the price field Por favor complete el campo de precio - + Please fill the volume field Complete el campo de volumen - - + + Please wait for %1 to fully activate Espere a que %1 se active por completo - - + + %1 volume is lower than minimum trade amount El volumen de %1 es inferior al monto mínimo de intercambio - - + + %1 needs to be enabled in order to use %2 %1 debe habilitarse para usar %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions se debe rellenar el saldo de %1, se requiere un saldo distinto de cero para pagar el gas de %2 transacciones - + Unknown Error Error Desconocido @@ -1588,90 +1613,95 @@ Nombre de billetera - + Enter seed Ingresar semilla - + Your seed is not BIP39 compliant. Try again or select 'Allow custom seed' to continue. Su semilla no cumple con BIP39. Vuelva a intentarlo o seleccione 'Permitir semilla personalizada' personalizada continúe. - - + + i understand entiendo - - + + я согласен - - + + je comprends - - + + entiendo - - + + anladım - - + + ich verstehe - + Ok Ok - + Allow custom seed Permitir semilla personalizada - + <strong>Allow custom seed</strong> <strong>Permitir semilla personalizada</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. Las frases semilla personalizadas pueden ser menos seguras y más fáciles de descifrar que una frase semilla o clave privada (WIF) compatible con BIP39.<br><br>Para confirmar que comprende el riesgo y sabe lo que está haciendo, escriba <strong> 'Entiendo'</strong> en el cuadro de abajo. - + I understand Entiendo - + Next Siguiente - + + Enter password + + + + Enter the same password to confirm Ingrese la misma contraseña para confirmar - + Continue Continuar @@ -1759,17 +1789,17 @@ Vuelva a intentarlo o seleccione 'Permitir semilla personalizada' pers Login - + Incorrect Password Contraseña incorrecta - + Log In Iniciar sesión - + Cancel Cancelar @@ -1859,47 +1889,47 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión. Dirección del Contrato - + Send Enviar - + Enable %1 ? ¿Habilitar %1? - + Yes - + No No - + Receive Recibir - + Swap Intercambiar - + is wallet only es solo billetera - + Rewards Recompensas - + Faucet Grifo @@ -1978,17 +2008,17 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión.Historial - + Place Order Realizar pedido - + Order Selected Pedido seleccionado - + START SWAP INICIO INTERCAMBIAR @@ -2042,13 +2072,13 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión. MarketModeSelector - + Sell %1 TICKER Vender %1 - + Buy %1 TICKER Comprar %1 @@ -2228,67 +2258,72 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión.Elegir contraseña - + Important: Back up your seed phrase before proceeding! Importante: ¡Haga una copia de seguridad de su frase semilla antes de continuar! - + We recommend storing it offline. Recomendamos almacenarlo fuera de línea. - + Generated Seed Semilla Generada - + Seed phrase Frase semilla - + copied to clipboard copiado al portapapeles - + Next Siguiente - + Let's double check your seed phrase Verifiquemos dos veces su frase semilla - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. Su frase semilla es importante, por eso nos gusta asegurarnos de que sea correcta. Le haremos tres preguntas diferentes sobre su frase semilla para asegurarnos de que podrá restaurar fácilmente su billetera cuando lo desee. - + Enter the Ingresa la - + word palabra - + Check Verificar - + + Enter password + + + + Enter the same password to confirm Ingrese la misma contraseña para confirmar - + Continue Continuar @@ -2472,97 +2507,97 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión. OrderForm - + Price Precio - + Reduce 1% relative to CEX market price. Reducción del 1% en relación con el precio de mercado CEX. - + Use CEX market price. Utilice el precio de mercado CEX. - + Increase 1% relative to CEX market price. Aumento del 1% en relación con el precio de mercado de CEX. - + Volume Volumen - + Amount to sell Importe para vender - + Amount to receive Importe para recibir - + Max Max - + Swap 25% of your tradable balance. Usar el 25% de su saldo comercial. - + Swap 50% of your tradable balance. Usar el 50% de su saldo comercial. - + Swap 100% of your tradable balance. Usar el 100% de su saldo comercial. - + Min Volume Volumen Mínimo - + Min amount to sell Cantidad mínima para vender - + Min amount to receive Cantidad mínimo para recibir - + Minimum accepted trade equals 10% of order volume. El comercio mínimo aceptado es igual al 10% del volumen del pedido. - + Minimum accepted trade equals 25% of order volume. El comercio mínimo aceptado es igual al 25% del volumen del pedido. - + Minimum accepted trade equals 50% of order volume. El comercio mínimo aceptado es igual al 50% del volumen del pedido. - + Min volume: Volumen mínimo: - + Use custom minimum trade amount Utilizar una cantidad personalizada de intercambio mínima @@ -2596,104 +2631,104 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión.Detalles de Orden - + Order Type Tipo de Orden - + Maker Order Orden de Maker - + Taker Order Orden de Taker - + Refund State Estado del Reembolso - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Su intercambio falló, pero el proceso de reembolso automático para su pago ya comenzó. Espere y mantenga la aplicación abierta hasta que reciba su pago - + Date Fecha - + Error ID ID de Error - - + + Error Log Registro de Error - + Close Cerrar - + Cancel Order Cancelar Pedido - - + + Swap ID ID de Intercambio - + Maker Payment Sent Transaction ID ID de la transacción pago enviada de Maker - + Maker Payment Spent Transaction ID ID de la transacción pago gastado de Maker - + Maker Payment TXID TXID del pago de Maker - + Taker Payment Spent Transaction ID ID de la transacción pago gastado de Taker - + Taker Payment Sent Transaction ID ID de la transacción pago enviada de Taker - + Taker Payment TXID TXID del pago de Taker - + Recover Funds Recuperar fondos - + Refunding... Reembolso... - + View on Explorer Ver en Explorer @@ -2830,8 +2865,8 @@ Seleccione un nuevo pedido. Portfolio - ADD ASSET - AGREGAR ACTIVO + ADD CRYPTO + @@ -2930,12 +2965,12 @@ Seleccione un nuevo pedido. ProView - + Failed to place the order Error al realizar el pedido - + Placed the order Realizó el pedido El @@ -2983,7 +3018,7 @@ Seleccione un nuevo pedido. RecoverSeedModal - + View seed and private keys Ver semilla y claves privadas @@ -2993,64 +3028,64 @@ Seleccione un nuevo pedido. Por favor ingrese su contraseña para ver la semilla. - + Seed Semilla - + Backup Seed Copia de seguridad de semilla - + Public Address copied to clipboard Direccion publica copiada en el portapapeles - + Cancel Cancelar - + Incorrect Password Contraseña incorrecta - + View Ver - - + + copied to clipboard copiado al portapapeles - - + + RPC Password Contraseña RPC - + Search a coin. Buscar una moneda. - + Public Address Dirección Pública - + Private Key copied to clipboard Clave Privada copiada en el portapapeles - + Private Key Clave Privada @@ -3621,22 +3656,9 @@ Seleccione un nuevo pedido. Buscar - - Add asset - Agregar activo - - - - SmartChartView - - - Loading market data - Cargando datos de mercado - - - - There is no chart data for this ticker yet - No hay datos de gráficos para este ticker aún + + ADD CRYPTO + @@ -3667,7 +3689,7 @@ Seleccione un nuevo pedido. Tasa CEX - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 no está habilitado. ¿Desea habilitarlo para poder seleccionar %2 mejores ordenes?<br><a href='#'>Sí</a> - <a href='#no'>No</a> @@ -4040,154 +4062,122 @@ Las tarifas de la red pueden variar mucho según el par comercial seleccionado.< Trade - + Swap Intercambiar - + Instant trading with best orders Comercio instantáneo con las mejores órdenes - + Reset form Restablecer formulario - + You have no tradable assets No tiene activos intercambiables - + From Desde - - Enter an amount - Ingrese una cantidad + + Entered amount must be higher than 0. + + + + + Select an order. + - + MAX MAX - + To A - + Pick an order Elegir una orden - + Price Precio - + Better price found: %1. Updating forms. Mejor precio encontrado: %1. Actualización de formularios. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. Mejor precio (%1) encontrado pero la cantidad recibida (%2) es más baja que la actual (%3). Haga clic aquí para actualizar el pedido seleccionado. - + %1 %1 - + Tradable: Negociable: - - Min: %1 - Mín.: %1 - - - + Pick a coin Elija una moneda - + SWAP NOW CAMBIE AHORA - + Failed to place the order Error al realizar el pedido - + Placed the order Realizó el pedido El - - Entered amount must be superior than 0. - monto ingresado debe ser superior a 0. - - - - You must select an order. - Debe seleccionar un pedido. - - - - Entered amount is below the minimum required by this order: %1 - El monto ingresado está por debajo del mínimo requerido por esta orden: %1 - - - - - %1 needs to be enabled in order to use %2 - %1 debe habilitarse para usar %2 - - - - - %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - se debe rellenar el saldo de %1, se requiere un saldo distinto de cero para pagar el gas de %2 transacciones - - - - %1 balance does not have enough funds to pay the gas of %2 transactions - %1 el saldo no tiene fondos suficientes para pagar el gas de %2 transacciones - - - + No buy orders found for %1. No se encontraron órdenes de compra para %1. - + You can check later or try to sell a different coin. Puede verificar más tarde o intentar vender una moneda diferente. - + Calculating fee estimate... Calculando tarifa estimada... - + Total %1 fees: Total de %1 tarifas: - + %2 (%3) %2 (%3) @@ -4230,6 +4220,19 @@ Las tarifas de la red pueden variar mucho según el par comercial seleccionado.< Realizar pedido + + TradingViewChart + + + Loading market data + Cargando datos de mercado + + + + There is no chart data for this ticker yet + No hay datos de gráficos para este ticker aún + + TransactionDetailsModal @@ -4322,22 +4325,22 @@ Las tarifas de la red pueden variar mucho según el par comercial seleccionado.< Transactions - + Sent Enviado - + Received Recibido - + fees tarifas - + Unconfirmed Sin confirmar diff --git a/atomic_defi_design/assets/languages/atomic_defi_fr.ts b/atomic_defi_design/assets/languages/atomic_defi_fr.ts index ca2981786a..80242b19bf 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_fr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_fr.ts @@ -732,83 +732,83 @@ ConfirmTradeModal - + Confirm Exchange Details Détails de la confirmation de l'échange - + This swap request can not be undone and is a final event! La requête de ce swap ne peut pas être annulé, c'est irréversible ! - + Security configuration Configuration de la sécurité - + Read more about dPoW En savoir plus sur dPoW - + Use custom protection settings for incoming %1 transactions TICKER Utiliser les paramètres de protection personnalisés pour les transactions %1 entrantes - + Enable Komodo dPoW security Activer la sécurité de Komodo dPoW - + %1 confirmations for incoming %2 transactions Il y a %1 confirmations pour les transactions entrantes du ticker %2 - + This transaction can take up to 60 mins - DO NOT close this application! Cette transaction peut prendre jusqu'à 60 minutes - NE fermez PAS cette application ! - + Trade price is more than 50% different to CEX! Confirm? Le prix est supérieur à 50% du prix sur les CEX ! Êtes-vous sûr ? - + Loading fees... - + <b>Total %1 fees:</b> Frais totaux %1: - + dPoW protected Protégé par dPoW - + Required Confirmations Confirmations requises - + Warning, this atomic swap is not dPoW protected! Attention, ce swap atomique n'est pas protégé par dPoW ! - + Cancel Annuler - + Confirm Confirmer @@ -824,182 +824,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Le nombre actuel d'actifs activées ne correspond pas à vos spécifications de configuration. La configuration de vos actifs sera réinitialisée. - + Matching Recherche en cours - + Order Matching Recherche d'un ordre - + Matched Trouvé - + Order Matched Ordre trouvé - + Ongoing En cours - + Swap Ongoing Échange en cours - + Successful Réussi - + Swap Successful Échange terminé - + Refunding En cours de remboursement - + Failed Échoué - + Swap Failed Erreur lors de l'échange - + Unknown Inconnue - + Unknown State État inconnu - + Started Commencé - + Negotiated Négocié - + Taker fee sent Frais de preneur envoyés - + Maker payment received Paiement de l'envoyeur reçu - + Maker payment wait confirm started La confirmation d'attente de paiement de l'envoyeur a commencé - + Maker payment validated and confirmed Paiement de l'envoyeur validé et confirmé - + Taker payment sent Paiement du preneur envoyé - + Taker payment spent Paiement du preneur dépensé - + Maker payment spent Paiement de l'envoyeur dépensé - + Finished Fini - + Start failed Le démarrage a échoué - + Negotiate failed La négociation a échoué - + Taker fee validate failed Échec de la validation des frais du preneur - + Maker payment transaction failed La transaction de paiement du créateur a échoué - + Maker payment Data send failed Échec de l'envoi des données de paiement du créateur - + Maker payment wait confirm failed La confirmation de l'attente de paiement du créateur a échoué - + Taker payment validate failed La validation du paiement du preneur a échoué - + Taker payment wait confirm failed La confirmation de l'attente de paiement du preneur a échoué - + Taker payment spend failed Échec des dépenses de paiement du preneur - + Maker payment wait refund started attente de paiement du créateur, remboursement commencé - + Maker payment refunded Paiement du créateur remboursé - + Maker payment refund failed échec du remboursement du paiement du créateur @@ -1083,7 +1083,7 @@ DexAppPasswordField - + Type password Tapez votre mot de passe @@ -1384,7 +1384,7 @@ General - + %n day(s) %n jour(s) @@ -1392,7 +1392,7 @@ - + %nd day @@ -1401,7 +1401,7 @@ - + %nh hours @@ -1410,7 +1410,7 @@ - + %nm minutes @@ -1419,7 +1419,7 @@ - + %ns seconds @@ -1428,7 +1428,7 @@ - + %nms milliseconds @@ -1437,92 +1437,117 @@ - + - - - + <b>Taker tx fee:</b> Taxes de transaction du preneur: - + <b>Dex tx fee:</b> Taxes de transaction de DEX: - + <b>Dex fee:</b> Taxes de DEX: - + <b>Maker tx fee:</b> Taxes de transaction du créateur - + + %1 balance is zero + + + + + Activating %1 (%2%) + + + + + Loading wallet... + + + + + Min: %1 + + + + + Enter an amount + Entrez un montant + + + Trading Fee Frais d'échanges - + Minimum Trading Amount Frais d'échange minimum - + Wallet %1 already exists WALLETNAME Le portefeuille %1 existe déjà - + %1 balance is lower than the fees amount: %2 %3 La %1 balance est inférieur aux frais: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Le solde négociable (après frais) %1 est inférieur au montant minimum de la transaction - + Please fill the price field Veuillez remplir le champ de prix - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount Le volume de %1 est inférieur au montant minimum de la transaction - - + + %1 needs to be enabled in order to use %2 %1 doit être activé pour utiliser %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Le solde %1 doit être financé, un solde différent de zéro est requis pour payer les frais de transactions de %2 - + Unknown Error Erreur inconnue @@ -1588,89 +1613,94 @@ Nom du portefeuille - + Enter seed Entrez la phrase de récupération - + Your seed is not BIP39 compliant. Try again or select 'Allow custom seed' to continue. - - + + i understand je comprends - - + + я согласен - - + + je comprends - - + + entiendo - - + + anladım - - + + ich verstehe - + Ok Ok - + Allow custom seed Autoriser les phrases de récupération personnalisées - + <strong>Allow custom seed</strong> <strong>Autoriser les phrases personnalisées</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. Les phrases de départ personnalisées peuvent être moins sécurisées et plus faciles à déchiffrer qu'une phrase de départ ou une clé privée (WIF) conforme à BIP39 générée.<br><br>Pour confirmer que vous comprenez le risque et savez ce que vous faites, tapez <strong>'Je comprends'</strong> dans la case ci-dessous. - + I understand Je comprends - + Next Suivant - + + Enter password + + + + Enter the same password to confirm Entrez le même mot de passe pour confirmer - + Continue Continuer @@ -1758,17 +1788,17 @@ Try again or select 'Allow custom seed' to continue. Login - + Incorrect Password Mot de passe incorrect - + Log In - + Cancel Annuler @@ -1856,47 +1886,47 @@ They will be removed from the orderbook until you log in again. - + Send Envoyez - + Enable %1 ? Activer %1 ? - + Yes Oui - + No Non - + Receive Recevoir - + Swap Échange - + is wallet only - + Rewards Récompenses - + Faucet Robinet @@ -1975,17 +2005,17 @@ They will be removed from the orderbook until you log in again. Historique - + Place Order Placer l'ordre - + Order Selected Ordre séléctionné - + START SWAP COMMENCER L'ÉCHANGE @@ -2039,13 +2069,13 @@ They will be removed from the orderbook until you log in again. MarketModeSelector - + Sell %1 TICKER - + Buy %1 TICKER @@ -2225,67 +2255,72 @@ They will be removed from the orderbook until you log in again. Choisissez un mot de passe - + Important: Back up your seed phrase before proceeding! Important: sauvegardez votre phrase de recupération avant de continuer ! - + We recommend storing it offline. Nous vous recommandons de le stocker hors ligne. - + Generated Seed Générer un Seed - + Seed phrase Phrase de récupération - + copied to clipboard copié dans le presse-papier - + Next Suivant - + Let's double check your seed phrase Vérifions à nouveau votre phrase de récupération - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. Votre phrase de récupération est importante - c'est pourquoi nous aimons nous assurer qu'elle est correcte. Nous vous poserons trois questions différentes au sujet de votre phrase source pour vous assurer que vous pourrez facilement restaurer votre portefeuille à tout moment. - + Enter the - + word - + Check Vérifier - + + Enter password + + + + Enter the same password to confirm Entrez le même mot de passe pour confirmer - + Continue Continuer @@ -2469,97 +2504,97 @@ They will be removed from the orderbook until you log in again. OrderForm - + Amount to sell Montant à vendre - + Amount to receive Montant à recevoir - + Max Max - + Swap 25% of your tradable balance. - + Swap 50% of your tradable balance. - + Swap 100% of your tradable balance. - + Min Volume - + Min amount to sell - + Min amount to receive - + Minimum accepted trade equals 10% of order volume. - + Minimum accepted trade equals 25% of order volume. - + Minimum accepted trade equals 50% of order volume. - + Min volume: Min volume : - + Use custom minimum trade amount Utiliser le montant d'échange minimum personnalisé - + Price Prix - + Reduce 1% relative to CEX market price. - + Use CEX market price. - + Increase 1% relative to CEX market price. - + Volume Volume @@ -2593,104 +2628,104 @@ They will be removed from the orderbook until you log in again. Détails de l'ordre - + Order Type - + Maker Order Ordre de vente - + Taker Order Ordre d'achat - + Refund State État de remboursement - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Votre échange a échoué, mais le processus de remboursement automatique de votre paiement a déjà commencé. Veuillez patienter et garder l'application ouverte jusqu'à ce que vous receviez votre remboursement - + Date Date - + Recover Funds Récupérer des fonds - + Refunding... Remboursement... - + View on Explorer Voir dans l'explorateur - + Cancel Order Annuler l'ordre - + Error ID ID de l'erreur - - + + Swap ID ID du Swap - + Maker Payment Sent Transaction ID - + Maker Payment Spent Transaction ID - + Maker Payment TXID - + Taker Payment Spent Transaction ID - + Taker Payment Sent Transaction ID - + Taker Payment TXID - - + + Error Log Journal des erreurs - + Close Fermer @@ -2826,7 +2861,7 @@ Please select a new order. Portfolio - ADD ASSET + ADD CRYPTO @@ -2926,12 +2961,12 @@ Please select a new order. ProView - + Failed to place the order Échec lors du placement de l'ordre - + Placed the order L'ordre a été placé avec succès @@ -2979,7 +3014,7 @@ Please select a new order. RecoverSeedModal - + View seed and private keys Afficher le seed et les clefs privées @@ -2989,64 +3024,64 @@ Please select a new order. Veuillez entrer votre mot de passe pour voir la phrase de récupération. - + Seed - + Backup Seed - + Public Address copied to clipboard - + Cancel Annuler - + Incorrect Password Mot de passe incorrect - - + + copied to clipboard copié dans le presse-papier - - + + RPC Password Mot de passe RPC - + Search a coin. Rechercher une asset. - + Public Address Adresse publique - + Private Key copied to clipboard - + Private Key Clé privée - + View Voir @@ -3617,22 +3652,9 @@ Please select a new order. Rechercher - - Add asset - Ajouter un actif - - - - SmartChartView - - - Loading market data - Chargement des données de marché - - - - There is no chart data for this ticker yet - Il n'y a pas encore de données graphiques pour cet actif + + ADD CRYPTO + @@ -3663,7 +3685,7 @@ Please select a new order. Taux CEX - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 n'est pas activé - Souhaitez vous l'activer pour pouvoir selectionnez les meilleurs offres %2 ?<br><a href='#'>Oui</a> - <a href='#no'>Non</a> @@ -4022,154 +4044,122 @@ Network fees can vary greatly depending on your selected trading pair. Trade - + Swap Échange - + Instant trading with best orders Trading instantané avec les meilleurs ordres - + Reset form - + You have no tradable assets - + From De - - Enter an amount - Entrez un montant + + Entered amount must be higher than 0. + - + + Select an order. + + + + MAX MAX - + To Vers - + Pick an order Choisir une commande - + Price Prix - + Better price found: %1. Updating forms. Meilleur prix trouvé : %1. Mise à jour du formulaire. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. Meilleur prix (%1) trouvé mais la quantité reçue (%2) est inférieure à votre montant de réception (%3). Cliquez ici pour mettre à jour la commande sélectionnée. - + %1 - + Tradable: Disponible: - - Min: %1 - - - - + Pick a coin Choisissez un actif - + SWAP NOW ÉCHANGER MAINTENANT - + Failed to place the order Échec lors du placement de l'ordre - + Placed the order L'ordre a été placé - - Entered amount must be superior than 0. - Le montant saisi doit être supérieur à 0. - - - - You must select an order. - Vous devez sélectionner une commande. - - - - Entered amount is below the minimum required by this order: %1 - Le montant saisi est inférieur au minimum requis par cette commande : %1 - - - - - %1 needs to be enabled in order to use %2 - %1 doit être activé pour utiliser %2 - - - - - %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - Le solde %1 doit être financé, un solde différent de zéro est requis pour payer les frais de transactions de %2 - - - - %1 balance does not have enough funds to pay the gas of %2 transactions - - - - + No buy orders found for %1. Aucun ordre d'achat trouvé pour %1. - + You can check later or try to sell a different coin. Vous pouvez vérifier plus tard ou essayer de vendre un actif différent. - + Calculating fee estimate... - + Total %1 fees: Frais totaux %1 : - + %2 (%3) @@ -4212,6 +4202,19 @@ Network fees can vary greatly depending on your selected trading pair. Placer l'ordre + + TradingViewChart + + + Loading market data + Chargement des données de marché + + + + There is no chart data for this ticker yet + + + TransactionDetailsModal @@ -4304,22 +4307,22 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Received Reçue - + Sent Envoyé - + fees frais - + Unconfirmed Non confirmé diff --git a/atomic_defi_design/assets/languages/atomic_defi_ru.ts b/atomic_defi_design/assets/languages/atomic_defi_ru.ts index 31ae9a0ed6..4de7d0f1bc 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_ru.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_ru.ts @@ -732,83 +732,83 @@ ConfirmTradeModal - + Confirm Exchange Details Подтвердить данные обмена - + Trade price is more than 50% different to CEX! Confirm? Стоимость обмена в сравнении с CEX дороже более чем на 50%, вы подтверждаете сделку? - + This swap request can not be undone and is a final event! Этот запрос на своп не может быть отменен и является окончательным! - + This transaction can take up to 60 mins - DO NOT close this application! Эта транзакция может занять до 60 минут - НЕ закрывайте приложение! - + Loading fees... - + <b>Total %1 fees:</b> - + Security configuration Настройки безопасности - + %1 confirmations for incoming %2 transactions %1 подтверждений для входящих %2 транзакций - + Read more about dPoW Узнать больше о dPoW - + Use custom protection settings for incoming %1 transactions TICKER Использовать пользовательские настройки защиты для входящих транзакций %1 - + Enable Komodo dPoW security Включить Komodo dPoW - + dPoW protected dPoW защита - + Required Confirmations Необходимое количество подтверждений - + Warning, this atomic swap is not dPoW protected! Предупреждение, этот атомарный своп не защищен dPoW! - + Cancel Отменить - + Confirm Подтверждение @@ -824,182 +824,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Текущее количество включенных монет не совпадает с конфигурацией. Ваша конфигурация активов будет сброшена. - + Matching Матчинг - + Order Matching Матчинг ордеров - + Matched Сматчен - + Order Matched Ордер сматчен - + Ongoing В процессе - + Swap Ongoing Своп продолжается - + Successful Успешно - + Swap Successful Своп успешно завершен - + Refunding Проводится возврат - + Failed Не завершено - + Swap Failed Своп не был завершен - + Unknown Неизвестно - + Unknown State Статус неизвестен - + Started Начат - + Negotiated Согласован - + Taker fee sent Комиссия тейкера отправлена - + Maker payment received Платеж мейкера получен - + Maker payment wait confirm started Ожидание платежа мейкера - + Maker payment validated and confirmed Платеж мейкера валидирован и подтвержден - + Taker payment sent Платеж тейкера отправлен - + Taker payment spent Платеж тейкера потрачен - + Maker payment spent Платеж мейкера потрачен - + Finished Завершено - + Start failed Не удалось начать - + Negotiate failed Согласование не прошло - + Taker fee validate failed Валидация комиссии тейкера не прошла - + Maker payment transaction failed Платежная транзакция мейкера не прошла - + Maker payment Data send failed Отправка платежных данных мейкера не прошла - + Maker payment wait confirm failed Платежная транзакция мейкера не была подтверждена - + Taker payment validate failed Не прошла валидация платежа тейкера - + Taker payment wait confirm failed Платежная транзакция тейкера не была подтверждена - + Taker payment spend failed Spend платежа тейкера не прошел - + Maker payment wait refund started Ожидание возврата платежа мейкера - + Maker payment refunded Платеж мейкера возвращен - + Maker payment refund failed Возврат платежа мейкера не выполнен @@ -1083,7 +1083,7 @@ DexAppPasswordField - + Type password Введите пароль @@ -1384,7 +1384,7 @@ General - + %n day(s) %n день @@ -1393,7 +1393,7 @@ - + %nd day @@ -1403,7 +1403,7 @@ - + %nh hours @@ -1413,7 +1413,7 @@ - + %nm minutes @@ -1423,7 +1423,7 @@ - + %ns seconds @@ -1433,7 +1433,7 @@ - + %nms milliseconds @@ -1443,92 +1443,117 @@ - + - - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + + %1 balance is zero + + + + + Activating %1 (%2%) + + + + + Loading wallet... + + + + + Min: %1 + Мин: %1 + + + + Enter an amount + Введите количество + + + Trading Fee Торговая комиссия - + Minimum Trading Amount Минимальный объем сделки - + Wallet %1 already exists WALLETNAME Кошелек %1 уже существует - + %1 balance is lower than the fees amount: %2 %3 %1 баланс менее чем размер комиссий: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Торгуемый (после комиссий) баланс %1 - меньше минимальной суммы сделки - + Please fill the price field Пожалуйста, укажите цену - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount Сумма %1 меньше минимальной суммы сделки - - + + %1 needs to be enabled in order to use %2 %1 должен быть активным для использования %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions нужно пополнить баланс %1 для оплаты газа %2 транзакций - + Unknown Error Неизвестная ошибка @@ -1594,89 +1619,94 @@ Название кошелька - + Enter seed Введите сид-фразу - + Your seed is not BIP39 compliant. Try again or select 'Allow custom seed' to continue. - - + + i understand Я согласен - - + + я согласен - - + + je comprends - - + + entiendo - - + + anladım - - + + ich verstehe - + Ok Ок - + Allow custom seed Разрешить пользовательский формат сид-фразы - + <strong>Allow custom seed</strong> <strong>Разрешить произвольный seed</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. Пользовательские исходные фразы могут быть менее безопасными и их легче взломать, чем сгенерированные исходные фразы или закрытый ключ (WIF), совместимые с BIP39.<br><br>Чтобы подтвердить, что вы понимаете риск и знаете, что делаете, введите <strong>'Я согласен'</strong> в поле ниже. - + I understand Я согласен - + Next Далее - + + Enter password + + + + Enter the same password to confirm Введите тот же пароль для подтверждения - + Continue Продолжить @@ -1764,17 +1794,17 @@ Try again or select 'Allow custom seed' to continue. Login - + Incorrect Password Неправильный пароль - + Log In - + Cancel Отменить @@ -1862,47 +1892,47 @@ They will be removed from the orderbook until you log in again. - + Send Отправить - + Enable %1 ? Активировать %1 ? - + Yes Да - + No Нет - + Receive Получить - + Swap Обменять - + is wallet only - + Rewards Награды - + Faucet Фаусет @@ -1981,17 +2011,17 @@ They will be removed from the orderbook until you log in again. История - + Place Order Разместить ордер - + Order Selected Ордер выбран - + START SWAP НАЧАТЬ ОБМЕН @@ -2045,13 +2075,13 @@ They will be removed from the orderbook until you log in again. MarketModeSelector - + Sell %1 TICKER - + Buy %1 TICKER @@ -2231,67 +2261,72 @@ They will be removed from the orderbook until you log in again. Задайте пароль - + Important: Back up your seed phrase before proceeding! Важно: убедитесь, что вы сохранили ваш seed ключ, прежде чем продолжить! - + We recommend storing it offline. Мы рекумендуем хранить его офлайн. - + Generated Seed Сгенерированный seed ключ - + Seed phrase Seed фраза - + copied to clipboard скопировано в буфер - + Next Далее - + Let's double check your seed phrase Давайте перепроверим ваш seed ключ - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. Ваш seed ключ важен, и поэтому мы хотим убедиться, что вы его сохранили. Мы зададим вам три разных вопроса о вашем seed ключе, чтобы убедиться, что вы сможете легко восстановить свой кошелек, когда захотите. - + Enter the - + word - + Check Проверить - + + Enter password + + + + Enter the same password to confirm Введите тот же пароль для подтверждения - + Continue Продолжить @@ -2475,97 +2510,97 @@ They will be removed from the orderbook until you log in again. OrderForm - + Price Цена - + Reduce 1% relative to CEX market price. - + Use CEX market price. - + Increase 1% relative to CEX market price. - + Volume Объем - + Amount to sell Сумма для продажи - + Amount to receive Получаемая сумма - + Max Макс - + Swap 25% of your tradable balance. - + Swap 50% of your tradable balance. - + Swap 100% of your tradable balance. - + Min Volume - + Min amount to sell - + Min amount to receive - + Minimum accepted trade equals 10% of order volume. - + Minimum accepted trade equals 25% of order volume. - + Minimum accepted trade equals 50% of order volume. - + Min volume: Мин. объем: - + Use custom minimum trade amount Задать минимальный объем сделки @@ -2599,104 +2634,104 @@ They will be removed from the orderbook until you log in again. Детали ордера - + Order Type - + Maker Order Мейкер ордер - + Taker Order Тейкер ордер - + Refund State Статус рефанда - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Обмен не был завершен, но процесс автоматического рефанда уже начался. Пожалуйста, подождите, оставляя приложение открытым, пока вы не получите свои средства - + Date Дата - + Error ID ID ошибки - - + + Error Log Лог ошибки - + Close Закрыть - + Cancel Order Отменить ордер - - + + Swap ID ID обмена - + Maker Payment Sent Transaction ID - + Maker Payment Spent Transaction ID - + Maker Payment TXID - + Taker Payment Spent Transaction ID - + Taker Payment Sent Transaction ID - + Taker Payment TXID - + Recover Funds Восстановить средства - + Refunding... Возмещается... - + View on Explorer Показать в эксплорере @@ -2832,7 +2867,7 @@ Please select a new order. Portfolio - ADD ASSET + ADD CRYPTO @@ -2932,12 +2967,12 @@ Please select a new order. ProView - + Failed to place the order Не удалось разместить ордер - + Placed the order Ордер размещен @@ -2985,7 +3020,7 @@ Please select a new order. RecoverSeedModal - + View seed and private keys Показать seed-фразу и приватные ключи @@ -2995,64 +3030,64 @@ Please select a new order. Введите пароль для отображения seed ключа. - + Seed - + Backup Seed - + Public Address copied to clipboard - + Cancel Отменить - + Incorrect Password Неправильный пароль - - + + copied to clipboard скопировано в буфер - - + + RPC Password RPC Пароль - + Search a coin. Поиск актива. - + Public Address Публичный адрес - + Private Key copied to clipboard - + Private Key Приватный ключ - + View Показать @@ -3623,22 +3658,9 @@ Please select a new order. Поиск - - Add asset - Добавить крипто актив - - - - SmartChartView - - - Loading market data - Загрузка рыночных данных - - - - There is no chart data for this ticker yet - Для этого графика пока еще нет данных + + ADD CRYPTO + @@ -3669,7 +3691,7 @@ Please select a new order. CEX цена - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 не активирован -Вы хотите активировать этот %2 актив чтобы видеть лучшие ордеры для него ?<br><a href='#'>Да</a> - <a href='#no'>Нет</a> @@ -4026,154 +4048,122 @@ Network fees can vary greatly depending on your selected trading pair. Trade - + Swap Обменять - + Instant trading with best orders Быстрая торговля с лучшими ордерами - + Reset form - + You have no tradable assets - + From От - - Enter an amount - Введите количество + + Entered amount must be higher than 0. + - + + Select an order. + + + + MAX МАКС - + To Получатель - + Pick an order Выберите ордер - + Price Цена - + Better price found: %1. Updating forms. Найдена цена лучше: %1.Обновляю форму. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. Лучшая цена (%1) была обнаружена но количество (%2) меньше чем в вашем текущем ордере (%3).Нажмите чтобы обновить выбранный ордер. - + %1 %1 - + Tradable: Доступно: - - Min: %1 - Мин: %1 - - - + Pick a coin Выберите монету - + SWAP NOW - + Failed to place the order Не удалось разместить ордер - + Placed the order Ордер размещен - - Entered amount must be superior than 0. - Введенная сумма должна быть больше 0. - - - - You must select an order. - Вы должны выбрать ордер. - - - - Entered amount is below the minimum required by this order: %1 - Введнная сумма меньше минимальной для этого ордера: %1 - - - - - %1 needs to be enabled in order to use %2 - %1 должен быть активным для использования %2 - - - - - %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - нужно пополнить баланс %1 для оплаты газа %2 транзакций - - - - %1 balance does not have enough funds to pay the gas of %2 transactions - - - - + No buy orders found for %1. Не найдено ордеров на покупку дл] %1. - + You can check later or try to sell a different coin. Вы можете попробовать позже или попробовать продать другой актив. - + Calculating fee estimate... - + Total %1 fees: Всего %1 комиссий: - + %2 (%3) %2 (%3) @@ -4216,6 +4206,19 @@ Network fees can vary greatly depending on your selected trading pair. Разместить ордер + + TradingViewChart + + + Loading market data + Загрузка рыночных данных + + + + There is no chart data for this ticker yet + + + TransactionDetailsModal @@ -4308,22 +4311,22 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Received Получено - + Sent Отправлено - + fees комиссии - + Unconfirmed Не подтверждена diff --git a/atomic_defi_design/assets/languages/atomic_defi_tr.ts b/atomic_defi_design/assets/languages/atomic_defi_tr.ts index d4fe94d9c5..34e9b6e6db 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_tr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_tr.ts @@ -732,83 +732,83 @@ ConfirmTradeModal - + Confirm Exchange Details Al-Sat Detaylarını Onayla - + This swap request can not be undone and is a final event! Bu takas isteği geri döndürülemez! - + Security configuration Güvenlik yapılandırması - + Read more about dPoW dPoW hakkında daha fazla bilgi - + Use custom protection settings for incoming %1 transactions TICKER %1 işlemleri için özel güvenlik ayarları kullan - + Enable Komodo dPoW security Komodo dPoW güvenliğini etkinleştir - + %1 confirmations for incoming %2 transactions Gelen %2 işlemleri için %1 onay - + This transaction can take up to 60 mins - DO NOT close this application! Bu işlem 60 dakikayı bulabilir - Programı KAPATMAYINIZ! - + Trade price is more than 50% different to CEX! Confirm? Takas ücreti CEX ile karşılaştırıldığında %50'den daha fazla farka sahip. Onaylıyor musunuz? - + Loading fees... - + <b>Total %1 fees:</b> <b>Toplam %1 işlem giderleri: </b> - + dPoW protected dPoW korumalı - + Required Confirmations Gereken Onaylar - + Warning, this atomic swap is not dPoW protected! Uyarı, bu atomik takas dPoW korumalı değil! - + Cancel İptal - + Confirm Onayla @@ -824,182 +824,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Etkinleştirilmiş koinlerin mevcut sayısı yapılandırma ayarlarınızla eşleşmiyor. Varlık yapılandırmanız sıfırlanacak. - + Matching Eşleşiyor - + Order Matching Emir Eşleşiyor - + Matched Eşleşti - + Order Matched Emir Eşleşti - + Ongoing Devam ediyor - + Swap Ongoing Takas Devam Ediyor - + Successful Başarılı - + Swap Successful Takas Başarılı - + Refunding Geri ödeniyor - + Failed Başarısız - + Swap Failed Takas Başarısız - + Unknown Bilinmiyor - + Unknown State Bilinmeyen durum - + Started Başlatıldı - + Negotiated Pazarlık yapıldı - + Taker fee sent Alıcı ücreti gönderildi - + Maker payment received Yapıcı ödemesi alındı - + Maker payment wait confirm started Yapıcı ödemesi bekleme onayı başladı - + Maker payment validated and confirmed Yapıcı ödemesi doğrulandı ve onaylandı - + Taker payment sent Alıcı ödemesi gönderildi - + Taker payment spent Alıcı ödemesi harcandı - + Maker payment spent Yapıcı ödemesi harcandı - + Finished Tamamlandı - + Start failed Başlatılamadı - + Negotiate failed Pazarlık başarısız - + Taker fee validate failed Alıcı ücreti doğrulanamadı - + Maker payment transaction failed Yapıcı ödeme işlemi başarısız - + Maker payment Data send failed Yapıcı ödeme verileri gönderilemedi - + Maker payment wait confirm failed Yapıcı ödemesi bekleme onayı başarısız - + Taker payment validate failed Alıcı ödemesi doğrulanamadı - + Taker payment wait confirm failed Alıcı ödemesi bekleme onayı başarısız oldu - + Taker payment spend failed Alıcı ödeme harcaması başarısız oldu - + Maker payment wait refund started Yapıcı ödemesi bekleme iadesi başladı - + Maker payment refunded Yapıcı ödemesi iade edildi - + Maker payment refund failed Yapıcı ödeme iadesi başarısız @@ -1083,7 +1083,7 @@ DexAppPasswordField - + Type password @@ -1384,14 +1384,14 @@ General - + %n day(s) %n gün - + %nd day @@ -1399,7 +1399,7 @@ - + %nh hours @@ -1407,7 +1407,7 @@ - + %nm minutes @@ -1415,7 +1415,7 @@ - + %ns seconds @@ -1423,7 +1423,7 @@ - + %nms milliseconds @@ -1431,92 +1431,117 @@ - + - - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + + %1 balance is zero + + + + + Activating %1 (%2%) + + + + + Loading wallet... + + + + + Min: %1 + + + + + Enter an amount + Bir miktar gir + + + Trading Fee Takas Ücreti - + Minimum Trading Amount Minimum Takas Hacmi - + Wallet %1 already exists WALLETNAME %1 cüzdanı zaten mevcut - + %1 balance is lower than the fees amount: %2 %3 %1 bakiye ücret tutarının altında: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Takas edilebilir (ücretlerden sonra)%1 bakiyesi minimum işlem ücretinden düşük - + Please fill the price field Lütfen fiyat alanını doldurun - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount %1 hacmi, minimum işlem ücretinden düşük - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error Bilinmeyen Hata @@ -1582,89 +1607,94 @@ Cüzdan Adı - + Enter seed - + Your seed is not BIP39 compliant. Try again or select 'Allow custom seed' to continue. - - + + i understand Anladım - - + + я согласен - - + + je comprends - - + + entiendo - - + + anladım - - + + ich verstehe - + Ok Tamam - + Allow custom seed Özel Seed'e izin ver - + <strong>Allow custom seed</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. Özel çekirdek tümceler, oluşturulmuş bir BIP39 uyumlu çekirdek sözcük grubu veya özel anahtara (WIF).<br><br> Riski anladığınızı ve ne yaptığınızı bildiğinizi doğrulamak için lütfen aşağıdaki kutuya <strong>'Anladım'</strong> yazın. - + I understand Anladım - + Next İleri - + + Enter password + + + + Enter the same password to confirm Doğrulamak için aynı parolayı giriniz - + Continue Devam @@ -1752,17 +1782,17 @@ Try again or select 'Allow custom seed' to continue. Login - + Incorrect Password Yanlış Parola - + Log In - + Cancel İptal @@ -1850,47 +1880,47 @@ They will be removed from the orderbook until you log in again. - + Send Gönder - + Enable %1 ? %1 Etkinleştirilsin mi ? - + Yes Evet - + No Hayır - + Receive Al - + Swap Takasla - + is wallet only - + Rewards - + Faucet Musluk @@ -1969,17 +1999,17 @@ They will be removed from the orderbook until you log in again. Tarihçe - + Place Order Emir Ver - + Order Selected Emir Seçildi - + START SWAP Takası başlat @@ -2033,13 +2063,13 @@ They will be removed from the orderbook until you log in again. MarketModeSelector - + Sell %1 TICKER - + Buy %1 TICKER @@ -2219,67 +2249,72 @@ They will be removed from the orderbook until you log in again. - + Important: Back up your seed phrase before proceeding! Önemli: Devam etmeden önce seed kelimelerinizi yedekleyin! - + We recommend storing it offline. Çevrimdışı saklamanızı öneririz. - + Generated Seed Seed Oluştur - + Seed phrase - + copied to clipboard - + Next İleri - + Let's double check your seed phrase Seed kelimelerinizi tekrar kontrol edelim - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. Seed kelimeleriniz önemlidir - bu yüzden doğru olduğundan emin olmak istiyoruz. Cüzdanınızı istediğiniz zaman kolayca kurtarabileceğinizden emin olmak için seed kelimeleriniz hakkında üç farklı soru soracağız. - + Enter the - + word - + Check - + + Enter password + + + + Enter the same password to confirm Doğrulamak için aynı parolayı giriniz - + Continue Devam @@ -2463,97 +2498,97 @@ They will be removed from the orderbook until you log in again. OrderForm - + Amount to sell Satılacak miktar - + Amount to receive Alınacak miktar - + Max Maks - + Swap 25% of your tradable balance. - + Swap 50% of your tradable balance. - + Swap 100% of your tradable balance. - + Min Volume - + Min amount to sell - + Min amount to receive - + Minimum accepted trade equals 10% of order volume. - + Minimum accepted trade equals 25% of order volume. - + Minimum accepted trade equals 50% of order volume. - + Min volume: - + Use custom minimum trade amount - + Price Fiyat - + Reduce 1% relative to CEX market price. - + Use CEX market price. - + Increase 1% relative to CEX market price. - + Volume Hacim @@ -2587,104 +2622,104 @@ They will be removed from the orderbook until you log in again. Emir Detayları - + Order Type - + Maker Order Yapıcı Emri - + Taker Order Alıcı Emri - + Refund State Geri Ödeme Durumu - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Takas işlemi başarısız oldu, ancak otomatik geri ödeme süreci başladı. Lütfen bekleyin ve ödemenizi geri alana kadar uygulamayı açık tutun - + Date Tarih - + Recover Funds Fon Kurtar - + Refunding... - + View on Explorer Explorer'da Göster - + Cancel Order Emri İptal Et - + Error ID Hata ID - - + + Swap ID - + Maker Payment Sent Transaction ID - + Maker Payment Spent Transaction ID - + Maker Payment TXID - + Taker Payment Spent Transaction ID - + Taker Payment Sent Transaction ID - + Taker Payment TXID - - + + Error Log Hata Kaydı - + Close Kapat @@ -2820,7 +2855,7 @@ Please select a new order. Portfolio - ADD ASSET + ADD CRYPTO @@ -2920,12 +2955,12 @@ Please select a new order. ProView - + Failed to place the order Emir başarısız oldu - + Placed the order Emir başarılı @@ -2973,7 +3008,7 @@ Please select a new order. RecoverSeedModal - + View seed and private keys Seed ve özel anahtarları görüntüle @@ -2983,64 +3018,64 @@ Please select a new order. Seed'i görmek için lütfen parolanızı giriniz. - + Seed - + Backup Seed - + Public Address copied to clipboard - + Cancel İptal - + Incorrect Password Yanlış Parola - - + + copied to clipboard - - + + RPC Password RPC Parolası - + Search a coin. Koin ara. - + Public Address Public Adres - + Private Key copied to clipboard - + Private Key Private Key - + View Görüntüle @@ -3611,22 +3646,9 @@ Please select a new order. Ara - - Add asset - Varlık ekle - - - - SmartChartView - - - Loading market data - Piyasa bilgisi yükleniyor - - - - There is no chart data for this ticker yet - Henüz bu kontrat için grafik verisi yok + + ADD CRYPTO + @@ -3657,7 +3679,7 @@ Please select a new order. CEX Oranı - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 etkin değil - En iyi %2 siparişini seçebilmesi için etkinleştirmek istiyor musunuz ? <br><a href='#'>Evet</a> - <a href='#no'>Hayır</a> @@ -4014,154 +4036,122 @@ Network fees can vary greatly depending on your selected trading pair. Trade - + Swap Takasla - + Instant trading with best orders En iyi emirlerle anında alım satım - + Reset form - + You have no tradable assets - + From Gönderen - - Enter an amount - Bir miktar gir + + Entered amount must be higher than 0. + - + + Select an order. + + + + MAX MAKS - + To Alan - + Pick an order Emri seç - + Price Fiyat - + Better price found: %1. Updating forms. Daha iyi fiyat bulundu: %1. Formları güncelliyor. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. Daha iyi fiyat (%1) bulundu, ancak alınan miktar (%2) mevcut fiyattan (%3) daha düşük. Seçilen emri güncellemek için buraya tıklayın. - + %1 %1 - + Tradable: Al sat yapılabilir: - - Min: %1 - - - - + Pick a coin - + SWAP NOW - + Failed to place the order Emir başarısız oldu - + Placed the order Emir başarılı - - Entered amount must be superior than 0. - Girilen tutar 0'dan büyük olmalıdır. - - - - You must select an order. - Bir emir seçmelisiniz. - - - - Entered amount is below the minimum required by this order: %1 - Girilen miktar, bu emrin gerektirdiği minimum %1 tutarının altında - - - - - %1 needs to be enabled in order to use %2 - - - - - - %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - - - - - %1 balance does not have enough funds to pay the gas of %2 transactions - - - - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + Calculating fee estimate... - + Total %1 fees: Toplam %1 işlem giderleri: - + %2 (%3) %2 (%3) @@ -4204,6 +4194,19 @@ Network fees can vary greatly depending on your selected trading pair. Emir Ver + + TradingViewChart + + + Loading market data + Piyasa bilgisi yükleniyor + + + + There is no chart data for this ticker yet + + + TransactionDetailsModal @@ -4296,22 +4299,22 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Received Alınan - + Sent Gönderilen - + fees işlem ücretleri - + Unconfirmed Onaylanmamış From 5a8440eb360430a65cfb73b581a04e857ff47db5 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 10 Dec 2022 00:41:41 +0800 Subject: [PATCH 018/251] update cancel and close button styles --- assets/themes/Default - Dark/colors.json | 5 +++++ assets/themes/Default - Light/colors.json | 5 +++++ .../Dex/Addressbook/AddAddressForm.qml | 4 ++-- .../Dex/Addressbook/EditContactModal.qml | 2 +- .../Dex/Addressbook/EnableAssetModal.qml | 2 +- .../Dex/Components/CannotEnableCoinModal.qml | 2 +- .../Dex/Components/DexCancelButton.qml | 12 ++++++++++++ atomic_defi_design/Dex/Components/EulaModal.qml | 2 +- atomic_defi_design/Dex/Components/LogModal.qml | 2 +- atomic_defi_design/Dex/Components/PopupManager.qml | 2 +- .../Dex/Components/ZcashParamsModal.qml | 2 +- atomic_defi_design/Dex/Components/qmldir | 1 + atomic_defi_design/Dex/Constants/DexTheme.qml | 5 +++++ atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml | 2 +- .../Dex/Exchange/ProView/TradingInfo/OrderModal.qml | 2 +- .../Exchange/Trade/ConfirmMultiOrderTradeModal.qml | 2 +- .../Dex/Exchange/Trade/ConfirmTradeModal.qml | 2 +- .../Dex/Exchange/Trade/SimpleView/SubHistory.qml | 2 +- .../Dex/Exchange/Trade/SimpleView/SubOrders.qml | 3 ++- atomic_defi_design/Dex/NewUpdateModal.qml | 6 +++--- atomic_defi_design/Dex/Screens/Startup/Login.qml | 4 +--- .../Dex/Settings/AddCustomCoinModal.qml | 2 +- .../Dex/Settings/CamouflagePasswordModal.qml | 2 +- .../Dex/Settings/DeleteWalletModal.qml | 2 +- atomic_defi_design/Dex/Settings/RecoverSeedModal.qml | 2 +- atomic_defi_design/Dex/Themes/CurrentTheme.qml | 5 +++++ atomic_defi_design/Dex/Themes/DefaultTheme.js | 5 +++++ atomic_defi_design/Dex/Themes/ThemeData.qml | 5 +++++ atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml | 2 +- atomic_defi_design/Dex/Wallet/EnableCoinModal.qml | 2 +- atomic_defi_design/Dex/Wallet/ReceiveModal.qml | 2 +- atomic_defi_design/Dex/Wallet/SendModal.qml | 2 +- atomic_defi_design/Dex/Wallet/SendResult.qml | 2 +- .../Dex/Wallet/TransactionDetailsModal.qml | 2 +- 34 files changed, 73 insertions(+), 31 deletions(-) create mode 100644 atomic_defi_design/Dex/Components/DexCancelButton.qml diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 06160e0db3..5b6d4391bb 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -23,6 +23,11 @@ "buttonSecondaryColorHovered": "#4068B929", "buttonSecondaryColorPressed": "#2932546C", + "buttonCancelColorDisabled": "#28375AFF", + "buttonCancelColorEnabled": "#293254FF", + "buttonCancelColorHovered": "#4068B929", + "buttonCancelColorPressed": "#2932546C", + "gradientButtonStartColor": "#4986EAAD", "gradientButtonEndColor": "#5A68E6FF", "gradientButtonDisabledStartColor": "#5A68E64D", diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 83c87d43f7..fcf1f7f9a9 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -20,6 +20,11 @@ "buttonSecondaryColorHovered": "#D7E7FFFF", "buttonSecondaryColorPressed": "#B8D2F9FF", + "buttonCancelColorDisabled": "#D8E3F8FF", + "buttonCancelColorEnabled": "#F0F6FFFF", + "buttonCancelColorHovered": "#D7E7FFFF", + "buttonCancelColorPressed": "#B8D2F9FF", + "gradientButtonStartColor": "#5A68E6FF", "gradientButtonEndColor": "#4986EAAB", "gradientButtonDisabledStartColor": "#CDD0F6FF", diff --git a/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml b/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml index 1560a694b0..cc0502700a 100644 --- a/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml +++ b/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml @@ -176,7 +176,7 @@ Dex.Rectangle Layout.topMargin: 10 Layout.fillWidth: true - Dex.Button + Dex.CancelButton { Layout.preferredWidth: 116 Layout.preferredHeight: 38 @@ -301,7 +301,7 @@ Dex.Rectangle }, // Cancel button - Dex.Button + Dex.CancelButton { Layout.rightMargin: 5 text: qsTr("Cancel") diff --git a/atomic_defi_design/Dex/Addressbook/EditContactModal.qml b/atomic_defi_design/Dex/Addressbook/EditContactModal.qml index 673c52936a..4a4668a15c 100644 --- a/atomic_defi_design/Dex/Addressbook/EditContactModal.qml +++ b/atomic_defi_design/Dex/Addressbook/EditContactModal.qml @@ -283,7 +283,7 @@ Dex.MultipageModal footer: [ - Dex.Button + Dex.CancelButton { Layout.preferredWidth: 199 Layout.preferredHeight: 48 diff --git a/atomic_defi_design/Dex/Addressbook/EnableAssetModal.qml b/atomic_defi_design/Dex/Addressbook/EnableAssetModal.qml index 63317676f5..d8776239ac 100644 --- a/atomic_defi_design/Dex/Addressbook/EnableAssetModal.qml +++ b/atomic_defi_design/Dex/Addressbook/EnableAssetModal.qml @@ -34,7 +34,7 @@ Dex.MultipageModal }, // Cancel button - Dex.Button + Dex.CancelButton { Layout.rightMargin: 5 text: qsTr("Cancel") diff --git a/atomic_defi_design/Dex/Components/CannotEnableCoinModal.qml b/atomic_defi_design/Dex/Components/CannotEnableCoinModal.qml index 19c44755c6..42b54688ff 100644 --- a/atomic_defi_design/Dex/Components/CannotEnableCoinModal.qml +++ b/atomic_defi_design/Dex/Components/CannotEnableCoinModal.qml @@ -32,7 +32,7 @@ MultipageModal close() } } - DefaultButton + DexCancelButton { Layout.fillWidth: true text: qsTr("Cancel") diff --git a/atomic_defi_design/Dex/Components/DexCancelButton.qml b/atomic_defi_design/Dex/Components/DexCancelButton.qml new file mode 100644 index 0000000000..2409171be9 --- /dev/null +++ b/atomic_defi_design/Dex/Components/DexCancelButton.qml @@ -0,0 +1,12 @@ +import QtQuick 2.15 +import App 1.0 +import Dex.Themes 1.0 as Dex +import "../Constants" + +// Add button +DexAppButton { + btnPressedColor: Dex.CurrentTheme.buttonCancelColorPressed + btnHoveredColor: Dex.CurrentTheme.buttonCancelColorHovered + btnEnabledColor: Dex.CurrentTheme.buttonCancelColorEnabled + btnDisabledColor: Dex.CurrentTheme.buttonCancelColorDisabled +} diff --git a/atomic_defi_design/Dex/Components/EulaModal.qml b/atomic_defi_design/Dex/Components/EulaModal.qml index 4191801010..756682741d 100644 --- a/atomic_defi_design/Dex/Components/EulaModal.qml +++ b/atomic_defi_design/Dex/Components/EulaModal.qml @@ -82,7 +82,7 @@ MultipageModal Layout.alignment: Qt.AlignRight - DefaultButton + DexCancelButton { text: close_only ? qsTr("Close") : qsTr("Cancel") radius: 18 diff --git a/atomic_defi_design/Dex/Components/LogModal.qml b/atomic_defi_design/Dex/Components/LogModal.qml index 570f96bf63..c6c8312450 100644 --- a/atomic_defi_design/Dex/Components/LogModal.qml +++ b/atomic_defi_design/Dex/Components/LogModal.qml @@ -21,7 +21,7 @@ MultipageModal { // Buttons footer: [ - DefaultButton { + DexCancelButton { text: qsTr("Close") Layout.fillWidth: true onClicked: root.close() diff --git a/atomic_defi_design/Dex/Components/PopupManager.qml b/atomic_defi_design/Dex/Components/PopupManager.qml index a35025bea7..6fe64bb317 100644 --- a/atomic_defi_design/Dex/Components/PopupManager.qml +++ b/atomic_defi_design/Dex/Components/PopupManager.qml @@ -254,7 +254,7 @@ Popup anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 80 - DexAppButton + DexCancelButton { id: cancelBtn visible: showCancelBtn diff --git a/atomic_defi_design/Dex/Components/ZcashParamsModal.qml b/atomic_defi_design/Dex/Components/ZcashParamsModal.qml index c32d414c4c..30c642674a 100644 --- a/atomic_defi_design/Dex/Components/ZcashParamsModal.qml +++ b/atomic_defi_design/Dex/Components/ZcashParamsModal.qml @@ -78,7 +78,7 @@ Dex.MultipageModal onClicked: Qt.openUrlExternally("https://www.coinbureau.com/education/zcash-ceremony/") }, Item { Layout.fillWidth: true }, - Dex.DefaultButton + Dex.CancelButton { text: qsTr("Close") onClicked: close() diff --git a/atomic_defi_design/Dex/Components/qmldir b/atomic_defi_design/Dex/Components/qmldir index bc894bd813..06f384a7d2 100644 --- a/atomic_defi_design/Dex/Components/qmldir +++ b/atomic_defi_design/Dex/Components/qmldir @@ -20,3 +20,4 @@ TextField 1.0 DefaultTextField.qml TextFieldWithTitle 1.0 TextFieldWithTitle.qml ToolTip 1.0 DefaultTooltip.qml UserIcon 1.0 UserIcon.qml +CancelButton 1.0 DexCancelButton.qml \ No newline at end of file diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 99f7fa2ba6..6aedf64898 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -134,6 +134,11 @@ QtObject { property color buttonSecondaryColorHovered: Dex.CurrentTheme.buttonSecondaryColorHovered property color buttonSecondaryColorPressed: Dex.CurrentTheme.buttonSecondaryColorPressed + property color buttonCancelColorDisabled: Dex.CurrentTheme.buttonCancelColorDisabled + property color buttonCancelColorEnabled: Dex.CurrentTheme.buttonCancelColorEnabled + property color buttonCancelColorHovered: Dex.CurrentTheme.buttonCancelColorHovered + property color buttonCancelColorPressed: Dex.CurrentTheme.buttonCancelColorPressed + property color buttonGradientEnabled1: DexTheme.buttonColorEnabled property color buttonGradientEnabled2: DexTheme.buttonColorEnabled property color buttonGradientTextEnabled: DexTheme.foregroundColor diff --git a/atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml b/atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml index e4bc2646d4..81e9eacc98 100644 --- a/atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml +++ b/atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml @@ -32,7 +32,7 @@ MultipageModal { } footer: [ - DefaultButton { + DexCancelButton { Layout.fillWidth: true text: qsTr("Close") onClicked: root.close() diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml index 381a7d7bc0..6768ce4f8d 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml @@ -289,7 +289,7 @@ MultipageModal Layout.fillWidth: true }, - DefaultButton + DexCancelButton { id: close_order_button text: qsTr("Close") diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml index be005b5314..778dff84be 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml @@ -101,7 +101,7 @@ MultipageModal { // Buttons footer: [ - DefaultButton { + DexCancelButton { text: qsTr("Cancel") Layout.fillWidth: true onClicked: root.close() diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index 0793bdbc31..6f9e61be86 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -396,7 +396,7 @@ MultipageModal [ Item { Layout.fillWidth: true }, - DefaultButton + DexCancelButton { text: qsTr("Cancel") padding: 10 diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml index b6171ada9c..74ed4284af 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml @@ -252,7 +252,7 @@ Item anchors.fill: parent spacing: 15 - DefaultButton + DexCancelButton { Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml index 680331ad66..021da04f71 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml @@ -245,7 +245,7 @@ Item { anchors.fill: parent spacing: 15 - DefaultButton + DexCancelButton { Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter @@ -253,6 +253,7 @@ Item text: qsTr("Cancel") onClicked: _subOrdersRoot.displayFilter = false } + DefaultButton { Layout.fillWidth: true diff --git a/atomic_defi_design/Dex/NewUpdateModal.qml b/atomic_defi_design/Dex/NewUpdateModal.qml index 4f9d7e3907..eccb4867c4 100644 --- a/atomic_defi_design/Dex/NewUpdateModal.qml +++ b/atomic_defi_design/Dex/NewUpdateModal.qml @@ -53,7 +53,7 @@ Dex.MultipageModal footer: [ Item { Layout.fillWidth: true }, - Dex.DefaultButton + Dex.CancelButton { text: qsTr("Close") onClicked: close() @@ -75,7 +75,7 @@ Dex.MultipageModal footer: [ Item { Layout.fillWidth: true }, - Dex.DefaultButton + Dex.CancelButton { text: qsTr("Close") onClicked: close() @@ -134,7 +134,7 @@ Dex.MultipageModal footer: [ Item { Layout.fillWidth: true }, - Dex.DefaultButton + Dex.CancelButton { text: qsTr("Close") onClicked: close() diff --git a/atomic_defi_design/Dex/Screens/Startup/Login.qml b/atomic_defi_design/Dex/Screens/Startup/Login.qml index 115fcf981b..239b1781e1 100644 --- a/atomic_defi_design/Dex/Screens/Startup/Login.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Login.qml @@ -115,14 +115,12 @@ SetupPage visible: false } - DexAppButton + DexCancelButton { text: qsTr("Cancel") - color: containsMouse ? Dex.CurrentTheme.buttonColorHovered : 'transparent' height: 25 radius: 20 width: 100 - border.color: 'transparent' Layout.alignment: Qt.AlignHCenter font: Qt.font( { diff --git a/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml b/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml index da91a1695a..e8c63e0151 100644 --- a/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml +++ b/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml @@ -146,7 +146,7 @@ MultipageModal // Buttons footer: [ - DefaultButton + DexCancelButton { text: qsTr("Cancel") Layout.preferredWidth: 220 diff --git a/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml b/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml index e0f83cd7a3..e1fe28e331 100644 --- a/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml +++ b/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml @@ -78,7 +78,7 @@ MultipageModal // Buttons footer: [ - DexAppButton + DexCancelButton { text: qsTr("Cancel") leftPadding: 40 diff --git a/atomic_defi_design/Dex/Settings/DeleteWalletModal.qml b/atomic_defi_design/Dex/Settings/DeleteWalletModal.qml index b126dab5e5..96f8ea01a6 100644 --- a/atomic_defi_design/Dex/Settings/DeleteWalletModal.qml +++ b/atomic_defi_design/Dex/Settings/DeleteWalletModal.qml @@ -70,7 +70,7 @@ MultipageModal { // Buttons footer: [ - DefaultButton { + DexCancelButton { text: qsTr("Cancel") Layout.fillWidth: true onClicked: root.close() diff --git a/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml b/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml index 0b73423286..d45cf1b618 100644 --- a/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml +++ b/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml @@ -85,7 +85,7 @@ MultipageModal { Layout.preferredWidth: parent.width Layout.topMargin: 30 - DefaultButton + DexCancelButton { text: qsTr("Cancel") Layout.preferredWidth: parent.width / 100 * 48 diff --git a/atomic_defi_design/Dex/Themes/CurrentTheme.qml b/atomic_defi_design/Dex/Themes/CurrentTheme.qml index 146d3a90bd..94ef9960d9 100644 --- a/atomic_defi_design/Dex/Themes/CurrentTheme.qml +++ b/atomic_defi_design/Dex/Themes/CurrentTheme.qml @@ -110,6 +110,11 @@ ThemeData buttonSecondaryColorHovered = Dex.Color.argbStrFromRgbaStr(themeData.buttonSecondaryColorHovered || defaultTheme.buttonSecondaryColorHovered); buttonSecondaryColorPressed = Dex.Color.argbStrFromRgbaStr(themeData.buttonSecondaryColorPressed || defaultTheme.buttonSecondaryColorPressed); + buttonCancelColorDisabled = Dex.Color.argbStrFromRgbaStr(themeData.buttonCancelColorDisabled || defaultTheme.buttonCancelColorDisabled); + buttonCancelColorEnabled = Dex.Color.argbStrFromRgbaStr(themeData.buttonCancelColorEnabled || defaultTheme.buttonCancelColorEnabled); + buttonCancelColorHovered = Dex.Color.argbStrFromRgbaStr(themeData.buttonCancelColorHovered || defaultTheme.buttonCancelColorHovered); + buttonCancelColorPressed = Dex.Color.argbStrFromRgbaStr(themeData.buttonCancelColorPressed || defaultTheme.buttonCancelColorPressed); + gradientButtonStartColor = Dex.Color.argbStrFromRgbaStr(themeData.gradientButtonStartColor || defaultTheme.gradientButtonStartColor); gradientButtonEndColor = Dex.Color.argbStrFromRgbaStr(themeData.gradientButtonEndColor || defaultTheme.gradientButtonEndColor); gradientButtonDisabledStartColor = Dex.Color.argbStrFromRgbaStr(themeData.gradientButtonDisabledStartColor || defaultTheme.gradientButtonDisabledStartColor); diff --git a/atomic_defi_design/Dex/Themes/DefaultTheme.js b/atomic_defi_design/Dex/Themes/DefaultTheme.js index f8475eda3e..b26ae4cc50 100644 --- a/atomic_defi_design/Dex/Themes/DefaultTheme.js +++ b/atomic_defi_design/Dex/Themes/DefaultTheme.js @@ -26,6 +26,11 @@ function getHardcoded() buttonSecondaryColorHovered: "#D7E7FFFF", buttonSecondaryColorPressed: "#B8D2F9FF", + buttonCancelColorDisabled: "#D8E3F8FF", + buttonCancelColorEnabled: "#F0F6FFFF", + buttonCancelColorHovered: "#D7E7FFFF", + buttonCancelColorPressed: "#B8D2F9FF", + gradientButtonStartColor: "#5A68E6FF", gradientButtonEndColor: "#4986EAAB", gradientButtonDisabledStartColor: "#CDD0F6FF", diff --git a/atomic_defi_design/Dex/Themes/ThemeData.qml b/atomic_defi_design/Dex/Themes/ThemeData.qml index 28c02819a2..a138eb816c 100644 --- a/atomic_defi_design/Dex/Themes/ThemeData.qml +++ b/atomic_defi_design/Dex/Themes/ThemeData.qml @@ -25,6 +25,11 @@ QtObject property color buttonSecondaryColorHovered property color buttonSecondaryColorPressed + property color buttonCancelColorDisabled + property color buttonCancelColorEnabled + property color buttonCancelColorHovered + property color buttonCancelColorPressed + property color gradientButtonStartColor property color gradientButtonEndColor property color gradientButtonDisabledStartColor diff --git a/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml b/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml index 4222e0189f..829fae9e59 100644 --- a/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml +++ b/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml @@ -414,7 +414,7 @@ MultipageModal // Buttons footer: [ - DexAppButton + DexCancelButton { text: qsTr("Cancel") leftPadding: 40 diff --git a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml index 332f7049b0..9f8310a361 100644 --- a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml +++ b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml @@ -263,7 +263,7 @@ MultipageModal footer: [ - DefaultButton + DexCancelButton { Layout.preferredWidth: 199 text: qsTr("Cancel") diff --git a/atomic_defi_design/Dex/Wallet/ReceiveModal.qml b/atomic_defi_design/Dex/Wallet/ReceiveModal.qml index cb91aded2d..62c273f652 100644 --- a/atomic_defi_design/Dex/Wallet/ReceiveModal.qml +++ b/atomic_defi_design/Dex/Wallet/ReceiveModal.qml @@ -55,7 +55,7 @@ MultipageModal footer: [ Item { Layout.fillWidth: true }, - DefaultButton + DexCancelButton { text: qsTr("Close") Layout.fillWidth: true diff --git a/atomic_defi_design/Dex/Wallet/SendModal.qml b/atomic_defi_design/Dex/Wallet/SendModal.qml index c521d97e5e..6ab98888e3 100644 --- a/atomic_defi_design/Dex/Wallet/SendModal.qml +++ b/atomic_defi_design/Dex/Wallet/SendModal.qml @@ -733,7 +733,7 @@ MultipageModal Layout.alignment: Qt.AlignHCenter Layout.topMargin: 20 - DefaultButton + DexCancelButton { text: qsTr("Cancel") diff --git a/atomic_defi_design/Dex/Wallet/SendResult.qml b/atomic_defi_design/Dex/Wallet/SendResult.qml index 41b06be0cb..25f0a1884f 100644 --- a/atomic_defi_design/Dex/Wallet/SendResult.qml +++ b/atomic_defi_design/Dex/Wallet/SendResult.qml @@ -105,7 +105,7 @@ MultipageModalContent // Buttons footer: [ - DexButton + DexCancelButton { Layout.fillWidth: true text: qsTr("Close") diff --git a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml index 006b51d45a..248992405b 100644 --- a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml +++ b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml @@ -147,7 +147,7 @@ MultipageModal // Buttons footer: [ - DefaultButton + DexCancelButton { Layout.fillWidth: true text: qsTr("Close") From c5d24518e079a466f723219f6293a3bd31591b75 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 10 Dec 2022 01:49:58 +0800 Subject: [PATCH 019/251] update warning icon & button gradient --- .../Dex/Components/DefaultAlertIcon.qml | 12 ++++++------ atomic_defi_design/Dex/Components/DexCheckBox.qml | 1 + .../Dex/Exchange/Trade/ConfirmTradeModal.qml | 5 +++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/atomic_defi_design/Dex/Components/DefaultAlertIcon.qml b/atomic_defi_design/Dex/Components/DefaultAlertIcon.qml index 696a7f50b3..b980ab0c94 100644 --- a/atomic_defi_design/Dex/Components/DefaultAlertIcon.qml +++ b/atomic_defi_design/Dex/Components/DefaultAlertIcon.qml @@ -4,20 +4,20 @@ import Qaterial 1.0 as Qaterial import "../Constants" as Constants import App 1.0 -Qaterial.Icon + +DefaultImage { property int iconSize: 24 property string tooltipText: "" - property var iconColor: "gold" - property var iconColorHover: "yellow" - icon: Qaterial.Icons.alert - size: iconSize + source: General.image_path + "warning.svg" + height: iconSize + width: iconSize + opacity: alertArea.containsMouse ? 0.9 : 1 anchors.left: parent.left anchors.leftMargin: iconSize / 2 anchors.rightMargin: iconSize / 2 anchors.verticalCenter: parent.verticalCenter - color: alertArea.containsMouse ? iconColorHover : iconColor DexMouseArea { diff --git a/atomic_defi_design/Dex/Components/DexCheckBox.qml b/atomic_defi_design/Dex/Components/DexCheckBox.qml index b471d0d922..344df181ad 100644 --- a/atomic_defi_design/Dex/Components/DexCheckBox.qml +++ b/atomic_defi_design/Dex/Components/DexCheckBox.qml @@ -15,6 +15,7 @@ CheckBox property alias label: _label property alias boxWidth: _indicator.implicitWidth property alias boxHeight: _indicator.implicitHeight + property alias boxRadius: _indicator.radius property alias mouseArea: mouseArea property color textColor: Dex.CurrentTheme.foregroundColor property int labelWidth: 0 diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index 6f9e61be86..5be326653b 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -17,8 +17,8 @@ MultipageModal id: root readonly property var fees: API.app.trading_pg.fees width: 720 - horizontalPadding: 30 - verticalPadding: 30 + horizontalPadding: 20 + verticalPadding: 20 closePolicy: Popup.NoAutoClose MultipageModalContent @@ -95,6 +95,7 @@ MultipageModal spacing: 2 boxWidth: 16 boxHeight: 16 + boxRadius: 8 label.wrapMode: Label.NoWrap text: qsTr("Trade price is more than 50% different to CEX! Confirm?") font: DexTypo.caption From b43538936b1b4eab11439add8028965138a3439b Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 10 Dec 2022 02:11:30 +0800 Subject: [PATCH 020/251] add warning.svg --- atomic_defi_design/assets/images/warning.svg | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 atomic_defi_design/assets/images/warning.svg diff --git a/atomic_defi_design/assets/images/warning.svg b/atomic_defi_design/assets/images/warning.svg new file mode 100644 index 0000000000..2bfc1aa8b6 --- /dev/null +++ b/atomic_defi_design/assets/images/warning.svg @@ -0,0 +1,27 @@ + + + + + + + + + + From 762887df3b8e53cc0bfc36acd23cd0ef33a08ece Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 11 Dec 2022 00:24:36 +0800 Subject: [PATCH 021/251] fix portfolio assets price text color --- atomic_defi_design/Dex/Portfolio/AssetsList.qml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/atomic_defi_design/Dex/Portfolio/AssetsList.qml b/atomic_defi_design/Dex/Portfolio/AssetsList.qml index 480865d617..9bf89b1623 100644 --- a/atomic_defi_design/Dex/Portfolio/AssetsList.qml +++ b/atomic_defi_design/Dex/Portfolio/AssetsList.qml @@ -203,7 +203,6 @@ Dex.DexListView return parseFloat(balance).toFixed(8) } - color: text_value == parseFloat(balance).toFixed(8) ? Qt.darker(Dex.DexTheme.foregroundColor, 0.8) : Dex.DexTheme.warningColor privacy: true } @@ -217,8 +216,6 @@ Dex.DexListView font: Dex.DexTypo.body2 text_value: Dex.General.formatFiat("", main_currency_balance, Dex.API.app.settings_pg.current_currency) - - color: Qt.darker(Dex.DexTheme.foregroundColor, 0.8) privacy: true } @@ -252,7 +249,6 @@ Dex.DexListView text_value: Dex.General.formatFiat('', main_currency_price_for_one_unit, Dex.API.app.settings_pg.current_currency, 6) - color: Dex.DexTheme.colorThemeDarkLight } Item // Price Provider From 44e1f918941fdc285450cb8e0769fab7c57e49b2 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 11 Dec 2022 02:03:57 +0800 Subject: [PATCH 022/251] dex page styles and seed word selection buttons --- .../ProView/TradingInfo/OrdersPage.qml | 24 ++-- .../Dex/Exchange/Trade/SimpleView/Main.qml | 125 ++++++++++-------- .../Dex/Screens/Startup/NewWallet.qml | 7 +- 3 files changed, 84 insertions(+), 72 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml index 5ff799eda8..abe3c7e0df 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml @@ -115,6 +115,18 @@ Item { } } + DefaultButton + { + visible: !root.is_history + enabled: list_model.length > 0 + Layout.preferredHeight: 29 + radius: 7 + label.font: DexTypo.body2 + text: qsTr("Cancel All") + iconSource: Qaterial.Icons.close + onClicked: API.app.trading_pg.orders.cancel_order(list_model_proxy.get_filtered_ids()) + } + DefaultText { color: Dex.CurrentTheme.foregroundColor2 @@ -143,18 +155,6 @@ Item { text: qsTr("Apply Filter") onClicked: list_model_proxy.apply_all_filtering() } - - DefaultButton - { - visible: !root.is_history - enabled: API.app.orders_mdl.length > 0 - Layout.preferredHeight: 29 - radius: 7 - label.font: DexTypo.body2 - text: qsTr("Cancel All") - iconSource: Qaterial.Icons.close - onClicked: API.app.trading_pg.orders.cancel_order(list_model_proxy.get_filtered_ids()) - } } RowLayout diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Main.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Main.qml index ee73c2f269..649d133c0b 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Main.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Main.qml @@ -40,76 +40,87 @@ Item spacing: 30 anchors.horizontalCenter: parent.horizontalCenter - Item // Sub-pages Tabs Selector + Rectangle // Tabs Border { anchors.horizontalCenter: parent.horizontalCenter - width: _selectedTabMarker.width * 3 - height: 30 - - Rectangle // Selected Tab Rectangle + width: _selectedTabMarker.width * 3 + 8 + height: 38 + border.color: Dex.CurrentTheme.gradientButtonStartColor + border.width: 1 + color: Dex.CurrentTheme.floatingBackgroundColor + radius: 19 + + Item // Sub-pages Tabs Selector { - id: _selectedTabMarker + anchors.centerIn: parent + width: _selectedTabMarker.width * 3 + height: 30 - function update() // Updates transform according to selected sub-page. + Rectangle // Selected Tab Rectangle { - switch (currentSubPage) + id: _selectedTabMarker + + function update() // Updates transform according to selected sub-page. { - case subPages.Trade: - x = 0 - break; - case subPages.Orders: - x = (parent.width / 3) - orders_view.update() - break; - case subPages.History: - x = (parent.width / 3) *2 - history_view.update() - break; + switch (currentSubPage) + { + case subPages.Trade: + x = 0 + break; + case subPages.Orders: + x = (parent.width / 3) + orders_view.update() + break; + case subPages.History: + x = (parent.width / 3) * 2 + history_view.update() + break; + } } - } - anchors.verticalCenter: parent.verticalCenter - height: parent.height - width: 108 - radius: 15 - color: Dex.CurrentTheme.tabSelectedColor - - Behavior on x { NumberAnimation { duration: 150 } } - } + anchors.verticalCenter: parent.verticalCenter + height: parent.height + width: 108 + radius: 15 + color: Dex.CurrentTheme.tabSelectedColor - RowLayout - { - anchors.fill: parent - spacing: 0 - - ClickableText - { - id: _tradeText - Layout.preferredWidth: parent.width / 3 - Layout.fillHeight: true - text: qsTr("Trade") - font.pixelSize: Constants.Style.textSize - onClicked: if (currentSubPage !== subPages.Trade) currentSubPage = subPages.Trade + Behavior on x { NumberAnimation { duration: 150 } } } - ClickableText + RowLayout { - id: _ordersText - Layout.preferredWidth: parent.width / 3 - Layout.fillHeight: true - text: qsTr("Orders") - font.pixelSize: Constants.Style.textSize - onClicked: if (currentSubPage !== subPages.Orders) currentSubPage = subPages.Orders - } + anchors.fill: parent + spacing: 0 - ClickableText - { - id: _historyText - Layout.preferredWidth: parent.width / 3 - Layout.fillHeight: true - text: qsTr("History") - font.pixelSize: Constants.Style.textSize - onClicked: if (currentSubPage !== subPages.History) currentSubPage = subPages.History + ClickableText + { + id: _tradeText + Layout.preferredWidth: parent.width / 3 + Layout.fillHeight: true + text: qsTr("Swap") + font.pixelSize: Constants.Style.textSize + onClicked: if (currentSubPage !== subPages.Trade) currentSubPage = subPages.Trade + } + + ClickableText + { + id: _ordersText + Layout.preferredWidth: parent.width / 3 + Layout.fillHeight: true + text: qsTr("Orders") + font.pixelSize: Constants.Style.textSize + onClicked: if (currentSubPage !== subPages.Orders) currentSubPage = subPages.Orders + } + + ClickableText + { + id: _historyText + Layout.preferredWidth: parent.width / 3 + Layout.fillHeight: true + text: qsTr("History") + font.pixelSize: Constants.Style.textSize + onClicked: if (currentSubPage !== subPages.History) currentSubPage = subPages.History + } } } } diff --git a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml index c6d4ab60ad..ef22a5bbd6 100644 --- a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml @@ -569,7 +569,8 @@ SetupPage width: (_insideFlow2.width - 30) / 4 text: modelData ?? "" radius: 20 - color: Dex.CurrentTheme.accentColor + btnEnabledColor: Dex.CurrentTheme.buttonColorEnabled + btnHoveredColor: Dex.CurrentTheme.accentColor font: DexTypo.body2 onClicked: @@ -610,9 +611,9 @@ SetupPage { x: 5 height: 40 - width: 60 + width: 50 radius: 20 - color: Dex.CurrentTheme.accentColor + color: Dex.CurrentTheme.inputLeftIconBackgroundColor anchors.verticalCenter: parent.verticalCenter DefaultText From f4605fd52bdadefe8f072f348c67dd42d27baedb Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 12 Dec 2022 19:23:45 +0800 Subject: [PATCH 023/251] DexCancelButton -> CancelButton --- .../Dex/Components/{DexCancelButton.qml => CancelButton.qml} | 0 atomic_defi_design/Dex/Components/CannotEnableCoinModal.qml | 2 +- atomic_defi_design/Dex/Components/EulaModal.qml | 2 +- atomic_defi_design/Dex/Components/LogModal.qml | 2 +- atomic_defi_design/Dex/Components/PopupManager.qml | 2 +- atomic_defi_design/Dex/Components/qmldir | 2 +- atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml | 2 +- .../Dex/Exchange/ProView/TradingInfo/OrderModal.qml | 2 +- .../Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml | 2 +- atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml | 2 +- atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml | 2 +- atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml | 2 +- atomic_defi_design/Dex/Screens/Startup/Login.qml | 2 +- atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml | 2 +- atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml | 2 +- atomic_defi_design/Dex/Settings/DeleteWalletModal.qml | 2 +- atomic_defi_design/Dex/Settings/RecoverSeedModal.qml | 2 +- atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml | 2 +- atomic_defi_design/Dex/Wallet/EnableCoinModal.qml | 2 +- atomic_defi_design/Dex/Wallet/ReceiveModal.qml | 2 +- atomic_defi_design/Dex/Wallet/SendModal.qml | 2 +- atomic_defi_design/Dex/Wallet/SendResult.qml | 2 +- atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml | 2 +- 23 files changed, 22 insertions(+), 22 deletions(-) rename atomic_defi_design/Dex/Components/{DexCancelButton.qml => CancelButton.qml} (100%) diff --git a/atomic_defi_design/Dex/Components/DexCancelButton.qml b/atomic_defi_design/Dex/Components/CancelButton.qml similarity index 100% rename from atomic_defi_design/Dex/Components/DexCancelButton.qml rename to atomic_defi_design/Dex/Components/CancelButton.qml diff --git a/atomic_defi_design/Dex/Components/CannotEnableCoinModal.qml b/atomic_defi_design/Dex/Components/CannotEnableCoinModal.qml index 42b54688ff..dad42aa5ac 100644 --- a/atomic_defi_design/Dex/Components/CannotEnableCoinModal.qml +++ b/atomic_defi_design/Dex/Components/CannotEnableCoinModal.qml @@ -32,7 +32,7 @@ MultipageModal close() } } - DexCancelButton + CancelButton { Layout.fillWidth: true text: qsTr("Cancel") diff --git a/atomic_defi_design/Dex/Components/EulaModal.qml b/atomic_defi_design/Dex/Components/EulaModal.qml index 756682741d..ad71f04fab 100644 --- a/atomic_defi_design/Dex/Components/EulaModal.qml +++ b/atomic_defi_design/Dex/Components/EulaModal.qml @@ -82,7 +82,7 @@ MultipageModal Layout.alignment: Qt.AlignRight - DexCancelButton + CancelButton { text: close_only ? qsTr("Close") : qsTr("Cancel") radius: 18 diff --git a/atomic_defi_design/Dex/Components/LogModal.qml b/atomic_defi_design/Dex/Components/LogModal.qml index c6c8312450..492856d7ef 100644 --- a/atomic_defi_design/Dex/Components/LogModal.qml +++ b/atomic_defi_design/Dex/Components/LogModal.qml @@ -21,7 +21,7 @@ MultipageModal { // Buttons footer: [ - DexCancelButton { + CancelButton { text: qsTr("Close") Layout.fillWidth: true onClicked: root.close() diff --git a/atomic_defi_design/Dex/Components/PopupManager.qml b/atomic_defi_design/Dex/Components/PopupManager.qml index 6fe64bb317..0d24426e75 100644 --- a/atomic_defi_design/Dex/Components/PopupManager.qml +++ b/atomic_defi_design/Dex/Components/PopupManager.qml @@ -254,7 +254,7 @@ Popup anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 80 - DexCancelButton + CancelButton { id: cancelBtn visible: showCancelBtn diff --git a/atomic_defi_design/Dex/Components/qmldir b/atomic_defi_design/Dex/Components/qmldir index 06f384a7d2..dab8794241 100644 --- a/atomic_defi_design/Dex/Components/qmldir +++ b/atomic_defi_design/Dex/Components/qmldir @@ -20,4 +20,4 @@ TextField 1.0 DefaultTextField.qml TextFieldWithTitle 1.0 TextFieldWithTitle.qml ToolTip 1.0 DefaultTooltip.qml UserIcon 1.0 UserIcon.qml -CancelButton 1.0 DexCancelButton.qml \ No newline at end of file +CancelButton 1.0 CancelButton.qml \ No newline at end of file diff --git a/atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml b/atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml index 81e9eacc98..2213fb772f 100644 --- a/atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml +++ b/atomic_defi_design/Dex/Dashboard/FatalErrorModal.qml @@ -32,7 +32,7 @@ MultipageModal { } footer: [ - DexCancelButton { + CancelButton { Layout.fillWidth: true text: qsTr("Close") onClicked: root.close() diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml index 6768ce4f8d..25fa8d93cb 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml @@ -289,7 +289,7 @@ MultipageModal Layout.fillWidth: true }, - DexCancelButton + CancelButton { id: close_order_button text: qsTr("Close") diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml index 778dff84be..fece784f8e 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml @@ -101,7 +101,7 @@ MultipageModal { // Buttons footer: [ - DexCancelButton { + CancelButton { text: qsTr("Cancel") Layout.fillWidth: true onClicked: root.close() diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index 5be326653b..c0aae025d4 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -397,7 +397,7 @@ MultipageModal [ Item { Layout.fillWidth: true }, - DexCancelButton + CancelButton { text: qsTr("Cancel") padding: 10 diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml index 74ed4284af..917e515db6 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml @@ -252,7 +252,7 @@ Item anchors.fill: parent spacing: 15 - DexCancelButton + CancelButton { Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml index 021da04f71..7b26d92157 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml @@ -245,7 +245,7 @@ Item { anchors.fill: parent spacing: 15 - DexCancelButton + CancelButton { Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter diff --git a/atomic_defi_design/Dex/Screens/Startup/Login.qml b/atomic_defi_design/Dex/Screens/Startup/Login.qml index 239b1781e1..74401c45e2 100644 --- a/atomic_defi_design/Dex/Screens/Startup/Login.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Login.qml @@ -115,7 +115,7 @@ SetupPage visible: false } - DexCancelButton + CancelButton { text: qsTr("Cancel") height: 25 diff --git a/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml b/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml index e8c63e0151..d3dd686fed 100644 --- a/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml +++ b/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml @@ -146,7 +146,7 @@ MultipageModal // Buttons footer: [ - DexCancelButton + CancelButton { text: qsTr("Cancel") Layout.preferredWidth: 220 diff --git a/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml b/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml index e1fe28e331..a798ff68dc 100644 --- a/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml +++ b/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml @@ -78,7 +78,7 @@ MultipageModal // Buttons footer: [ - DexCancelButton + CancelButton { text: qsTr("Cancel") leftPadding: 40 diff --git a/atomic_defi_design/Dex/Settings/DeleteWalletModal.qml b/atomic_defi_design/Dex/Settings/DeleteWalletModal.qml index 96f8ea01a6..c19c6854f9 100644 --- a/atomic_defi_design/Dex/Settings/DeleteWalletModal.qml +++ b/atomic_defi_design/Dex/Settings/DeleteWalletModal.qml @@ -70,7 +70,7 @@ MultipageModal { // Buttons footer: [ - DexCancelButton { + CancelButton { text: qsTr("Cancel") Layout.fillWidth: true onClicked: root.close() diff --git a/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml b/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml index d45cf1b618..39253a7786 100644 --- a/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml +++ b/atomic_defi_design/Dex/Settings/RecoverSeedModal.qml @@ -85,7 +85,7 @@ MultipageModal { Layout.preferredWidth: parent.width Layout.topMargin: 30 - DexCancelButton + CancelButton { text: qsTr("Cancel") Layout.preferredWidth: parent.width / 100 * 48 diff --git a/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml b/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml index 829fae9e59..f067a7886f 100644 --- a/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml +++ b/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml @@ -414,7 +414,7 @@ MultipageModal // Buttons footer: [ - DexCancelButton + CancelButton { text: qsTr("Cancel") leftPadding: 40 diff --git a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml index 9f8310a361..4ab058acca 100644 --- a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml +++ b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml @@ -263,7 +263,7 @@ MultipageModal footer: [ - DexCancelButton + CancelButton { Layout.preferredWidth: 199 text: qsTr("Cancel") diff --git a/atomic_defi_design/Dex/Wallet/ReceiveModal.qml b/atomic_defi_design/Dex/Wallet/ReceiveModal.qml index 62c273f652..bf28c7b6c6 100644 --- a/atomic_defi_design/Dex/Wallet/ReceiveModal.qml +++ b/atomic_defi_design/Dex/Wallet/ReceiveModal.qml @@ -55,7 +55,7 @@ MultipageModal footer: [ Item { Layout.fillWidth: true }, - DexCancelButton + CancelButton { text: qsTr("Close") Layout.fillWidth: true diff --git a/atomic_defi_design/Dex/Wallet/SendModal.qml b/atomic_defi_design/Dex/Wallet/SendModal.qml index 6ab98888e3..3ae2949107 100644 --- a/atomic_defi_design/Dex/Wallet/SendModal.qml +++ b/atomic_defi_design/Dex/Wallet/SendModal.qml @@ -733,7 +733,7 @@ MultipageModal Layout.alignment: Qt.AlignHCenter Layout.topMargin: 20 - DexCancelButton + CancelButton { text: qsTr("Cancel") diff --git a/atomic_defi_design/Dex/Wallet/SendResult.qml b/atomic_defi_design/Dex/Wallet/SendResult.qml index 25f0a1884f..deb97babdc 100644 --- a/atomic_defi_design/Dex/Wallet/SendResult.qml +++ b/atomic_defi_design/Dex/Wallet/SendResult.qml @@ -105,7 +105,7 @@ MultipageModalContent // Buttons footer: [ - DexCancelButton + CancelButton { Layout.fillWidth: true text: qsTr("Close") diff --git a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml index 248992405b..c05e7463ef 100644 --- a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml +++ b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml @@ -147,7 +147,7 @@ MultipageModal // Buttons footer: [ - DexCancelButton + CancelButton { Layout.fillWidth: true text: qsTr("Close") From f477d2f2d49713772f3b09ea43ccc09fb623abdf Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 19 Feb 2023 22:56:25 +0800 Subject: [PATCH 024/251] fix dex pro filter layout --- .../ProView/TradingInfo/OrdersPage.qml | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml index abe3c7e0df..8be325adbb 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml @@ -101,6 +101,30 @@ Item { onClicked: settings.visible = !settings.visible } + DefaultButton + { + visible: settings.visible && root.is_history + Layout.preferredHeight: 29 + enabled: list_model_proxy.can_i_apply_filtering + radius: 7 + label.font: DexTypo.body2 + text: qsTr("Apply Filter") + onClicked: list_model_proxy.apply_all_filtering() + } + + DefaultText + { + color: Dex.CurrentTheme.foregroundColor2 + font: DexTypo.caption + visible: !settings.visible + text: qsTr("Filter") + ": %1 / %2
%3: %4 - %5".arg(combo_base.currentTicker).arg(combo_rel.currentTicker).arg(qsTr("Date")).arg(min_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy-MM-dd")).arg(max_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy-MM-dd")) + } + + Item + { + Layout.fillWidth: true + } + DefaultButton { visible: root.is_history @@ -117,7 +141,7 @@ Item { DefaultButton { - visible: !root.is_history + visible: !root.is_history && list_model.length > 0 enabled: list_model.length > 0 Layout.preferredHeight: 29 radius: 7 @@ -126,14 +150,6 @@ Item { iconSource: Qaterial.Icons.close onClicked: API.app.trading_pg.orders.cancel_order(list_model_proxy.get_filtered_ids()) } - - DefaultText - { - color: Dex.CurrentTheme.foregroundColor2 - font: DexTypo.caption - visible: !settings.visible - text: qsTr("Filter") + ": %1 / %2
%3: %4 - %5".arg(combo_base.currentTicker).arg(combo_rel.currentTicker).arg(qsTr("Date")).arg(min_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy-MM-dd")).arg(max_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy-MM-dd")) - } } ColumnLayout @@ -142,21 +158,7 @@ Item { visible: false spacing: 8 - RowLayout - { - spacing: 10 - DefaultButton - { - visible: root.is_history - enabled: list_model_proxy.can_i_apply_filtering - Layout.preferredHeight: 29 - radius: 7 - label.font: DexTypo.body2 - text: qsTr("Apply Filter") - onClicked: list_model_proxy.apply_all_filtering() - } - } - + // Coin Selection comboboxes RowLayout { Layout.alignment: Qt.AlignHCenter From 10201e7fe1b7454d41e146a6c76ff96fc28f9dd9 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 4 Mar 2023 23:03:17 +0800 Subject: [PATCH 025/251] 0.5.7 -> 0.5.7.1 --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- CMakeLists.txt | 2 +- ci_tools_atomic_dex/installer/osx/config/config.xml.in | 2 +- .../com.komodoplatform.atomicdex/meta/package.xml.in | 4 ++-- ci_tools_atomic_dex/installer/windows/config/config.xml.in | 2 +- .../com.komodoplatform.atomicdex/meta/package.xml.in | 4 ++-- cmake/install/macos/dex_install.cmake | 4 ++-- src/core/atomicdex/version/version.hpp | 6 +++--- vcpkg.json | 2 +- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a6c06597fa..a31d2a73f0 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,7 +26,7 @@ Please describe what you expected to happen. **Operating Environment(s):** - OS: [e.g. Windows/OSX/Linux. If Linux, include distro. ] - OS version: [e.g. 7/10/11, 10.13/10.15, 18.04/20.04 ] - - AtomicDEX Version: [e.g. 0.5.7] + - AtomicDEX Version: [e.g. 0.5.7.1] - Build branch: [e.g. master/dev] diff --git a/CMakeLists.txt b/CMakeLists.txt index edf592568b..88055e70cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ include(vcpkg_prerequisites) include(qt_prerequisites) include(cfg_hash) -project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.7) +project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.7.1) message(STATUS "${PROJECT_NAME} is version ${PROJECT_VERSION}") include(cmake_default_options) diff --git a/ci_tools_atomic_dex/installer/osx/config/config.xml.in b/ci_tools_atomic_dex/installer/osx/config/config.xml.in index 7b601889c4..c3d57543ce 100644 --- a/ci_tools_atomic_dex/installer/osx/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/osx/config/config.xml.in @@ -1,7 +1,7 @@ ${DEX_DISPLAY_NAME} - 0.5.7 + 0.5.7.1 ${DEX_DISPLAY_NAME} Installer ${DEX_WEBSITE} ${DEX_COMPANY} diff --git a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in index 06109f6ba9..3c71c1edf4 100644 --- a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.7 - 2022-11-09 + 0.5.7.1 + 2023-06-03 diff --git a/ci_tools_atomic_dex/installer/windows/config/config.xml.in b/ci_tools_atomic_dex/installer/windows/config/config.xml.in index 2a33ec7019..abcfc8ed14 100644 --- a/ci_tools_atomic_dex/installer/windows/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/windows/config/config.xml.in @@ -1,7 +1,7 @@ @DEX_DISPLAY_NAME@ - 0.5.7 + 0.5.7.1 @DEX_DISPLAY_NAME@ Installer @DEX_WEBSITE@ @DEX_COMPANY@ diff --git a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in index 1a0b0bc1c3..128fdd7f46 100644 --- a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.7 - 2022-10-24 + 0.5.7.1 + 2023-03-06 diff --git a/cmake/install/macos/dex_install.cmake b/cmake/install/macos/dex_install.cmake index c472d7684d..916e682cfa 100644 --- a/cmake/install/macos/dex_install.cmake +++ b/cmake/install/macos/dex_install.cmake @@ -4,8 +4,8 @@ if (APPLE) MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}" RESOURCE ${ICON} MACOSX_BUNDLE_ICON_FILE dex-logo - MACOSX_BUNDLE_SHORT_VERSION_STRING 0.5.7 - MACOSX_BUNDLE_LONG_VERSION_STRING 0.5.7 + MACOSX_BUNDLE_SHORT_VERSION_STRING 0.5.7.1 + MACOSX_BUNDLE_LONG_VERSION_STRING 0.5.7.1 MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND diff --git a/src/core/atomicdex/version/version.hpp b/src/core/atomicdex/version/version.hpp index 4947939a04..ce9473a9e4 100644 --- a/src/core/atomicdex/version/version.hpp +++ b/src/core/atomicdex/version/version.hpp @@ -21,7 +21,7 @@ namespace atomic_dex constexpr const char* get_version() { - return "0.5.7-beta"; + return "0.5.7.1-beta"; } constexpr int @@ -33,12 +33,12 @@ namespace atomic_dex constexpr const char* get_raw_version() { - return "0.5.7"; + return "0.5.7.1"; } constexpr const char* get_precedent_raw_version() { - return "0.5.6.1"; + return "0.5.7.1"; } } // namespace atomic_dex diff --git a/vcpkg.json b/vcpkg.json index c2dc3d1870..5c085f92ef 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "atomicdex-desktop", - "version-string": "0.5.6.1", + "version-string": "0.5.7.1", "dependencies": [ "entt", "boost-multiprecision", From 9d74a7f0dd8d6e6a0f98b7fe6043b330af66873b Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 4 Mar 2023 23:09:34 +0800 Subject: [PATCH 026/251] source coin icons before make for windows --- CMakeLists.txt | 1 - ci_tools_atomic_dex/ci_scripts/windows_script.ps1 | 8 +++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index edf592568b..4dbf66bc0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,7 +97,6 @@ else () configure_file(${mm2_SOURCE_DIR}/mm2.exe ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/${DEX_API}.exe COPYONLY) configure_file(${mm2_SOURCE_DIR}/msvcp140.dll ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/msvcp140.dll COPYONLY) configure_file(${mm2_SOURCE_DIR}/vcruntime140.dll ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/vcruntime140.dll COPYONLY) - file(COPY ${jl777-coins_SOURCE_DIR}/icons/ DESTINATION ${mm2_SOURCE_DIR}/bin/atomic_defi_design/assets/images/coins/) endif () add_subdirectory(vendor/antara-gaming_sdk/modules) diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index 191d0007b2..2b1c757a8e 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -14,10 +14,16 @@ scoop cache rm git scoop cache rm cmake scoop cache rm ninja scoop cache rm llvm + $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\$Env:QT_VERSION\msvc2019_64" $Env:QT_ROOT = "C:\Qt" + +git clone https://github.com/KomodoPlatform/coins/ -b master +mkdir -p atomic_defi_design\assets\images\coins +Get-Item -Path "coins\icons\*.png" | Move-Item -Destination "atomic_defi_design\assets\images\coins" + mkdir b cd b -cmake --version + cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../ ninja install From 2d5c7ce8705eddb8ab49e082d429b5e3ab923bd5 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 4 Mar 2023 23:19:30 +0800 Subject: [PATCH 027/251] add build type variable --- .github/workflows/atomicdex-desktop-ci.yml | 1 + ci_tools_atomic_dex/ci_scripts/windows_script.ps1 | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index f1dc595d33..a16f9f3a76 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -256,6 +256,7 @@ jobs: shell: powershell run: | $Env:QT_VERSION = "${{ matrix.qt }}" + $Env:CMAKE_BUILD_TYPE = "${{ matrix.type }}" .\ci_tools_atomic_dex\ci_scripts\windows_script.ps1 - name: Upload env variable for artifacts (Linux) diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index 191d0007b2..fbb2258a90 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -14,10 +14,12 @@ scoop cache rm git scoop cache rm cmake scoop cache rm ninja scoop cache rm llvm + $Env:QT_INSTALL_CMAKE_PATH = "C:\Qt\$Env:QT_VERSION\msvc2019_64" $Env:QT_ROOT = "C:\Qt" + mkdir b cd b -cmake --version +Invoke-Expression "cmake -DCMAKE_BUILD_TYPE=$Env:CMAKE_BUILD_TYPE -GNinja ../" cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../ ninja install From 3374c30b8e0f8cf08608af80b16722429d664c67 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 4 Mar 2023 23:24:26 +0800 Subject: [PATCH 028/251] rm old make cmd --- ci_tools_atomic_dex/ci_scripts/windows_script.ps1 | 1 - 1 file changed, 1 deletion(-) diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index fbb2258a90..311ee71461 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -21,5 +21,4 @@ $Env:QT_ROOT = "C:\Qt" mkdir b cd b Invoke-Expression "cmake -DCMAKE_BUILD_TYPE=$Env:CMAKE_BUILD_TYPE -GNinja ../" -cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../ ninja install From d8833f7141f6b0ef36140ee4788dd85369978f0e Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 4 Mar 2023 23:29:24 +0800 Subject: [PATCH 029/251] Add KIP0001 --- src/core/atomicdex/constants/dex.constants.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/atomicdex/constants/dex.constants.hpp b/src/core/atomicdex/constants/dex.constants.hpp index fffa94c8e7..8ff26bd2e2 100644 --- a/src/core/atomicdex/constants/dex.constants.hpp +++ b/src/core/atomicdex/constants/dex.constants.hpp @@ -10,6 +10,7 @@ namespace atomic_dex inline const std::vector g_default_coins{ g_primary_dex_coin, g_second_primary_dex_coin, + "KIP0001", "BTC" }; inline const std::vector g_wallet_only_coins{ @@ -30,6 +31,7 @@ namespace atomic_dex "REVS", "SUPERNET", "XPM", + "KIP0001", "ATOM" }; } From 489072ec99ea9dc7dd9b4d1097624f442423fcca Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 5 Mar 2023 00:04:02 +0800 Subject: [PATCH 030/251] use PROJECT_APP_PATH for archivegen --- cmake/install/macos/osx_post_install.cmake | 3 +-- cmake/install/windows/windows_post_install.cmake | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/install/macos/osx_post_install.cmake b/cmake/install/macos/osx_post_install.cmake index 4aa629b58e..bd42ae336c 100644 --- a/cmake/install/macos/osx_post_install.cmake +++ b/cmake/install/macos/osx_post_install.cmake @@ -102,8 +102,7 @@ get_filename_component(QT_ROOT_DIR $ENV{QT_ROOT} DIRECTORY) set(IFW_BINDIR ${QT_ROOT_DIR}/Tools/QtInstallerFramework/4.5/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) - execute_process(COMMAND ls WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) - message(STATUS "Generating ${DEX_PROJECT_NAME}.7z with [${IFW_BINDIR}/archivegen ${DEX_PROJECT_NAME}.7z ${DEX_PROJECT_NAME}.app] from directory: ${CMAKE_CURRENT_SOURCE_DIR}/bin") + message(STATUS "command is: [${IFW_BINDIR}/archivegen ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin]") execute_process(COMMAND ${IFW_BINDIR}/archivegen ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index ecdf78ae12..fb8f8b38a4 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -65,8 +65,9 @@ message(STATUS "Creating Installer") set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.5/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) - message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z .]") - execute_process(COMMAND ${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z . + message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin]") + execute_process(COMMAND + ${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE From 8f13b36e889b528028594d7d45967a46933667ae Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 5 Mar 2023 00:53:18 +0800 Subject: [PATCH 031/251] rm vcpkgJsonGlob for cache --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index f1dc595d33..f3166e8866 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -185,7 +185,7 @@ jobs: with: vcpkgDirectory: '${{ github.workspace }}/ci_tools_atomic_dex/vcpkg-repo' appendedCacheKey: ${{ hashFiles('vcpkg.json') }} - vcpkgJsonGlob: 'vcpkg.json' + #vcpkgJsonGlob: 'vcpkg.json' - name: import code signing certificates (macos) From 83d6d5d7e5a57d1eb796b9b856311dfa21590bd4 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 5 Mar 2023 02:58:32 +0800 Subject: [PATCH 032/251] try cache workaround --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- vcpkg.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index f3166e8866..f1dc595d33 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -185,7 +185,7 @@ jobs: with: vcpkgDirectory: '${{ github.workspace }}/ci_tools_atomic_dex/vcpkg-repo' appendedCacheKey: ${{ hashFiles('vcpkg.json') }} - #vcpkgJsonGlob: 'vcpkg.json' + vcpkgJsonGlob: 'vcpkg.json' - name: import code signing certificates (macos) diff --git a/vcpkg.json b/vcpkg.json index c2dc3d1870..05194a4c6b 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "atomicdex-desktop", - "version-string": "0.5.6.1", + "version-string": "0.5.7.1-test", "dependencies": [ "entt", "boost-multiprecision", From 8f219d3280fb6e845e8752a8262e86be958dd03c Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 5 Mar 2023 04:22:19 +0800 Subject: [PATCH 033/251] change zip path --- .../windows/windows_post_install.cmake | 41 +++++++++++++------ cmake/project.metadata.cmake | 6 +++ vcpkg.json | 2 +- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index fb8f8b38a4..d96d9dd50d 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -1,29 +1,32 @@ include(${CMAKE_CURRENT_LIST_DIR}/../../project.metadata.cmake) +message(STATUS "===== Starting Windows Post Install =====") message(STATUS "PROJECT_ROOT_DIR (before readjusting) -> ${PROJECT_ROOT_DIR}") - get_filename_component(PROJECT_ROOT_DIR ${CMAKE_SOURCE_DIR} DIRECTORY) if (EXISTS ${PROJECT_ROOT_DIR}/build-Release OR EXISTS ${PROJECT_ROOT_DIR}/build-Debug) message(STATUS "from ci tools, readjusting") get_filename_component(PROJECT_ROOT_DIR ${PROJECT_ROOT_DIR} DIRECTORY) endif () +message(STATUS "PROJECT_ROOT_DIR (after readjusting) -> ${PROJECT_ROOT_DIR}") -set(PROJECT_APP_DIR bin) -set(PROJECT_APP_PATH ${CMAKE_SOURCE_DIR}/${PROJECT_APP_DIR}) +set(PROJECT_APP_PATH ${CMAKE_SOURCE_DIR}/bin) set(TARGET_APP_PATH ${PROJECT_ROOT_DIR}/bundled/windows) message(STATUS "VCPKG package manager enabled") -message(STATUS "PROJECT_ROOT_DIR (after readjusting) -> ${PROJECT_ROOT_DIR}") message(STATUS "PROJECT_QML_DIR -> ${PROJECT_QML_DIR}") +message(STATUS "CMAKE_SOURCE_DIR -> ${CMAKE_SOURCE_DIR}") +message(STATUS "CMAKE_CURRENT_SOURCE_DIR -> ${CMAKE_CURRENT_SOURCE_DIR}") +message(STATUS "DEX_PROJECT_NAME -> ${DEX_PROJECT_NAME}") if (EXISTS ${PROJECT_APP_PATH}) - message(STATUS "PROJECT_APP_PATH path is -> ${PROJECT_APP_PATH}") - message(STATUS "TARGET_APP_PATH path is -> ${TARGET_APP_PATH}") + message(STATUS "PROJECT_APP_PATH path -> ${PROJECT_APP_PATH}") + message(STATUS "TARGET_APP_PATH path -> ${TARGET_APP_PATH}") else () message(FATAL_ERROR "Didn't find ${PROJECT_APP_PATH}") endif () if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin.zip) + message(STATUS "Creating bin.zip...") execute_process(COMMAND powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::CreateFromDirectory('bin', 'bin.zip'); }" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ECHO_OUTPUT_VARIABLE @@ -35,7 +38,7 @@ endif() if (NOT EXISTS ${TARGET_APP_PATH}/bin.zip) message(STATUS "Copying ${CMAKE_SOURCE_DIR}/bin.zip to ${TARGET_APP_PATH}/${DEX_PROJECT_NAME}.zip") - file(COPY ${CMAKE_SOURCE_DIR}/bin.zip DESTINATION ${TARGET_APP_PATH}) + file(COPY ${CMAKE_SOURCE_DIR}/bin.zip DESTINATION ${TARGET_APP_PATH}/${DEX_PROJECT_NAME}.zip) else() message(STATUS "${TARGET_APP_PATH}/${DEX_PROJECT_NAME}.zip exists - skipping") endif() @@ -44,15 +47,21 @@ message(STATUS "Embedding the manifest") if (NOT EXISTS ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/data/${DEX_PROJECT_NAME}.exe.manifest) message(WARNING "${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/data/${DEX_PROJECT_NAME}.exe.manifest doesn't exist - aborting") endif() -file(COPY ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/data/${DEX_PROJECT_NAME}.exe.manifest DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/bin) +file(COPY ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/data/${DEX_PROJECT_NAME}.exe.manifest DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/bin) + #FILE(GLOB CURDIR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/ ${CMAKE_CURRENT_SOURCE_DIR}/bin/*) -#message(STATUS "curdir: ${CURDIR}") + +message(STATUS "curdir: ${CURDIR}") + #message(STATUS "Executing: [mt.exe -manifest \"${DEX_PROJECT_NAME}.exe.manifest\" -outputresource:\"${DEX_PROJECT_NAME}.exe\";\#1] from directory: ${CMAKE_CURRENT_SOURCE_DIR}/bin") + set(DEX_OUT "${CMAKE_CURRENT_SOURCE_DIR}\\bin\\${DEX_PROJECT_NAME}.exe") set(DEX_IN "${CMAKE_CURRENT_SOURCE_DIR}\\bin\\${DEX_PROJECT_NAME}.exe.manifest") cmake_path(CONVERT ${DEX_OUT} TO_NATIVE_PATH_LIST DEX_OUT_NATIVE) cmake_path(CONVERT ${DEX_IN} TO_NATIVE_PATH_LIST DEX_IN_NATIVE) + #message(STATUS "mt.exe -manifest ${DEX_IN_NATIVE} -outputresource:${DEX_OUT_NATIVE}") + execute_process(COMMAND powershell.exe -File ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/ci_scripts/mt_wrapper.ps1 ${DEX_IN} ${DEX_OUT} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin ECHO_ERROR_VARIABLE @@ -64,11 +73,17 @@ message(STATUS "manifest output: ${MANIFEST_RESULT} ${MANIFEST_OUTPUT} ${MANIFES message(STATUS "Creating Installer") set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.5/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") -if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) - message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin]") +if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DEX_PROJECT_NAME}.7z) + message(STATUS ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ls ${CMAKE_CURRENT_SOURCE_DIR}") + execute_process(COMMAND ls ${CMAKE_CURRENT_SOURCE_DIR}") + message(STATUS ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ls ${CMAKE_CURRENT_SOURCE_DIR}/bin") + execute_process(COMMAND ls ${CMAKE_CURRENT_SOURCE_DIR}/bin") + message(STATUS ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ls ${PROJECT_APP_PATH}") + execute_process(COMMAND ls ${PROJECT_APP_PATH}") + message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${PROJECT_ROOT_DIR}/bundled]") execute_process(COMMAND ${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin + WORKING_DIRECTORY ${PROJECT_ROOT_DIR}/bundled ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE RESULT_VARIABLE ARCHIVE_RESULT @@ -79,7 +94,7 @@ else() message(STATUS "${DEX_PROJECT_NAME}.7z already exists skipping") endif() -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z DESTINATION ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/data) +file(COPY ${PROJECT_ROOT_DIR}/bundled/${DEX_PROJECT_NAME}.7z DESTINATION ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/data) execute_process(COMMAND ${IFW_BINDIR}/binarycreator.exe -c ./config/config.xml -p ./packages/ ${DEX_PROJECT_NAME}_installer.exe WORKING_DIRECTORY ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index fe0edb7c9d..6765c66d0e 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -52,6 +52,12 @@ if (DEFINED ENV{PROJECT_ROOT}) else () set(PROJECT_ROOT ${CMAKE_SOURCE_DIR}) endif () +if (DEFINED ENV{CMAKE_BUILD_TYPE}) + set(CMAKE_BUILD_TYPE $ENV{CMAKE_BUILD_TYPE}) +endif () +if (DEFINED ENV{PROJECT_QML_DIR}) + set(PROJECT_QML_DIR $ENV{PROJECT_QML_DIR}) +endif () # Shows project metadata diff --git a/vcpkg.json b/vcpkg.json index 05194a4c6b..c2dc3d1870 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "atomicdex-desktop", - "version-string": "0.5.7.1-test", + "version-string": "0.5.6.1", "dependencies": [ "entt", "boost-multiprecision", From 2512cab199fa5bf21b7ba9ae1a27f5843ac70926 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 5 Mar 2023 04:58:32 +0800 Subject: [PATCH 034/251] change zip path --- cmake/install/windows/windows_post_install.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index d96d9dd50d..19ac62acf9 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -75,11 +75,11 @@ set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.5/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DEX_PROJECT_NAME}.7z) message(STATUS ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ls ${CMAKE_CURRENT_SOURCE_DIR}") - execute_process(COMMAND ls ${CMAKE_CURRENT_SOURCE_DIR}") + execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}") message(STATUS ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ls ${CMAKE_CURRENT_SOURCE_DIR}/bin") - execute_process(COMMAND ls ${CMAKE_CURRENT_SOURCE_DIR}/bin") + execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}/bin") message(STATUS ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ls ${PROJECT_APP_PATH}") - execute_process(COMMAND ls ${PROJECT_APP_PATH}") + execute_process(COMMAND ls "${PROJECT_APP_PATH}") message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${PROJECT_ROOT_DIR}/bundled]") execute_process(COMMAND ${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} From a8a2966cabd900386f4acc44d20cd19c0e33e016 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 5 Mar 2023 05:45:04 +0800 Subject: [PATCH 035/251] clean up logs --- .../install/windows/windows_post_install.cmake | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index 19ac62acf9..182391f249 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -74,12 +74,12 @@ message(STATUS "Creating Installer") set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.5/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DEX_PROJECT_NAME}.7z) - message(STATUS ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ls ${CMAKE_CURRENT_SOURCE_DIR}") + message(STATUS "Contents of folder: ls ${CMAKE_CURRENT_SOURCE_DIR}") execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}") - message(STATUS ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ls ${CMAKE_CURRENT_SOURCE_DIR}/bin") + message(STATUS "Contents of folder: ls ${CMAKE_CURRENT_SOURCE_DIR}/bin") execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}/bin") - message(STATUS ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ls ${PROJECT_APP_PATH}") - execute_process(COMMAND ls "${PROJECT_APP_PATH}") + message(STATUS "Contents of folder: ls ${CMAKE_CURRENT_SOURCE_DIR}/bundled") + execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}/bundled") message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${PROJECT_ROOT_DIR}/bundled]") execute_process(COMMAND ${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} @@ -94,10 +94,18 @@ else() message(STATUS "${DEX_PROJECT_NAME}.7z already exists skipping") endif() +message(STATUS "Contents of folder: ls ${PROJECT_APP_PATH}") +execute_process(COMMAND ls "${PROJECT_APP_PATH}") + file(COPY ${PROJECT_ROOT_DIR}/bundled/${DEX_PROJECT_NAME}.7z DESTINATION ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/data) execute_process(COMMAND ${IFW_BINDIR}/binarycreator.exe -c ./config/config.xml -p ./packages/ ${DEX_PROJECT_NAME}_installer.exe WORKING_DIRECTORY ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE) -file(COPY ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows/${DEX_PROJECT_NAME}_installer.exe DESTINATION ${TARGET_APP_PATH}) \ No newline at end of file +file(COPY ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/windows/${DEX_PROJECT_NAME}_installer.exe DESTINATION ${TARGET_APP_PATH}) + +message(STATUS "Contents of folder: ls ${TARGET_APP_PATH}") +execute_process(COMMAND ls "${TARGET_APP_PATH}") + +message(STATUS "===== Windows Post Install Complete =====") \ No newline at end of file From b74859ab389f6f90905b38e8d6ade43a18c7a67b Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 5 Mar 2023 12:48:29 +0800 Subject: [PATCH 036/251] renamed zip --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index f1dc595d33..0eb46ce5bb 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -328,7 +328,7 @@ jobs: uses: actions/upload-artifact@v3 with: name: ${{ env.artifact_name_zip }} - path: ./bundled/windows/bin.zip + path: ./bundled/windows/${{ env.DEX_PROJECT_NAME }}.zip retention-days: 7 - name: Upload artifacts (Windows installer) From 5201d76d0aee873bb9bccad6c2ee7f2f7dcba0c6 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 5 Mar 2023 19:09:08 +0800 Subject: [PATCH 037/251] fix installer bin path --- .../installer/windows/config/config.xml.in | 2 +- .../com.komodoplatform.atomicdex/meta/installscript.qs.in | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ci_tools_atomic_dex/installer/windows/config/config.xml.in b/ci_tools_atomic_dex/installer/windows/config/config.xml.in index 2a33ec7019..9fe11ef931 100644 --- a/ci_tools_atomic_dex/installer/windows/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/windows/config/config.xml.in @@ -6,7 +6,7 @@ @DEX_WEBSITE@ @DEX_COMPANY@ @DEX_INSTALL_TARGET_DIR_WIN64@/@DEX_DISPLAY_NAME@ - @DEX_TARGET_DIR@/@DEX_PROJECT_NAME@.exe + @DEX_TARGET_DIR@/bin/@DEX_PROJECT_NAME@.exe Run @DEX_DISPLAY_NAME@ now. @DEX_DISPLAY_NAME@ @DEX_MAINTENANCE_TOOL_NAME@ diff --git a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/installscript.qs.in b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/installscript.qs.in index cc11201d0d..204713cb6d 100644 --- a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/installscript.qs.in +++ b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/installscript.qs.in @@ -10,17 +10,17 @@ Component.prototype.createOperations = function() if (installer.value("os") === "win") { // Start Menu Shortcut component.addOperation("CreateShortcut", - "@DEX_TARGET_DIR@/@DEX_PROJECT_NAME@.exe", + "@DEX_TARGET_DIR@/bin/@DEX_PROJECT_NAME@.exe", "@DEX_START_MENU_DIR@/@DEX_DISPLAY_NAME@.lnk", - "workingDirectory=@DEX_TARGET_DIR@", + "workingDirectory=@DEX_TARGET_DIR@/bin", "iconPath=@DEX_ICON_DIR@", "iconId=0", "description=Start @DEX_DISPLAY_NAME@"); // Desktop Shortcut component.addOperation("CreateShortcut", - "@DEX_TARGET_DIR@/@DEX_PROJECT_NAME@.exe", + "@DEX_TARGET_DIR@/bin/@DEX_PROJECT_NAME@.exe", "@DEX_DESKTOP_DIR@/@DEX_DISPLAY_NAME@.lnk", - "workingDirectory=@DEX_TARGET_DIR@", + "workingDirectory=@DEX_TARGET_DIR@/bin", "iconPath=@DEX_ICON_DIR@", "iconId=0", "description=Start @DEX_DISPLAY_NAME@"); From 9e231f6aced6d1da53e025b81f2f92624a59d5c9 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 6 Mar 2023 16:17:10 +0800 Subject: [PATCH 038/251] change default port to 7762 --- .github/workflows/atomicdex-desktop-ci.yml | 4 ++-- cmake/project.metadata.cmake | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index f1dc595d33..924a4ad1a3 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -11,8 +11,8 @@ on: env: DEX_API: "mm2" - DEX_RPCPORT: 7783 - DEX_RPC: "http://127.0.0.1:7783" + DEX_RPCPORT: 7762 + DEX_RPC: "http://127.0.0.1:7762" DEX_PROJECT_NAME: "atomicdex-desktop" DEX_DISPLAY_NAME: "AtomicDex Desktop" DEX_COMPANY: "KomodoPlatform" diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index fe0edb7c9d..185640f30b 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -1,7 +1,7 @@ # Default project values set(DEX_API "mm2") -set(DEX_RPCPORT 7783) -set(DEX_RPC "http://127.0.0.1:7783") +set(DEX_RPCPORT 7762) +set(DEX_RPC "http://127.0.0.1:7762") set(DEX_PROJECT_NAME "atomicdex-desktop") set(DEX_DISPLAY_NAME "AtomicDEX Desktop") set(DEX_MAINTENANCE_TOOL_NAME "AtomicDEX Maintenance Tool") From 769e872b80906a45b7416fb192ff9e17f2b1bd77 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 6 Mar 2023 19:52:58 +0800 Subject: [PATCH 039/251] fix precedent_raw_version --- src/core/atomicdex/version/version.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/version/version.hpp b/src/core/atomicdex/version/version.hpp index ce9473a9e4..de74639360 100644 --- a/src/core/atomicdex/version/version.hpp +++ b/src/core/atomicdex/version/version.hpp @@ -39,6 +39,6 @@ namespace atomic_dex constexpr const char* get_precedent_raw_version() { - return "0.5.7.1"; + return "0.5.7"; } } // namespace atomic_dex From 551b44f24b7129cccca782248dea2e198d92b8dc Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 6 Mar 2023 19:56:21 +0800 Subject: [PATCH 040/251] better logging for coins file update --- src/core/atomicdex/services/mm2/mm2.service.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 3137c3ee49..40c891fd23 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -63,7 +63,7 @@ namespace SPDLOG_INFO("There is a precedent configuration file, upgrading the new one with precedent settings"); //! Old cfg to ifs - LOG_PATH("opening file: {}", precedent_version_cfg_path); + LOG_PATH("opening previous version coins file: {}", precedent_version_cfg_path); QFile ifs; ifs.setFileName(atomic_dex::std_path_to_qstring(precedent_version_cfg_path)); ifs.open(QIODevice::Text | QIODevice::ReadOnly); @@ -72,7 +72,7 @@ namespace //! New cfg to ifs std::filesystem::path actual_version_filepath = cfg_path / (std::string(atomic_dex::get_raw_version()) + "-coins."s + wallet_name + ".json"s); - LOG_PATH("opening file: {}", actual_version_filepath); + LOG_PATH("opening new version coins file: {}", actual_version_filepath); QFile actual_version_ifs; actual_version_ifs.setFileName(atomic_dex::std_path_to_qstring(actual_version_filepath)); actual_version_ifs.open(QIODevice::Text | QIODevice::ReadOnly); @@ -97,13 +97,13 @@ namespace } } - LOG_PATH("closing file: {}", precedent_version_cfg_path); + LOG_PATH("closing old version coins file: {}", precedent_version_cfg_path); ifs.close(); - LOG_PATH("closing file: {}", actual_version_filepath); + LOG_PATH("closing new version coins file: {}", actual_version_filepath); actual_version_ifs.close(); //! Write contents - LOG_PATH("opening file: {}", actual_version_filepath); + LOG_PATH("opening new version file: {}", actual_version_filepath); QFile ofs; ofs.setFileName(atomic_dex::std_path_to_qstring(actual_version_filepath)); ofs.open(QIODevice::Text | QIODevice::WriteOnly); @@ -116,7 +116,7 @@ namespace { SPDLOG_ERROR("error: {}", ec.message()); } - LOG_PATH("closing file: {}", actual_version_filepath); + LOG_PATH("closing new version file: {}", actual_version_filepath); ofs.close(); } } From 2277196f25bac057492abacf5808d1d0db8a631b Mon Sep 17 00:00:00 2001 From: Canialon Date: Wed, 15 Mar 2023 19:58:55 +0000 Subject: [PATCH 041/251] fix Binance colors.json --- assets/themes/Binance - Dark/colors.json | 202 +++++++++++++++-------- 1 file changed, 130 insertions(+), 72 deletions(-) diff --git a/assets/themes/Binance - Dark/colors.json b/assets/themes/Binance - Dark/colors.json index 05bed4fd30..2600fb338d 100644 --- a/assets/themes/Binance - Dark/colors.json +++ b/assets/themes/Binance - Dark/colors.json @@ -1,81 +1,139 @@ { - "accentColor": "#0A0A0AFF", - "foregroundColor": "#ffffffFF", - "backgroundColor": "#161515FF", - "backgroundColorDeep": "#0A0A0AFF", - - "busyIndicatorColor": "#cb9800FF", - - "buttonColorDisabled": "#8B6900FF", - "buttonColorEnabled": "#cb9800FF", - "buttonColorHovered": "#EBB514FF", - "buttonColorPressed": "#EBB514FF", - "buttonTextDisabledColor": "#3B3B3BFF", - "buttonTextEnabledColor": "#fafffaFF", + "accentColor": "#F0B90BFF", + "foregroundColor": "#FFFFFFFF", + "foregroundColor2": "#8790B2FF", + "foregroundColor3": "#ABC0D3FF", + "backgroundColor": "#000000FF", + "secondBackgroundColor": "#0E111AFF", + "backgroundColorDeep": "#060A10FF", + + "busyIndicatorColor": "#F0B90BFF", + + "buttonColorDisabled": "#745804FF", + "buttonColorEnabled": "#F0B90BFF", + "buttonColorHovered": "#FFC200FF", + "buttonColorPressed": "#F0B90B6C", + + "buttonTextDisabledColor": "#444444FF", + "buttonTextEnabledColor": "#FFFFFF", "buttonTextHoveredColor": "#000000FF", "buttonTextPressedColor": "#000000FF", - - "gradientButtonStartColor": "#cb9800FF", - "gradientButtonEndColor": "#cb9800FF", - "gradientButtonDisabledStartColor": "#8B6900FF", - "gradientButtonDisabledEndColor": "#8B6900FF", - "gradientButtonHoveredStartColor": "#EBB514FF", - "gradientButtonHoveredEndColor": "#EBB514FF", - "gradientButtonPressedStartColor": "#EBB514FF", - "gradientButtonPressedEndColor": "#EBB514FF", - "gradientButtonTextEnabledColor": "#080707FF", - "gradientButtonTextDisabledColor": "#3B3B3BFF", + + "buttonSecondaryColorDisabled": "#745804", + "buttonSecondaryColorEnabled": "#CFA00B", + "buttonSecondaryColorHovered": "#FFC200FF", + "buttonSecondaryColorPressed": "#F0B90B6C", + + "buttonCancelColorDisabled": "#2C3D66FF", + "buttonCancelColorEnabled": "#5B4606FF", + "buttonCancelColorHovered": "#FFC200FF", + "buttonCancelColorPressed": "#F0B90B6C", + + "gradientButtonStartColor": "#F0B90BAD", + "gradientButtonEndColor": "#F0B90BFF", + "gradientButtonDisabledStartColor": "#F0B90B4D", + "gradientButtonDisabledEndColor": "#F0B90B34", + "gradientButtonHoveredStartColor": "#FFC200FF", + "gradientButtonHoveredEndColor": "#FFD346FF", + "gradientButtonPressedStartColor": "#F0B90BFF", + "gradientButtonPressedEndColor": "#F0B90BFF", + "gradientButtonTextEnabledColor": "#000000FF", + "gradientButtonTextDisabledColor": "#000000FF", "gradientButtonTextHoveredColor": "#000000FF", "gradientButtonTextPressedColor": "#000000FF", - "checkBoxTickColor": "#FFFFFFFF", - "checkBoxGradientStartColor": "#cb9800FF", - "checkBoxGradientEndColor": "#EBB514FF", - - "switchGradientStartColor": "#cb9800FF", - "switchGradientEndColor": "#EBB514FF", - "switchGradientStartColor2": "#FFFFFFFF", - "switchGradientEndColor2": "#FFFFFFFF", - - "modalPageCounterGradientStartColor": "#cb9800FF", - "modalPageCounterGradientEndColor": "#EBB514FF", - - "tabSelectedColor": "#EBB514FF", - - "textDisabledColor": "#444444FF", - "textSelectionColor": "#4986EAFF", - "textPlaceholderColor": "#8B6900FF", - "textSelectedColor": "#0e1021FF", - - "textFieldBackgroundColor": "#0e0e0eFF", - "textFieldActiveBackgroundColor": "#0c0c0cFF", - "textFieldPrefixColor": "#8790B2FF", - "textFieldSuffixColor": "#456078FF", + "checkBoxTickColor": "#000000", + "checkBoxGradientStartColor": "#F0B90BFF", + "checkBoxGradientEndColor": "#F0B90BFF", - "comboBoxBackgroundColor": "#0A0A0AFF", + "switchGradientStartColor": "#F0B90BFF", + "switchGradientEndColor": "#F0B90BFF", + "switchGradientStartColor2": "#000000", + "switchGradientEndColor2": "#000000", + + "comboBoxBackgroundColor": "#1D232FFF", "comboBoxArrowsColor": "#FFFFFFFF", - "comboBoxDropdownItemHighlightedColor": "#111111FF", - - "chartTradingLineBackgroundColor": "#24283dFF", - "chartTradingLineColor": "#74fbeeFF", - - "innerBackgroundColor": "#111111FF", - - "floatingBackgroundColor": "#222222FF", - - "sidebarBgColor": "#161515FF", - "sidebarVersionTextColor": "#BBBBBBFF", - "sidebarCursorStartColor": "#cb9800FF", - "sidebarCursorEndColor": "#EBB51400", - "sidebarLineTextHovered": "#8B6900FF", - - "okColor": "#74fbeeFF", - "warningColor": "#d13990FF", - - "senderColorStart": "#F85757FF", - "receiverColorStart": "#845FEFFF", - "arrowUpColor": "#F85757FF", - "arrowDownColor": "#845FEFFF", - - "lineSeparatorColor": "#222222FF" + "comboBoxDropdownItemHighlightedColor": "#F0B90BFF", + + "modalPageCounterGradientStartColor": "#F0B90BFF", + "modalPageCounterGradientEndColor": "#F0B90BFF", + + "notifPopupBackgroundColor": "#0E111AFF", + "notifPopupTextColor": "#FFFFFFFF", + "notifPopupTimerColor": "#8790B2FF", + "notifPopupTimerBackgroundColor": "#94A3B11F", + "notifPopupIconStartColor": "#FFFFFFFF", + "notifPopupIconEndColor": "#FFFFFFFF", + + "scrollBarIndicatorColor": "#8790B2", + "scrollBarBackgroundColor": "#94A3B1", + + "tabSelectedColor": "#F0B90B", + + "textDisabledColor": "#707070", + "textSelectionColor": "#F0B90B", + "textPlaceholderColor": "#5A4400", + "textSelectedColor": "#211D0E", + + "textFieldBackgroundColor": "#262424", + "textFieldActiveBackgroundColor": "#262424", + "textFieldPrefixColor": "#F0B90B", + "textFieldSuffixColor": "#F0B90B", + + "tickerBadgeBackgroundColor": "#161515", + + "chartTradingLineBackgroundColor": "#161515", + "chartTradingLineColor": "#F0B90B", + + "innerBackgroundColor": "#161515", + + "floatingBackgroundColor": "#161515", + + "rangeSliderBackgroundColor": "#F0B90B", + "rangeSliderDistanceColor": "#F0B90B33", + "rangeSliderIndicatorBackgroundStartColor": "#F0B90B", + "rangeSliderIndicatorBackgroundEndColor": "#F0B90B", + + "userIconColorStart": "#F0B90B", + "userIconColorEnd": "#F0B90B33", + + "sidebarBgColor": "#000000", + "sidebarVersionTextColor": "#F0B90B", + "sidebarCursorStartColor": "#F0B90B", + "sidebarCursorEndColor": "#16151500", + "sidebarLineTextHovered": "#F0B90B", + "sidebarLineTextSelected": "#FFFFFF", + + "tradeSellModeSelectorBackgroundColorStart": "#E52167", + "tradeSellModeSelectorBackgroundColorEnd": "#CD0F53", + "tradeBuyModeSelectorBackgroundColorStart": "#0BC05F", + "tradeBuyModeSelectorBackgroundColorEnd": "#037B3A", + + "inputModifierBackgroundColor": "#F0B90B21", + "inputFieldBackgroundColor": "#161515", + + "inputFieldBorderColor": "#F0B90B", + "inputPlaceholderTextColor": "#FF00FF", + "inputRightIconColor": "#FFFFFF", + "inputLeftIconColor": "#FFFFFF", + "inputLeftIconBackgroundColor": "#161515", + + "listItemOddBackground": "#000000", + "listItemEvenBackground": "#161515", + "listItemHoveredBackground": "#5B4704", + + "addressBookTagColors": ["#627EEA", "#FFD87A", "#F7931A"], + + "okColor": "#00C058", + "warningColor": "#E52167", + "swapIconColor": "#005FBE", + + "senderColorStart": "#F85757", + "receiverColorStart": "#845FEF", + + "arrowUpColor": "#F85757", + "arrowDownColor": "#845FEF", + + "lineSeparatorColor": "#161515" + } \ No newline at end of file From 6e83d01eebf7a882196f2b68a6d798c498bc934f Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 27 Mar 2023 18:46:55 +0800 Subject: [PATCH 042/251] use local dll files --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4dbf66bc0d..2b6d7125b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,10 +95,11 @@ else () configure_file(${jl777-coins_SOURCE_DIR}/utils/coins_config.json ${CMAKE_BINARY_DIR}/bin/assets/config/${PROJECT_VERSION}-coins.json COPYONLY) configure_file(${jl777-coins_SOURCE_DIR}/coins ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/coins COPYONLY) configure_file(${mm2_SOURCE_DIR}/mm2.exe ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/${DEX_API}.exe COPYONLY) - configure_file(${mm2_SOURCE_DIR}/msvcp140.dll ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/msvcp140.dll COPYONLY) - configure_file(${mm2_SOURCE_DIR}/vcruntime140.dll ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/vcruntime140.dll COPYONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ci_tools_atomic_dex/windows_misc/msvcp140.dll ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/msvcp140.dll COPYONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ci_tools_atomic_dex/windows_misc/vcruntime140.dll ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/vcruntime140.dll COPYONLY) endif () + add_subdirectory(vendor/antara-gaming_sdk/modules) ##! Osx bundle icon From da7fa26320a374625f98f729a8eaf8dd2c971dd0 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 28 Mar 2023 21:32:16 +0800 Subject: [PATCH 043/251] update version --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- CMakeLists.txt | 2 +- ci_tools_atomic_dex/installer/osx/config/config.xml.in | 2 +- .../com.komodoplatform.atomicdex/meta/package.xml.in | 4 ++-- ci_tools_atomic_dex/installer/windows/config/config.xml.in | 2 +- .../com.komodoplatform.atomicdex/meta/package.xml.in | 4 ++-- cmake/install/macos/dex_install.cmake | 4 ++-- src/core/atomicdex/constants/dex.constants.hpp | 2 ++ src/core/atomicdex/version/version.hpp | 6 +++--- vcpkg.json | 2 +- 10 files changed, 16 insertions(+), 14 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a31d2a73f0..51cdf57ac8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,7 +26,7 @@ Please describe what you expected to happen. **Operating Environment(s):** - OS: [e.g. Windows/OSX/Linux. If Linux, include distro. ] - OS version: [e.g. 7/10/11, 10.13/10.15, 18.04/20.04 ] - - AtomicDEX Version: [e.g. 0.5.7.1] + - AtomicDEX Version: [e.g. 0.5.7.2] - Build branch: [e.g. master/dev] diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cd4d9f093..60cba2e1fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ include(vcpkg_prerequisites) include(qt_prerequisites) include(cfg_hash) -project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.7.1) +project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.7.2) message(STATUS "${PROJECT_NAME} is version ${PROJECT_VERSION}") include(cmake_default_options) diff --git a/ci_tools_atomic_dex/installer/osx/config/config.xml.in b/ci_tools_atomic_dex/installer/osx/config/config.xml.in index c3d57543ce..838e6f170d 100644 --- a/ci_tools_atomic_dex/installer/osx/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/osx/config/config.xml.in @@ -1,7 +1,7 @@ ${DEX_DISPLAY_NAME} - 0.5.7.1 + 0.5.7.2 ${DEX_DISPLAY_NAME} Installer ${DEX_WEBSITE} ${DEX_COMPANY} diff --git a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in index 3c71c1edf4..57bb3278f8 100644 --- a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.7.1 - 2023-06-03 + 0.5.7.2 + 2023-03-04 diff --git a/ci_tools_atomic_dex/installer/windows/config/config.xml.in b/ci_tools_atomic_dex/installer/windows/config/config.xml.in index 6e498e3100..886bb6f594 100644 --- a/ci_tools_atomic_dex/installer/windows/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/windows/config/config.xml.in @@ -1,7 +1,7 @@ @DEX_DISPLAY_NAME@ - 0.5.7.1 + 0.5.7.2 @DEX_DISPLAY_NAME@ Installer @DEX_WEBSITE@ @DEX_COMPANY@ diff --git a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in index 128fdd7f46..57bb3278f8 100644 --- a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.7.1 - 2023-03-06 + 0.5.7.2 + 2023-03-04 diff --git a/cmake/install/macos/dex_install.cmake b/cmake/install/macos/dex_install.cmake index 916e682cfa..7eb09e6edd 100644 --- a/cmake/install/macos/dex_install.cmake +++ b/cmake/install/macos/dex_install.cmake @@ -4,8 +4,8 @@ if (APPLE) MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}" RESOURCE ${ICON} MACOSX_BUNDLE_ICON_FILE dex-logo - MACOSX_BUNDLE_SHORT_VERSION_STRING 0.5.7.1 - MACOSX_BUNDLE_LONG_VERSION_STRING 0.5.7.1 + MACOSX_BUNDLE_SHORT_VERSION_STRING 0.5.7.2 + MACOSX_BUNDLE_LONG_VERSION_STRING 0.5.7.2 MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND diff --git a/src/core/atomicdex/constants/dex.constants.hpp b/src/core/atomicdex/constants/dex.constants.hpp index 8ff26bd2e2..2a9581bfcb 100644 --- a/src/core/atomicdex/constants/dex.constants.hpp +++ b/src/core/atomicdex/constants/dex.constants.hpp @@ -10,6 +10,7 @@ namespace atomic_dex inline const std::vector g_default_coins{ g_primary_dex_coin, g_second_primary_dex_coin, + "VOTE2023", "KIP0001", "BTC" }; @@ -32,6 +33,7 @@ namespace atomic_dex "SUPERNET", "XPM", "KIP0001", + "VOTE2023", "ATOM" }; } diff --git a/src/core/atomicdex/version/version.hpp b/src/core/atomicdex/version/version.hpp index de74639360..8fce7de2ff 100644 --- a/src/core/atomicdex/version/version.hpp +++ b/src/core/atomicdex/version/version.hpp @@ -21,7 +21,7 @@ namespace atomic_dex constexpr const char* get_version() { - return "0.5.7.1-beta"; + return "0.5.7.2-beta"; } constexpr int @@ -33,12 +33,12 @@ namespace atomic_dex constexpr const char* get_raw_version() { - return "0.5.7.1"; + return "0.5.7.2"; } constexpr const char* get_precedent_raw_version() { - return "0.5.7"; + return "0.5.7.1"; } } // namespace atomic_dex diff --git a/vcpkg.json b/vcpkg.json index 5c085f92ef..933bbee3d5 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "atomicdex-desktop", - "version-string": "0.5.7.1", + "version-string": "0.5.7.2", "dependencies": [ "entt", "boost-multiprecision", From 6628ef06c660f970c7c4e3f738e626534ae7df3b Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 29 Mar 2023 14:13:51 +0000 Subject: [PATCH 044/251] remove duplicate coincolor code --- .../Dex/Components/CoinTypeTag.qml | 44 +++---- .../Dex/Components/DexSweetComboBox.qml | 2 +- atomic_defi_design/Dex/Constants/DexTheme.qml | 117 ------------------ atomic_defi_design/Dex/Constants/Style.qml | 9 -- 4 files changed, 23 insertions(+), 149 deletions(-) diff --git a/atomic_defi_design/Dex/Components/CoinTypeTag.qml b/atomic_defi_design/Dex/Components/CoinTypeTag.qml index 7f544b8183..891a1fe5be 100644 --- a/atomic_defi_design/Dex/Components/CoinTypeTag.qml +++ b/atomic_defi_design/Dex/Components/CoinTypeTag.qml @@ -1,22 +1,22 @@ -import QtQuick 2.15 -import "../Constants" -import App 1.0 - -AnimatedRectangle { - property string type - radius: 20 - - height: type_tag.font.pixelSize * 1.5 - width: type_tag.width + 8 - - color: Style.getCoinTypeColor(type) - - DexLabel { - id: type_tag - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - text: type - color: Style.getCoinTypeTextColor(type) - font: DexTypo.overLine - } -} +import QtQuick 2.15 +import "../Constants" +import App 1.0 + +AnimatedRectangle { + property string type + radius: 20 + + height: type_tag.font.pixelSize * 1.5 + width: type_tag.width + 8 + + color: Style.getCoinTypeColor(type) + + DexLabel { + id: type_tag + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + text: type + color: Style.getCoinTypeColor(type) + font: DexTypo.overLine + } +} diff --git a/atomic_defi_design/Dex/Components/DexSweetComboBox.qml b/atomic_defi_design/Dex/Components/DexSweetComboBox.qml index e8a7086ab6..cc47e64e63 100644 --- a/atomic_defi_design/Dex/Components/DexSweetComboBox.qml +++ b/atomic_defi_design/Dex/Components/DexSweetComboBox.qml @@ -174,7 +174,7 @@ ComboBox highlighted: control.highlightedIndex === index contentItem: DefaultText { - text_value: "" + ticker + "" + " %1".arg(General.coinName(ticker)) + text_value: "" + ticker + "" + " %1".arg(General.coinName(ticker)) } background: DefaultRectangle diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 6aedf64898..7653d2e248 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -331,121 +331,4 @@ QtObject { return Style.colorWhite4 } - function getCoinColor(ticker) { - const c = colorCoin[ticker] - return c || Style.colorTheme2 - } - - readonly property var colorCoin: ({ - "ARPA": "#CCD9E2", - "BCH": "#8DC351", - "BTC": "#F7931A", - "CLC": "#0970DC", - "FTC": "#FFFFFF", - "GLEEC": "#8C41FF", - "GRS": "#377E96", - "DOGE": "#C3A634", - "ETH": "#627EEA", - "KMD": "#2B6680", - "MORTY": "#A4764D", - "RICK": "#A5CBDD", - "EMC2": "#00CCFF", - "DASH": "#008CE7", - "RVN": "#384182", - "DGB": "#006AD2", - "FIRO": "#BB2100", - "LTC": "#BFBBBB", - "ZEC": "#ECB244", - "ZER": "#FFFFFF", - "NAV": "#7D59B5", - "DP": "#E41D25", - "ECA": "#A915DC", - "QTUM": "#2E9AD0", - "CHIPS": "#598182", - "AXE": "#C63877", - "PANGEA": "#D88245", - "JUMBLR": "#2B4649", - "DEX": "#43B7B6", - "COQUI": "#79A541", - "CRYPTO": "#F58736", - "LABS": "#C1F6E1", - "MGW": "#854F2F", - "MONA": "#DEC799", - "NMC": "#186C9D", - "RFOX": "#D83331", - "BOTS": "#F69B57", - "MCL": "#EA0000", - "CCL": "#FFE400", - "BET": "#F69B57", - "SUPERNET": "#F69B57", - "OOT": "#25AAE1", - "REVS": "#F69B57", - "ILN": "#523170", - "VRSC": "#3164D3", - "THC": "#819F6F", - "1INCH": "#95A7C5", - "BAT": "#FF5000", - "BUSD": "#EDB70B", - "DAI": "#B68900", - "USDC": "#317BCB", - "PAX": "#EDE70A", - "SUSHI": "#E25DA8", - "TUSD": "#2E3181", - "AWC": "#31A5F6", - "VRA": "#D70A41", - "SPACE": "#E44C65", - "QC": "#00D7B3", - "PBC": "#64A3CB", - "AAVE": "#9C64A6", - "ANT": "#33DAE6", - "AGI": "#6815FF", - "BAND": "#526BFF", - "BLK": "#191919", - "BNT": "#000D2B", - "BTCZ": "#F5B036", - "CEL": "#4055A6", - "CENNZ": "#2E87F1", - "COMP": "#00DBA3", - "CRO": "#243565", - "CVC": "#3AB03E", - "CVT": "#4B0082", - "DODO": "#FFF706", - "ELF": "#2B5EBB", - "ENJ": "#6752C3", - "EURS": "#2F77ED", - "FUN": "#EF1C70", - "GNO": "#00B0CC", - "HOT": "#983EFF", - "IOTX": "#00CDCE", - "KNC": "#117980", - "LEO": "#F79B2C", - "LINK": "#356CE4", - "LRC": "#32C2F8", - "MANA": "#FF3C6C", - "MATIC": "#1E61ED", - "MED": "#00B5FF", - "MKR": "#1BAF9F", - "NPXS": "#F3CB00", - "POWR": "#05BCAA", - "QI": "#FFFFFF", - "QIAIR": "#FEFEFE", - "QKC": "#2175B4", - "QNT": "#46DDC8", - "REP": "#0E0E21", - "REV": "#78034D", - "RLC": "#FFE100", - "SFUSD": "#9881B8", - "SNT": "#596BED", - "SNX": "#00D1FF", - "SOULJA": "#8F734A", - "STORJ": "#2683FF", - "TSL": "#64B082", - "VRM": "#586A7A", - "WSB": "#FEBB84", - "WBTC": "#CCCCCC", - "YFI": "#006BE6", - "ZRX": "#302C2C", - "UNI": "#FF007A", - "RUNES": "#336699" - }) } diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index ff2dbd105c..34d62fd2ab 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -211,15 +211,6 @@ QtObject { } } - function getCoinTypeTextColor(type) - { - switch (type) - { - case 'BEP-20': return '#232323' - default: return '#F9F9F9' - } - } - function getCoinColor(ticker) { const c = colorCoin[atomic_qt_utilities.retrieve_main_ticker(ticker)] return c || Style.colorTheme2 From 33cc98dfa6c84686b5f5702482f5f01362b5025d Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 31 Mar 2023 04:45:04 +0800 Subject: [PATCH 045/251] update api version --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cd4d9f093..0b98c75214 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,13 +60,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.8741/mm2-6e4de5d21-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.1-beta/mm2-6bb79b3d8-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.8741/mm2-6e4de5d21-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.1-beta/mm2-6bb79b3d8-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.8741/mm2-6e4de5d21-Windows_NT-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.1-beta/mm2-6bb79b3d8-Win64.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 9a2755940c2ca397468b5489681b05f4cc927009 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 31 Mar 2023 04:47:03 +0800 Subject: [PATCH 046/251] update zhtlc method names --- src/core/atomicdex/api/mm2/mm2.client.cpp | 10 +++- src/core/atomicdex/api/mm2/mm2.client.hpp | 4 +- .../mm2/rpc2.task.enable_z_coin.cancel.cpp | 53 ++++++++++++++++ .../mm2/rpc2.task.enable_z_coin.cancel.hpp | 60 +++++++++++++++++++ ...n.cpp => rpc2.task.enable_z_coin.init.cpp} | 2 +- ...n.hpp => rpc2.task.enable_z_coin.init.hpp} | 0 ...cpp => rpc2.task.enable_z_coin.status.cpp} | 2 +- ...hpp => rpc2.task.enable_z_coin.status.hpp} | 0 .../atomicdex/services/mm2/mm2.service.cpp | 4 +- 9 files changed, 128 insertions(+), 7 deletions(-) create mode 100644 src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.cpp create mode 100644 src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp rename src/core/atomicdex/api/mm2/{rpc2.init_z_coin.cpp => rpc2.task.enable_z_coin.init.cpp} (97%) rename src/core/atomicdex/api/mm2/{rpc2.init_z_coin.hpp => rpc2.task.enable_z_coin.init.hpp} (100%) rename src/core/atomicdex/api/mm2/{rpc2.init_z_coin_status.cpp => rpc2.task.enable_z_coin.status.cpp} (98%) rename src/core/atomicdex/api/mm2/{rpc2.init_z_coin_status.hpp => rpc2.task.enable_z_coin.status.hpp} (100%) diff --git a/src/core/atomicdex/api/mm2/mm2.client.cpp b/src/core/atomicdex/api/mm2/mm2.client.cpp index 381cb28822..d1fad516a7 100644 --- a/src/core/atomicdex/api/mm2/mm2.client.cpp +++ b/src/core/atomicdex/api/mm2/mm2.client.cpp @@ -192,11 +192,11 @@ namespace atomic_dex::mm2 template TAnswer - mm2_client::process_rpc(TRequest&& request, std::string rpc_command) + mm2_client::process_rpc(TRequest&& request, std::string rpc_command, bool is_v2) { SPDLOG_DEBUG("Processing rpc call: {}", rpc_command); - nlohmann::json json_data = mm2::template_request(rpc_command); + nlohmann::json json_data = mm2::template_request(rpc_command, is_v2); mm2::to_json(json_data, request); @@ -211,6 +211,12 @@ namespace atomic_dex::mm2 return rpc_process_answer(resp, rpc_command); } + t_init_z_coin_cancel_answer + mm2_client::rpc_init_z_coin_cancel(t_init_z_coin_cancel_request&& request) + { + return process_rpc(std::forward(request), "task::enable_z_coin::cancel", true); + } + t_disable_coin_answer mm2_client::rpc_disable_coin(t_disable_coin_request&& request) { diff --git a/src/core/atomicdex/api/mm2/mm2.client.hpp b/src/core/atomicdex/api/mm2/mm2.client.hpp index 22f9a94c89..45b71d65d8 100644 --- a/src/core/atomicdex/api/mm2/mm2.client.hpp +++ b/src/core/atomicdex/api/mm2/mm2.client.hpp @@ -11,6 +11,7 @@ #include "rpc.disable.hpp" #include "rpc.recover.funds.hpp" #include "rpc.hpp" +#include "rpc2.task.enable_z_coin.cancel.hpp" namespace atomic_dex::mm2 { @@ -35,12 +36,13 @@ namespace atomic_dex::mm2 //! Synced template - TAnswer process_rpc(TRequest&& request, std::string rpc_command); + TAnswer process_rpc(TRequest&& request, std::string rpc_command, bool is_v2 = false); template RpcReturnType rpc_process_answer(const web::http::http_response& resp, const std::string& rpc_command); t_disable_coin_answer rpc_disable_coin(t_disable_coin_request&& request); t_recover_funds_of_swap_answer rpc_recover_funds(t_recover_funds_of_swap_request&& request); + t_init_z_coin_cancel_answer rpc_init_z_coin_cancel(t_init_z_coin_cancel_request&& request); }; } // namespace atomic_dex \ No newline at end of file diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.cpp new file mode 100644 index 0000000000..e640a83816 --- /dev/null +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.cpp @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright © 2013-2022 The Komodo Platform Developers. * + * * + * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * + * the top-level directory of this distribution for the individual copyright * + * holder information and the developer policies on copyright and licensing. * + * * + * Unless otherwise agreed in a custom licensing agreement, no part of the * + * Komodo Platform software, including this file may be copied, modified, * + * propagated or distributed except according to the terms contained in the * + * LICENSE file * + * * + * Removal or modification of this copyright notice is prohibited. * + * * + ******************************************************************************/ + +//! Deps +#include + +//! Project Headers +#include "atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp" + +//! Implementation 2.0 RPC [init_z_coin_cancel] +namespace atomic_dex::mm2 +{ + //! Serialization + void to_json(nlohmann::json& j, const init_z_coin_cancel_request& request) + { + j["params"]["task_id"] = request.task_id; + } + + //! Deserialization + void from_json(const nlohmann::json& j, init_z_coin_cancel_answer_success& answer) + { + answer.result = j.at("result").get(); + } + + void + from_json(const nlohmann::json& j, init_z_coin_cancel_answer& answer) + { + if (j.count("error") >= 1) + { + answer.error = j; + } + else + { + if (j.contains("result") && j.contains("mmrpc") && j.at("mmrpc").get() == "2.0") + { + answer.result = j.get(); + } + } + } +} // namespace atomic_dex::mm2 diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp new file mode 100644 index 0000000000..6fbbdcef97 --- /dev/null +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright © 2013-2022 The Komodo Platform Developers. * + * * + * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * + * the top-level directory of this distribution for the individual copyright * + * holder information and the developer policies on copyright and licensing. * + * * + * Unless otherwise agreed in a custom licensing agreement, no part of the * + * Komodo Platform software, including this file may be copied, modified, * + * propagated or distributed except according to the terms contained in the * + * LICENSE file * + * * + * Removal or modification of this copyright notice is prohibited. * + * * + ******************************************************************************/ + +#pragma once + +// Std Headers +#include + +// Deps Headers +#include + +//! Project Headers +#include "generic.error.hpp" + +namespace atomic_dex::mm2 +{ + struct init_z_coin_cancel_request + { + int task_id; + }; + + void to_json(nlohmann::json& j, const init_z_coin_cancel_request& request); + + struct init_z_coin_cancel_answer_success + { + std::string result; + }; + + void from_json(const nlohmann::json& j, init_z_coin_cancel_answer_success& answer); + + struct init_z_coin_cancel_answer + { + std::optional result; + std::optional error; + std::string raw_result; ///< internal + int rpc_result_code; ///< internal + }; + + void from_json(const nlohmann::json& j, init_z_coin_cancel_answer& answer); +} + +namespace atomic_dex +{ + using t_init_z_coin_cancel_request = mm2::init_z_coin_cancel_request; + using t_init_z_coin_cancel_answer = mm2::init_z_coin_cancel_answer; + using t_init_z_coin_cancel_answer_success = mm2::init_z_coin_cancel_answer_success; +} // namespace atomic_dex \ No newline at end of file diff --git a/src/core/atomicdex/api/mm2/rpc2.init_z_coin.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp similarity index 97% rename from src/core/atomicdex/api/mm2/rpc2.init_z_coin.cpp rename to src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp index 6c61b672eb..a0ae25f311 100644 --- a/src/core/atomicdex/api/mm2/rpc2.init_z_coin.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp @@ -18,7 +18,7 @@ #include //! Project Headers -#include "atomicdex/api/mm2/rpc2.init_z_coin.hpp" +#include "atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp" //! Implementation 2.0 RPC [init_z_coin] namespace atomic_dex::mm2 diff --git a/src/core/atomicdex/api/mm2/rpc2.init_z_coin.hpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp similarity index 100% rename from src/core/atomicdex/api/mm2/rpc2.init_z_coin.hpp rename to src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp diff --git a/src/core/atomicdex/api/mm2/rpc2.init_z_coin_status.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp similarity index 98% rename from src/core/atomicdex/api/mm2/rpc2.init_z_coin_status.cpp rename to src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp index ded987e419..6db6ad778f 100644 --- a/src/core/atomicdex/api/mm2/rpc2.init_z_coin_status.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp @@ -18,7 +18,7 @@ #include //! Project Headers -#include "atomicdex/api/mm2/rpc2.init_z_coin_status.hpp" +#include "atomicdex/api/mm2/rpc2.task.enable_z_coin.status.hpp" //! Implementation 2.0 RPC [init_z_coin_status] namespace atomic_dex::mm2 diff --git a/src/core/atomicdex/api/mm2/rpc2.init_z_coin_status.hpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.hpp similarity index 100% rename from src/core/atomicdex/api/mm2/rpc2.init_z_coin_status.hpp rename to src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.hpp diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 40c891fd23..eac81d7972 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -31,8 +31,8 @@ #include "atomicdex/api/mm2/rpc.min.volume.hpp" #include "atomicdex/api/mm2/rpc.tx.history.hpp" #include "atomicdex/api/mm2/rpc2.z_coin_tx_history.hpp" -#include "atomicdex/api/mm2/rpc2.init_z_coin.hpp" -#include "atomicdex/api/mm2/rpc2.init_z_coin_status.hpp" +#include "atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp" +#include "atomicdex/api/mm2/rpc2.task.enable_z_coin.status.hpp" #include "atomicdex/config/mm2.cfg.hpp" #include "atomicdex/config/coins.cfg.hpp" #include "atomicdex/constants/dex.constants.hpp" From 94cf7d45f356fcfa6c7d3faeeb151403fc0d8f0e Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 31 Mar 2023 04:47:31 +0800 Subject: [PATCH 047/251] clean up alignment --- src/core/atomicdex/config/coins.cfg.hpp | 76 ++++++++++++------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index b612e2684e..67c8100132 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -39,43 +39,43 @@ namespace atomic_dex using eth_family_url_list = std::vector; using bchd_url_list = std::vector; using light_wallet_d_servers = std::vector; ///< For ZHTLC - std::string ticker; - std::optional alias_ticker{std::nullopt}; - std::string gui_ticker; ///< Ticker displayed in the gui - std::string name; ///< nice name - std::optional utxo_merge{false}; - std::optional allow_slp_unsafe_conf; - std::optional urls; - std::optional eth_family_urls; - std::optional bchd_urls; - std::optional electrum_urls; - std::optional z_urls; - bool is_claimable{false}; - std::string minimal_claim_amount{"0"}; - bool currently_enabled{false}; - bool active{false}; - std::string coinpaprika_id{"test-coin"}; - std::string coingecko_id{"test-coin"}; - std::string nomics_id{"test-coin"}; - bool is_custom_coin{false}; - std::string type; - std::optional> other_types; - std::string explorer_url; ///< usefull for transaction, take this url and append transaction id - std::string tx_uri{"tx/"}; - std::string address_url{"address/"}; - std::optional custom_backup; - nlohmann::json activation_status; - std::optional is_testnet{false}; ///< True if testnet (tBTC, tQTUM, QRC-20 on testnet, tETH) - CoinType coin_type; - bool checked{false}; - bool wallet_only{false}; - bool has_parent_fees_ticker{false}; ///< True if parent fees is different from current ticker eg: ERC20 tokens - std::string fees_ticker; - bool segwit{false}; - bool is_segwit_on{false}; - bool is_erc_family{false}; - bool is_zhtlc_family{false}; - bool default_coin{false}; + std::string ticker; + std::string fees_ticker; + std::string gui_ticker; ///< Ticker displayed in the gui + std::string name; ///< nice name + std::string type; + std::string coinpaprika_id{"test-coin"}; + std::string coingecko_id{"test-coin"}; + std::string nomics_id{"test-coin"}; + std::string explorer_url; + std::string tx_uri{"tx/"}; + std::string address_url{"address/"}; + std::string minimal_claim_amount{"0"}; + std::optional alias_ticker{std::nullopt}; + CoinType coin_type; + std::optional> other_types; + std::optional electrum_urls; + std::optional urls; + std::optional z_urls; + std::optional eth_family_urls; + std::optional bchd_urls; + nlohmann::json activation_status; + std::optional custom_backup; + std::optional allow_slp_unsafe_conf; + std::optional is_testnet{false}; ///< True if testnet (tBTC, tQTUM, QRC-20 on testnet, tETH) + std::optional utxo_merge{false}; + bool segwit{false}; + bool is_segwit_on{false}; + bool active{false}; + bool checked{false}; + bool wallet_only{false}; + bool is_claimable{false}; + bool is_custom_coin{false}; + bool currently_enabled{false}; + bool has_parent_fees_ticker{false}; ///< True if parent fees is different from current ticker eg: ERC20 tokens + bool is_erc_family{false}; + bool is_zhtlc_family{false}; + bool default_coin{false}; }; void from_json(const nlohmann::json& j, coin_config& cfg); @@ -83,4 +83,4 @@ namespace atomic_dex void print_coins(std::vector coins); bool is_wallet_only(std::string ticker); bool is_default_coin(std::string ticker); -} // namespace atomic_dex +} // namespace atomic_dex \ No newline at end of file From ca320d08c880b053dd0d18dd283db213d7e12861 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 31 Mar 2023 04:48:44 +0800 Subject: [PATCH 048/251] resolve declaration order warning --- src/core/atomicdex/models/qt.global.coins.cfg.model.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp index 6acc6c482d..77d88016db 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp @@ -206,7 +206,7 @@ namespace atomic_dex m_enabled_coins[cur.ticker] = cur; } } - cfg.push_back(coin_config{.ticker = "All", .currently_enabled = true, .active = true}); + cfg.push_back(coin_config{.ticker = "All", .active = true, .currently_enabled = true}); SPDLOG_INFO("Initializing global coin cfg model with size {}", cfg.size()); set_checked_nb(0); beginResetModel(); From bf9f2f8625318f9a78be9bc96d12bfdf88861612 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 31 Mar 2023 04:49:29 +0800 Subject: [PATCH 049/251] increase zhtlc sync offset --- atomic_defi_design/Dex/Constants/General.qml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index a27e733f48..6f9bff60c8 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -82,14 +82,19 @@ QtObject { { let progress = 100 if (!activation_status.hasOwnProperty("result")) return progress + console.log("[zhtlcActivationProgress]: " + JSON.stringify(activation_status)) let status = activation_status.result.status let details = activation_status.result.details let block_offset = 0 - if (coin == 'ARRR') block_offset = 1900000 + if (coin == 'ARRR') block_offset = 2000000 // use range from checkpoint block to present - if (status == "Ready") + if (!status) + { + return -1 + } + else if (status == "Ok") { if (details.hasOwnProperty("error")) console.log("[zhtlcActivationProgress] Error enabling: " + JSON.stringify(details.error)) From 45a0419245144a7b00bf53e1bf0d3d10e1eeef51 Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 30 Mar 2023 23:08:34 +0000 Subject: [PATCH 050/251] disable oracle --- src/app/app.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/app.cpp b/src/app/app.cpp index ee80584c2e..1891d44620 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -502,8 +502,8 @@ namespace atomic_dex system_manager_.create_system(system_manager_, this); system_manager_.create_system(system_manager_, settings_page_system.get_cfg()); system_manager_.create_system(system_manager_); - system_manager_.create_system(); - // system_manager_.create_system(system_manager_); + //system_manager_.create_system(); + //system_manager_.create_system(system_manager_); //system_manager_.create_system(system_manager_); system_manager_.create_system(); system_manager_.create_system(); From 0273d310b1fa13df232e05867cc1c4e7821fc606 Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 31 Mar 2023 00:29:04 +0000 Subject: [PATCH 051/251] disable oracle --- .../Dex/Components/CexInfoModal.qml | 4 +- .../assets/languages/atomic_defi_de.ts | 4 +- .../assets/languages/atomic_defi_en.ts | 2 +- .../assets/languages/atomic_defi_es.ts | 4 +- .../assets/languages/atomic_defi_fr.ts | 4 +- .../languages/atomic_defi_lang_template.ts | 2 +- .../assets/languages/atomic_defi_ru.ts | 4 +- .../assets/languages/atomic_defi_tr.ts | 4 +- .../assets/languages/translations_matrix.csv | 2 +- src/app/app.cpp | 2 - src/core/atomicdex/events/events.hpp | 3 +- .../atomicdex/pages/qt.portfolio.page.cpp | 24 --- .../atomicdex/pages/qt.portfolio.page.hpp | 6 - .../services/price/global.provider.cpp | 10 -- .../services/price/oracle/band.provider.cpp | 146 ------------------ .../services/price/oracle/band.provider.hpp | 53 ------- 16 files changed, 15 insertions(+), 259 deletions(-) delete mode 100644 src/core/atomicdex/services/price/oracle/band.provider.cpp delete mode 100644 src/core/atomicdex/services/price/oracle/band.provider.hpp diff --git a/atomic_defi_design/Dex/Components/CexInfoModal.qml b/atomic_defi_design/Dex/Components/CexInfoModal.qml index 64777e138f..cc7c3725a4 100644 --- a/atomic_defi_design/Dex/Components/CexInfoModal.qml +++ b/atomic_defi_design/Dex/Components/CexInfoModal.qml @@ -17,9 +17,7 @@ MultipageModal { Layout.preferredHeight: 200 Layout.fillWidth: true - text: qsTr('Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.

Data is sourced via Band Decentralized Oracle and CoinGecko.

Oracle Supported Pairs:
%1

Last reference (Band Oracle):
%2') - .arg(API.app.portfolio_pg.oracle_price_supported_pairs.join(', ')) - .arg(API.app.portfolio_pg.oracle_last_price_reference) + text: qsTr('Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.

Data is sourced via CoinGecko.') } } } diff --git a/atomic_defi_design/assets/languages/atomic_defi_de.ts b/atomic_defi_design/assets/languages/atomic_defi_de.ts index 47450a6cc9..77e6a6a963 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_de.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_de.ts @@ -495,8 +495,8 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> - Mit dem Symbol ⓘ gekennzeichnete Marktdaten (Kurse, Charts etc.) stammen aus Drittquellen.<br><br>Die Daten stammen von <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> und <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle unterstützte Paare:</b><br>%1<br><br><b>Letzte Referenz (Band Oracle):</b><br><a href="%2">%2</a> + Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>. + Mit dem Symbol ⓘ gekennzeichnete Marktdaten (Kurse, Charts etc.) stammen aus Drittquellen.<br><br>Die Daten stammen von <a href="https://coingecko.com">CoinGecko</a>.
diff --git a/atomic_defi_design/assets/languages/atomic_defi_en.ts b/atomic_defi_design/assets/languages/atomic_defi_en.ts index 1c7bae05ce..2348322db0 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_en.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_en.ts @@ -494,7 +494,7 @@
- Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> + Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>.
diff --git a/atomic_defi_design/assets/languages/atomic_defi_es.ts b/atomic_defi_design/assets/languages/atomic_defi_es.ts index fe0b09d3c6..ab3cfaa81d 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_es.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_es.ts @@ -494,8 +494,8 @@ - Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> - Datos de mercado (precios, estadisticas, etc.) marcados con ⓘ se obtienen a través de fuentes terceras.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> + Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>. + Datos de mercado (precios, estadisticas, etc.) marcados con ⓘ se obtienen a través de fuentes terceras.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>.
diff --git a/atomic_defi_design/assets/languages/atomic_defi_fr.ts b/atomic_defi_design/assets/languages/atomic_defi_fr.ts index 80242b19bf..8dd49c3924 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_fr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_fr.ts @@ -494,8 +494,8 @@ - Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> - Les données de marché (prix, graphiques, etc.) marquées de l'icône ⓘ proviennent de sources tierces.<br><br>Les données proviennent de <a href="https://bandprotocol.com/"> Band Decentralized Oracle</a> et <a href="https://www.coingecko.com/fr">Coingecko </a>.<br><br><b>Paires prises en charge par Oracle:</b><br>%1<br><br><b>Dernière référence (Band Oracle) :</b><br><a href="%2">%2</a> + Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>. + Les données de marché (prix, graphiques, etc.) marquées de l'icône ⓘ proviennent de sources tierces.<br><br>Les données proviennent de <a href="https://www.coingecko.com/fr">Coingecko </a>. diff --git a/atomic_defi_design/assets/languages/atomic_defi_lang_template.ts b/atomic_defi_design/assets/languages/atomic_defi_lang_template.ts index 5836a5dfc1..fa46445515 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_lang_template.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_lang_template.ts @@ -405,7 +405,7 @@ - Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> + Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>. diff --git a/atomic_defi_design/assets/languages/atomic_defi_ru.ts b/atomic_defi_design/assets/languages/atomic_defi_ru.ts index 4de7d0f1bc..5572bf161e 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_ru.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_ru.ts @@ -494,8 +494,8 @@ - Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> - Рыночные данные (цены, графики, и тд.) отмеченные ⓘ иконкой получены от <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> и <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> + Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>. + Рыночные данные (цены, графики, и тд.) отмеченные ⓘ иконкой получены от <a href="https://coingecko.com">CoinGecko</a>. diff --git a/atomic_defi_design/assets/languages/atomic_defi_tr.ts b/atomic_defi_design/assets/languages/atomic_defi_tr.ts index 34e9b6e6db..f22e1bc14d 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_tr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_tr.ts @@ -494,8 +494,8 @@ - Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> - ⓘ simgesiyle işaretlenen piyasa verileri (fiyatlar, grafikler vb.) üçüncü taraf kaynaklardan alınmıştır. .<br><br>Veriler kaynakları: <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> ve <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Son referans (Band Oracle):</b><br><a href="%2">%2</a> + Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>. + ⓘ simgesiyle işaretlenen piyasa verileri (fiyatlar, grafikler vb.) üçüncü taraf kaynaklardan alınmıştır. .<br><br>Veriler kaynakları: <a href="https://coingecko.com">CoinGecko</a>. diff --git a/atomic_defi_design/assets/languages/translations_matrix.csv b/atomic_defi_design/assets/languages/translations_matrix.csv index 37a934e80a..0960cf64dc 100644 --- a/atomic_defi_design/assets/languages/translations_matrix.csv +++ b/atomic_defi_design/assets/languages/translations_matrix.csv @@ -90,7 +90,7 @@ 474,Dex/Sidebar/Center.qml,,475,Address Book,476,Adressbuch,Libreta de direcciones,, 479,Dex/Sidebar/Center.qml,,480,Fiat,481,Fiat,Fiat,, 487,Dex/Components/CexInfoModal.qml,,488,Market Data,489,Marktdaten,Data de Mercado,, -492,Dex/Components/CexInfoModal.qml,,493,"Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a>",494,"Mit dem Symbol ⓘ gekennzeichnete Marktdaten (Kurse, Charts etc.) stammen aus Drittquellen.<br><br>Die Daten stammen von <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> und <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle unterstützte Paare:</b><br>%1<br><br><b>Letzte Referenz (Band Oracle):</b><br><a href="%2">%2</a>","Datos de mercado (precios, estadisticas, etc.) marcados con ⓘ se obtienen a través de fuentes terceras.<br><br>Data is sourced via <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> and <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a>",, +492,Dex/Components/CexInfoModal.qml,,493,"Market data (prices, charts, etc.) marked with the ⓘ icon originates from third-party sources.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>.",494,"Mit dem Symbol ⓘ gekennzeichnete Marktdaten (Kurse, Charts etc.) stammen aus Drittquellen.<br><br>Die Daten stammen von <a href="https://coingecko.com">CoinGecko</a>.","Datos de mercado (precios, estadisticas, etc.) marcados con ⓘ se obtienen a través de fuentes terceras.<br><br>Data is sourced via <a href="https://coingecko.com">CoinGecko</a>.",, 500,Dex/Exchange/ProView/Chart.qml,,501,Loading market data,502,Laden von Marktdaten,Cargando datos de mercado,, 505,Dex/Exchange/ProView/Chart.qml,,506,There is no chart data for this pair yet,507,Für dieses Paar liegen noch keine Chartdaten vor,Todavía no hay datos de gráficos para este par,, 513,Dex/Wallet/ClaimRewardsModal.qml,,514,Failed to prepare to claim rewards,515,Vorbereitung zum Einfordern von Belohnungen fehlgeschlagen,No se pudo preparar para reclamar recompensas,, diff --git a/src/app/app.cpp b/src/app/app.cpp index 1891d44620..f4d61a879b 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -44,7 +44,6 @@ #include "atomicdex/services/price/komodo_prices/komodo.prices.provider.hpp" #include "atomicdex/services/price/coingecko/coingecko.wallet.charts.hpp" #include "atomicdex/services/price/coinpaprika/coinpaprika.provider.hpp" -#include "atomicdex/services/price/oracle/band.provider.hpp" #include "atomicdex/services/price/orderbook.scanner.service.hpp" namespace @@ -502,7 +501,6 @@ namespace atomic_dex system_manager_.create_system(system_manager_, this); system_manager_.create_system(system_manager_, settings_page_system.get_cfg()); system_manager_.create_system(system_manager_); - //system_manager_.create_system(); //system_manager_.create_system(system_manager_); //system_manager_.create_system(system_manager_); system_manager_.create_system(); diff --git a/src/core/atomicdex/events/events.hpp b/src/core/atomicdex/events/events.hpp index d5e23753ce..c5f34d4e73 100644 --- a/src/core/atomicdex/events/events.hpp +++ b/src/core/atomicdex/events/events.hpp @@ -30,7 +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 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>; using download_started = entt::tag<"download_started"_hs>; @@ -132,4 +131,4 @@ namespace atomic_dex { std::string message; }; -} // namespace atomic_dex \ No newline at end of file +} // namespace atomic_dex diff --git a/src/core/atomicdex/pages/qt.portfolio.page.cpp b/src/core/atomicdex/pages/qt.portfolio.page.cpp index 51e1971b0c..3b0663bd07 100644 --- a/src/core/atomicdex/pages/qt.portfolio.page.cpp +++ b/src/core/atomicdex/pages/qt.portfolio.page.cpp @@ -23,7 +23,6 @@ #include "atomicdex/pages/qt.wallet.page.hpp" #include "atomicdex/services/price/coingecko/coingecko.wallet.charts.hpp" #include "atomicdex/services/price/global.provider.hpp" -#include "atomicdex/services/price/oracle/band.provider.hpp" namespace atomic_dex { @@ -33,7 +32,6 @@ namespace atomic_dex { emit portfolioChanged(); this->dispatcher_.sink().connect<&portfolio_page::on_update_portfolio_values_event>(*this); - this->dispatcher_.sink().connect<&portfolio_page::on_band_oracle_refreshed>(*this); this->dispatcher_.sink().connect<&portfolio_page::on_coin_cfg_parsed>(*this); SPDLOG_INFO("portfolio_page created"); } @@ -51,28 +49,6 @@ namespace atomic_dex portfolio_page::~portfolio_page() {} - QStringList - portfolio_page::get_oracle_price_supported_pairs() const - { - auto result = m_system_manager.get_system().supported_pair(); - QStringList out; - out.reserve(result.size()); - for (auto&& cur: result) { out.push_back(QString::fromStdString(cur)); } - return out; - } - - QString - portfolio_page::get_oracle_last_price_reference() const - { - return QString::fromStdString(m_system_manager.get_system().last_oracle_reference()); - } - - void - portfolio_page::on_band_oracle_refreshed(const band_oracle_refreshed&) - { - emit oraclePriceUpdated(); - } - void portfolio_page::set_current_balance_fiat_all(QString current_fiat_all_balance) { diff --git a/src/core/atomicdex/pages/qt.portfolio.page.hpp b/src/core/atomicdex/pages/qt.portfolio.page.hpp index 3f7b4a7d4d..7aa469e625 100644 --- a/src/core/atomicdex/pages/qt.portfolio.page.hpp +++ b/src/core/atomicdex/pages/qt.portfolio.page.hpp @@ -35,8 +35,6 @@ namespace atomic_dex //! Properties Q_PROPERTY(portfolio_model* portfolio_mdl READ get_portfolio NOTIFY portfolioChanged) - Q_PROPERTY(QString oracle_last_price_reference READ get_oracle_last_price_reference NOTIFY oraclePriceUpdated) - Q_PROPERTY(QStringList oracle_price_supported_pairs READ get_oracle_price_supported_pairs NOTIFY oraclePriceUpdated) Q_PROPERTY(QString balance_fiat_all READ get_balance_fiat_all WRITE set_current_balance_fiat_all NOTIFY onFiatBalanceAllChanged) Q_PROPERTY(QString main_balance_fiat_all READ get_main_balance_fiat_all NOTIFY onMainFiatBalanceAllChanged) Q_PROPERTY(global_coins_cfg_model* global_cfg_mdl READ get_global_cfg NOTIFY globalCfgMdlChanged) @@ -69,8 +67,6 @@ namespace atomic_dex [[nodiscard]] portfolio_model* get_portfolio() const; [[nodiscard]] global_coins_cfg_model* get_global_cfg() const; - [[nodiscard]] QString get_oracle_last_price_reference() const; - [[nodiscard]] QStringList get_oracle_price_supported_pairs() const; [[nodiscard]] Q_INVOKABLE QStringList get_all_enabled_coins() const; [[nodiscard]] Q_INVOKABLE QStringList get_all_coins_by_type(const QString& coin_type) const; [[nodiscard]] Q_INVOKABLE bool is_coin_enabled(const QString& coin_name) const; @@ -89,13 +85,11 @@ namespace atomic_dex [[nodiscard]] QString get_max_total_chart() const; //! Events - void on_band_oracle_refreshed([[maybe_unused]] const band_oracle_refreshed& evt); void on_update_portfolio_values_event(const update_portfolio_values&); void on_coin_cfg_parsed(const coin_cfg_parsed& evt); signals: void portfolioChanged(); - void oraclePriceUpdated(); void onFiatBalanceAllChanged(); void onMainFiatBalanceAllChanged(); void globalCfgMdlChanged(); diff --git a/src/core/atomicdex/services/price/global.provider.cpp b/src/core/atomicdex/services/price/global.provider.cpp index 966b67dd48..3dad1b929a 100644 --- a/src/core/atomicdex/services/price/global.provider.cpp +++ b/src/core/atomicdex/services/price/global.provider.cpp @@ -19,7 +19,6 @@ #include "atomicdex/api/coinpaprika/coinpaprika.hpp" #include "atomicdex/pages/qt.settings.page.hpp" #include "atomicdex/services/price/komodo_prices/komodo.prices.provider.hpp" -#include "atomicdex/services/price/oracle/band.provider.hpp" namespace { @@ -199,9 +198,6 @@ namespace atomic_dex if (ticker.empty()) return "0"; auto& provider = m_system_manager.get_system(); - auto& band_service = m_system_manager.get_system(); - std::string current_price = band_service.retrieve_if_this_ticker_supported(ticker); - const bool is_oracle_ready = band_service.is_oracle_ready(); if (current_price.empty()) { @@ -230,7 +226,6 @@ namespace atomic_dex } else { - //! We use oracle if (is_this_currency_a_fiat(m_cfg, fiat) && fiat != "USD") { if (m_other_fiats_rates->contains("rates")) @@ -240,11 +235,6 @@ namespace atomic_dex } } - else if (!is_this_currency_a_fiat(m_cfg, fiat) && is_oracle_ready) - { - t_float_50 tmp_current_price = (t_float_50(current_price)) * band_service.retrieve_rates(fiat); - current_price = tmp_current_price.str(); - } } if (adjusted) diff --git a/src/core/atomicdex/services/price/oracle/band.provider.cpp b/src/core/atomicdex/services/price/oracle/band.provider.cpp deleted file mode 100644 index 94724b861c..0000000000 --- a/src/core/atomicdex/services/price/oracle/band.provider.cpp +++ /dev/null @@ -1,146 +0,0 @@ -//! Project Headers -#include "band.provider.hpp" - -namespace atomic_dex -{ - band_oracle_price_service::band_oracle_price_service(entt::registry& registry) : system(registry) - { - m_update_clock = std::chrono::high_resolution_clock::now(); - fetch_oracle(); - } - - void - from_json(const nlohmann::json& j, band_oracle_price_result& result) - { - for (auto&& obj: j.at("result")) - { - std::string symbol = obj.at("symbol").get(); - t_float_50 px = t_float_50(obj.at("px").get()); - t_float_50 multiplier = t_float_50(obj.at("multiplier").get()); - t_float_50 price = px / multiplier; - std::stringstream sstream(obj.at("resolve_time").get()); - std::size_t timestamp; - sstream >> timestamp; - result.band_oracle_data[symbol].timestamp = timestamp; - result.band_oracle_data[symbol].reference = "https://guanyu-poa.cosmoscan.io/request/" + obj.at("request_id").get(); - result.band_oracle_data[symbol].price = price; - t_float_50 rates = t_float_50("1") / price; - result.band_oracle_data[symbol].rate = rates; - } - } -} // namespace atomic_dex - -namespace atomic_dex -{ - pplx::task - band_oracle_price_service::async_fetch_oracle_result() - { - web::http::http_request req; - req.set_method(web::http::methods::POST); - nlohmann::json json_body; - json_body["min_count"] = 10; - json_body["ask_count"] = 16; - json_body["symbols"] = nlohmann::json::array(); - for (auto&& cur_symbol: this->m_supported_tickers) { json_body["symbols"].push_back(cur_symbol); } - req.headers().set_content_type(FROM_STD_STR("application/json")); - // SPDLOG_INFO("req: {}", json_body.dump(4)); - req.set_body(json_body.dump()); - return m_band_http_client->request(req); - } - - void - band_oracle_price_service::fetch_oracle() - { - SPDLOG_INFO("start fetching oracle"); - async_fetch_oracle_result() - .then([this](web::http::http_response resp) { - auto body = TO_STD_STR(resp.extract_string(true).get()); - if (resp.status_code() == 200) - { - nlohmann::json j = nlohmann::json::parse(body); - band_oracle_price_result result; - from_json(j, result); - this->m_oracle_price_result = result; - using namespace std::chrono_literals; - auto last_oracle_timestamp = result.band_oracle_data.at("BAND").timestamp; - const auto now = std::chrono::system_clock::now(); - const auto last_oracle_timestamp_std = std::chrono::system_clock::from_time_t(last_oracle_timestamp); - const auto s = std::chrono::duration_cast(now - last_oracle_timestamp_std); - this->m_oracle_ready = s > 20min ? false : true; - if (s > 20min) - { - SPDLOG_WARN( - "last oracle too much outdated: {}, fallback to coinpaprika", - utils::to_human_date(last_oracle_timestamp, "%e %b %Y, %H:%M")); - } - this->dispatcher_.trigger(); - } - else - { - SPDLOG_ERROR("Cannot fetch oracle price: {}", body); - } - }) - .then(&handle_exception_pplx_task); - } -} // namespace atomic_dex - -namespace atomic_dex -{ - void - band_oracle_price_service::update() - { - using namespace std::chrono_literals; - - const auto now = std::chrono::high_resolution_clock::now(); - const auto s = std::chrono::duration_cast(now - m_update_clock); - if (s >= 5min) - { - fetch_oracle(); - m_update_clock = std::chrono::high_resolution_clock::now(); - } - } - - bool - band_oracle_price_service::is_oracle_ready() const - { - return this->m_oracle_ready.load(); - } - - std::string - band_oracle_price_service::retrieve_if_this_ticker_supported(const std::string& ticker) const - { - std::string current_price = ""; - if (is_oracle_ready()) - { - const auto result = m_oracle_price_result.synchronize(); - const auto it = result->band_oracle_data.find(ticker); - if (it != result->band_oracle_data.end()) - { - current_price = it->second.price.str(); - } - } - return current_price; - } - - t_float_50 - band_oracle_price_service::retrieve_rates(const std::string& fiat) const - { - const auto synchronized = m_oracle_price_result.synchronize(); - return synchronized->band_oracle_data.at(fiat).rate; - } - - std::vector - band_oracle_price_service::supported_pair() const - { - std::vector out; - out.reserve(this->m_supported_tickers.size()); - for (auto&& cur_symbol: this->m_supported_tickers) { out.emplace_back(cur_symbol + "/USD"); } - return out; - } - - std::string - band_oracle_price_service::last_oracle_reference() const - { - return ""; - } -} // namespace atomic_dex diff --git a/src/core/atomicdex/services/price/oracle/band.provider.hpp b/src/core/atomicdex/services/price/oracle/band.provider.hpp deleted file mode 100644 index 6f694da823..0000000000 --- a/src/core/atomicdex/services/price/oracle/band.provider.hpp +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once - -#include "atomicdex/services/mm2/mm2.service.hpp" - -namespace atomic_dex -{ - struct band_data - { - std::size_t timestamp; - std::string human_date; - t_float_50 price; - t_float_50 rate; - std::string reference; - }; - - struct band_oracle_price_result - { - std::unordered_map band_oracle_data; - }; - - void from_json(const nlohmann::json& j, band_oracle_price_result& result); - - class band_oracle_price_service final : public ag::ecs::pre_update_system - { - using t_update_time_point = std::chrono::high_resolution_clock::time_point; - using t_oracle_price_synchronized = boost::synchronized_value; - - static constexpr const char* m_band_endpoint{"http://komodo-rpc.bandchain.org/oracle/request_prices"}; - t_http_client_ptr m_band_http_client{std::make_unique(FROM_STD_STR(m_band_endpoint))}; - t_update_time_point m_update_clock; - t_oracle_price_synchronized m_oracle_price_result; - std::atomic_bool m_oracle_ready{false}; - std::vector m_supported_tickers{"BAND"}; - - void fetch_oracle() ; - pplx::task async_fetch_oracle_result() ; - - public: - explicit band_oracle_price_service(entt::registry& registry); - ~band_oracle_price_service() final = default; - - void update() final; - - //! Public API - bool is_oracle_ready() const ; - std::string retrieve_if_this_ticker_supported(const std::string& ticker) const ; - t_float_50 retrieve_rates(const std::string& fiat) const ; - std::vector supported_pair() const ; - std::string last_oracle_reference() const ; - }; -} // namespace atomic_dex - -REFL_AUTO(type(atomic_dex::band_oracle_price_service)) From 690cfc1b802bf8a3a68f4c8aaa438fc43e65e2fd Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 31 Mar 2023 01:00:20 +0000 Subject: [PATCH 052/251] disable oracle --- .../services/price/global.provider.cpp | 41 ++++++------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/src/core/atomicdex/services/price/global.provider.cpp b/src/core/atomicdex/services/price/global.provider.cpp index 3dad1b929a..16d134b712 100644 --- a/src/core/atomicdex/services/price/global.provider.cpp +++ b/src/core/atomicdex/services/price/global.provider.cpp @@ -197,44 +197,29 @@ namespace atomic_dex //! FIXME: fix zatJum crash report, frontend QML try to retrieve price before program is even launched if (ticker.empty()) return "0"; - auto& provider = m_system_manager.get_system(); + auto& provider = m_system_manager.get_system(); + std::string current_price = provider.get_rate_conversion(ticker); - if (current_price.empty()) + if (!is_this_currency_a_fiat(m_cfg, fiat)) { - current_price = provider.get_rate_conversion(ticker); - if (!is_this_currency_a_fiat(m_cfg, fiat)) + t_float_50 rate(1); { - t_float_50 rate(1); + if (m_coin_rate_providers.contains(fiat)) { - if (m_coin_rate_providers.contains(fiat)) - { - std::shared_lock lock(m_coin_rate_mutex); - rate = t_float_50(m_coin_rate_providers.at(fiat)); ///< Retrieve BTC or KMD rate let's say for USD - } - } - t_float_50 tmp_current_price = t_float_50(current_price) * rate; - current_price = tmp_current_price.str(); - } - else if (fiat != "USD") - { - if (m_other_fiats_rates->contains("rates")) - { - t_float_50 tmp_current_price = t_float_50(current_price) * m_other_fiats_rates->at("rates").at(fiat).get(); - current_price = tmp_current_price.str(); + std::shared_lock lock(m_coin_rate_mutex); + rate = t_float_50(m_coin_rate_providers.at(fiat)); ///< Retrieve BTC or KMD rate let's say for USD } } + t_float_50 tmp_current_price = t_float_50(current_price) * rate; + current_price = tmp_current_price.str(); } - else + else if (fiat != "USD") { - if (is_this_currency_a_fiat(m_cfg, fiat) && fiat != "USD") + if (m_other_fiats_rates->contains("rates")) { - if (m_other_fiats_rates->contains("rates")) - { - t_float_50 tmp_current_price = t_float_50(current_price) * m_other_fiats_rates->at("rates").at(fiat).get(); - current_price = tmp_current_price.str(); - } + t_float_50 tmp_current_price = t_float_50(current_price) * m_other_fiats_rates->at("rates").at(fiat).get(); + current_price = tmp_current_price.str(); } - } if (adjusted) From ca6d0fb04bc5c74b8313ef19701b785f81abcfd5 Mon Sep 17 00:00:00 2001 From: cipig Date: Fri, 31 Mar 2023 01:55:01 +0000 Subject: [PATCH 053/251] readd getCoinTypeTextColor --- atomic_defi_design/Dex/Components/CoinTypeTag.qml | 2 +- atomic_defi_design/Dex/Constants/Style.qml | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Components/CoinTypeTag.qml b/atomic_defi_design/Dex/Components/CoinTypeTag.qml index 891a1fe5be..d423956f0f 100644 --- a/atomic_defi_design/Dex/Components/CoinTypeTag.qml +++ b/atomic_defi_design/Dex/Components/CoinTypeTag.qml @@ -16,7 +16,7 @@ AnimatedRectangle { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter text: type - color: Style.getCoinTypeColor(type) + color: Style.getCoinTypeTextColor(type) font: DexTypo.overLine } } diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 34d62fd2ab..ff2dbd105c 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -211,6 +211,15 @@ QtObject { } } + function getCoinTypeTextColor(type) + { + switch (type) + { + case 'BEP-20': return '#232323' + default: return '#F9F9F9' + } + } + function getCoinColor(ticker) { const c = colorCoin[atomic_qt_utilities.retrieve_main_ticker(ticker)] return c || Style.colorTheme2 From a079b4f5d9bd2277c13e318b170bfab45bbbcb42 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 31 Mar 2023 17:31:11 +0800 Subject: [PATCH 054/251] update zhtlc method names --- src/core/atomicdex/api/mm2/mm2.client.cpp | 6 +++--- src/core/atomicdex/api/mm2/mm2.client.hpp | 2 +- .../mm2/rpc2.task.enable_z_coin.cancel.cpp | 10 +++++----- .../mm2/rpc2.task.enable_z_coin.cancel.hpp | 20 +++++++++---------- .../api/mm2/rpc2.task.enable_z_coin.init.cpp | 6 +++--- .../api/mm2/rpc2.task.enable_z_coin.init.hpp | 12 +++++------ .../mm2/rpc2.task.enable_z_coin.status.cpp | 10 +++++----- .../mm2/rpc2.task.enable_z_coin.status.hpp | 20 +++++++++---------- .../atomicdex/services/mm2/mm2.service.cpp | 12 +++++------ 9 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/core/atomicdex/api/mm2/mm2.client.cpp b/src/core/atomicdex/api/mm2/mm2.client.cpp index d1fad516a7..a23f2b8478 100644 --- a/src/core/atomicdex/api/mm2/mm2.client.cpp +++ b/src/core/atomicdex/api/mm2/mm2.client.cpp @@ -211,10 +211,10 @@ namespace atomic_dex::mm2 return rpc_process_answer(resp, rpc_command); } - t_init_z_coin_cancel_answer - mm2_client::rpc_init_z_coin_cancel(t_init_z_coin_cancel_request&& request) + t_enable_z_coin_cancel_answer + mm2_client::rpc_enable_z_coin_cancel(t_enable_z_coin_cancel_request&& request) { - return process_rpc(std::forward(request), "task::enable_z_coin::cancel", true); + return process_rpc(std::forward(request), "task::enable_z_coin::cancel", true); } t_disable_coin_answer diff --git a/src/core/atomicdex/api/mm2/mm2.client.hpp b/src/core/atomicdex/api/mm2/mm2.client.hpp index 45b71d65d8..9002a09b22 100644 --- a/src/core/atomicdex/api/mm2/mm2.client.hpp +++ b/src/core/atomicdex/api/mm2/mm2.client.hpp @@ -43,6 +43,6 @@ namespace atomic_dex::mm2 t_disable_coin_answer rpc_disable_coin(t_disable_coin_request&& request); t_recover_funds_of_swap_answer rpc_recover_funds(t_recover_funds_of_swap_request&& request); - t_init_z_coin_cancel_answer rpc_init_z_coin_cancel(t_init_z_coin_cancel_request&& request); + t_enable_z_coin_cancel_answer rpc_enable_z_coin_cancel(t_enable_z_coin_cancel_request&& request); }; } // namespace atomic_dex \ No newline at end of file diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.cpp index e640a83816..1c2a90f384 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.cpp @@ -20,23 +20,23 @@ //! Project Headers #include "atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp" -//! Implementation 2.0 RPC [init_z_coin_cancel] +//! Implementation 2.0 RPC [enable_z_coin_cancel] namespace atomic_dex::mm2 { //! Serialization - void to_json(nlohmann::json& j, const init_z_coin_cancel_request& request) + void to_json(nlohmann::json& j, const enable_z_coin_cancel_request& request) { j["params"]["task_id"] = request.task_id; } //! Deserialization - void from_json(const nlohmann::json& j, init_z_coin_cancel_answer_success& answer) + void from_json(const nlohmann::json& j, enable_z_coin_cancel_answer_success& answer) { answer.result = j.at("result").get(); } void - from_json(const nlohmann::json& j, init_z_coin_cancel_answer& answer) + from_json(const nlohmann::json& j, enable_z_coin_cancel_answer& answer) { if (j.count("error") >= 1) { @@ -46,7 +46,7 @@ namespace atomic_dex::mm2 { if (j.contains("result") && j.contains("mmrpc") && j.at("mmrpc").get() == "2.0") { - answer.result = j.get(); + answer.result = j.get(); } } } diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp index 6fbbdcef97..fa6976dfc3 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.cancel.hpp @@ -27,34 +27,34 @@ namespace atomic_dex::mm2 { - struct init_z_coin_cancel_request + struct enable_z_coin_cancel_request { int task_id; }; - void to_json(nlohmann::json& j, const init_z_coin_cancel_request& request); + void to_json(nlohmann::json& j, const enable_z_coin_cancel_request& request); - struct init_z_coin_cancel_answer_success + struct enable_z_coin_cancel_answer_success { std::string result; }; - void from_json(const nlohmann::json& j, init_z_coin_cancel_answer_success& answer); + void from_json(const nlohmann::json& j, enable_z_coin_cancel_answer_success& answer); - struct init_z_coin_cancel_answer + struct enable_z_coin_cancel_answer { - std::optional result; + std::optional result; std::optional error; std::string raw_result; ///< internal int rpc_result_code; ///< internal }; - void from_json(const nlohmann::json& j, init_z_coin_cancel_answer& answer); + void from_json(const nlohmann::json& j, enable_z_coin_cancel_answer& answer); } namespace atomic_dex { - using t_init_z_coin_cancel_request = mm2::init_z_coin_cancel_request; - using t_init_z_coin_cancel_answer = mm2::init_z_coin_cancel_answer; - using t_init_z_coin_cancel_answer_success = mm2::init_z_coin_cancel_answer_success; + using t_enable_z_coin_cancel_request = mm2::enable_z_coin_cancel_request; + using t_enable_z_coin_cancel_answer = mm2::enable_z_coin_cancel_answer; + using t_enable_z_coin_cancel_answer_success = mm2::enable_z_coin_cancel_answer_success; } // namespace atomic_dex \ No newline at end of file diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp index a0ae25f311..c349150d4a 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp @@ -20,11 +20,11 @@ //! Project Headers #include "atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp" -//! Implementation 2.0 RPC [init_z_coin] +//! Implementation 2.0 RPC [enable_z_coin] namespace atomic_dex::mm2 { //! Serialization - void to_json(nlohmann::json& j, const init_z_coin_request& request) + void to_json(nlohmann::json& j, const enable_z_coin_request& request) { j["params"]["ticker"] = request.coin_name; j["params"]["activation_params"]["mode"]["rpc"] = "Light"; @@ -34,7 +34,7 @@ namespace atomic_dex::mm2 } //! Deserialization - void from_json(const nlohmann::json& j, init_z_coin_answer& answer) + void from_json(const nlohmann::json& j, enable_z_coin_answer& answer) { j.at("task_id").get_to(answer.task_id); } diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp index d7fe101369..a0e953fd8c 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp @@ -28,7 +28,7 @@ namespace atomic_dex::mm2 { - struct init_z_coin_request + struct enable_z_coin_request { std::string coin_name; std::vector servers; @@ -38,17 +38,17 @@ namespace atomic_dex::mm2 bool with_tx_history{false}; // Not yet in API }; - struct init_z_coin_answer + struct enable_z_coin_answer { int task_id; }; - void to_json(nlohmann::json& j, const init_z_coin_request& request); - void from_json(const nlohmann::json& j, init_z_coin_answer& answer); + void to_json(nlohmann::json& j, const enable_z_coin_request& request); + void from_json(const nlohmann::json& j, enable_z_coin_answer& answer); } namespace atomic_dex { - using t_init_z_coin_request = mm2::init_z_coin_request; - using t_init_z_coin_answer = mm2::init_z_coin_answer; + using t_enable_z_coin_request = mm2::enable_z_coin_request; + using t_enable_z_coin_answer = mm2::enable_z_coin_answer; } // namespace atomic_dex diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp index 6db6ad778f..4ab2eadedf 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp @@ -20,17 +20,17 @@ //! Project Headers #include "atomicdex/api/mm2/rpc2.task.enable_z_coin.status.hpp" -//! Implementation 2.0 RPC [init_z_coin_status] +//! Implementation 2.0 RPC [enable_z_coin_status] namespace atomic_dex::mm2 { //! Serialization - void to_json(nlohmann::json& j, const init_z_coin_status_request& request) + void to_json(nlohmann::json& j, const enable_z_coin_status_request& request) { j["params"]["task_id"] = request.task_id; } //! Deserialization - void from_json(const nlohmann::json& j, init_z_coin_status_answer_success& answer) + void from_json(const nlohmann::json& j, enable_z_coin_status_answer_success& answer) { j.at("result").at("status").get_to(answer.status); // [InProgress, Ready] j.at("result").at("details").get_to(answer.details); @@ -62,7 +62,7 @@ namespace atomic_dex::mm2 } void - from_json(const nlohmann::json& j, init_z_coin_status_answer& answer) + from_json(const nlohmann::json& j, enable_z_coin_status_answer& answer) { if (j.count("error") >= 1) { @@ -72,7 +72,7 @@ namespace atomic_dex::mm2 { if (j.contains("result") && j.contains("mmrpc") && j.at("mmrpc").get() == "2.0") { - answer.result = j.at("result").get(); + answer.result = j.at("result").get(); } } } diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.hpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.hpp index 845c5e6356..e55735448f 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.hpp @@ -27,14 +27,14 @@ namespace atomic_dex::mm2 { - struct init_z_coin_status_request + struct enable_z_coin_status_request { int task_id; }; - void to_json(nlohmann::json& j, const init_z_coin_status_request& request); + void to_json(nlohmann::json& j, const enable_z_coin_status_request& request); - struct init_z_coin_status_answer_success + struct enable_z_coin_status_answer_success { std::string status{"disabled"}; std::string details{"N/A"}; @@ -48,22 +48,22 @@ namespace atomic_dex::mm2 std::optional unspendable_balance; }; - void from_json(const nlohmann::json& j, init_z_coin_status_answer_success& answer); + void from_json(const nlohmann::json& j, enable_z_coin_status_answer_success& answer); - struct init_z_coin_status_answer + struct enable_z_coin_status_answer { - std::optional result; + std::optional result; std::optional error; std::string raw_result; ///< internal int rpc_result_code; ///< internal }; - void from_json(const nlohmann::json& j, init_z_coin_status_answer& answer); + void from_json(const nlohmann::json& j, enable_z_coin_status_answer& answer); } namespace atomic_dex { - using t_init_z_coin_status_request = mm2::init_z_coin_status_request; - using t_init_z_coin_status_answer = mm2::init_z_coin_status_answer; - using t_init_z_coin_status_answer_success = mm2::init_z_coin_status_answer_success; + using t_enable_z_coin_status_request = mm2::enable_z_coin_status_request; + using t_enable_z_coin_status_answer = mm2::enable_z_coin_status_answer; + using t_enable_z_coin_status_answer_success = mm2::enable_z_coin_status_answer_success; } // namespace atomic_dex diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index eac81d7972..182c045ef1 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1184,7 +1184,7 @@ namespace atomic_dex { auto request_functor = [this](coin_config coin_info) -> std::pair> { - t_init_z_coin_request request{ + t_enable_z_coin_request request{ .coin_name = coin_info.ticker, .servers = coin_info.electrum_urls.value_or(get_electrum_server_from_token(coin_info.ticker)), .z_urls = coin_info.z_urls.value_or(std::vector{}), @@ -1192,7 +1192,7 @@ namespace atomic_dex .is_testnet = coin_info.is_testnet.value_or(false), .with_tx_history = false}; // Tx history not yet ready for ZHTLC - nlohmann::json j = mm2::template_request("init_z_coin", true); + nlohmann::json j = mm2::template_request("task::enable_z_coin::init", true); mm2::to_json(j, request); nlohmann::json batch = nlohmann::json::array(); batch.push_back(j); @@ -1250,11 +1250,11 @@ namespace atomic_dex static std::size_t z_nb_try = 0; nlohmann::json z_error = nlohmann::json::array(); nlohmann::json z_batch_array = nlohmann::json::array(); - t_init_z_coin_status_request z_request{.task_id = task_id}; + t_enable_z_coin_status_request z_request{.task_id = task_id}; - SPDLOG_DEBUG("{} init_z_coin Task ID: {}", tickers[idx], task_id); + SPDLOG_DEBUG("{} enable_z_coin Task ID: {}", tickers[idx], task_id); - nlohmann::json j = mm2::template_request("init_z_coin_status", true); + nlohmann::json j = mm2::template_request("task::enable_z_coin::status", true); mm2::to_json(j, z_request); z_batch_array.push_back(j); std::string last_event = "none"; @@ -1352,7 +1352,7 @@ namespace atomic_dex // There could be no error message if scanning takes too long. // Either we force disable here, or schedule to check on it later // If this happens, address will be "Invalid" and balance will be zero. - // We could save this ticker in a list to try `init_z_coin_status` again on it periodically until complete. + // We could save this ticker in a list to try `enable_z_coin_status` again on it periodically until complete. SPDLOG_DEBUG("Exited zhtlc enable loop after 1000 tries"); SPDLOG_DEBUG( From 661f4bbe68723c358545d72ca5ed1100ba67871d Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 31 Mar 2023 23:21:32 +0800 Subject: [PATCH 055/251] resolve crash from duplicate uuids in orderbook/bestorders response --- atomic_defi_design/Dex/Constants/General.qml | 6 +++--- .../Dex/Exchange/Trade/ProView.qml | 5 ++++- src/core/atomicdex/models/qt.orderbook.model.cpp | 10 ++++++++++ src/core/atomicdex/pages/qt.trading.page.cpp | 12 +++++++++++- src/core/atomicdex/services/mm2/mm2.service.cpp | 16 ++++++++++++---- 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 6f9bff60c8..5487ee8347 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -82,7 +82,7 @@ QtObject { { let progress = 100 if (!activation_status.hasOwnProperty("result")) return progress - console.log("[zhtlcActivationProgress]: " + JSON.stringify(activation_status)) + console.log("["+coin+"] [zhtlcActivationProgress]: " + JSON.stringify(activation_status)) let status = activation_status.result.status let details = activation_status.result.details @@ -97,7 +97,7 @@ QtObject { else if (status == "Ok") { if (details.hasOwnProperty("error")) - console.log("[zhtlcActivationProgress] Error enabling: " + JSON.stringify(details.error)) + console.log("["+coin+"] [zhtlcActivationProgress] Error enabling: " + JSON.stringify(details.error)) } else if (status == "InProgress") { @@ -116,7 +116,7 @@ QtObject { else if (details.hasOwnProperty("RequestingBalance")) progress = 98 else progress = 5 } - else console.log("[zhtlcActivationProgress] Unexpected status: " + status) + else console.log("["+coin+"] [zhtlcActivationProgress] Unexpected status: " + status) return progress } diff --git a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml index f5b7252082..40404524ab 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml @@ -54,7 +54,7 @@ RowLayout { setMarketMode(!is_asks ? MarketMode.Sell : MarketMode.Buy) - API.app.trading_pg.preffered_order = { + let selected_order = { "coin": coin, "price": price, "price_denom": price_denom, @@ -69,6 +69,9 @@ RowLayout "uuid": uuid } + API.app.trading_pg.preffered_order = selected_order + console.log("selected_order: " + JSON.parse(selected_order)) + // Shows place order form in case it has been hidden in the settings. placeOrderForm.visible = true } diff --git a/src/core/atomicdex/models/qt.orderbook.model.cpp b/src/core/atomicdex/models/qt.orderbook.model.cpp index daf5353b75..15f442cd56 100644 --- a/src/core/atomicdex/models/qt.orderbook.model.cpp +++ b/src/core/atomicdex/models/qt.orderbook.model.cpp @@ -364,6 +364,7 @@ namespace atomic_dex void orderbook_model::reset_orderbook(const t_orders_contents& orderbook) { + SPDLOG_DEBUG("[orderbook_model::reset_orderbook]"); if (!orderbook.empty()) { SPDLOG_INFO( @@ -374,6 +375,13 @@ namespace atomic_dex m_orders_id_registry.clear(); for (auto&& order: m_model_data) { + // Maybe adding a suffix for segwit entries could avoid this? + // Working so far, but needs more testing to see if there are ripple effects due to the uuid suffix. + // Early tests confirm order selection and placing do not appear to be negatively affected. + if (order.coin.find("-segwit") != std::string::npos) + { + order.uuid = order.uuid + "-segwit"; + } if (this->m_orders_id_registry.find(order.uuid) == m_orders_id_registry.end()) { this->m_orders_id_registry.emplace(order.uuid); @@ -381,6 +389,8 @@ namespace atomic_dex } this->endResetModel(); emit lengthChanged(); + // This assert was causing a crash due to duplicated UUIDs being filtered out for orders that exist for both segwit and non-segwit of a coin, + // because bestorders response will add duplicate entries (one for each address format) to the response. assert(m_model_data.size() == m_orders_id_registry.size()); } diff --git a/src/core/atomicdex/pages/qt.trading.page.cpp b/src/core/atomicdex/pages/qt.trading.page.cpp index 1a4ecf6415..32680c84f1 100644 --- a/src/core/atomicdex/pages/qt.trading.page.cpp +++ b/src/core/atomicdex/pages/qt.trading.page.cpp @@ -488,28 +488,37 @@ namespace atomic_dex if (!ec) { + SPDLOG_INFO("[process_action::post_process_orderbook_finished]"); auto* wrapper = get_orderbook_wrapper(); m_models_actions[orderbook_need_a_reset] ? wrapper->reset_orderbook(result) : wrapper->refresh_orderbook(result); if (m_models_actions[orderbook_need_a_reset] && this->m_current_trading_mode == TradingModeGadget::Pro) { + SPDLOG_INFO(">>>> [(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(); + this->set_preferred_settings(); } else { const auto base_max_taker_vol = safe_float(wrapper->get_base_max_taker_vol().toJsonObject()["decimal"].toString().toStdString()); + SPDLOG_INFO("[base_max_taker_vol]: {}", wrapper->get_base_max_taker_vol().toJsonObject()["decimal"].toString().toStdString()); auto rel_max_taker = wrapper->get_rel_max_taker_vol().toJsonObject()["decimal"].toString().toStdString(); + SPDLOG_INFO("[rel_max_taker]: {}", wrapper->get_rel_max_taker_vol().toJsonObject()["decimal"].toString().toStdString()); + if (rel_max_taker.empty()) { rel_max_taker = "0"; } + const auto rel_max_taker_vol = safe_float(rel_max_taker); t_float_50 min_vol = safe_float(m_minimal_trading_amount.toStdString()); + SPDLOG_INFO("[min_vol]: {}", m_minimal_trading_amount.toStdString()); + auto adjust_functor = [this, wrapper]() { if (m_post_clear_forms && this->m_current_trading_mode == TradingModeGadget::Pro) { + SPDLOG_INFO("[m_post_clear_forms && this->m_current_trading_mode == TradingModeGadget::Pro]:"); this->determine_max_volume(); this->set_volume(get_max_volume()); this->set_min_trade_vol(wrapper->get_current_min_taker_vol()); @@ -519,6 +528,7 @@ namespace atomic_dex if ((m_market_mode == MarketMode::Buy && rel_max_taker_vol > 0 && min_vol <= 0) || (m_market_mode == MarketMode::Sell && base_max_taker_vol > 0 && min_vol <= 0)) { + SPDLOG_INFO("[adjust_functor()]: Adjusting...."); adjust_functor(); } } diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 182c045ef1..56187eb4da 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1267,9 +1267,12 @@ namespace atomic_dex z_error = z_answers; std::string status = z_answers[0].at("result").at("status").get(); + SPDLOG_DEBUG("{} status : {}", tickers[idx], status); + SPDLOG_DEBUG("{} activation status response [{}]", tickers[idx], z_answers[0].dump()); - if (status == "Ready") + if (status == "Ok") { + SPDLOG_DEBUG("{} activation ready...", tickers[idx]); m_coins_informations[tickers[idx]].activation_status = z_answers[0]; if (z_answers[0].at("result").at("details").contains("error")) { @@ -1308,6 +1311,7 @@ namespace atomic_dex { event = z_answers[0].at("result").at("details").get(); } + SPDLOG_DEBUG("{} activation event [{}]", event, tickers[idx]); if (event != last_event) { @@ -1353,8 +1357,7 @@ namespace atomic_dex // Either we force disable here, or schedule to check on it later // If this happens, address will be "Invalid" and balance will be zero. // We could save this ticker in a list to try `enable_z_coin_status` again on it periodically until complete. - - SPDLOG_DEBUG("Exited zhtlc enable loop after 1000 tries"); + SPDLOG_DEBUG("Exited {} enable loop after 1000 tries ", tickers[idx]); SPDLOG_DEBUG( "Bad answer for zhtlc_error: [{}] -> idx: {}, tickers size: {}, answers size: {}", tickers[idx], idx, tickers.size(), answers.size() @@ -1365,6 +1368,7 @@ namespace atomic_dex } else { + SPDLOG_DEBUG("{} enable loop complete!", tickers[idx]); this->dispatcher_.trigger(tickers[idx], "Complete!"); } } @@ -1380,11 +1384,13 @@ namespace atomic_dex if (!to_remove.empty()) { + SPDLOG_DEBUG("Removing coins which failed activation..."); std::vector disable_coins; for (auto&& t: to_remove) { tickers.erase(std::remove(tickers.begin(), tickers.end(), t), tickers.end()); disable_coins.push_back(t); } + SPDLOG_DEBUG("Updating coins status..."); update_coin_status(this->m_current_wallet_name, disable_coins, false, m_coins_informations, m_coin_cfg_mutex); } @@ -1393,6 +1399,7 @@ namespace atomic_dex dispatcher_.trigger(tickers); if (tickers.size() == 1) { + SPDLOG_DEBUG("Init balance for {}...", tickers[0]); fetch_single_balance(get_coin_info(tickers[0])); } this->m_nb_update_required += 1; @@ -1480,6 +1487,7 @@ namespace atomic_dex return m_coins_informations.contains(ticker); } + // [smk] Only called by trading_page::process_action() t_orderbook_answer mm2_service::get_orderbook(t_mm2_ec& ec) const { auto&& [base, rel] = this->m_synchronized_ticker_pair.get(); @@ -1500,7 +1508,7 @@ namespace atomic_dex nlohmann::json mm2_service::prepare_batch_orderbook(bool is_a_reset) { - // SPDLOG_INFO("is_a_reset: {}", is_a_reset); + SPDLOG_INFO("[prepare_batch_orderbook] is_a_reset: {}", is_a_reset); auto&& [base, rel] = m_synchronized_ticker_pair.get(); if (rel.empty()) return nlohmann::json::array(); From 25ae028f36af4289d6db430c6833b706a6b8a5a0 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 02:27:53 +0800 Subject: [PATCH 056/251] zhtlc withdraw fixes, remove comments. --- atomic_defi_design/Dex/Constants/General.qml | 2 +- .../Dex/Exchange/Trade/ProView.qml | 1 - src/core/atomicdex/api/mm2/mm2.client.hpp | 4 +- src/core/atomicdex/api/mm2/mm2.cpp | 2 +- .../mm2/rpc2.task.enable_z_coin.status.cpp | 1 + ...thdraw.cpp => rpc2.task.withdraw.init.cpp} | 10 ++-- ...thdraw.hpp => rpc2.task.withdraw.init.hpp} | 18 +++---- ...atus.cpp => rpc2.task.withdraw.status.cpp} | 5 +- ...atus.hpp => rpc2.task.withdraw.status.hpp} | 0 src/core/atomicdex/pages/qt.trading.page.cpp | 12 ++--- src/core/atomicdex/pages/qt.wallet.page.cpp | 50 +++++++++++-------- .../atomicdex/services/mm2/mm2.service.cpp | 50 ++++++++++++++----- 12 files changed, 95 insertions(+), 60 deletions(-) rename src/core/atomicdex/api/mm2/{rpc2.init_withdraw.cpp => rpc2.task.withdraw.init.cpp} (87%) rename src/core/atomicdex/api/mm2/{rpc2.init_withdraw.hpp => rpc2.task.withdraw.init.hpp} (79%) rename src/core/atomicdex/api/mm2/{rpc2.withdraw_status.cpp => rpc2.task.withdraw.status.cpp} (90%) rename src/core/atomicdex/api/mm2/{rpc2.withdraw_status.hpp => rpc2.task.withdraw.status.hpp} (100%) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 5487ee8347..bcd143edea 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -82,7 +82,7 @@ QtObject { { let progress = 100 if (!activation_status.hasOwnProperty("result")) return progress - console.log("["+coin+"] [zhtlcActivationProgress]: " + JSON.stringify(activation_status)) + // console.log("["+coin+"] [zhtlcActivationProgress]: " + JSON.stringify(activation_status)) let status = activation_status.result.status let details = activation_status.result.details diff --git a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml index 40404524ab..8ece685a34 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml @@ -70,7 +70,6 @@ RowLayout } API.app.trading_pg.preffered_order = selected_order - console.log("selected_order: " + JSON.parse(selected_order)) // Shows place order form in case it has been hidden in the settings. placeOrderForm.visible = true diff --git a/src/core/atomicdex/api/mm2/mm2.client.hpp b/src/core/atomicdex/api/mm2/mm2.client.hpp index 9002a09b22..26a6b92672 100644 --- a/src/core/atomicdex/api/mm2/mm2.client.hpp +++ b/src/core/atomicdex/api/mm2/mm2.client.hpp @@ -41,8 +41,8 @@ namespace atomic_dex::mm2 template RpcReturnType rpc_process_answer(const web::http::http_response& resp, const std::string& rpc_command); - t_disable_coin_answer rpc_disable_coin(t_disable_coin_request&& request); - t_recover_funds_of_swap_answer rpc_recover_funds(t_recover_funds_of_swap_request&& request); + t_disable_coin_answer rpc_disable_coin(t_disable_coin_request&& request); + t_recover_funds_of_swap_answer rpc_recover_funds(t_recover_funds_of_swap_request&& request); t_enable_z_coin_cancel_answer rpc_enable_z_coin_cancel(t_enable_z_coin_cancel_request&& request); }; } // namespace atomic_dex \ No newline at end of file diff --git a/src/core/atomicdex/api/mm2/mm2.cpp b/src/core/atomicdex/api/mm2/mm2.cpp index d889bd07d1..a5125d71a3 100644 --- a/src/core/atomicdex/api/mm2/mm2.cpp +++ b/src/core/atomicdex/api/mm2/mm2.cpp @@ -27,7 +27,7 @@ #include "atomicdex/api/mm2/rpc.trade.preimage.hpp" #include "atomicdex/api/mm2/rpc.validate.address.hpp" #include "atomicdex/api/mm2/rpc.withdraw.hpp" -#include "atomicdex/api/mm2/rpc2.withdraw_status.hpp" +#include "atomicdex/api/mm2/rpc2.task.withdraw.status.hpp" #include "atomicdex/api/mm2/rpc.recover.funds.hpp" #include "atomicdex/pages/qt.settings.page.hpp" #include "atomicdex/services/price/global.provider.hpp" diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp index 4ab2eadedf..ec2411e0b1 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp @@ -27,6 +27,7 @@ namespace atomic_dex::mm2 void to_json(nlohmann::json& j, const enable_z_coin_status_request& request) { j["params"]["task_id"] = request.task_id; + j["params"]["forget_if_finished"] = false; } //! Deserialization diff --git a/src/core/atomicdex/api/mm2/rpc2.init_withdraw.cpp b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.cpp similarity index 87% rename from src/core/atomicdex/api/mm2/rpc2.init_withdraw.cpp rename to src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.cpp index b42ca76fb2..87a4aa993a 100644 --- a/src/core/atomicdex/api/mm2/rpc2.init_withdraw.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.cpp @@ -18,20 +18,20 @@ #include //! Project Headers -#include "atomicdex/api/mm2/rpc2.init_withdraw.hpp" +#include "atomicdex/api/mm2/rpc2.task.withdraw.init.hpp" -//! Implementation 2.0 RPC [init_withdraw] +//! Implementation 2.0 RPC [withdraw_init] namespace atomic_dex::mm2 { void - to_json(nlohmann::json& j, const init_withdraw_fees& request) + to_json(nlohmann::json& j, const withdraw_init_fees& request) { j["type"] = request.type; j["amount"] = request.amount.value(); } //! Serialization - void to_json(nlohmann::json& j, const init_withdraw_request& request) + void to_json(nlohmann::json& j, const withdraw_init_request& request) { nlohmann::json obj = nlohmann::json::object(); @@ -48,7 +48,7 @@ namespace atomic_dex::mm2 } //! Deserialization - void from_json(const nlohmann::json& j, init_withdraw_answer& answer) + void from_json(const nlohmann::json& j, withdraw_init_answer& answer) { j.at("task_id").get_to(answer.task_id); } diff --git a/src/core/atomicdex/api/mm2/rpc2.init_withdraw.hpp b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.hpp similarity index 79% rename from src/core/atomicdex/api/mm2/rpc2.init_withdraw.hpp rename to src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.hpp index 2f214f6de9..1fdc060b32 100644 --- a/src/core/atomicdex/api/mm2/rpc2.init_withdraw.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.hpp @@ -24,33 +24,33 @@ namespace atomic_dex::mm2 { - struct init_withdraw_fees + struct withdraw_init_fees { std::string type; ///< UtxoFixed, UtxoPerKbyte, EthGas, Qrc20Gas std::optional amount; ///< Utxo only }; - struct init_withdraw_request + struct withdraw_init_request { std::string coin; std::string to; std::string amount; - std::optional fees{std::nullopt}; ///< ignored if std::nullopt + std::optional fees{std::nullopt}; ///< ignored if std::nullopt bool max{false}; }; - struct init_withdraw_answer + struct withdraw_init_answer { int task_id; }; - void to_json(nlohmann::json& j, const init_withdraw_request& request); - void from_json(const nlohmann::json& j, init_withdraw_answer& answer); + void to_json(nlohmann::json& j, const withdraw_init_request& request); + void from_json(const nlohmann::json& j, withdraw_init_answer& answer); } namespace atomic_dex { - using t_init_withdraw_request = mm2::init_withdraw_request; - using t_init_withdraw_fees = mm2::init_withdraw_fees; - using t_init_withdraw_answer = mm2::init_withdraw_answer; + using t_withdraw_init_request = mm2::withdraw_init_request; + using t_withdraw_init_fees = mm2::withdraw_init_fees; + using t_withdraw_init_answer = mm2::withdraw_init_answer; } // namespace atomic_dex diff --git a/src/core/atomicdex/api/mm2/rpc2.withdraw_status.cpp b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.status.cpp similarity index 90% rename from src/core/atomicdex/api/mm2/rpc2.withdraw_status.cpp rename to src/core/atomicdex/api/mm2/rpc2.task.withdraw.status.cpp index c38d5cfbe0..9df0b7b0af 100644 --- a/src/core/atomicdex/api/mm2/rpc2.withdraw_status.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.status.cpp @@ -18,7 +18,7 @@ #include //! Project Headers -#include "atomicdex/api/mm2/rpc2.withdraw_status.hpp" +#include "atomicdex/api/mm2/rpc2.task.withdraw.status.hpp" //! Implementation 2.0 RPC [withdraw_status] namespace atomic_dex::mm2 @@ -27,6 +27,7 @@ namespace atomic_dex::mm2 void to_json(nlohmann::json& j, const withdraw_status_request& request) { j["params"]["task_id"] = request.task_id; + j["params"]["forget_if_finished"] = false; } //! Deserialization @@ -38,7 +39,7 @@ namespace atomic_dex::mm2 } else { - answer.result = j.at("result").at("details").at("result").get(); + answer.result = j.at("result").at("details").get(); } } } // namespace atomic_dex::mm2 diff --git a/src/core/atomicdex/api/mm2/rpc2.withdraw_status.hpp b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.status.hpp similarity index 100% rename from src/core/atomicdex/api/mm2/rpc2.withdraw_status.hpp rename to src/core/atomicdex/api/mm2/rpc2.task.withdraw.status.hpp diff --git a/src/core/atomicdex/pages/qt.trading.page.cpp b/src/core/atomicdex/pages/qt.trading.page.cpp index 32680c84f1..032141b9d9 100644 --- a/src/core/atomicdex/pages/qt.trading.page.cpp +++ b/src/core/atomicdex/pages/qt.trading.page.cpp @@ -488,22 +488,21 @@ namespace atomic_dex if (!ec) { - SPDLOG_INFO("[process_action::post_process_orderbook_finished]"); + // SPDLOG_DEBUG("[process_action::post_process_orderbook_finished]"); auto* wrapper = get_orderbook_wrapper(); m_models_actions[orderbook_need_a_reset] ? wrapper->reset_orderbook(result) : wrapper->refresh_orderbook(result); if (m_models_actions[orderbook_need_a_reset] && this->m_current_trading_mode == TradingModeGadget::Pro) { - SPDLOG_INFO(">>>> [(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 { const auto base_max_taker_vol = safe_float(wrapper->get_base_max_taker_vol().toJsonObject()["decimal"].toString().toStdString()); - SPDLOG_INFO("[base_max_taker_vol]: {}", wrapper->get_base_max_taker_vol().toJsonObject()["decimal"].toString().toStdString()); + // SPDLOG_DEBUG("[base_max_taker_vol]: {}", wrapper->get_base_max_taker_vol().toJsonObject()["decimal"].toString().toStdString()); auto rel_max_taker = wrapper->get_rel_max_taker_vol().toJsonObject()["decimal"].toString().toStdString(); - SPDLOG_INFO("[rel_max_taker]: {}", wrapper->get_rel_max_taker_vol().toJsonObject()["decimal"].toString().toStdString()); + // SPDLOG_DEBUG("[rel_max_taker]: {}", wrapper->get_rel_max_taker_vol().toJsonObject()["decimal"].toString().toStdString()); if (rel_max_taker.empty()) { @@ -512,13 +511,12 @@ namespace atomic_dex const auto rel_max_taker_vol = safe_float(rel_max_taker); t_float_50 min_vol = safe_float(m_minimal_trading_amount.toStdString()); - SPDLOG_INFO("[min_vol]: {}", m_minimal_trading_amount.toStdString()); + // SPDLOG_DEBUG("[min_vol]: {}", m_minimal_trading_amount.toStdString()); auto adjust_functor = [this, wrapper]() { if (m_post_clear_forms && this->m_current_trading_mode == TradingModeGadget::Pro) { - SPDLOG_INFO("[m_post_clear_forms && this->m_current_trading_mode == TradingModeGadget::Pro]:"); this->determine_max_volume(); this->set_volume(get_max_volume()); this->set_min_trade_vol(wrapper->get_current_min_taker_vol()); @@ -528,7 +526,7 @@ namespace atomic_dex if ((m_market_mode == MarketMode::Buy && rel_max_taker_vol > 0 && min_vol <= 0) || (m_market_mode == MarketMode::Sell && base_max_taker_vol > 0 && min_vol <= 0)) { - SPDLOG_INFO("[adjust_functor()]: Adjusting...."); + // SPDLOG_DEBUG("[adjust_functor()]: Adjusting...."); adjust_functor(); } } diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index ec0fd4e477..b32223949e 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -15,8 +15,8 @@ #include "atomicdex/api/mm2/rpc.electrum.hpp" #include "atomicdex/api/mm2/rpc.validate.address.hpp" #include "atomicdex/api/mm2/rpc.withdraw.hpp" -#include "atomicdex/api/mm2/rpc2.init_withdraw.hpp" -#include "atomicdex/api/mm2/rpc2.withdraw_status.hpp" +#include "atomicdex/api/mm2/rpc2.task.withdraw.init.hpp" +#include "atomicdex/api/mm2/rpc2.task.withdraw.status.hpp" #include "atomicdex/services/mm2/mm2.service.hpp" #include "atomicdex/services/price/global.provider.hpp" #include "atomicdex/services/price/komodo_prices/komodo.prices.provider.hpp" @@ -289,7 +289,6 @@ namespace atomic_dex obj["has_parent_fees_ticker"] = coin_info.has_parent_fees_ticker; obj["fees_ticker"] = QString::fromStdString(coin_info.fees_ticker); obj["is_claimable"] = coin_info.is_claimable; - obj["address"] = QString::fromStdString(mm2_system.address(ticker, ec)); obj["minimal_balance_for_asking_rewards"] = QString::fromStdString(coin_info.minimal_claim_amount); obj["explorer_url"] = QString::fromStdString(coin_info.explorer_url); obj["current_currency_ticker_price"] = QString::fromStdString(price_service.get_rate_conversion(config.current_currency, ticker, true)); @@ -299,15 +298,26 @@ namespace atomic_dex obj["fiat_amount"] = QString::fromStdString(price_service.get_price_in_fiat(config.current_currency, ticker, ec)); obj["activation_status"] = nlohmann_json_object_to_qt_json_object(coin_info.activation_status); obj["trend_7d"] = nlohmann_json_array_to_qt_json_array(provider.get_ticker_historical(ticker)); - obj["fee_ticker"] = QString::fromStdString(coin_info.fees_ticker); - obj["blocks_left"] = static_cast(tx_state.blocks_left); - obj["transactions_left"] = static_cast(tx_state.transactions_left); - obj["current_block"] = static_cast(tx_state.current_block); - obj["is_smartchain_test_coin"] = coin_info.ticker == "RICK" || coin_info.ticker == "MORTY" || coin_info.ticker == "ZOMBIE"; + obj["fee_ticker"] = QString::fromStdString(coin_info.fees_ticker); + obj["blocks_left"] = static_cast(tx_state.blocks_left); + obj["transactions_left"] = static_cast(tx_state.transactions_left); + obj["current_block"] = static_cast(tx_state.current_block); + obj["is_smartchain_test_coin"] = coin_info.ticker == "RICK" || coin_info.ticker == "MORTY" || coin_info.ticker == "ZOMBIE"; + std::error_code ec; - qrcodegen::QrCode qr0 = qrcodegen::QrCode::encodeText(mm2_system.address(ticker, ec).c_str(), qrcodegen::QrCode::Ecc::MEDIUM); - std::string svg = qr0.toSvgString(2); - obj["qrcode_address"] = QString::fromStdString("data:image/svg+xml;base64,") + QString::fromStdString(svg).toLocal8Bit().toBase64(); + if (!mm2_system.is_zhtlc_coin_ready(coin_info.ticker)) + { + obj["address"] = "activating"; + obj["qrcode_address"] = ""; + + } + else + { + obj["address"] = QString::fromStdString(mm2_system.address(ticker, ec)); + qrcodegen::QrCode qr0 = qrcodegen::QrCode::encodeText(mm2_system.address(ticker, ec).c_str(), qrcodegen::QrCode::Ecc::MEDIUM); + std::string svg = qr0.toSvgString(2); + obj["qrcode_address"] = QString::fromStdString("data:image/svg+xml;base64,") + QString::fromStdString(svg).toLocal8Bit().toBase64(); + } } return obj; } @@ -507,20 +517,20 @@ namespace atomic_dex if (coin_info.is_zhtlc_family) { - t_init_withdraw_request init_withdraw_req{.coin = ticker, .to = address.toStdString(), .amount = max ? "0" : amount.toStdString(), .max = max}; + t_withdraw_init_request withdraw_init_req{.coin = ticker, .to = address.toStdString(), .amount = max ? "0" : amount.toStdString(), .max = max}; if (with_fees) { qDebug() << fees_data; auto json_fees = nlohmann::json::parse(QString(QJsonDocument(QVariant(fees_data).toJsonObject()).toJson()).toStdString()); - init_withdraw_req.fees = t_init_withdraw_fees{ + withdraw_init_req.fees = t_withdraw_init_fees{ .type = "UtxoFixed", .amount = json_fees.at("fees_amount").get() }; } - nlohmann::json json_data = mm2::template_request("init_withdraw", true); + nlohmann::json json_data = mm2::template_request("task::withdraw::init", true); - mm2::to_json(json_data, init_withdraw_req); + mm2::to_json(json_data, withdraw_init_req); batch.push_back(json_data); std::string amount_std = amount.toStdString(); @@ -553,7 +563,7 @@ namespace atomic_dex QString z_status; t_withdraw_status_request z_request{.task_id = task_id}; - nlohmann::json j = mm2::template_request("withdraw_status", true); + nlohmann::json j = mm2::template_request("task::withdraw::status", true); mm2::to_json(j, z_request); z_batch_array.push_back(j); @@ -565,13 +575,13 @@ namespace atomic_dex z_status = QString::fromStdString(z_answers[0].at("result").at("status").get()); SPDLOG_DEBUG("[{}/120] Waiting for {} withdraw status [{}]...", z_nb_try, ticker, z_status.toUtf8().constData()); - if (z_status == "Ready") + if (z_status == "Ok") { break; } else { - set_withdraw_status("Generating transaction... "); + set_withdraw_status("Generating transaction"); } std::this_thread::sleep_for(2s); z_nb_try += 1; @@ -596,9 +606,9 @@ namespace atomic_dex } else { - auto withdraw_answer = mm2::rpc_process_answer_batch(z_error[0], "withdraw_status"); + auto withdraw_answer = mm2::rpc_process_answer_batch(z_error[0], "task::withdraw::status"); nlohmann::json j_out = nlohmann::json::object(); - j_out["withdraw_answer"] = z_error[0]["result"]["details"]["result"]; + j_out["withdraw_answer"] = z_error[0]["result"]["details"]; j_out.at("withdraw_answer")["date"] = withdraw_answer.result.value().timestamp_as_date; // Add total amount in fiat currency. diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 56187eb4da..898de31b43 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1103,30 +1103,56 @@ namespace atomic_dex } else { - std::string method = "my_tx_history"; std::size_t limit = 5000; bool requires_v2 = false; - if (coin_info.is_zhtlc_family) + std::string method = "my_tx_history"; + if (coin_info.coin_type == CoinTypeGadget::SLP || coin_info.ticker == "tBCH" || coin_info.ticker == "BCH") { requires_v2 = true; - limit = 50; - method = "z_coin_tx_history"; + t_tx_history_request request{.coin = ticker, .limit = limit}; + nlohmann::json j = mm2::template_request(method, requires_v2); + mm2::to_json(j, request); + batch_array.push_back(j); } - else if (coin_info.coin_type == CoinTypeGadget::SLP || coin_info.ticker == "tBCH" || coin_info.ticker == "BCH") + else if (coin_info.is_zhtlc_family) { - requires_v2 = true; + // Don't request balance / history if not completely activated. + if (coin_info.activation_status.at("result").at("status") == "Ok") + { + limit = 50; + requires_v2 = true; + method = "z_coin_tx_history"; + t_tx_history_request request{.coin = ticker, .limit = limit}; + nlohmann::json j = mm2::template_request(method, requires_v2); + mm2::to_json(j, request); + batch_array.push_back(j); + } + } + else + { + t_tx_history_request request{.coin = ticker, .limit = limit}; + nlohmann::json j = mm2::template_request(method, requires_v2); + mm2::to_json(j, request); + batch_array.push_back(j); } - t_tx_history_request request{.coin = ticker, .limit = limit}; - nlohmann::json j = mm2::template_request(method, requires_v2); - mm2::to_json(j, request); - batch_array.push_back(j); } if (not only_tx) { for (auto&& coin : enabled_coins) { + coin_info = get_coin_info(ticker); + + if (coin_info.is_zhtlc_family) + { + // Don't request balance / history if not completely activated. + if (coin_info.activation_status.at("result").at("status") != "Ok") + { + continue; + } + } + if (is_pin_cfg_enabled()) { std::shared_lock lock(m_balance_mutex); ///< shared_lock @@ -1447,10 +1473,10 @@ namespace atomic_dex { if (coin_info.activation_status.contains("result")) { - SPDLOG_DEBUG("coin_info.activation_status {} {} :", coin, coin_info.activation_status.dump(4)); + // SPDLOG_DEBUG("coin_info.activation_status {} {} :", coin, coin_info.activation_status.dump(4)); if (coin_info.activation_status.at("result").contains("status")) { - if (coin_info.activation_status.at("result").at("status") == "Ready") + if (coin_info.activation_status.at("result").at("status") == "Ok") { if (coin_info.activation_status.at("result").contains("details")) { From 9abf5e0e9956a7634d65d7294ada32dbf84c313a Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 17:22:10 +0800 Subject: [PATCH 057/251] add tendermint enums --- .../api/mm2/rpc2.task.enable_z_coin.status.cpp | 14 +++++++------- src/core/atomicdex/constants/qt.coins.enums.hpp | 10 ++++++---- src/core/atomicdex/pages/qt.wallet.page.cpp | 8 ++++---- .../services/internet/internet.checker.service.cpp | 2 +- src/core/atomicdex/services/mm2/mm2.service.cpp | 7 +++++++ src/core/atomicdex/services/mm2/mm2.service.hpp | 5 ++++- 6 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp index ec2411e0b1..eff12d0753 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.status.cpp @@ -49,15 +49,15 @@ namespace atomic_dex::mm2 if (j.at("result").at("details").contains("result")) { - answer.coin = j.at("result").at("details").at("result").at("ticker").get(); - answer.current_block = j.at("result").at("details").at("result").at("current_block").get(); + answer.coin = j.at("result").at("details").at("ticker").get(); + answer.current_block = j.at("result").at("details").at("current_block").get(); - if (j.at("result").at("details").at("result").contains("wallet_balance")) + if (j.at("result").at("details").contains("wallet_balance")) { - answer.wallet_type = j.at("result").at("details").at("result").at("wallet_balance").at("wallet_type").get(); - answer.address = j.at("result").at("details").at("result").at("wallet_balance").at("address").get(); - answer.spendable_balance = j.at("result").at("details").at("result").at("wallet_balance").at("balance").at("spendable").get(); - answer.unspendable_balance = j.at("result").at("details").at("result").at("wallet_balance").at("balance").at("unspendable").get(); + answer.wallet_type = j.at("result").at("details").at("wallet_balance").at("wallet_type").get(); + answer.address = j.at("result").at("details").at("wallet_balance").at("address").get(); + answer.spendable_balance = j.at("result").at("details").at("wallet_balance").at("balance").at("spendable").get(); + answer.unspendable_balance = j.at("result").at("details").at("wallet_balance").at("balance").at("unspendable").get(); } } } diff --git a/src/core/atomicdex/constants/qt.coins.enums.hpp b/src/core/atomicdex/constants/qt.coins.enums.hpp index 83f70bcc5e..c1efbbe18f 100644 --- a/src/core/atomicdex/constants/qt.coins.enums.hpp +++ b/src/core/atomicdex/constants/qt.coins.enums.hpp @@ -52,10 +52,12 @@ namespace atomic_dex EthereumClassic = 18, RSK = 19, ZHTLC = 20, - Disabled = 21, - Invalid = 22, - All = 23, - Size = 24 + TENDERMINT = 21, + TENDERMINTTOKEN = 22, + Disabled = 23, + Invalid = 24, + All = 25, + Size = 26 }; Q_ENUM(CoinTypeEnum) diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index b32223949e..0d2299c908 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -558,6 +558,7 @@ namespace atomic_dex using namespace std::chrono_literals; auto& mm2_system = m_system_manager.get_system(); static std::size_t z_nb_try = 1; + static std::size_t loop_limit = 600; nlohmann::json z_error = nlohmann::json::array(); nlohmann::json z_batch_array = nlohmann::json::array(); QString z_status; @@ -574,7 +575,7 @@ namespace atomic_dex z_error = z_answers; z_status = QString::fromStdString(z_answers[0].at("result").at("status").get()); - SPDLOG_DEBUG("[{}/120] Waiting for {} withdraw status [{}]...", z_nb_try, ticker, z_status.toUtf8().constData()); + SPDLOG_DEBUG("[{}/{}] Waiting for {} withdraw status [{}]...", z_nb_try, loop_limit, ticker, z_status.toUtf8().constData()); if (z_status == "Ok") { break; @@ -586,7 +587,7 @@ namespace atomic_dex std::this_thread::sleep_for(2s); z_nb_try += 1; - } while (z_nb_try < 120); + } while (z_nb_try < loop_limit); try { if (z_error[0].at("result").at("details").contains("error")) @@ -595,7 +596,7 @@ namespace atomic_dex z_status = QString::fromStdString(z_error[0].at("result").at("details").at("error").get()); set_withdraw_status(z_status); } - else if (z_nb_try == 120) + else if (z_nb_try == loop_limit) { // TODO: Handle this case. // There could be no error message if scanning takes too long. @@ -642,7 +643,6 @@ namespace atomic_dex j_out["withdraw_answer"]["fee_details"]["amount_fiat"] = global_price_system.get_price_as_currency_from_amount(current_fiat, coin_info.fees_ticker, fee); } - SPDLOG_DEBUG("zhtlc set_rpc_send_data (else)"); this->set_rpc_send_data(nlohmann_json_object_to_qt_json_object(j_out)); set_withdraw_status("Complete"); } diff --git a/src/core/atomicdex/services/internet/internet.checker.service.cpp b/src/core/atomicdex/services/internet/internet.checker.service.cpp index 548cf80071..f848c3a6b9 100644 --- a/src/core/atomicdex/services/internet/internet.checker.service.cpp +++ b/src/core/atomicdex/services/internet/internet.checker.service.cpp @@ -170,7 +170,7 @@ namespace atomic_dex auto& mm2 = this->m_system_manager.get_system(); if (mm2.is_mm2_running()) { - SPDLOG_INFO("mm2 is alive, checking if ware able to fetch a simple orderbook"); + SPDLOG_INFO("mm2 is alive, checking if we are able to fetch a simple orderbook"); nlohmann::json batch = nlohmann::json::array(); nlohmann::json current_request = mm2::template_request("orderbook", true); t_orderbook_request req_orderbook{.base = g_primary_dex_coin, .rel = g_second_primary_dex_coin}; diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 898de31b43..b5b510f64e 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -413,6 +413,13 @@ namespace atomic_dex return destination; } + void mm2_service::enable_z_coin_cancel(const std::int8_t task_id) + { + t_enable_z_coin_cancel_request request{.task_id = task_id}; + auto answer = m_mm2_client.rpc_enable_z_coin_cancel(std::move(request)); + SPDLOG_INFO("mm2_service::enable_z_coin_cancel: [task_id {}] result: {}", task_id, answer.raw_result); + } + bool mm2_service::disable_coin(const std::string& ticker, std::error_code& ec) { coin_config coin_info = get_coin_info(ticker); diff --git a/src/core/atomicdex/services/mm2/mm2.service.hpp b/src/core/atomicdex/services/mm2/mm2.service.hpp index 9b998f044d..1e0f742a8f 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.hpp +++ b/src/core/atomicdex/services/mm2/mm2.service.hpp @@ -176,7 +176,7 @@ namespace atomic_dex void enable_slp_testnet_coin(coin_config coin_config); void enable_slp_testnet_coins(const t_coins& coins); void enable_zhtlc(const t_coins& coins); - + // Balances processing functions void process_balance_answer(const mm2::enable_bch_with_tokens_rpc& rpc); // Called after enabling SLP coins along tBCH/BCH. void process_balance_answer(const mm2::enable_slp_rpc& rpc); // Called after enabling an SLP coin. @@ -191,6 +191,9 @@ namespace atomic_dex [[nodiscard]] nlohmann::json get_zhtlc_status(const std::string coin) const; + //! Cancel zhtlc activation + void enable_z_coin_cancel(const std::int8_t task_id); + //! Disable a single coin bool disable_coin(const std::string& ticker, std::error_code& ec); From 576a2c664329f1d9030128b84161260aa9340b7f Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 17:35:08 +0800 Subject: [PATCH 058/251] add tendermint coin configs --- src/core/atomicdex/config/coins.cfg.cpp | 27 +++++++++++++++++++++++++ src/core/atomicdex/config/coins.cfg.hpp | 3 +++ 2 files changed, 30 insertions(+) diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index b74b08a035..54bb4d4c05 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -105,6 +105,14 @@ namespace { return CoinType::RSK; } + if (coin_type == "TENDERMINT") + { + return CoinType::TENDERMINT; + } + if (coin_type == "TENDERMINTTOKEN") + { + return CoinType::TENDERMINTTOKEN; + } if (coin_type == "ZHTLC") { return CoinType::ZHTLC; @@ -137,6 +145,7 @@ namespace atomic_dex j.at("explorer_url").get_to(cfg.explorer_url); cfg.gui_ticker = j.contains("gui_coin") ? j.at("gui_coin").get() : cfg.ticker; + cfg.parent_coin = j.contains("parent_coin") ? j.at("parent_coin").get() : cfg.ticker; cfg.minimal_claim_amount = cfg.is_claimable ? j.at("minimal_claim_amount").get() : "0"; cfg.coinpaprika_id = j.contains("coinpaprika_id") ? j.at("coinpaprika_id").get() : "test-coin"; cfg.coingecko_id = j.contains("coingecko_id") ? j.at("coingecko_id").get() : "test-coin"; @@ -190,6 +199,16 @@ namespace atomic_dex cfg.eth_family_urls->push_back(url.url); } } + if (j.contains("rpc_urls")) + { + auto rpc_urls_obj = j.at("rpc_urls").get>(); + std::vector rpc_urls_list; + cfg.rpc_urls = rpc_urls_list; + for (const auto& url : rpc_urls_obj) + { + cfg.rpc_urls->push_back(url.url); + } + } if (j.contains("allow_slp_unsafe_conf")) { cfg.allow_slp_unsafe_conf = j.at("allow_slp_unsafe_conf").get(); @@ -308,6 +327,14 @@ namespace atomic_dex cfg.has_parent_fees_ticker = true; cfg.fees_ticker = cfg.is_testnet.value() ? "tBCH" : "BCH"; break; + case CoinType::TENDERMINT: + cfg.has_parent_fees_ticker = true; + cfg.fees_ticker = cfg.parent_coin; + break; + case CoinType::TENDERMINTTOKEN: + cfg.has_parent_fees_ticker = true; + cfg.fees_ticker = cfg.parent_coin; + break; case CoinType::ZHTLC: cfg.has_parent_fees_ticker = false; cfg.is_zhtlc_family = true; diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index 67c8100132..e5b7ddd04c 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -36,10 +36,12 @@ namespace atomic_dex static constexpr const char* matic_gas_stations = "https://gasstation-mainnet.matic.network/"; using electrum_servers = std::vector; using nodes = std::vector; + using url_list = std::vector; using eth_family_url_list = std::vector; using bchd_url_list = std::vector; using light_wallet_d_servers = std::vector; ///< For ZHTLC std::string ticker; + std::string parent_coin; std::string fees_ticker; std::string gui_ticker; ///< Ticker displayed in the gui std::string name; ///< nice name @@ -56,6 +58,7 @@ namespace atomic_dex std::optional> other_types; std::optional electrum_urls; std::optional urls; + std::optional rpc_urls; std::optional z_urls; std::optional eth_family_urls; std::optional bchd_urls; From daaed7581a31f7c1d40fbcad983899270438603b Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 17:54:21 +0800 Subject: [PATCH 059/251] add 'has_memos' to coin config attrib --- atomic_defi_design/Dex/Constants/General.qml | 4 ++++ src/core/atomicdex/config/coins.cfg.cpp | 3 +++ src/core/atomicdex/config/coins.cfg.hpp | 1 + 3 files changed, 8 insertions(+) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index bcd143edea..289be4f33b 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -58,6 +58,10 @@ QtObject { return API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker).is_wallet_only } + function is_coin_with_memo(coin_info) { + return coin_info.has_memos + } + function getLanguage() { return API.app.settings_pg.lang diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index 54bb4d4c05..c71bba1be8 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -330,15 +330,18 @@ namespace atomic_dex case CoinType::TENDERMINT: cfg.has_parent_fees_ticker = true; cfg.fees_ticker = cfg.parent_coin; + cfg.has_memos = true; break; case CoinType::TENDERMINTTOKEN: cfg.has_parent_fees_ticker = true; cfg.fees_ticker = cfg.parent_coin; + cfg.has_memos = true; break; case CoinType::ZHTLC: cfg.has_parent_fees_ticker = false; cfg.is_zhtlc_family = true; cfg.fees_ticker = cfg.ticker; + cfg.has_memos = true; break; case CoinType::Invalid: cfg.has_parent_fees_ticker = false; diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index e5b7ddd04c..1ae64d20f6 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -73,6 +73,7 @@ namespace atomic_dex bool checked{false}; bool wallet_only{false}; bool is_claimable{false}; + bool has_memos{false}; bool is_custom_coin{false}; bool currently_enabled{false}; bool has_parent_fees_ticker{false}; ///< True if parent fees is different from current ticker eg: ERC20 tokens From 3897b1fbdf9bf682b0f26153e6f32a8d33e4156b Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 18:06:14 +0800 Subject: [PATCH 060/251] remove duplicate code --- src/core/atomicdex/api/mm2/enable_slp_rpc.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/atomicdex/api/mm2/enable_slp_rpc.cpp b/src/core/atomicdex/api/mm2/enable_slp_rpc.cpp index 314005d743..82f1524d94 100644 --- a/src/core/atomicdex/api/mm2/enable_slp_rpc.cpp +++ b/src/core/atomicdex/api/mm2/enable_slp_rpc.cpp @@ -19,7 +19,6 @@ namespace atomic_dex::mm2 void from_json(const nlohmann::json& j, enable_slp_rpc_result& in) { - j.at("token_id").get_to(in.token_id); j.at("platform_coin").get_to(in.platform_coin); j.at("required_confirmations").get_to(in.required_confirmations); j.at("token_id").get_to(in.token_id); From 87033bd74fc632639fe8f3b4e9c1aeff71de7e70 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 18:06:36 +0800 Subject: [PATCH 061/251] add memo field to withdraw form --- atomic_defi_design/Dex/Wallet/SendModal.qml | 40 ++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/atomic_defi_design/Dex/Wallet/SendModal.qml b/atomic_defi_design/Dex/Wallet/SendModal.qml index 3ae2949107..a8905c7c38 100644 --- a/atomic_defi_design/Dex/Wallet/SendModal.qml +++ b/atomic_defi_design/Dex/Wallet/SendModal.qml @@ -48,7 +48,7 @@ MultipageModal function getCryptoAmount() { return _preparePage.cryptoSendMode ? input_amount.text : equivalentAmount.value } - function prepareSendCoin(address, amount, with_fees, fees_amount, is_special_token, gas_limit, gas_price) { + function prepareSendCoin(address, amount, with_fees, fees_amount, is_special_token, gas_limit, gas_price, memo="") { let max = parseFloat(current_ticker_infos.balance) === parseFloat(amount) // Save for later check @@ -62,7 +62,7 @@ MultipageModal gas_price, gas_limit: gas_limit === "" ? 0 : parseInt(gas_limit) } - api_wallet_page.send(address, amount, max, with_fees, fees_info) + api_wallet_page.send(address, amount, max, with_fees, fees_info, memo) } function sendCoin() { @@ -361,6 +361,30 @@ MultipageModal Item { Layout.fillWidth: true } } + DefaultRectangle + { + visible: General.is_coin_with_memo(current_ticker_infos) + enabled: !root.segwit && !root.is_send_busy + + Layout.preferredWidth: 500 + Layout.preferredHeight: 44 + Layout.alignment: Qt.AlignHCenter + + color: input_memo.background.color + radius: input_memo.background.radius + + DefaultTextField + { + id: input_memo + + width: 470 + height: 44 + placeholderText: qsTr("Enter memo") + forceFocus: true + font: General.isZhtlc(api_wallet_page.ticker) ? DexTypo.body3 : DexTypo.body2 + } + } + // Amount to send AmountField { @@ -758,8 +782,16 @@ MultipageModal text: qsTr("Prepare") - onClicked: prepareSendCoin(input_address.text, getCryptoAmount(), custom_fees_switch.checked, input_custom_fees.text, - General.isSpecialToken(current_ticker_infos), input_custom_fees_gas.text, input_custom_fees_gas_price.text) + onClicked: prepareSendCoin( + input_address.text, + getCryptoAmount(), + custom_fees_switch.checked, + input_custom_fees.text, + General.isSpecialToken(current_ticker_infos), + input_custom_fees_gas.text, + input_custom_fees_gas_price.text, + input_memo.text + ) } } From fd7f2c5cade73fd95cc65850d1b1d69542f25740 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 18:27:14 +0800 Subject: [PATCH 062/251] add memo field to backend withdraw request --- src/core/atomicdex/api/mm2/mm2.cpp | 2 +- .../atomicdex/api/mm2/{rpc.withdraw.cpp => rpc2.withdraw.cpp} | 2 +- .../atomicdex/api/mm2/{rpc.withdraw.hpp => rpc2.withdraw.hpp} | 2 ++ src/core/atomicdex/pages/qt.wallet.page.cpp | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) rename src/core/atomicdex/api/mm2/{rpc.withdraw.cpp => rpc2.withdraw.cpp} (98%) rename src/core/atomicdex/api/mm2/{rpc.withdraw.hpp => rpc2.withdraw.hpp} (94%) diff --git a/src/core/atomicdex/api/mm2/mm2.cpp b/src/core/atomicdex/api/mm2/mm2.cpp index a5125d71a3..4f8baa3321 100644 --- a/src/core/atomicdex/api/mm2/mm2.cpp +++ b/src/core/atomicdex/api/mm2/mm2.cpp @@ -26,7 +26,7 @@ #include "atomicdex/api/mm2/rpc.recover.funds.hpp" #include "atomicdex/api/mm2/rpc.trade.preimage.hpp" #include "atomicdex/api/mm2/rpc.validate.address.hpp" -#include "atomicdex/api/mm2/rpc.withdraw.hpp" +#include "atomicdex/api/mm2/rpc2.withdraw.hpp" #include "atomicdex/api/mm2/rpc2.task.withdraw.status.hpp" #include "atomicdex/api/mm2/rpc.recover.funds.hpp" #include "atomicdex/pages/qt.settings.page.hpp" diff --git a/src/core/atomicdex/api/mm2/rpc.withdraw.cpp b/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp similarity index 98% rename from src/core/atomicdex/api/mm2/rpc.withdraw.cpp rename to src/core/atomicdex/api/mm2/rpc2.withdraw.cpp index a37bd5c91d..133fad0b09 100644 --- a/src/core/atomicdex/api/mm2/rpc.withdraw.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp @@ -6,7 +6,7 @@ #include //! Our Headers -#include "rpc.withdraw.hpp" +#include "rpc2.withdraw.hpp" namespace atomic_dex::mm2 { diff --git a/src/core/atomicdex/api/mm2/rpc.withdraw.hpp b/src/core/atomicdex/api/mm2/rpc2.withdraw.hpp similarity index 94% rename from src/core/atomicdex/api/mm2/rpc.withdraw.hpp rename to src/core/atomicdex/api/mm2/rpc2.withdraw.hpp index d424c7c825..f7ba61d472 100644 --- a/src/core/atomicdex/api/mm2/rpc.withdraw.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.withdraw.hpp @@ -28,6 +28,8 @@ namespace atomic_dex::mm2 std::string to; ///< coins will be withdraw to this address std::string amount; ///< ignored if max is true std::optional fees{std::nullopt}; ///< ignored if std::nullopt + std::optional memo; ///< memo for tendermint and zhtlc + bool max{false}; }; diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index 0d2299c908..ed3fbcb65d 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -14,7 +14,7 @@ #include "atomicdex/api/mm2/rpc.convertaddress.hpp" #include "atomicdex/api/mm2/rpc.electrum.hpp" #include "atomicdex/api/mm2/rpc.validate.address.hpp" -#include "atomicdex/api/mm2/rpc.withdraw.hpp" +#include "atomicdex/api/mm2/rpc2.withdraw.hpp" #include "atomicdex/api/mm2/rpc2.task.withdraw.init.hpp" #include "atomicdex/api/mm2/rpc2.task.withdraw.status.hpp" #include "atomicdex/services/mm2/mm2.service.hpp" From ecff15dee72bf08efb374e0a4d03e55d3133ec50 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 18:28:54 +0800 Subject: [PATCH 063/251] add memo field to backend withdraw request --- src/core/atomicdex/api/mm2/rpc2.withdraw.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp b/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp index 133fad0b09..1b462e7b85 100644 --- a/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp @@ -45,6 +45,10 @@ namespace atomic_dex::mm2 obj["amount"] = cfg.amount; obj["to"] = cfg.to; obj["max"] = cfg.max; + if (cfg.memo.has_value()) + { + obj["memo"] = cfg.memo.value(); + } if (cfg.fees.has_value()) { obj["fee"] = cfg.fees.value(); From f2fc7830ba6b6ce6c37dfd930b00d28cf21568ad Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 18:32:43 +0800 Subject: [PATCH 064/251] add memo field to backend end method --- src/core/atomicdex/pages/qt.wallet.page.cpp | 10 ++++++++-- src/core/atomicdex/pages/qt.wallet.page.hpp | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index ed3fbcb65d..ed8b55e959 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -506,7 +506,7 @@ namespace atomic_dex } void - wallet_page::send(const QString& address, const QString& amount, bool max, bool with_fees, QVariantMap fees_data) + wallet_page::send(const QString& address, const QString& amount, bool max, bool with_fees, QVariantMap fees_data, const QString& memo) { //! Preparation this->set_send_busy(true); @@ -686,7 +686,13 @@ namespace atomic_dex } else { - t_withdraw_request withdraw_req{.coin = ticker, .to = address.toStdString(), .amount = max ? "0" : amount.toStdString(), .max = max}; + t_withdraw_request withdraw_req{ + .coin = ticker, + .to = address.toStdString(), + .amount = max ? "0" : amount.toStdString(), + .memo = memo.toStdString(), + .max = max + }; if (with_fees) { diff --git a/src/core/atomicdex/pages/qt.wallet.page.hpp b/src/core/atomicdex/pages/qt.wallet.page.hpp index 033699279b..0e0fc414c9 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.hpp +++ b/src/core/atomicdex/pages/qt.wallet.page.hpp @@ -88,7 +88,7 @@ namespace atomic_dex bool is_auth, const QString& tx_hex, bool is_claiming, bool is_max, const QString& amount); // Broadcast requires OS local user credentials verification. This is called by the Q_INVOKABLE broadcast() method after // entering credentials. - Q_INVOKABLE void send(const QString& address, const QString& amount, bool max, bool with_fees, QVariantMap fees_data); + Q_INVOKABLE void send(const QString& address, const QString& amount, bool max, bool with_fees, QVariantMap fees_data, const QString& memo); Q_INVOKABLE QString switch_address_mode(bool checked); Q_INVOKABLE void post_switch_address_mode(bool is_segwit); From a105f6c624c103a9d302d22ae119994edb6825c7 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 23:17:19 +0800 Subject: [PATCH 065/251] add memo for zhtlc transactions --- atomic_defi_design/Dex/Constants/General.qml | 6 +- atomic_defi_design/Dex/Wallet/SendModal.qml | 63 +++++++++++-------- atomic_defi_design/Dex/Wallet/SendResult.qml | 15 +++++ .../api/mm2/rpc2.task.withdraw.init.cpp | 4 ++ .../api/mm2/rpc2.task.withdraw.init.hpp | 1 + src/core/atomicdex/api/mm2/rpc2.withdraw.cpp | 30 +++------ src/core/atomicdex/api/mm2/rpc2.withdraw.hpp | 3 +- .../atomicdex/api/mm2/transaction.data.cpp | 28 +++++++++ .../atomicdex/api/mm2/transaction.data.hpp | 33 +++++++--- src/core/atomicdex/config/coins.cfg.cpp | 1 + .../models/qt.global.coins.cfg.model.cpp | 1 + src/core/atomicdex/pages/qt.wallet.page.cpp | 2 +- 12 files changed, 125 insertions(+), 62 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 289be4f33b..086e3f40e3 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -58,7 +58,11 @@ QtObject { return API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker).is_wallet_only } - function is_coin_with_memo(coin_info) { + function isCoinWithMemo(ticker) { + console.log("Getting memo info for " + ticker) + const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) + console.log(coin_info.has_memos) + console.log("=========================") return coin_info.has_memos } diff --git a/atomic_defi_design/Dex/Wallet/SendModal.qml b/atomic_defi_design/Dex/Wallet/SendModal.qml index a8905c7c38..4c87983bc1 100644 --- a/atomic_defi_design/Dex/Wallet/SendModal.qml +++ b/atomic_defi_design/Dex/Wallet/SendModal.qml @@ -25,7 +25,9 @@ MultipageModal readonly property var default_send_result: ({ has_error: false, error_message: "", withdraw_answer: { - total_amount_fiat: "", tx_hex: "", date: "", "fee_details": { total_fee: "" } + total_amount_fiat: "", tx_hex: "", + memo: "", date: "", + "fee_details": { total_fee: "" } }, explorer_url: "", max: false }) property var send_result: default_send_result @@ -50,7 +52,6 @@ MultipageModal function prepareSendCoin(address, amount, with_fees, fees_amount, is_special_token, gas_limit, gas_price, memo="") { let max = parseFloat(current_ticker_infos.balance) === parseFloat(amount) - // Save for later check async_param_max = max @@ -82,6 +83,7 @@ MultipageModal send_result = default_send_result input_address.text = "" input_amount.text = "" + input_memo.text = "" input_custom_fees.text = "" input_custom_fees_gas.text = "" input_custom_fees_gas_price.text = "" @@ -361,30 +363,6 @@ MultipageModal Item { Layout.fillWidth: true } } - DefaultRectangle - { - visible: General.is_coin_with_memo(current_ticker_infos) - enabled: !root.segwit && !root.is_send_busy - - Layout.preferredWidth: 500 - Layout.preferredHeight: 44 - Layout.alignment: Qt.AlignHCenter - - color: input_memo.background.color - radius: input_memo.background.radius - - DefaultTextField - { - id: input_memo - - width: 470 - height: 44 - placeholderText: qsTr("Enter memo") - forceFocus: true - font: General.isZhtlc(api_wallet_page.ticker) ? DexTypo.body3 : DexTypo.body2 - } - } - // Amount to send AmountField { @@ -584,6 +562,31 @@ MultipageModal } } + // Memo + DefaultRectangle + { + visible: General.isCoinWithMemo(api_wallet_page.ticker) + enabled: !root.segwit && !root.is_send_busy + + Layout.preferredWidth: 500 + Layout.preferredHeight: 44 + Layout.alignment: Qt.AlignHCenter + + color: input_memo.background.color + radius: input_memo.background.radius + + DefaultTextField + { + id: input_memo + + width: 470 + height: 44 + placeholderText: qsTr("Enter memo") + forceFocus: true + font: General.isZhtlc(api_wallet_page.ticker) ? DexTypo.body3 : DexTypo.body2 + } + } + ColumnLayout { visible: General.getCustomFeeType(current_ticker_infos) @@ -862,6 +865,14 @@ MultipageModal } } + // Memo + TextEditWithTitle + { + title: qsTr("Memo") + visible: input_memo.text != "" + text: input_memo.text + } + // Fees TextEditWithTitle { diff --git a/atomic_defi_design/Dex/Wallet/SendResult.qml b/atomic_defi_design/Dex/Wallet/SendResult.qml index deb97babdc..8738c9932d 100644 --- a/atomic_defi_design/Dex/Wallet/SendResult.qml +++ b/atomic_defi_design/Dex/Wallet/SendResult.qml @@ -76,6 +76,21 @@ MultipageModalContent } } + // Memo + TextEditWithTitle + { + title: qsTr("Memo") + visible: result.withdraw_answer.memo + + text: + { + console.log("result: ") + console.log(JSON.stringify(result)) + console.log("=========================") + result.withdraw_answer.memo + } + } + // Fees TextEditWithTitle { diff --git a/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.cpp b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.cpp index 87a4aa993a..29d44086fe 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.cpp @@ -40,6 +40,10 @@ namespace atomic_dex::mm2 obj["params"]["amount"] = request.amount; obj["params"]["max"] = request.max; + if (request.memo.has_value()) + { + obj["params"]["memo"] = request.memo.value(); + } if (request.fees.has_value()) { obj["params"]["fee"] = request.fees.value(); diff --git a/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.hpp b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.hpp index 1fdc060b32..88558fd1cd 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.withdraw.init.hpp @@ -36,6 +36,7 @@ namespace atomic_dex::mm2 std::string to; std::string amount; std::optional fees{std::nullopt}; ///< ignored if std::nullopt + std::optional memo; ///< memo for zhtlc bool max{false}; }; diff --git a/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp b/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp index 1b462e7b85..cdf6ccf902 100644 --- a/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.withdraw.cpp @@ -41,26 +41,19 @@ namespace atomic_dex::mm2 { nlohmann::json obj = nlohmann::json::object(); - obj["coin"] = cfg.coin; - obj["amount"] = cfg.amount; - obj["to"] = cfg.to; - obj["max"] = cfg.max; + obj["params"]["coin"] = cfg.coin; + obj["params"]["amount"] = cfg.amount; + obj["params"]["to"] = cfg.to; + obj["params"]["max"] = cfg.max; if (cfg.memo.has_value()) { - obj["memo"] = cfg.memo.value(); + obj["params"]["memo"] = cfg.memo.value(); } if (cfg.fees.has_value()) { - obj["fee"] = cfg.fees.value(); - } - if (j.contains("mmrpc") && j.at("mmrpc").get() == "2.0") - { - j["params"] = obj; - } - else - { - j.update(obj); + obj["params"]["fee"] = cfg.fees.value(); } + j.update(obj); } void @@ -72,14 +65,7 @@ namespace atomic_dex::mm2 } else { - if (j.contains("result") && j.contains("mmrpc") && j.at("mmrpc").get() == "2.0") - { - answer.result = j.at("result").get(); - } - else - { - answer.result = j.get(); - } + answer.result = j.at("result").get(); } } } // namespace atomic_dex::mm2 \ No newline at end of file diff --git a/src/core/atomicdex/api/mm2/rpc2.withdraw.hpp b/src/core/atomicdex/api/mm2/rpc2.withdraw.hpp index f7ba61d472..51b9a687d8 100644 --- a/src/core/atomicdex/api/mm2/rpc2.withdraw.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.withdraw.hpp @@ -28,8 +28,7 @@ namespace atomic_dex::mm2 std::string to; ///< coins will be withdraw to this address std::string amount; ///< ignored if max is true std::optional fees{std::nullopt}; ///< ignored if std::nullopt - std::optional memo; ///< memo for tendermint and zhtlc - + std::optional memo; ///< memo for tendermint bool max{false}; }; diff --git a/src/core/atomicdex/api/mm2/transaction.data.cpp b/src/core/atomicdex/api/mm2/transaction.data.cpp index 54dbf4b2e8..1d24569ff4 100644 --- a/src/core/atomicdex/api/mm2/transaction.data.cpp +++ b/src/core/atomicdex/api/mm2/transaction.data.cpp @@ -18,6 +18,14 @@ namespace atomic_dex::mm2 j.at("total_fee").get_to(cfg.total_fee); } + void from_json(const nlohmann::json& j, fee_tendermint_coin& cfg) + { + j.at("coin").get_to(cfg.coin); + j.at("type").get_to(cfg.type); + j.at("amount").get_to(cfg.amount); + j.at("gas_limit").get_to(cfg.gas_limit); + } + void from_json(const nlohmann::json& j, fee_qrc_coin& cfg) { j.at("coin").get_to(cfg.coin); @@ -78,6 +86,21 @@ namespace atomic_dex::mm2 cfg.confirmations = j.at("confirmations").get(); } + // API returns null if no memo + if (j.contains("memo")) + { + try + { + cfg.memo = j.at("memo").get(); + } + catch (const std::exception& ex) + { + cfg.memo = ""; + //SPDLOG_ERROR("Error parsing memo: {}", ex.what()); + } + + } + if (cfg.from.empty()) { if (cfg.coin == "FIRO") @@ -90,6 +113,11 @@ namespace atomic_dex::mm2 } } + if (j.contains("transaction_type")) + { + cfg.transaction_type = j.at("transaction_type").get(); + } + // transaction_fee only in ZHTLC response if (j.contains("transaction_fee")) { diff --git a/src/core/atomicdex/api/mm2/transaction.data.hpp b/src/core/atomicdex/api/mm2/transaction.data.hpp index 9882c9a532..a39f64b9fd 100644 --- a/src/core/atomicdex/api/mm2/transaction.data.hpp +++ b/src/core/atomicdex/api/mm2/transaction.data.hpp @@ -25,6 +25,16 @@ namespace atomic_dex::mm2 void from_json(const nlohmann::json& j, fee_erc_coin& cfg); + struct fee_tendermint_coin + { + std::string type; + std::string coin; + std::string amount; + std::size_t gas_limit; + }; + + void from_json(const nlohmann::json& j, fee_erc_coin& cfg); + struct fee_qrc_coin { std::string coin; @@ -38,9 +48,10 @@ namespace atomic_dex::mm2 struct fees_data { - std::optional normal_fees; ///< btc, kmd based coins - std::optional erc_fees; ///< eth based coins - std::optional qrc_fees; // Qtum based coin + std::optional normal_fees; ///< btc, kmd based coins + std::optional erc_fees; ///< eth based coins + std::optional qrc_fees; // Qtum based coin + std::optional tendermint_fees; // Qtum based coin }; void from_json(const nlohmann::json& j, fees_data& cfg); @@ -48,21 +59,23 @@ namespace atomic_dex::mm2 struct transaction_data { std::size_t timestamp; + std::string tx_hex; + std::string tx_hash; std::vector from; std::vector to; - fees_data fee_details; - std::size_t block_height; - std::string coin; + std::string total_amount{"0"}; std::string spent_by_me; std::string received_by_me; std::string my_balance_change; - std::string total_amount{"0"}; - std::string tx_hash; - std::string tx_hex; - std::string timestamp_as_date; ///< human readeable timestamp + std::size_t block_height; + fees_data fee_details; + std::string coin; std::optional transaction_fee; std::optional internal_id; std::optional confirmations; + std::optional transaction_type; + std::optional memo; + std::string timestamp_as_date; ///< human readeable timestamp }; void from_json(const nlohmann::json& j, transaction_data& cfg); diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index c71bba1be8..8008df2e42 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -143,6 +143,7 @@ namespace atomic_dex cfg.coin_type = get_coin_type_from_str(cfg.type); j.at("active").get_to(cfg.active); j.at("explorer_url").get_to(cfg.explorer_url); + cfg.has_memos = false; cfg.gui_ticker = j.contains("gui_coin") ? j.at("gui_coin").get() : cfg.ticker; cfg.parent_coin = j.contains("parent_coin") ? j.at("parent_coin").get() : cfg.ticker; diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp index 77d88016db..d93b8fce5b 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp @@ -47,6 +47,7 @@ namespace {"is_erc_family", coin.is_erc_family}, {"is_zhtlc_family", coin.is_zhtlc_family}, {"is_wallet_only", coin.wallet_only}, + {"has_memos", coin.has_memos}, {"fees_ticker", QString::fromStdString(coin.fees_ticker)}}; return j; } diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index ed8b55e959..d8974bce35 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -517,7 +517,7 @@ namespace atomic_dex if (coin_info.is_zhtlc_family) { - t_withdraw_init_request withdraw_init_req{.coin = ticker, .to = address.toStdString(), .amount = max ? "0" : amount.toStdString(), .max = max}; + t_withdraw_init_request withdraw_init_req{.coin = ticker, .to = address.toStdString(), .amount = max ? "0" : amount.toStdString(), .memo = memo.toStdString(), .max = max}; if (with_fees) { From c0d268783d145ef6cb6249bc48f4b2cf1b852b45 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 1 Apr 2023 23:31:53 +0800 Subject: [PATCH 066/251] Add tendermint activation methods --- .../api/mm2/rpc2.enable_tendermint_token.cpp | 25 ++++++++ .../api/mm2/rpc2.enable_tendermint_token.hpp | 58 ++++++++++++++++++ .../rpc2.enable_tendermint_with_assets.cpp | 39 ++++++++++++ .../rpc2.enable_tendermint_with_assets.hpp | 60 +++++++++++++++++++ .../atomicdex/services/mm2/mm2.service.cpp | 2 +- 5 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.cpp create mode 100644 src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp create mode 100644 src/core/atomicdex/api/mm2/rpc2.enable_tendermint_with_assets.cpp create mode 100644 src/core/atomicdex/api/mm2/rpc2.enable_tendermint_with_assets.hpp diff --git a/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.cpp b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.cpp new file mode 100644 index 0000000000..d20efa4132 --- /dev/null +++ b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.cpp @@ -0,0 +1,25 @@ +#include + +#include "rpc2.enable_tendermint_token.hpp" + +namespace atomic_dex::mm2 +{ + void to_json(nlohmann::json& j, const enable_tendermint_token_rpc_request& request) + { + j["ticker"] = request.ticker; + if (request.activation_params.required_confirmations) + { + j["activation_params"]["required_confirmations"] = *request.activation_params.required_confirmations; + } + else + { + j["activation_params"] = nlohmann::json::object(); + } + } + + void from_json(const nlohmann::json& j, enable_tendermint_token_rpc_result& in) + { + j.at("platform_coin").get_to(in.platform_coin); + j.at("balances").get_to>(in.balances); + } +} \ No newline at end of file diff --git a/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp new file mode 100644 index 0000000000..1f8845ed1f --- /dev/null +++ b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp @@ -0,0 +1,58 @@ +/****************************************************************************** + * Copyright © 2013-2022 The Komodo Platform Developers. * + * * + * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * + * the top-level directory of this distribution for the individual copyright * + * holder information and the developer policies on copyright and licensing. * + * * + * Unless otherwise agreed in a custom licensing agreement, no part of the * + * Komodo Platform software, including this file may be copied, modified, * + * propagated or distributed except according to the terms contained in the * + * LICENSE file * + * * + * Removal or modification of this copyright notice is prohibited. * + * * + ******************************************************************************/ + +#pragma once + +#include + +#include //> nlohmann::json + +#include "rpc.hpp" +#include "balance_info.hpp" + +namespace atomic_dex::mm2 +{ + struct enable_tendermint_token_rpc + { + static constexpr auto endpoint = "enable_tendermint_token"; + static constexpr bool is_v2 = true; + + struct expected_request_type + { + std::string ticker; + struct { std::optional required_confirmations; } activation_params; + }; + + struct expected_result_type + { + std::string platform_coin; + std::unordered_map balances; + }; + + using expected_error_type = rpc_basic_error_type; + + expected_request_type request; + std::optional result; + std::optional error; + }; + + using enable_tendermint_token_rpc_request = enable_tendermint_token_rpc::expected_request_type; + using enable_tendermint_token_rpc_result = enable_tendermint_token_rpc::expected_result_type; + using enable_tendermint_token_rpc_error = enable_tendermint_token_rpc::expected_error_type; + + void to_json(nlohmann::json& j, const enable_tendermint_token_rpc_request& request); + void from_json(const nlohmann::json& j, enable_tendermint_token_rpc_result& in); +} \ No newline at end of file diff --git a/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_with_assets.cpp b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_with_assets.cpp new file mode 100644 index 0000000000..b924bbe656 --- /dev/null +++ b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_with_assets.cpp @@ -0,0 +1,39 @@ +#include + +#include "rpc2.enable_tendermint_with_assets.hpp" + +namespace atomic_dex::mm2 +{ + void to_json(nlohmann::json& j, const enable_tendermint_with_assets_request_rpc& in) + { + j["ticker"] = in.ticker; + j["rpc_urls"] = in.rpc_urls; + j["tx_history"] = in.tx_history; + j["tokens_params"] = in.tokens_params; + if (in.required_confirmations.has_value()) + j["required_confirmations"] = in.required_confirmations.value(); + if (in.requires_notarization.has_value()) + j["requires_notarization"] = in.requires_notarization.value(); + } + + void to_json(nlohmann::json& j, const enable_tendermint_with_assets_request_rpc::tendermint_token_request_t& in) + { + j["ticker"] = in.ticker; + if (in.required_confirmations) + j["required_confirmations"] = in.required_confirmations.value(); + } + + void from_json(const nlohmann::json& json, enable_tendermint_with_assets_result_rpc& out) + { + out.address = json["address"]; + out.current_block = json["current_block"]; + out.tendermint_balances_infos = json["balance"].get(); + out.tendermint_token_balances_infos = json["tokens_balances"].get(); + } + + void from_json(const nlohmann::json& json, enable_tendermint_with_assets_result_rpc::tendermint_balance_infos_t& out) + { + out.balances.spendable = json["spendable"]; + out.balances.unspendable = json["unspendable"]; + } +} \ No newline at end of file diff --git a/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_with_assets.hpp b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_with_assets.hpp new file mode 100644 index 0000000000..c65408658f --- /dev/null +++ b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_with_assets.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include + +#include "rpc.hpp" +#include "balance_info.hpp" +#include "atomicdex/config/electrum.cfg.hpp" + +namespace atomic_dex::mm2 +{ + struct enable_tendermint_with_assets_rpc + { + static constexpr auto endpoint = "enable_tendermint_with_assets"; + static constexpr bool is_v2 = true; + + struct expected_request_type + { + struct tendermint_token_request_t + { + std::string ticker; + std::optional required_confirmations; + }; + + std::string ticker; + std::vector rpc_urls; + bool tx_history{true}; + std::vector tokens_params; + std::optional required_confirmations; + std::optional requires_notarization; + }; + + struct expected_result_type + { + struct tendermint_balance_infos_t + { + balance_info balances; + }; + + std::string address; + std::size_t current_block; + tendermint_balance_infos_t tendermint_balances_infos; + std::unordered_map tendermint_token_balances_infos; + }; + + using expected_error_type = rpc_basic_error_type; + + expected_request_type request; + std::optional result; + std::optional error; + }; + + using enable_tendermint_with_assets_request_rpc = enable_tendermint_with_assets_rpc::expected_request_type; + using enable_tendermint_with_assets_result_rpc = enable_tendermint_with_assets_rpc::expected_result_type; + using enable_tendermint_with_assets_error_rpc = enable_tendermint_with_assets_rpc::expected_error_type; + + void to_json(nlohmann::json& j, const enable_tendermint_with_assets_request_rpc& in); + void to_json(nlohmann::json& j, const enable_tendermint_with_assets_request_rpc::tendermint_token_request_t& in); + void from_json(const nlohmann::json& json, enable_tendermint_with_assets_result_rpc& out); + void from_json(const nlohmann::json& json, enable_tendermint_with_assets_result_rpc::tendermint_balance_infos_t& out); +} \ No newline at end of file diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index b5b510f64e..c55504766d 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -301,7 +301,7 @@ namespace atomic_dex } if (!tickers.empty()) { - SPDLOG_INFO("coin_status_update required, {}", m_nb_update_required); + SPDLOG_DEBUG("coin_status_update required, {}", m_nb_update_required); update_coin_status(this->m_current_wallet_name, tickers, true, m_coins_informations, m_coin_cfg_mutex); } m_nb_update_required -= 1; From 50e87e8fb80d3ec976e2b4ebc928dc13773b8654 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 2 Apr 2023 00:09:23 +0800 Subject: [PATCH 067/251] tendermint rpcs --- atomic_defi_design/Dex/Constants/General.qml | 3 --- src/core/atomicdex/api/mm2/mm2.client.cpp | 4 ++++ src/core/atomicdex/api/mm2/transaction.data.cpp | 3 +-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 086e3f40e3..ebc556bf14 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -59,10 +59,7 @@ QtObject { } function isCoinWithMemo(ticker) { - console.log("Getting memo info for " + ticker) const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) - console.log(coin_info.has_memos) - console.log("=========================") return coin_info.has_memos } diff --git a/src/core/atomicdex/api/mm2/mm2.client.cpp b/src/core/atomicdex/api/mm2/mm2.client.cpp index a23f2b8478..3b06e2c3ab 100644 --- a/src/core/atomicdex/api/mm2/mm2.client.cpp +++ b/src/core/atomicdex/api/mm2/mm2.client.cpp @@ -28,6 +28,8 @@ #include "atomicdex/constants/dex.constants.hpp" #include "rpc.hpp" #include "rpc.tx.history.hpp" +#include "rpc2.enable_tendermint_token.hpp" +#include "rpc2.enable_tendermint_with_assets.hpp" namespace { @@ -160,6 +162,8 @@ namespace atomic_dex::mm2 template void mm2_client::process_rpc_async(const std::function&); template void mm2_client::process_rpc_async(const std::function&); template void mm2_client::process_rpc_async(const std::function&); + template void mm2_client::process_rpc_async(const std::function&); + template void mm2_client::process_rpc_async(const std::function&); template void mm2_client::process_rpc_async(const std::function&); template void mm2_client::process_rpc_async(const std::function&); diff --git a/src/core/atomicdex/api/mm2/transaction.data.cpp b/src/core/atomicdex/api/mm2/transaction.data.cpp index 1d24569ff4..fd140e4667 100644 --- a/src/core/atomicdex/api/mm2/transaction.data.cpp +++ b/src/core/atomicdex/api/mm2/transaction.data.cpp @@ -94,11 +94,10 @@ namespace atomic_dex::mm2 cfg.memo = j.at("memo").get(); } catch (const std::exception& ex) - { + { cfg.memo = ""; //SPDLOG_ERROR("Error parsing memo: {}", ex.what()); } - } if (cfg.from.empty()) From 853ddaa623ba75c67a6361b45dafd3a6d5c6e9be Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 2 Apr 2023 00:41:16 +0800 Subject: [PATCH 068/251] Add tendermint activation and memo withdraw --- atomic_defi_design/Dex/Wallet/SendResult.qml | 3 - .../atomicdex/services/mm2/mm2.service.cpp | 184 +++++++++++++++++- .../atomicdex/services/mm2/mm2.service.hpp | 8 +- 3 files changed, 189 insertions(+), 6 deletions(-) diff --git a/atomic_defi_design/Dex/Wallet/SendResult.qml b/atomic_defi_design/Dex/Wallet/SendResult.qml index 8738c9932d..8ac93c37a5 100644 --- a/atomic_defi_design/Dex/Wallet/SendResult.qml +++ b/atomic_defi_design/Dex/Wallet/SendResult.qml @@ -84,9 +84,6 @@ MultipageModalContent text: { - console.log("result: ") - console.log(JSON.stringify(result)) - console.log("=========================") result.withdraw_answer.memo } } diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index c55504766d..96d5439334 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright © 2013-2022 The Komodo Platform Developers. * + * Copyright © 2013-2023 The Komodo Platform Developers. * * * * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * * the top-level directory of this distribution for the individual copyright * @@ -294,6 +294,7 @@ namespace atomic_dex std::vector tickers; for (auto&& coin: coins) { + SPDLOG_DEBUG("{}: Active [{}]", coin.ticker, coin.active); if (!coin.active) { tickers.push_back(coin.ticker); @@ -417,7 +418,7 @@ namespace atomic_dex { t_enable_z_coin_cancel_request request{.task_id = task_id}; auto answer = m_mm2_client.rpc_enable_z_coin_cancel(std::move(request)); - SPDLOG_INFO("mm2_service::enable_z_coin_cancel: [task_id {}] result: {}", task_id, answer.raw_result); + SPDLOG_DEBUG("mm2_service::enable_z_coin_cancel: [task_id {}] result: {}", task_id, answer.raw_result); } bool mm2_service::disable_coin(const std::string& ticker, std::error_code& ec) @@ -503,6 +504,9 @@ namespace atomic_dex t_coins slp_coins; t_coins slp_testnet_coins; t_coins zhtlc_coins; + t_coins osmosis_coins; + t_coins iris_coins; + t_coins cosmos_coins; for (const auto& coin_config : coins) { @@ -521,6 +525,25 @@ namespace atomic_dex slp_coins.push_back(coin_config); } } + else if (coin_config.coin_type == CoinType::TENDERMINT || coin_config.coin_type == CoinType::TENDERMINTTOKEN) + { + if (coin_config.parent_coin == "ATOM") + { + cosmos_coins.push_back(coin_config); + } + if (coin_config.parent_coin == "IRIS") + { + iris_coins.push_back(coin_config); + } + if (coin_config.parent_coin == "OSMO") + { + osmosis_coins.push_back(coin_config); + } + else + { + SPDLOG_WARN("Unexpected Tenddermint ticker: {}", coin_config.ticker); + } + } else if (coin_config.coin_type == CoinType::ZHTLC) { zhtlc_coins.push_back(coin_config); @@ -554,6 +577,18 @@ namespace atomic_dex { enable_zhtlc(zhtlc_coins); } + if (iris_coins.size() > 0) + { + enable_tendermint_coins(iris_coins, "IRIS"); + } + if (cosmos_coins.size() > 0) + { + enable_tendermint_coins(cosmos_coins, "ATOM"); + } + if (osmosis_coins.size() > 0) + { + enable_tendermint_coins(osmosis_coins, "OSMO"); + } } void mm2_service::enable_erc_family_coin(const coin_config& coin_config) @@ -761,6 +796,151 @@ namespace atomic_dex .then([this, batch_array](pplx::task previous_task) { this->handle_exception_pplx_task(previous_task, "enable_qrc_family_coins", batch_array); }); } + + void mm2_service::enable_tendermint_coin(coin_config coin_config, std::string parent_ticker) + { + enable_tendermint_coins(t_coins{std::move(coin_config)}, parent_ticker); + } + + void mm2_service::enable_tendermint_coins(const t_coins& coins, const std::string parent_ticker) + { + SPDLOG_INFO("Parent ticker: {}", parent_ticker); + auto callback = [this](RpcRequest rpc) + { + if (rpc.error) + { + if (rpc.error->error_type.find("PlatformIsAlreadyActivated") != std::string::npos || rpc.error->error_type.find("TokenIsAlreadyActivated") != std::string::npos) + { + SPDLOG_ERROR("{} {}: ", rpc.request.ticker, rpc.error->error_type); + fetch_single_balance(get_coin_info(rpc.request.ticker)); + m_coins_informations[rpc.request.ticker].currently_enabled = true; + dispatcher_.trigger(coin_fully_initialized{.tickers = {rpc.request.ticker}}); + if constexpr (std::is_same_v) + { + for (const auto& tendermint_coin_info : rpc.request.tokens_params) + { + SPDLOG_ERROR("{} {}: ", tendermint_coin_info.ticker, rpc.error->error_type); + fetch_single_balance(get_coin_info(tendermint_coin_info.ticker)); + m_coins_informations[tendermint_coin_info.ticker].currently_enabled = true; + dispatcher_.trigger(coin_fully_initialized{.tickers = {tendermint_coin_info.ticker}}); + } + } + } + else + { + m_coins_informations[rpc.request.ticker].currently_enabled = false; + update_coin_active({rpc.request.ticker}, false); + this->dispatcher_.trigger(rpc.request.ticker, rpc.error->error); + } + } + else + { + dispatcher_.trigger(coin_fully_initialized{.tickers = {rpc.request.ticker}}); + fetch_single_balance(get_coin_info(rpc.request.ticker)); + m_coins_informations[rpc.request.ticker].currently_enabled = true; + if constexpr (std::is_same_v) + { + for (const auto& tendermint_token_addresses_info : rpc.result->tendermint_token_balances_infos) + { + dispatcher_.trigger(coin_fully_initialized{.tickers = {tendermint_token_addresses_info.first}}); + process_balance_answer(rpc); + m_coins_informations[tendermint_token_addresses_info.first].currently_enabled = true; + } + } + process_balance_answer(rpc); + } + }; + + if (!has_coin(parent_ticker)) + { + static constexpr auto error = "{} is not present in the config. Cannot enable TENDERMINT tokens."; + SPDLOG_ERROR(error); + this->dispatcher_.trigger(parent_ticker, fmt::format(error, parent_ticker)); + return; + } + + auto parent_ticker_info = get_coin_info(parent_ticker); + + if (parent_ticker_info.currently_enabled) + { + for (const auto& coin_config : coins) + { + mm2::enable_tendermint_token_rpc rpc{.request={.ticker = coin_config.ticker}}; + + if (coin_config.ticker == parent_ticker_info.ticker) + { + continue; + } + m_mm2_client.process_rpc_async(rpc.request, callback); + } + } + else + { + mm2::enable_tendermint_with_assets_rpc rpc; + + rpc.request.ticker = parent_ticker_info.ticker; + rpc.request.rpc_urls = parent_ticker_info.rpc_urls.value_or(std::vector{}); + for (const auto& coin_config : coins) + { + if (coin_config.ticker == parent_ticker_info.ticker) + { + continue; + } + rpc.request.tokens_params.push_back({.ticker = coin_config.ticker}); + } + m_mm2_client.process_rpc_async(rpc.request, callback); + } + this->m_nb_update_required += 1; + } + + void mm2_service::process_balance_answer(const mm2::enable_tendermint_token_rpc& rpc) + { + const auto& answer = rpc.result.value(); + mm2::balance_answer balance_answer; + + balance_answer.address = answer.balances.begin()->first; + balance_answer.balance = answer.balances.begin()->second.spendable; + balance_answer.coin = answer.platform_coin; + + { + std::unique_lock lock(m_balance_mutex); + m_balance_informations[balance_answer.coin] = std::move(balance_answer); + } + } + + void mm2_service::process_balance_answer(const mm2::enable_tendermint_with_assets_rpc& rpc) + { + const auto& answer = rpc.result.value(); + { + mm2::balance_answer balance_answer; + + balance_answer.coin = rpc.request.ticker; + balance_answer.balance = answer.tendermint_balances_infos.balances.spendable; + balance_answer.address = answer.address; + { + std::unique_lock lock(m_balance_mutex); + m_balance_informations[balance_answer.coin] = std::move(balance_answer); + } + } + if (answer.tendermint_token_balances_infos.empty()) + { + return; + } + for (auto [ticker, data] : answer.tendermint_token_balances_infos) + { + mm2::balance_answer balance_answer; + + balance_answer.coin = ticker; + balance_answer.address = answer.address; + balance_answer.balance = data.spendable; + + { + std::unique_lock lock(m_balance_mutex); + m_balance_informations[balance_answer.coin] = std::move(balance_answer); + } + } + } + void mm2_service::enable_slp_coin(coin_config coin_config) { enable_slp_coins(t_coins{std::move(coin_config)}); diff --git a/src/core/atomicdex/services/mm2/mm2.service.hpp b/src/core/atomicdex/services/mm2/mm2.service.hpp index 1e0f742a8f..c6d5bb9c25 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.hpp +++ b/src/core/atomicdex/services/mm2/mm2.service.hpp @@ -1,5 +1,5 @@ /****************************************************************************** -* Copyright © 2013-2022 The Komodo Platform Developers. * +* Copyright © 2013-2023 The Komodo Platform Developers. * * * * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * * the top-level directory of this distribution for the individual copyright * @@ -37,6 +37,8 @@ #include "atomicdex/api/mm2/rpc.orderbook.hpp" #include "atomicdex/api/mm2/enable_bch_with_tokens_rpc.hpp" #include "atomicdex/api/mm2/enable_slp_rpc.hpp" +#include "atomicdex/api/mm2/rpc2.enable_tendermint_with_assets.hpp" +#include "atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp" #include "atomicdex/config/raw.mm2.coins.cfg.hpp" #include "atomicdex/constants/dex.constants.hpp" #include "atomicdex/data/dex/orders.and.swaps.data.hpp" @@ -175,11 +177,15 @@ namespace atomic_dex void enable_slp_coins(const t_coins& coins); void enable_slp_testnet_coin(coin_config coin_config); void enable_slp_testnet_coins(const t_coins& coins); + void enable_tendermint_coin(coin_config coin_config, std::string parent_ticker); + void enable_tendermint_coins(const t_coins& coins, const std::string parent_ticker); void enable_zhtlc(const t_coins& coins); // Balances processing functions void process_balance_answer(const mm2::enable_bch_with_tokens_rpc& rpc); // Called after enabling SLP coins along tBCH/BCH. void process_balance_answer(const mm2::enable_slp_rpc& rpc); // Called after enabling an SLP coin. + void process_balance_answer(const mm2::enable_tendermint_with_assets_rpc& rpc); + void process_balance_answer(const mm2::enable_tendermint_token_rpc& rpc); public: //! Add a new coin in the coin_info cfg add_new_coin(normal_cfg, mm2_cfg) From 4abc627cc268f9b8a76763b859f5f564906f416d Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 2 Apr 2023 13:06:05 +0000 Subject: [PATCH 069/251] fix pair --- atomic_defi_design/Dex/Screens/Dashboard.qml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/atomic_defi_design/Dex/Screens/Dashboard.qml b/atomic_defi_design/Dex/Screens/Dashboard.qml index 22e9440a04..a93bcf813c 100644 --- a/atomic_defi_design/Dex/Screens/Dashboard.qml +++ b/atomic_defi_design/Dex/Screens/Dashboard.qml @@ -87,14 +87,7 @@ Item sidebar.currentLineType = currentPage if (currentPage == Dashboard.PageType.DEX) { - if (API.app.trading_pg.current_trading_mode == TradingMode.Pro) - { - API.app.trading_pg.set_pair(false, api_wallet_page.ticker) - } - else - { - API.app.trading_pg.set_pair(true, api_wallet_page.ticker) - } + API.app.trading_pg.set_pair(true, api_wallet_page.ticker) } } From 86b0620d968076f682f7392bc081eb552e5f261f Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 2 Apr 2023 15:56:42 +0000 Subject: [PATCH 070/251] don't update max_taker_vol on every orderbook update --- src/core/atomicdex/pages/qt.trading.page.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/pages/qt.trading.page.cpp b/src/core/atomicdex/pages/qt.trading.page.cpp index 1a4ecf6415..cafb7f030b 100644 --- a/src/core/atomicdex/pages/qt.trading.page.cpp +++ b/src/core/atomicdex/pages/qt.trading.page.cpp @@ -56,7 +56,7 @@ namespace atomic_dex { m_actions_queue.push(trading_actions::post_process_orderbook_finished); m_models_actions[orderbook_need_a_reset] = evt.is_a_reset; - determine_max_volume(); + //determine_max_volume(); } } } // namespace atomic_dex From 010fc1c67d8aa185ee06f2f54dc16d920b58ff1b Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 3 Apr 2023 17:31:25 +0800 Subject: [PATCH 071/251] segwit bug tweak --- src/core/atomicdex/models/qt.orderbook.model.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/atomicdex/models/qt.orderbook.model.cpp b/src/core/atomicdex/models/qt.orderbook.model.cpp index daf5353b75..d2e4321978 100644 --- a/src/core/atomicdex/models/qt.orderbook.model.cpp +++ b/src/core/atomicdex/models/qt.orderbook.model.cpp @@ -374,6 +374,10 @@ namespace atomic_dex m_orders_id_registry.clear(); for (auto&& order: m_model_data) { + if (order.coin.find("-segwit") != std::string::npos) + { + order.uuid = order.uuid + "-segwit"; + } if (this->m_orders_id_registry.find(order.uuid) == m_orders_id_registry.end()) { this->m_orders_id_registry.emplace(order.uuid); From 737dadb0ba3aaf98f1a2b1b08f1d74c2b470c558 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 3 Apr 2023 17:43:07 +0800 Subject: [PATCH 072/251] update vcpkg action version --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index fdc802a91f..6dc87adf4a 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -181,7 +181,7 @@ jobs: echo "CC=clang-12" >> $GITHUB_ENV - name: vcpkg deps (All) - uses: lukka/run-vcpkg@v10 + uses: lukka/run-vcpkg@v11 with: vcpkgDirectory: '${{ github.workspace }}/ci_tools_atomic_dex/vcpkg-repo' appendedCacheKey: ${{ hashFiles('vcpkg.json') }} From 3449e2765d72cd2e54d6686ecb05aacec1d50158 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 3 Apr 2023 17:48:08 +0800 Subject: [PATCH 073/251] update vcpkg to latest --- ci_tools_atomic_dex/vcpkg-repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_tools_atomic_dex/vcpkg-repo b/ci_tools_atomic_dex/vcpkg-repo index 086ef2a484..1712ed5174 160000 --- a/ci_tools_atomic_dex/vcpkg-repo +++ b/ci_tools_atomic_dex/vcpkg-repo @@ -1 +1 @@ -Subproject commit 086ef2a4845fd12e5164df1876737afa67942208 +Subproject commit 1712ed51743a2e739c2f2c3855cd1d16fbbb6873 From 2cf43f11610fabbf1cd3be421c6b69b2bfd773ba Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 3 Apr 2023 18:30:14 +0800 Subject: [PATCH 074/251] rm vcpkg cache key --- .github/workflows/atomicdex-desktop-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 6dc87adf4a..329ce6d0ff 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -184,7 +184,6 @@ jobs: uses: lukka/run-vcpkg@v11 with: vcpkgDirectory: '${{ github.workspace }}/ci_tools_atomic_dex/vcpkg-repo' - appendedCacheKey: ${{ hashFiles('vcpkg.json') }} vcpkgJsonGlob: 'vcpkg.json' From 1fb006a87dd2e49c95489bb380576d09a3d23e32 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 3 Apr 2023 20:22:55 +0800 Subject: [PATCH 075/251] add some vcpkg env vars --- .github/workflows/atomicdex-desktop-ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 329ce6d0ff..06de2e1dba 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -17,6 +17,10 @@ env: DEX_DISPLAY_NAME: "AtomicDex Desktop" DEX_COMPANY: "KomodoPlatform" DEX_WEBSITE: "https://atomicdex.io/" + VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/b/vcpkg_cache + VCPKG_BINARY_SOURCES: clear;x-gha,readwrite + RUNVCPKG_VCPKG_ROOT: ${{ github.workspace }}\atomicDEX-Desktop\ci_tools_atomic_dex\vcpkg-repo + VCPKG_ROOT: ${{ github.workspace }}\atomicDEX-Desktop\ci_tools_atomic_dex\vcpkg-repo jobs: @@ -184,8 +188,6 @@ jobs: uses: lukka/run-vcpkg@v11 with: vcpkgDirectory: '${{ github.workspace }}/ci_tools_atomic_dex/vcpkg-repo' - vcpkgJsonGlob: 'vcpkg.json' - - name: import code signing certificates (macos) if: runner.os == 'macOS' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository From 1573be33644c0dd00e21559bcc0c5364d551b9a5 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 3 Apr 2023 20:31:35 +0800 Subject: [PATCH 076/251] restore cachekey / glob --- .github/workflows/atomicdex-desktop-ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 06de2e1dba..c7855e7570 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -22,6 +22,7 @@ env: RUNVCPKG_VCPKG_ROOT: ${{ github.workspace }}\atomicDEX-Desktop\ci_tools_atomic_dex\vcpkg-repo VCPKG_ROOT: ${{ github.workspace }}\atomicDEX-Desktop\ci_tools_atomic_dex\vcpkg-repo + jobs: ci-flow: @@ -188,6 +189,9 @@ jobs: uses: lukka/run-vcpkg@v11 with: vcpkgDirectory: '${{ github.workspace }}/ci_tools_atomic_dex/vcpkg-repo' + vcpkgJsonGlob: 'vcpkg.json' + appendedCacheKey: vcpkginstall + - name: import code signing certificates (macos) if: runner.os == 'macOS' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository From e1c4ee5ebf79027501be8438d6825dbc2fbafcc8 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 3 Apr 2023 20:54:48 +0800 Subject: [PATCH 077/251] restore cachekey / glob --- .github/workflows/atomicdex-desktop-ci.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index c7855e7570..f9e5064f0d 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -22,7 +22,6 @@ env: RUNVCPKG_VCPKG_ROOT: ${{ github.workspace }}\atomicDEX-Desktop\ci_tools_atomic_dex\vcpkg-repo VCPKG_ROOT: ${{ github.workspace }}\atomicDEX-Desktop\ci_tools_atomic_dex\vcpkg-repo - jobs: ci-flow: @@ -84,6 +83,14 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} submodules: 'true' + - name: Expose GitHub Runtime + uses: crazy-max/ghaction-github-runtime@v2 + + - name: Env + run: | + # ACTIONS_RUNTIME_TOKEN, ACTIONS_RUNTIME_URL should be exposed + env|sort + - name: Setup Python uses: actions/setup-python@v4 with: From 239142e157b1194037d0491c07fd8646261e3709 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 4 Apr 2023 16:17:50 +0800 Subject: [PATCH 078/251] removed unneeded items --- .github/workflows/atomicdex-desktop-ci.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index f9e5064f0d..d6df9925c2 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -83,14 +83,9 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} submodules: 'true' - - name: Expose GitHub Runtime + - name: Expose GitHub Runtime Env uses: crazy-max/ghaction-github-runtime@v2 - - name: Env - run: | - # ACTIONS_RUNTIME_TOKEN, ACTIONS_RUNTIME_URL should be exposed - env|sort - - name: Setup Python uses: actions/setup-python@v4 with: @@ -197,8 +192,6 @@ jobs: with: vcpkgDirectory: '${{ github.workspace }}/ci_tools_atomic_dex/vcpkg-repo' vcpkgJsonGlob: 'vcpkg.json' - appendedCacheKey: vcpkginstall - - name: import code signing certificates (macos) if: runner.os == 'macOS' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository From b75b9ebf6458c6bacef9b48eb2374c6aeb0da0e6 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 5 Apr 2023 01:45:57 +0800 Subject: [PATCH 079/251] remove nomics and replace chart --- atomic_defi_design/Dex/Constants/General.qml | 10 ---- .../Dex/Exchange/ProView/Chart.qml | 55 ++++++++++++------- .../Dex/Exchange/ProView/TradingInfo/Main.qml | 13 +++-- .../api/komodo_prices/komodo.prices.cpp | 4 -- .../api/komodo_prices/komodo.prices.hpp | 1 - src/core/atomicdex/config/coins.cfg.cpp | 1 - src/core/atomicdex/config/coins.cfg.hpp | 1 - .../models/qt.global.coins.cfg.model.cpp | 1 - .../komodo_prices/komodo.prices.provider.cpp | 2 - 9 files changed, 43 insertions(+), 45 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index a27e733f48..789d7dcb67 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -115,16 +115,6 @@ QtObject { return progress } - function getNomicsId(ticker) { - if(ticker === "" || ticker === "All" || ticker===undefined) { - return "" - } else { - const nomics_id = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker).nomics_id - if (nomics_id == 'test-coin') return "" - return nomics_id - } - } - function coinContractAddress(ticker) { var cfg = API.app.trading_pg.get_raw_mm2_coin_cfg(ticker) if (cfg.hasOwnProperty('protocol')) { diff --git a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml index 4dbc9dc49d..068a864612 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml @@ -17,20 +17,28 @@ Item property bool pair_supported: false onPair_supportedChanged: if (!pair_supported) webEngineViewPlaceHolder.visible = false - function loadChart(right_ticker, left_ticker, force = false, source="nomics") + function loadChart(right_ticker, left_ticker, force = false, source="livecoinwatch") { + + //
+ let chart_html = "" let symbol = "" - - if (source == "nomics") + let widget_x = 390 + let widget_y = 150 + let scale_x = root.width / widget_x + let scale_y = root.height / widget_y + console.log("chart_x", widget_x) + console.log("chart_y", widget_y) + console.log("root.width", root.width) + console.log("root.height", root.height) + + + if (source == "livecoinwatch") { - let right_ticker_full = General.coinName(right_ticker) - let right_ticker_id = General.getNomicsId(right_ticker) - let left_ticker_id = General.getNomicsId(left_ticker) - - if (right_ticker_id != "" && left_ticker_id != "") + if (right_ticker != "" && left_ticker != "") { - symbol = right_ticker_id+"-"+left_ticker_id + symbol = right_ticker+"-"+left_ticker pair_supported = true if (symbol === loaded_symbol && !force) @@ -38,20 +46,20 @@ Item webEngineViewPlaceHolder.visible = true return } - - loaded_symbol = symbol - chart_html = ` - - -
- - ` + +
+ ` } } + console.log(chart_html) if (chart_html == "") { @@ -78,7 +86,7 @@ Item loaded_symbol = symbol - let chart_html = ` + chart_html = ` @@ -118,6 +126,15 @@ Item catch (e) { console.error(e) } } + onWidthChanged: { + try + { + loadChart(left_ticker?? atomic_app_primary_coin, + right_ticker?? atomic_app_secondary_coin) + } + catch (e) { console.error(e) } + } + RowLayout { anchors.fill: parent diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml index b08a691dcf..c16c36175f 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml @@ -79,25 +79,26 @@ Widget ColumnLayout { Layout.fillHeight: true + Layout.fillWidth: true spacing: 10 // Chart Chart { id: chart Layout.topMargin: 20 - Layout.leftMargin: 28 - Layout.rightMargin: 28 + Layout.leftMargin: 15 + Layout.rightMargin: 15 Layout.fillWidth: true - Layout.preferredHeight: 310 - + Layout.fillHeight: true + Layout.minimumWidth : 465 } PriceLineSimplified { id: price_line Layout.bottomMargin: 20 - Layout.leftMargin: 28 - Layout.rightMargin: 28 + Layout.leftMargin: 20 + Layout.rightMargin: 20 Layout.fillWidth: true Layout.fillHeight: true } diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index 65ca7505bb..e596de60c7 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -61,10 +61,6 @@ namespace atomic_dex::komodo_prices::api { x = provider::forex; } - else if (j == "nomics") - { - x = provider::nomics; - } else { x = provider::unknown; diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp index de183477af..36ec80e245 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.hpp @@ -13,7 +13,6 @@ namespace atomic_dex::komodo_prices::api coingecko, coinpaprika, forex, - nomics, unknown }; diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index b74b08a035..58671f9c54 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -140,7 +140,6 @@ namespace atomic_dex cfg.minimal_claim_amount = cfg.is_claimable ? j.at("minimal_claim_amount").get() : "0"; cfg.coinpaprika_id = j.contains("coinpaprika_id") ? j.at("coinpaprika_id").get() : "test-coin"; cfg.coingecko_id = j.contains("coingecko_id") ? j.at("coingecko_id").get() : "test-coin"; - cfg.nomics_id = j.contains("nomics_id") ? j.at("nomics_id").get() : "test-coin"; cfg.is_claimable = j.count("is_claimable") > 0; cfg.is_custom_coin = j.contains("is_custom_coin") ? j.at("is_custom_coin").get() : false; cfg.is_testnet = j.contains("is_testnet") ? j.at("is_testnet").get() : false; diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index b612e2684e..ecdc9de92b 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -56,7 +56,6 @@ namespace atomic_dex bool active{false}; std::string coinpaprika_id{"test-coin"}; std::string coingecko_id{"test-coin"}; - std::string nomics_id{"test-coin"}; bool is_custom_coin{false}; std::string type; std::optional> other_types; diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp index 6acc6c482d..eb8abd9391 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp @@ -36,7 +36,6 @@ namespace {"ticker", QString::fromStdString(coin.ticker)}, {"name", QString::fromStdString(coin.name)}, {"type", QString::fromStdString(coin.type)}, - {"nomics_id", QString::fromStdString(coin.nomics_id)}, {"explorer_url", QString::fromStdString(coin.explorer_url)}, {"tx_uri", QString::fromStdString(coin.tx_uri)}, {"address_uri", QString::fromStdString(coin.address_url)}, diff --git a/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp b/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp index 140f2cd53b..e427c62635 100644 --- a/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp +++ b/src/core/atomicdex/services/price/komodo_prices/komodo.prices.provider.cpp @@ -141,8 +141,6 @@ namespace atomic_dex return "coinpaprika"; case komodo_prices::api::provider::forex: return "forex"; - case komodo_prices::api::provider::nomics: - return "nomics"; default: return "unknown"; } From 3fbd3b2246bbefa43750a4ac0f0bcb4788256c8c Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 5 Apr 2023 18:03:21 +0800 Subject: [PATCH 080/251] Use weekly charts from livecoinwatch --- atomic_defi_design/Dex/Exchange/ProView/Chart.qml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml index 068a864612..c100b96f5e 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml @@ -20,7 +20,7 @@ Item function loadChart(right_ticker, left_ticker, force = false, source="livecoinwatch") { - //
+ //
let chart_html = "" let symbol = "" @@ -28,10 +28,6 @@ Item let widget_y = 150 let scale_x = root.width / widget_x let scale_y = root.height / widget_y - console.log("chart_x", widget_x) - console.log("chart_y", widget_y) - console.log("root.width", root.width) - console.log("root.height", root.height) if (source == "livecoinwatch") @@ -55,12 +51,10 @@ Item } -
+
` } } - console.log(chart_html) - if (chart_html == "") { const pair = atomic_qt_utilities.retrieve_main_ticker(left_ticker) + "/" + atomic_qt_utilities.retrieve_main_ticker(right_ticker) From 554219bf9330f2c98afa2069446aac480166d158 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 5 Apr 2023 19:44:32 +0800 Subject: [PATCH 081/251] handle ticker protocol suffix for charts --- atomic_defi_design/Dex/Constants/General.qml | 13 +++++++++++++ atomic_defi_design/Dex/Exchange/ProView/Chart.qml | 2 ++ 2 files changed, 15 insertions(+) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 789d7dcb67..9bb7d31f83 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -37,6 +37,19 @@ QtObject { } } + function coinWithoutSuffix(ticker) + { + console.log("coinWithoutSuffix: " + ticker) + if (ticker.search("-") > -1) + { + return ticker.split("-")[0] + } + else + { + return ticker + } + } + function coinName(ticker) { if(ticker === "" || ticker === "All" || ticker===undefined) { return "" diff --git a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml index c100b96f5e..baa996cadc 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml @@ -42,6 +42,8 @@ Item webEngineViewPlaceHolder.visible = true return } + right_ticker = General.coinWithoutSuffix(right_ticker) + left_ticker = General.coinWithoutSuffix(left_ticker) chart_html = ` -
+
` } } From 93f42a65faac1990ce8a01104f0e1b5aaccf04db Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 7 Apr 2023 16:16:51 +0800 Subject: [PATCH 090/251] tweak theme for highlighting active input field --- assets/themes/Default - Dark/colors.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 5b6d4391bb..9ab278f8f2 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -75,9 +75,9 @@ "textSelectedColor": "#0e1021FF", "textFieldBackgroundColor": "#313555FF", - "textFieldActiveBackgroundColor": "#313555CC", + "textFieldActiveBackgroundColor": "#3b3f62FF", "textFieldPrefixColor": "#8790B2FF", - "textFieldSuffixColor": "#456078FF", + "textFieldSuffixColor": "#8790B2FF", "tickerBadgeBackgroundColor": "#202337FF", From e98ef98be9ad322fad7d0e1387918184b3f070f8 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 7 Apr 2023 16:17:25 +0800 Subject: [PATCH 091/251] increase digits shown in chart --- atomic_defi_design/Dex/Exchange/ProView/Chart.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml index 0c5189e1a3..4eead3d0ca 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml @@ -21,7 +21,7 @@ Item function loadChart(right_ticker, left_ticker, force = false, source="livecoinwatch") { - //
+ //
let chart_html = "" let symbol = "" @@ -66,7 +66,7 @@ Item } -
+
` } } From 55773b062ff2f9983902f2f5b15cb1c1e3372fde Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 7 Apr 2023 16:18:46 +0800 Subject: [PATCH 092/251] Use more intuative wording in pro order form --- .../Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml | 4 ++-- .../Dex/Exchange/ProView/PlaceOrderForm/TotalView.qml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml index 99f66e762d..9c5fe529d2 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml @@ -120,9 +120,9 @@ ColumnLayout width: parent.width height: 41 radius: 18 - left_text: qsTr("Volume") + left_text: sell_mode ? qsTr("Send") : qsTr("Receive") right_text: left_ticker - placeholderText: sell_mode ? qsTr("Amount to sell") : qsTr("Amount to receive") + placeholderText: "0" text: API.app.trading_pg.volume onTextChanged: setVolume(text) } diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/TotalView.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/TotalView.qml index 588c1a054b..83d6e8a380 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/TotalView.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/TotalView.qml @@ -24,7 +24,7 @@ ColumnLayout Layout.fillWidth: true Layout.alignment: Qt.AlignLeft color: Dex.CurrentTheme.foregroundColor3 - text: "Total " + API.app.settings_pg.current_fiat + " " + General.cex_icon + text: "Trade Value " + API.app.settings_pg.current_fiat + " " + General.cex_icon font.pixelSize: 14 font.weight: Font.Normal opacity: .6 @@ -60,7 +60,7 @@ ColumnLayout Layout.fillWidth: true color: Dex.CurrentTheme.foregroundColor3 Layout.preferredWidth: parent.width * 0.3 - text: "Total " + right_ticker + text: sell_mode ? qsTr("Receive %1").arg(right_ticker) : qsTr("Send %1").arg(right_ticker) font.pixelSize: 14 opacity: .6 font.weight: Font.Normal From ac5a983e644f11d85d53c8967ba1d08654e53930 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 7 Apr 2023 16:20:55 +0800 Subject: [PATCH 093/251] Fix overflow in pro view comboboxes --- .../Dex/Components/ComboBoxWithSearchBar.qml | 2 +- .../Dex/Exchange/ProView/DexComboBoxLine.qml | 35 ++++++++++++++----- .../ProView/SearchableTickerSelector.qml | 4 +-- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml b/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml index 908c6a407f..0009bc9d0a 100644 --- a/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml +++ b/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml @@ -11,7 +11,7 @@ ComboBox { id: control - property int radius: 20 + property int radius: 10 property int popupWidth: width property int popupMaxHeight: 450 property bool popupForceMaxHeight: false diff --git a/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml index 6e1cba552f..6b28afb85a 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml @@ -10,6 +10,7 @@ import App 1.0 import Dex.Themes 1.0 as Dex import Dex.Components 1.0 as Dex + RowLayout { id: root @@ -17,6 +18,7 @@ RowLayout property int padding: 0 property var details property color color: !details ? "white" : Style.getCoinColor(details.ticker) + property alias middle_text: middle_line.text_value property alias bottom_text: bottom_line.text_value property int activation_progress: Dex.General.zhtlcActivationProgress(details.activation_status, details.ticker) @@ -26,8 +28,8 @@ RowLayout { id: icon source: General.coinIcon(details.ticker) - Layout.preferredWidth: 32 - Layout.preferredHeight: 45 + Layout.preferredWidth: 52 + Layout.preferredHeight: 52 Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft Layout.leftMargin: padding Layout.topMargin: Layout.leftMargin @@ -37,7 +39,7 @@ RowLayout { anchors.centerIn: parent anchors.fill: parent - radius: 15 + radius: 10 enabled: Dex.General.isZhtlc(details.ticker) ? activation_progress != 100 : false visible: enabled opacity: .9 @@ -62,7 +64,8 @@ RowLayout anchors.left: parent.right anchors.leftMargin: 12 anchors.verticalCenter: parent.verticalCenter - width: root.width - 40 + width: root.width - 60 + spacing: 3 Dex.Text { @@ -77,18 +80,32 @@ RowLayout Dex.Text { - id: bottom_line + id: middle_line - property string real_value: !details ? "" : - details.balance + " (" + General.formatFiat("", details.main_currency_balance, API.app.settings_pg.current_fiat_sign) + ")" + property string coin_value: !details ? "" : details.balance + text: coin_value + Layout.fillWidth: true + elide: Text.ElideRight + color: Dex.CurrentTheme.foregroundColor + font: DexTypo.body2 + wrapMode: Label.NoWrap + ToolTip.text: coin_value + Component.onCompleted: font.pixelSize = 11.5 + } + + Dex.Text + { + id: bottom_line - text: real_value + property string fiat_value: !details ? "" : + General.formatFiat("", details.main_currency_balance, API.app.settings_pg.current_fiat_sign) + text: fiat_value Layout.fillWidth: true elide: Text.ElideRight color: Dex.CurrentTheme.foregroundColor font: DexTypo.body2 wrapMode: Label.NoWrap - ToolTip.text: real_value + ToolTip.text: fiat_value Component.onCompleted: font.pixelSize = 11.5 } } diff --git a/atomic_defi_design/Dex/Exchange/ProView/SearchableTickerSelector.qml b/atomic_defi_design/Dex/Exchange/ProView/SearchableTickerSelector.qml index de90ed3f2d..6bda8f68fe 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/SearchableTickerSelector.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/SearchableTickerSelector.qml @@ -18,7 +18,7 @@ Dex.ComboBoxWithSearchBar property string ticker property bool index_changed: false - height: 60 + height: 70 enabled: !block_everything textRole: "ticker" @@ -34,7 +34,7 @@ Dex.ComboBoxWithSearchBar { id: _delegate width: control.width - height: visible ? 60 : 0 + height: visible ? 70 : 0 highlighted: control.highlightedIndex === index contentItem: DexComboBoxLine { details: model } From c00ffdbec3594d52f128ef26c300961c9c670afb Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 7 Apr 2023 18:35:58 +0800 Subject: [PATCH 094/251] Improve combobox data display --- .../Dex/Exchange/Trade/ConfirmTradeModal.qml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index c0aae025d4..4054ef6606 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -34,29 +34,41 @@ MultipageModal RowLayout { id: dex_pair_badges + Layout.fillWidth: true + Layout.preferredHeight: 70 + Layout.preferredWidth: 480 + + Item { Layout.fillWidth: true } PairItemBadge { ticker: base_ticker fullname: General.coinName(base_ticker) amount: base_amount + Layout.fillHeight: true } + Item { Layout.fillWidth: true } + Qaterial.Icon { - Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter - color: Dex.CurrentTheme.foregroundColor icon: Qaterial.Icons.swapHorizontal + Layout.fillHeight: true } + Item { Layout.fillWidth: true } + PairItemBadge { ticker: rel_ticker fullname: General.coinName(rel_ticker) amount: rel_amount + Layout.fillHeight: true } + + Item { Layout.fillWidth: true } }, PriceLineSimplified From ac768b5c1a90dd35817c80420c42466f6b71a1ed Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 7 Apr 2023 18:36:50 +0800 Subject: [PATCH 095/251] improve coin /and values display in swap/order modals --- .../Dex/Components/PairItemBadge.qml | 133 ++++++++---------- .../ProView/TradingInfo/OrderModal.qml | 42 +++--- 2 files changed, 83 insertions(+), 92 deletions(-) diff --git a/atomic_defi_design/Dex/Components/PairItemBadge.qml b/atomic_defi_design/Dex/Components/PairItemBadge.qml index 3c5dd89a93..0660a8b49c 100644 --- a/atomic_defi_design/Dex/Components/PairItemBadge.qml +++ b/atomic_defi_design/Dex/Components/PairItemBadge.qml @@ -1,105 +1,96 @@ +import bignumberjs 1.0 + import QtQuick 2.15 import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 +import QtGraphicalEffects 1.0 +import QtQuick.Controls.Universal 2.15 -import bignumberjs 1.0 - -import "../Constants" +import "../Constants" as Dex +import App 1.0 import Dex.Themes 1.0 as Dex +import Dex.Components 1.0 as Dex -DefaultRectangle +DexRectangle { id: root - property alias source: icon.source - property alias ticker: ticker.text - property alias fullname: fullname.text - property string amount - - width: 260 - height: 66 radius: 10 - color: Dex.CurrentTheme.tickerBadgeBackgroundColor + visible: enabled + opacity: .9 + color: Dex.CurrentTheme.innerBackgroundColor + property string ticker + property string fullname + property string amount + property int padding: 0 + property alias middle_text: middle_line.text_value + property alias bottom_text: bottom_line.text_value + Layout.fillHeight: true + Layout.fillWidth: true + Layout.leftMargin: 20 + Layout.rightMargin: 20 RowLayout { - Layout.fillWidth: true - Layout.fillHeight: true anchors.fill: parent - anchors.margins: 15 - spacing: 8 + anchors.centerIn: parent + Layout.leftMargin: 20 + Layout.rightMargin: 20 - Item { Layout.fillWidth: true } - - DefaultImage + Dex.Image { id: icon - Layout.preferredWidth: 35 - Layout.preferredHeight: 35 - Layout.alignment: Qt.AlignVCenter - source: General.coinIcon(root.ticker) + source: General.coinIcon(ticker) + Layout.preferredWidth: 52 + Layout.preferredHeight: 52 + Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft + Layout.leftMargin: 20 + Layout.rightMargin: 10 + Layout.topMargin: 9 + Layout.bottomMargin: 9 } - - Item { Layout.fillWidth: true } - ColumnLayout { - Layout.fillWidth: true - Layout.fillHeight: true - Layout.alignment: Qt.AlignVCenter - spacing: 5 + spacing: 2 - DefaultText + Dex.Text { - id: ticker - Layout.fillWidth: true - font.pixelSize: 11 - horizontalAlignment: Text.AlignLeft - wrapMode: Text.NoWrap - } + Layout.preferredWidth: parent.width - 15 - DefaultText - { - Layout.fillWidth: true - font.pixelSize: 11 - horizontalAlignment: Text.AlignLeft + text_value: `${ticker}   ${fullname}` + font.pixelSize: Style.textSizeSmall3 + elide: Text.ElideRight wrapMode: Text.NoWrap - text: - { - BigNumber.config({ DECIMAL_PLACES: 6 }) - return new BigNumber(root.amount).toString(10) - } } - } - - Item { Layout.fillWidth: true } - - ColumnLayout - { - Layout.fillWidth: true - Layout.fillHeight: true - Layout.alignment: Qt.AlignVCenter - spacing: 5 - DefaultText + Dex.Text { - id: fullname + id: middle_line + + property string coin_value: amount + text: coin_value Layout.fillWidth: true - wrapMode: Text.WordWrap - horizontalAlignment: Text.AlignLeft - font.pixelSize: 11 + elide: Text.ElideRight + color: Dex.CurrentTheme.foregroundColor + font: DexTypo.body2 + wrapMode: Label.NoWrap + ToolTip.text: coin_value + Component.onCompleted: font.pixelSize = 11.5 } - DefaultText + Dex.Text { - id: amount_fiat - visible: text != '' + id: bottom_line + + property string fiat_value: General.getFiatText(amount, ticker) + text: fiat_value Layout.fillWidth: true - font.pixelSize: 11 - wrapMode: Text.NoWrap - horizontalAlignment: Text.AlignLeft elide: Text.ElideRight + color: Dex.CurrentTheme.foregroundColor + font: DexTypo.body2 + wrapMode: Label.NoWrap + ToolTip.text: fiat_value + Component.onCompleted: font.pixelSize = 11.5 } } - - Item { Layout.fillWidth: true } } -} +} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml index 25fa8d93cb..b64f2a479a 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml @@ -27,11 +27,11 @@ MultipageModal MultipageModalContent { - titleText: !details ? "" : details.is_swap ? qsTr("Swap Details") : qsTr("Order Details") + titleText: !details ? "" : visible ? getStatusText(details.order_status) : '' title.font.pixelSize: Style.textSize2 titleAlignment: Qt.AlignHCenter - titleTopMargin: 10 - topMarginAfterTitle: 10 + titleTopMargin: 0 + topMarginAfterTitle: 8 flickMax: window.height - 450 header: [ @@ -41,7 +41,8 @@ MultipageModal visible: !details ? false : details.is_swap && details.order_status === "successful" Layout.alignment: Qt.AlignHCenter source: General.image_path + "exchange-trade-complete.png" - height: 100 + Layout.preferredHeight: 60 + Layout.preferredWidth: 60 }, // Loading symbol @@ -51,49 +52,48 @@ MultipageModal details.is_swap && !["successful", "failed"].includes(details.order_status) running: visible && Qt.platform.os != "osx" Layout.alignment: Qt.AlignHCenter - height: 100 + Layout.preferredHeight: 60 + Layout.preferredWidth: 60 }, RowLayout { - Layout.topMargin: 10 - height: 70 + id: dex_pair_badges + Layout.fillWidth: true + Layout.preferredHeight: 70 + Layout.preferredWidth: 480 + + Item { Layout.fillWidth: true } PairItemBadge { ticker: details ? details.base_coin : "" fullname: details ? General.coinName(details.base_coin) : "" amount: details ? details.base_amount : "" + Layout.preferredHeight: 70 } + Item { Layout.fillWidth: true } + Qaterial.Icon { - Layout.fillWidth: true + Layout.preferredHeight: 70 Layout.alignment: Qt.AlignVCenter - color: Dex.CurrentTheme.foregroundColor icon: Qaterial.Icons.swapHorizontal } + Item { Layout.fillWidth: true } + PairItemBadge { ticker: details ? details.rel_coin : "" fullname: details ? General.coinName(details.rel_coin) : "" amount: details ? details.rel_amount : "" + Layout.preferredHeight: 70 } - }, - // Status Text - DefaultText - { - id: statusText - Layout.alignment: Qt.AlignHCenter - Layout.topMargin: 5 - font.pixelSize: Style.textSizeMid1 - font.bold: true - visible: !details ? false : details.is_swap || !details.is_maker - text_value: !details ? "" : visible ? getStatusText(details.order_status) : '' - height: 25 + Item { Layout.fillWidth: true } }, DefaultText From 3dbefba404540f4373997cd4de4298124fa0bd7a Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 9 Apr 2023 01:29:58 +0800 Subject: [PATCH 096/251] fix some coin text colors for contrast --- atomic_defi_design/Dex/Constants/Style.qml | 66 ++++++++++++---------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index ff2dbd105c..9c90be421c 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -184,30 +184,30 @@ QtObject { { switch (type) { - case 'ERC-20': return getCoinColor("ETH") - case 'ZHTLC': return getCoinColor("ARRR") - case 'QRC-20': return getCoinColor("QTUM") - case 'Smart Chain': return getCoinColor("KMD") + case 'ERC-20': return colorCoin["ETH"] + case 'ZHTLC': return colorCoin["ARRR"] + case 'QRC-20': return colorCoin["QTUM"] + case 'Smart Chain': return colorCoin["KMD"] case 'WALLET ONLY': return "#4D4D4D" - case 'UTXO': return getCoinColor("BTC") - case 'BEP-20': return getCoinColor("BNB") - case 'SLP': return getCoinColor("BCH") - case 'IDO': return getCoinColor("TKL") - case 'Matic': return getCoinColor("MATIC") + case 'UTXO': return colorCoin["BTC"] + case 'BEP-20': return colorCoin["BNB"] + case 'SLP': return colorCoin["BCH"] + case 'IDO': return colorCoin["TKL"] + case 'Matic': return colorCoin["MATIC"] case 'Optimism': return "#BB2100" - case 'Arbitrum': return getCoinColor("ETH") - case 'AVX-20': return getCoinColor("AVAX") - case 'FTM-20': return getCoinColor("FTM") - case 'HRC-20': return getCoinColor("ONE") - case 'Ubiq': return getCoinColor("UBQ") - case 'KRC-20': return getCoinColor("KCS") - case 'Moonriver': return getCoinColor("MOVR") - case 'Moonbeam': return getCoinColor("GLMR") - case 'HecoChain': return getCoinColor("HECO") - case 'SmartBCH': return getCoinColor("SBCH") - case 'Ethereum Classic': return getCoinColor("ETC") - case 'RSK Smart Bitcoin': return getCoinColor("BTC") - default: return getCoinColor("BTC") + case 'Arbitrum': return colorCoin["ETH"] + case 'AVX-20': return colorCoin["AVAX"] + case 'FTM-20': return colorCoin["FTM"] + case 'HRC-20': return colorCoin["ONE"] + case 'Ubiq': return colorCoin["UBQ"] + case 'KRC-20': return colorCoin["KCS"] + case 'Moonriver': return colorCoin["MOVR"] + case 'Moonbeam': return colorCoin["GLMR"] + case 'HecoChain': return colorCoin["HECO"] + case 'SmartBCH': return colorCoin["SBCH"] + case 'Ethereum Classic': return colorCoin["ETC"] + case 'RSK Smart Bitcoin': return colorCoin["BTC"] + default: return colorCoin["BTC"] } } @@ -221,8 +221,17 @@ QtObject { } function getCoinColor(ticker) { - const c = colorCoin[atomic_qt_utilities.retrieve_main_ticker(ticker)] - return c || Style.colorTheme2 + let info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) + let color = getCoinTypeTextColor(info.type) + if (colorCoin.hasOwnProperty(info.type)) + { + color = colorCoin[info.type] + } + else if (colorCoin.hasOwnProperty(atomic_qt_utilities.retrieve_main_ticker(ticker))) + { + color = colorCoin[atomic_qt_utilities.retrieve_main_ticker(ticker)] + } + return color } readonly property var colorCoin: ({ @@ -297,7 +306,7 @@ QtObject { "RVN": "#384182", "SAND": "#05C1F4", "CADC": "#FF6666", - "DGB": "#006AD2", + "DGB": "#0b77e1", "DIA": "#B94897", "DOT": "#E80082", "FLUX": "#2B61D1", @@ -334,7 +343,7 @@ QtObject { "MONA": "#DEC799", "MOVR": "#52CCC9", "GLMR": "#F6007C", - "NMC": "#186C9D", + "NMC": "#2286c0", "NZDS": "#1B3044", "RFOX": "#D83331", "BOTS": "#F69B57", @@ -372,7 +381,7 @@ QtObject { "REN": "#595959", "SMTF": "#F75836", "SUSHI": "#E25DA8", - "TRYB": "#0929AA", + "TRYB": "#5c74d6", "TUSD": "#2E3181", "AWC": "#31A5F6", "VRA": "#D70A41", @@ -392,7 +401,7 @@ QtObject { "CENNZ": "#2E87F1", "CHTA": "#C3A634", "COMP": "#00DBA3", - "CRO": "#243565", + "CRO": "#445790", "CVC": "#3AB03E", "CVT": "#4B0082", "PIC": "#04D9FF", @@ -487,7 +496,6 @@ QtObject { "ZOMBIE": "#72B001", "ZRX": "#302C2C", "UNI": "#FF007A", - "VOTE2022": "#7490AA", "USBL": "#279553", "RUNES": "#336699", "SIX": "#ed0909", From 05d90088a176d4b6e54abd89b4b874bce5b45f1c Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 9 Apr 2023 01:31:16 +0800 Subject: [PATCH 097/251] widen pair info badges in swap modals --- .../Dex/Components/DexSweetComboBox.qml | 2 +- atomic_defi_design/Dex/Components/PairItemBadge.qml | 10 +++++----- .../Dex/Exchange/ProView/TradingInfo/OrderModal.qml | 12 +++++------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/atomic_defi_design/Dex/Components/DexSweetComboBox.qml b/atomic_defi_design/Dex/Components/DexSweetComboBox.qml index e8a7086ab6..cc47e64e63 100644 --- a/atomic_defi_design/Dex/Components/DexSweetComboBox.qml +++ b/atomic_defi_design/Dex/Components/DexSweetComboBox.qml @@ -174,7 +174,7 @@ ComboBox highlighted: control.highlightedIndex === index contentItem: DefaultText { - text_value: "" + ticker + "" + " %1".arg(General.coinName(ticker)) + text_value: "" + ticker + "" + " %1".arg(General.coinName(ticker)) } background: DefaultRectangle diff --git a/atomic_defi_design/Dex/Components/PairItemBadge.qml b/atomic_defi_design/Dex/Components/PairItemBadge.qml index 0660a8b49c..51b90aef69 100644 --- a/atomic_defi_design/Dex/Components/PairItemBadge.qml +++ b/atomic_defi_design/Dex/Components/PairItemBadge.qml @@ -26,7 +26,7 @@ DexRectangle property alias bottom_text: bottom_line.text_value Layout.fillHeight: true Layout.fillWidth: true - Layout.leftMargin: 20 + Layout.leftMargin: 10 Layout.rightMargin: 20 RowLayout @@ -40,13 +40,13 @@ DexRectangle { id: icon source: General.coinIcon(ticker) - Layout.preferredWidth: 52 - Layout.preferredHeight: 52 + Layout.preferredWidth: 40 + Layout.preferredHeight: 40 Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft Layout.leftMargin: 20 Layout.rightMargin: 10 - Layout.topMargin: 9 - Layout.bottomMargin: 9 + Layout.topMargin: 0 + Layout.bottomMargin: 0 } ColumnLayout { diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml index b64f2a479a..2c0f7854c1 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml @@ -14,8 +14,9 @@ MultipageModal id: root property var details - horizontalPadding: 60 - verticalPadding: 40 + width: 720 + horizontalPadding: 40 + verticalPadding: 30 onDetailsChanged: { if (!details) root.close() } onOpened: @@ -55,15 +56,13 @@ MultipageModal Layout.preferredHeight: 60 Layout.preferredWidth: 60 }, - + RowLayout { id: dex_pair_badges - Layout.fillWidth: true Layout.preferredHeight: 70 - Layout.preferredWidth: 480 + Layout.fillWidth: true - Item { Layout.fillWidth: true } PairItemBadge { @@ -93,7 +92,6 @@ MultipageModal Layout.preferredHeight: 70 } - Item { Layout.fillWidth: true } }, DefaultText From 17c371f77913df8fbf190132e1a929dddcc3837a Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 9 Apr 2023 01:53:34 +0800 Subject: [PATCH 098/251] reset icon size for comboboxes --- atomic_defi_design/Dex/Components/PairItemBadge.qml | 1 + atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Components/PairItemBadge.qml b/atomic_defi_design/Dex/Components/PairItemBadge.qml index 51b90aef69..42bed3d89d 100644 --- a/atomic_defi_design/Dex/Components/PairItemBadge.qml +++ b/atomic_defi_design/Dex/Components/PairItemBadge.qml @@ -51,6 +51,7 @@ DexRectangle ColumnLayout { spacing: 2 + anchors.verticalCenter: parent.verticalCenter Dex.Text { diff --git a/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml index 6b28afb85a..89d6265293 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml @@ -28,8 +28,8 @@ RowLayout { id: icon source: General.coinIcon(details.ticker) - Layout.preferredWidth: 52 - Layout.preferredHeight: 52 + Layout.preferredWidth: 40 + Layout.preferredHeight: 40 Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft Layout.leftMargin: padding Layout.topMargin: Layout.leftMargin @@ -64,7 +64,7 @@ RowLayout anchors.left: parent.right anchors.leftMargin: 12 anchors.verticalCenter: parent.verticalCenter - width: root.width - 60 + width: root.width - 48 spacing: 3 Dex.Text From daa708e9bb0e39139065a333a8e14787791fc1f7 Mon Sep 17 00:00:00 2001 From: cipig Date: Sun, 9 Apr 2023 16:20:03 +0000 Subject: [PATCH 099/251] Revert "don't update max_taker_vol on every orderbook update" This reverts commit 86b0620d968076f682f7392bc081eb552e5f261f. --- src/core/atomicdex/pages/qt.trading.page.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/pages/qt.trading.page.cpp b/src/core/atomicdex/pages/qt.trading.page.cpp index 1ece670438..b273ba7e52 100644 --- a/src/core/atomicdex/pages/qt.trading.page.cpp +++ b/src/core/atomicdex/pages/qt.trading.page.cpp @@ -56,7 +56,7 @@ namespace atomic_dex { m_actions_queue.push(trading_actions::post_process_orderbook_finished); m_models_actions[orderbook_need_a_reset] = evt.is_a_reset; - //determine_max_volume(); + determine_max_volume(); } } } // namespace atomic_dex From feeded98ed39603ffd786b81a9a854b223b1dcaf Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 03:22:34 +0800 Subject: [PATCH 100/251] fix anchor layout error --- atomic_defi_design/Dex/Components/PairItemBadge.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Components/PairItemBadge.qml b/atomic_defi_design/Dex/Components/PairItemBadge.qml index 42bed3d89d..4fec7de383 100644 --- a/atomic_defi_design/Dex/Components/PairItemBadge.qml +++ b/atomic_defi_design/Dex/Components/PairItemBadge.qml @@ -51,7 +51,7 @@ DexRectangle ColumnLayout { spacing: 2 - anchors.verticalCenter: parent.verticalCenter + Layout.alignment: Qt.AlignVCenter Dex.Text { From 7c0255fcdfe90c615123e3b2e98808df2b7cf623 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 16:36:23 +0800 Subject: [PATCH 101/251] set ticer status log to debug --- src/core/atomicdex/services/mm2/mm2.service.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 40c891fd23..3faf992992 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -161,7 +161,7 @@ namespace } if (field_name == "active") { - SPDLOG_INFO("ticker: {} status active: {}", ticker, status); + SPDLOG_DEBUG("ticker: {} status active: {}", ticker, status); registry[ticker].active = status; } else if (field_name == "is_segwit_on") From 78bc7c9111ec2e17aec4b582e4f7dc79cfdecb42 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 16:37:02 +0800 Subject: [PATCH 102/251] fix getTitle error in notifications --- atomic_defi_design/Dex/Dashboard/NotificationsModal.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml index c6d8fa9e79..4b494de500 100644 --- a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml +++ b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml @@ -80,7 +80,7 @@ DexPopup app.pageLoader.item.switchPage(Dashboard.PageType.DEX) break case "open_log_modal": - showError(notification.getTitle(), notification.long_message) + showError(getNotificationTitle(notification), notification.long_message) break default: console.warn("Unknown notification click action", notification.click_action) From 815c67604f6be004497b1e486806e3234de813b2 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 16:46:05 +0800 Subject: [PATCH 103/251] Fix spelling mistake --- atomic_defi_design/Dex/Wallet/Main.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Wallet/Main.qml b/atomic_defi_design/Dex/Wallet/Main.qml index e74ef4fb7a..101c341420 100644 --- a/atomic_defi_design/Dex/Wallet/Main.qml +++ b/atomic_defi_design/Dex/Wallet/Main.qml @@ -309,7 +309,7 @@ Item DefaultText { id: portfolio_title - text_value: qsTr("Porfolio") + text_value: qsTr("Portfolio") Layout.alignment: Qt.AlignHCenter color: headerTitleColor font.pixelSize: headerTitleFont From 00b91466aac2dd5f8c61003b6f7768e6c2c97831 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 17:00:58 +0800 Subject: [PATCH 104/251] update combobox background for lite theme --- assets/themes/Default - Light/colors.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index fcf1f7f9a9..ce09819f1a 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -47,7 +47,7 @@ "switchGradientStartColor2": "#FFFFFFFF", "switchGradientEndColor2": "#FFFFFFFF", - "comboBoxBackgroundColor": "#FFFFFFFF", + "comboBoxBackgroundColor": "#DDE6F2FF", "comboBoxArrowsColor": "#456078FF", "comboBoxDropdownItemHighlightedColor": "#CDE1FFFF", From 104552a446324ba00fc83a240498de75e1fa49e1 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 17:09:30 +0800 Subject: [PATCH 105/251] update chart theme colors --- atomic_defi_design/Dex/Exchange/ProView/Chart.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml index 4eead3d0ca..1e1f9ebd64 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml @@ -66,7 +66,7 @@ Item } -
+
` } } From d92c4cfb1d0ff4fde967c38ea6207976b7757aa4 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 20:40:11 +0800 Subject: [PATCH 106/251] update lite theme colors --- assets/themes/Default - Light/colors.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index fcf1f7f9a9..dd52d7d358 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -2,13 +2,14 @@ "accentColor": "#F0F2FFFF", "foregroundColor": "#456078FF", "backgroundColor": "#FCFCFCFF", - "backgroundColorDeep": "#FCFCFCFF", + "secondBackgroundColor": "#ECECECFF", + "backgroundColorDeep": "#ECECECFF", "busyIndicatorColor": "#5A68E6FF", "buttonColorDisabled": "#D8E3F8FF", - "buttonColorEnabled": "#F0F6FFFF", - "buttonColorHovered": "#D7E7FFFF", + "buttonColorEnabled": "#DDE6F2FF", + "buttonColorHovered": "#CDE1FFFF", "buttonColorPressed": "#B8D2F9FF", "buttonTextDisabledColor": "#D1D4DCFF", "buttonTextEnabledColor": "#456078FF", @@ -21,8 +22,8 @@ "buttonSecondaryColorPressed": "#B8D2F9FF", "buttonCancelColorDisabled": "#D8E3F8FF", - "buttonCancelColorEnabled": "#F0F6FFFF", - "buttonCancelColorHovered": "#D7E7FFFF", + "buttonCancelColorEnabled": "#DDE6F2FF", + "buttonCancelColorHovered": "#CDE1FFFF", "buttonCancelColorPressed": "#B8D2F9FF", "gradientButtonStartColor": "#5A68E6FF", From 5be6b9cbd3454ff71c0ae5d25bc48c8b6b45e845 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 20:41:03 +0800 Subject: [PATCH 107/251] remove duplicate component --- atomic_defi_design/Dex/Components/DefaultButton.qml | 5 ++--- atomic_defi_design/Dex/Components/DexButton.qml | 6 ------ atomic_defi_design/Dex/Components/PaginationButton.qml | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) delete mode 100644 atomic_defi_design/Dex/Components/DexButton.qml diff --git a/atomic_defi_design/Dex/Components/DefaultButton.qml b/atomic_defi_design/Dex/Components/DefaultButton.qml index 12f0a4655d..458a254905 100644 --- a/atomic_defi_design/Dex/Components/DefaultButton.qml +++ b/atomic_defi_design/Dex/Components/DefaultButton.qml @@ -3,6 +3,5 @@ import "../Constants" import App 1.0 // Add button -DexButton { - -} +DexAppButton {} + \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/DexButton.qml b/atomic_defi_design/Dex/Components/DexButton.qml deleted file mode 100644 index f886729bf8..0000000000 --- a/atomic_defi_design/Dex/Components/DexButton.qml +++ /dev/null @@ -1,6 +0,0 @@ -import QtQuick 2.15 -import "../Constants" -import App 1.0 - -// Add button -DexAppButton {} diff --git a/atomic_defi_design/Dex/Components/PaginationButton.qml b/atomic_defi_design/Dex/Components/PaginationButton.qml index 5d850f8b2e..501fca07a0 100644 --- a/atomic_defi_design/Dex/Components/PaginationButton.qml +++ b/atomic_defi_design/Dex/Components/PaginationButton.qml @@ -1,6 +1,6 @@ import "../Components" -DexButton +DexAppButton { font.pixelSize: 12 } From 63d314802ba0d637b3dddb1726252e8651c77089 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 20:41:42 +0800 Subject: [PATCH 108/251] fix contrast for contact name pop up --- atomic_defi_design/Dex/Addressbook/NewContactPopup.qml | 2 ++ atomic_defi_design/Dex/Components/DefaultPopup.qml | 4 +++- atomic_defi_design/Dex/Components/DexTextField.qml | 5 +++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml b/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml index 4c61b27c64..535337dcaa 100644 --- a/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml +++ b/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml @@ -6,6 +6,7 @@ import QtQuick.Layouts 1.15 import "../Components" import "../Constants" import Dex.Components 1.0 as Dex +import Dex.Themes 1.0 as Dex Dex.Popup { @@ -14,6 +15,7 @@ Dex.Popup height: 88 onOpened: nameField.forceActiveFocus() onClosed: nameField.text = "" + bgColor: Dex.CurrentTheme.innerBackgroundColor contentItem: Column { diff --git a/atomic_defi_design/Dex/Components/DefaultPopup.qml b/atomic_defi_design/Dex/Components/DefaultPopup.qml index e893062d08..353a8557b1 100644 --- a/atomic_defi_design/Dex/Components/DefaultPopup.qml +++ b/atomic_defi_design/Dex/Components/DefaultPopup.qml @@ -2,14 +2,16 @@ import QtQuick 2.12 import QtQuick.Controls 2.15 //> Popup +import Dex.Themes 1.0 as Dex Popup { id: popup + property color bgColor: Dex.CurrentTheme.floatingBackgroundColor y: parent.height x: (parent.width / 2) - (width / 2) closePolicy: Popup.CloseOnPressOutsideParent | Popup.CloseOnEscape - background: FloatingBackground { } + background: FloatingBackground { color: bgColor } } diff --git a/atomic_defi_design/Dex/Components/DexTextField.qml b/atomic_defi_design/Dex/Components/DexTextField.qml index 485f4b449a..1764675b85 100644 --- a/atomic_defi_design/Dex/Components/DexTextField.qml +++ b/atomic_defi_design/Dex/Components/DexTextField.qml @@ -11,7 +11,8 @@ TextField property alias left_text: left_text.text_value property alias right_text: right_text.text_value property alias radius: background.radius - property alias backgroundColor: background.color + property color backgroundColor: Dex.CurrentTheme.textFieldBackgroundColor + property color backgroundColorActive: Dex.CurrentTheme.textFieldActiveBackgroundColor property bool forceFocus: false font: DexTypo.body2 @@ -30,7 +31,7 @@ TextField background: DefaultRectangle { id: background - color: text_field.focus ? Dex.CurrentTheme.textFieldActiveBackgroundColor : Dex.CurrentTheme.textFieldBackgroundColor + color: text_field.focus ? backgroundColorActive : backgroundColor radius: 18 anchors.fill: parent } From 15571dc3b832682cd6b52d73a51defc2b551bac6 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Apr 2023 22:00:22 +0800 Subject: [PATCH 109/251] maximise combo width in pro view --- atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml b/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml index 86df283110..c7a8b395fa 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml @@ -22,7 +22,7 @@ Row { id: selectorLeft - width: parent.width * 0.45 + width: 230 height: parent.height left_side: true @@ -40,7 +40,7 @@ Row SwapIcon { - width: parent.width * 0.1 + width: 30 anchors.verticalCenter: parent.verticalCenter top_arrow_ticker: selectorLeft.ticker bottom_arrow_ticker: selectorRight.ticker @@ -63,7 +63,7 @@ Row { id: selectorRight - width: parent.width * 0.45 + width: 230 height: parent.height left_side: false From 5e1e85e467f27eeeb65296ee35151d67468b6e04 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 11 Apr 2023 00:07:05 +0800 Subject: [PATCH 110/251] fix bad contrast coin ticker text colors --- atomic_defi_design/Dex/Constants/Style.qml | 305 +++------------------ 1 file changed, 44 insertions(+), 261 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 9c90be421c..13bb307ef7 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -220,285 +220,68 @@ QtObject { } } - function getCoinColor(ticker) { - let info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) - let color = getCoinTypeTextColor(info.type) - if (colorCoin.hasOwnProperty(info.type)) + function getCoinGroupTextColor(type) + { + switch (type) { - color = colorCoin[info.type] + case 'IDO': return "#536E93" + case 'AVX-20': return colorCoin["AVAX"] + case 'ZHTLC': return colorCoin["ARRR"] + case 'COSMOS': return colorCoin["ATOM"] + case 'SLP': return colorCoin["BCH"] + case 'BEP-20': return colorCoin["BNB"] + case 'RSK Smart Bitcoin': return colorCoin["BTC"] + case 'UTXO': return colorCoin["BTC"] + case 'Ethereum Classic': return colorCoin["ETC"] + case 'Arbitrum': return colorCoin["ETH"] + case 'ERC-20': return colorCoin["ETH"] + case 'FTM-20': return colorCoin["FTM"] + case 'Moonbeam': return colorCoin["GLMR"] + case 'HecoChain': return colorCoin["HECO"] + case 'QRC-20': return colorCoin["QTUM"] + case 'KRC-20': return colorCoin["KCS"] + case 'Smart Chain': return colorCoin["KMD"] + case 'Matic': return colorCoin["MATIC"] + case 'Moonriver': return colorCoin["MOVR"] + case 'HRC-20': return colorCoin["ONE"] + case 'SmartBCH': return colorCoin["SBCH"] + case 'Ubiq': return colorCoin["UBQ"] + case 'Optimism': return "#BB2100" + case 'WALLET ONLY': return "#4D4D4D" + default: return dark_theme ? "#FFFFFF" : "#456078" } - else if (colorCoin.hasOwnProperty(atomic_qt_utilities.retrieve_main_ticker(ticker))) + } + + function getCoinColor(ticker) { + let info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) + let color = getCoinGroupTextColor(info.type) + let base_ticker = atomic_qt_utilities.retrieve_main_ticker(ticker) + if (colorCoin.hasOwnProperty(base_ticker)) { - color = colorCoin[atomic_qt_utilities.retrieve_main_ticker(ticker)] + color = colorCoin[base_ticker] } return color } readonly property var colorCoin: ({ - "ABY": "#8B0D10", - "ACTN": "#E84142", - "ADA": "#214D78", - "ADX": "#1B75BC", - "ANKR": "#2075E8", - "APE": "#0052F2", - "ARPA": "#CCD9E2", "ARRR": "#C7A34C", - "ATOM": "#474B6C", - "AUR": "#0A6C5E", - "AVA": "#5B567F", + "ATOM": "#963b9a", "AVAX": "#E84142", - "AVN": "#33E0CE", - "AXS": "#0055D5", - "BAL": "#4D4D4D", - "BNB": "#F9D987", + "BNB": "#f0900b", "BCH": "#8DC351", - "BIDR": "#F0B90B", - "BRZ": "#B5DEC3", - "BSTY": "#78570D", "BTC": "#E9983C", - "RBTC": "#E9983C", - "BTT": "#666666", - "BTTC": "#666666", - "BTE": "#FFE201", - "BTX": "#FB30A6", - "CAKE": "#D1884F", - "CASE": "#FFFF12", - "CDN": "#90191C", - "CLC": "#0970DC", - "CRV": "#517AB5", - "DGC": "#BC7600", - "DIMI": "#0BFBE2", - "DOI": "#120641", - "DUST": "#6A032F", - "EOS": "#4D4D4D", - "FET": "#202944", - "FLOW": "#00EF8B", - "FTC": "#FFFFFF", - "FTM": "#13B5EC", - "GALA": "#011B36", - "GLEEC": "#8C41FF", - "GRMS": "#12B690", - "GLM": "#0050E6", - "GMS": "#0BFBE2", - "GMT": "#E9CB7B", - "GMX": "#07A9E6", - "GRS": "#377E96", - "GRT": "#6E54DB", - "GST": "#D7D7D7", - "IOTA": "#404040", - "ILNF": "#28873b", - "IC": "#72009D", - "JST": "#B41514", - "JSTR": "#627EEA", - "DOGE": "#C3A634", "ETC": "#328432", "ETH": "#687DE3", - "ETHR": "#627EEA", - "KMD": "#7490AA", - "KCS": "#25AF90", - "KSM": "#595959", - "MORTY": "#A4764D", - "RICK": "#A5CBDD", - "EMC2": "#00CCFF", - "INJ": "#17EAE9", - "JPYC": "#16449A", - "DASH": "#008CE7", - "RVN": "#384182", - "SAND": "#05C1F4", - "CADC": "#FF6666", - "DGB": "#0b77e1", - "DIA": "#B94897", - "DOT": "#E80082", - "FLUX": "#2B61D1", - "FIRO": "#BB2100", - "LBC": "#00775C", - "LDO": "#F69988", - "LOOM": "#48BEFF", - "LTC": "#BFBBBB", - "LUNA": "#FFD83D", - "LYNX": "#0071BA", - "LTFN": "#0099CC", - "MIR": "#2C9FEF", - "XPM": "#A67522", - "XVC": "#B50126", - "ZEC": "#ECB244", - "ZER": "#FFFFFF", - "NAV": "#7D59B5", - "DP": "#E41D25", - "ECA": "#A915DC", + "FTM": "#13B5EC", + "HECO": "#00953F", + "GLMR": "#F6007C", "QTUM": "#2E9AD0", - "UBQ": "#00EB90", - "CHIPS": "#598182", - "CIPHS": "#ECD900", - "AXE": "#C63877", - "PANGEA": "#D88245", - "JUMBLR": "#2B4649", - "DEX": "#43B7B6", - "CRYPTO": "#F58736", - "LABS": "#C1F6E1", - "LCC": "#068210", - "LNC": "#C3A635", - "MESH": "#0098DA", - "MGW": "#854F2F", - "MONA": "#DEC799", + "KCS": "#25AF90", + "KMD": "#7490AA", "MOVR": "#52CCC9", - "GLMR": "#F6007C", - "NMC": "#2286c0", - "NZDS": "#1B3044", - "RFOX": "#D83331", - "BOTS": "#F69B57", - "MC": "#E16428", - "MCL": "#EA0000", - "ILNSW": "#28873B", - "MM": "#F5B700", - "CCL": "#FFE400", - "BET": "#F69B57", - "JCHF": "#D80027", - "JEUR": "#003399", - "JGBP": "#C8102E", - "JJPY": "#BC002D", - "JRT": "#5EFC84", - "SUPERNET": "#F69B57", - "REVS": "#F69B57", - "EILN": "#1ADEC9", - "ILN": "#814EB1", - "VRSC": "#3164D3", - "WCN": "#E49F00", - "WWCN": "#E49F00", - "TFT": "#80C7CF", - "THC": "#819F6F", - "1INCH": "#95A7C5", - "BABYDOGE": "#F3AA47", - "BAT": "#FF5000", - "BUSD": "#F0B90B", - "HUSD": "#0075FB", - "DAI": "#B68900", - "USDC": "#317BCB", - "USDI": "#C29E47", - "USDT": "#26A17B", - "PAX": "#408C69", - "PAXG": "#DABE37", - "REN": "#595959", - "SMTF": "#F75836", - "SUSHI": "#E25DA8", - "TRYB": "#5c74d6", - "TUSD": "#2E3181", - "AWC": "#31A5F6", - "VRA": "#D70A41", - "SPACE": "#E44C65", - "QC": "#00D7B3", - "PBC": "#64A3CB", - "AAVE": "#9C64A6", - "ANT": "#33DAE6", - "AGIX": "#6815FF", - "BAND": "#526BFF", - "BLK": "#595959", - "IL8P": "#696969", - "BNT": "#0000FF", - "BTCZ": "#F5B036", - "CEL": "#4055A6", - "CELR": "#595959", - "CENNZ": "#2E87F1", - "CHTA": "#C3A634", - "COMP": "#00DBA3", - "CRO": "#445790", - "CVC": "#3AB03E", - "CVT": "#4B0082", - "PIC": "#04D9FF", - "DODO": "#FAF621", - "EFL": "#FF940B", - "EGLD": "#1D4CB5", - "ELF": "#2B5EBB", - "ENJ": "#6752C3", - "EURS": "#2F77ED", - "FIL": "#4CCAD2", - "FJC": "#00AFEC", - "FJCB": "#FFCC33", - "FUN": "#EF1C70", - "GNO": "#00B0CC", - "HOT": "#983EFF", - "HECO": "#00953F", - "IOTX": "#00CDCE", - "KNC": "#117980", - "LEO": "#F79B2C", - "LINK": "#356CE4", - "LRC": "#32C2F8", - "LSTR": "#7E3193", - "MANA": "#FF3C6C", "MATIC": "#804EE1", - "MKR": "#1BAF9F", - "MINDS": "#687DE3", - "NEAR": "#595959", - "NENG": "#BFBBBB", - "NEXO": "#A3B3D6", - "NVC": "#FCF96D", - "NYAN": "#008CE7", - "OCEAN": "#595959", - "OMG": "#595959", "ONE": "#00BEEE", - "ONT": "#2692AF", - "PND": "#EBD430", - "POWR": "#05BCAA", - "PPC": "#46BC60", - "PRUX": "#FF8000", - "PRCY": "#012828", - "QI": "#FFFFFF", - "QIAIR": "#FEFEFE", - "QKC": "#2175B4", - "QNT": "#000000", - "REP": "#0E0E21", - "REV": "#78034D", - "RLC": "#FFE100", - "RTM": "#B74427", "SBCH": "#74dd54", - "SIBM": "#0C4855", - "SFUSD": "#9881B8", - "SNT": "#596BED", - "SNX": "#00D1FF", - "SOL": "#7BFBB5", - "SOULJA": "#8F734A", - "STFIRO": "#00D4F7", - "STORJ": "#2683FF", - "SXP": "#FD5F3B", - "SYS": "#0084C7", - "TEL": "#1BD8FF", - "TKL": "#536E93", - "TON": "#0088CC", - "TRC": "#096432", - "TRX": "#F30031", - "TSL": "#64B082", - "UIS": "#008DCD", - "UNO": "#2F87BB", - "UST": "#5493F7", - "VAL": "#1EEC84", - "VET": "#18C6FF", - "VITE": "#007AFF", - "VRM": "#586A7A", - "VTC": "#049161", - "WSB": "#FEBB84", - "WAVES": "#016BFF", - "WBTC": "#CCCCCC", - "WHIVE": "#FFCC00", - "WOO": "#595959", - "XEC": "#273498", - "XEP": "#0277E5", - "XLM": "#737373", - "XMY": "#F01385", - "XRP": "#2E353D", - "XRG": "#162D50", - "XSGD": "#1048E5", - "XTZ": "#A8E000", - "XVS": "#F4BC54", - "YFI": "#006BE6", - "YFII": "#FF2A79", - "ZET": "#155169", - "ZIL": "#42BBB9", - "ZOMBIE": "#72B001", - "ZRX": "#302C2C", - "UNI": "#FF007A", - "USBL": "#279553", - "RUNES": "#336699", - "SIX": "#ed0909", - "NATURE": "#04cf13" + "UBQ": "#00EB90", }) } From fc17cceeea6753305daa15e44fb89456a0957d4b Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 11 Apr 2023 00:09:31 +0800 Subject: [PATCH 111/251] rm leftover comma --- atomic_defi_design/Dex/Constants/Style.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 13bb307ef7..d40019d988 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -282,6 +282,6 @@ QtObject { "MATIC": "#804EE1", "ONE": "#00BEEE", "SBCH": "#74dd54", - "UBQ": "#00EB90", + "UBQ": "#00EB90" }) } From 5a2e5ffa45e0c59a29b23b80f4485cd8866a8857 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 11 Apr 2023 16:52:56 +0800 Subject: [PATCH 112/251] allow theme based coin text color definitions --- atomic_defi_design/Dex/Constants/Style.qml | 145 +++++++++++------- .../Dex/Portfolio/AssetsList.qml | 2 +- 2 files changed, 91 insertions(+), 56 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index d40019d988..642d778762 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -1,6 +1,7 @@ pragma Singleton import QtQuick 2.15 import Qaterial 1.0 as Qaterial +import Dex.Themes 1.0 as Dex QtObject { function setQaterialStyle() { @@ -65,7 +66,7 @@ QtObject { readonly property double hoverLightMultiplier: 1.5 readonly property double hoverOpacity: 0.6 - property bool dark_theme: true + property bool dark_theme: Dex.CurrentTheme.getColorMode() === Dex.CurrentTheme.ColorMode.Dark function applyOpacity(hex, opacity="00") { @@ -184,30 +185,31 @@ QtObject { { switch (type) { - case 'ERC-20': return colorCoin["ETH"] - case 'ZHTLC': return colorCoin["ARRR"] - case 'QRC-20': return colorCoin["QTUM"] - case 'Smart Chain': return colorCoin["KMD"] - case 'WALLET ONLY': return "#4D4D4D" - case 'UTXO': return colorCoin["BTC"] - case 'BEP-20': return colorCoin["BNB"] - case 'SLP': return colorCoin["BCH"] - case 'IDO': return colorCoin["TKL"] - case 'Matic': return colorCoin["MATIC"] - case 'Optimism': return "#BB2100" - case 'Arbitrum': return colorCoin["ETH"] - case 'AVX-20': return colorCoin["AVAX"] - case 'FTM-20': return colorCoin["FTM"] - case 'HRC-20': return colorCoin["ONE"] - case 'Ubiq': return colorCoin["UBQ"] - case 'KRC-20': return colorCoin["KCS"] - case 'Moonriver': return colorCoin["MOVR"] - case 'Moonbeam': return colorCoin["GLMR"] - case 'HecoChain': return colorCoin["HECO"] - case 'SmartBCH': return colorCoin["SBCH"] - case 'Ethereum Classic': return colorCoin["ETC"] - case 'RSK Smart Bitcoin': return colorCoin["BTC"] - default: return colorCoin["BTC"] + case 'IDO': return dark_theme ? colorCoinDark["IDO"] : colorCoin["IDO"] + case 'AVX-20': return dark_theme ? colorCoinDark["AVAX"] : colorCoin["AVAX"] + case 'ZHTLC': return dark_theme ? colorCoinDark["ARRR"] : colorCoin["ARRR"] + case 'COSMOS': return dark_theme ? colorCoinDark["ATOM"] : colorCoin["ATOM"] + case 'SLP': return dark_theme ? colorCoinDark["BCH"] : colorCoin["BCH"] + case 'BEP-20': return dark_theme ? colorCoinDark["BNB"] : colorCoin["BNB"] + case 'RSK Smart Bitcoin': return dark_theme ? colorCoinDark["UTXO"] : colorCoin["UTXO"] + case 'UTXO': return dark_theme ? colorCoinDark["UTXO"] : colorCoin["UTXO"] + case 'Ethereum Classic': return dark_theme ? colorCoinDark["ETC"] : colorCoin["ETC"] + case 'Arbitrum': return dark_theme ? colorCoinDark["ETH"] : colorCoin["ETH"] + case 'ERC-20': return dark_theme ? colorCoinDark["ETH"] : colorCoin["ETH"] + case 'FTM-20': return dark_theme ? colorCoinDark["FTM"] : colorCoin["FTM"] + case 'Moonbeam': return dark_theme ? colorCoinDark["GLMR"] : colorCoin["GLMR"] + case 'HecoChain': return dark_theme ? colorCoinDark["HECO"] : colorCoin["HECO"] + case 'QRC-20': return dark_theme ? colorCoinDark["QTUM"] : colorCoin["QTUM"] + case 'KRC-20': return dark_theme ? colorCoinDark["KCS"] : colorCoin["KCS"] + case 'Smart Chain': return dark_theme ? colorCoinDark["KMD"] : colorCoin["KMD"] + case 'Matic': return dark_theme ? colorCoinDark["MATIC"] : colorCoin["MATIC"] + case 'Moonriver': return dark_theme ? colorCoinDark["MOVR"] : colorCoin["MOVR"] + case 'HRC-20': return dark_theme ? colorCoinDark["ONE"] : colorCoin["ONE"] + case 'SmartBCH': return dark_theme ? colorCoinDark["SBCH"] : colorCoin["SBCH"] + case 'Ubiq': return dark_theme ? colorCoinDark["UBQ"] : colorCoin["UBQ"] + case 'Optimism': return "#BB2100" + case 'WALLET ONLY': return dark_theme ? colorCoinDark["WALLET ONLY"] : colorCoin["WALLET ONLY"] + default: return dark_theme ? colorCoinDark["default"] : colorCoin["default"] } } @@ -224,41 +226,46 @@ QtObject { { switch (type) { - case 'IDO': return "#536E93" - case 'AVX-20': return colorCoin["AVAX"] - case 'ZHTLC': return colorCoin["ARRR"] - case 'COSMOS': return colorCoin["ATOM"] - case 'SLP': return colorCoin["BCH"] - case 'BEP-20': return colorCoin["BNB"] - case 'RSK Smart Bitcoin': return colorCoin["BTC"] - case 'UTXO': return colorCoin["BTC"] - case 'Ethereum Classic': return colorCoin["ETC"] - case 'Arbitrum': return colorCoin["ETH"] - case 'ERC-20': return colorCoin["ETH"] - case 'FTM-20': return colorCoin["FTM"] - case 'Moonbeam': return colorCoin["GLMR"] - case 'HecoChain': return colorCoin["HECO"] - case 'QRC-20': return colorCoin["QTUM"] - case 'KRC-20': return colorCoin["KCS"] - case 'Smart Chain': return colorCoin["KMD"] - case 'Matic': return colorCoin["MATIC"] - case 'Moonriver': return colorCoin["MOVR"] - case 'HRC-20': return colorCoin["ONE"] - case 'SmartBCH': return colorCoin["SBCH"] - case 'Ubiq': return colorCoin["UBQ"] + case 'IDO': return dark_theme ? colorCoinDark["IDO"] : colorCoin["IDO"] + case 'AVX-20': return dark_theme ? colorCoinDark["AVAX"] : colorCoin["AVAX"] + case 'ZHTLC': return dark_theme ? colorCoinDark["ARRR"] : colorCoin["ARRR"] + case 'COSMOS': return dark_theme ? colorCoinDark["ATOM"] : colorCoin["ATOM"] + case 'SLP': return dark_theme ? colorCoinDark["BCH"] : colorCoin["BCH"] + case 'BEP-20': return dark_theme ? colorCoinDark["BNB"] : colorCoin["BNB"] + case 'RSK Smart Bitcoin': return dark_theme ? colorCoinDark["UTXO"] : colorCoin["UTXO"] + case 'UTXO': return dark_theme ? colorCoinDark["UTXO"] : colorCoin["UTXO"] + case 'Ethereum Classic': return dark_theme ? colorCoinDark["ETC"] : colorCoin["ETC"] + case 'Arbitrum': return dark_theme ? colorCoinDark["ETH"] : colorCoin["ETH"] + case 'ERC-20': return dark_theme ? colorCoinDark["ETH"] : colorCoin["ETH"] + case 'FTM-20': return dark_theme ? colorCoinDark["FTM"] : colorCoin["FTM"] + case 'Moonbeam': return dark_theme ? colorCoinDark["GLMR"] : colorCoin["GLMR"] + case 'HecoChain': return dark_theme ? colorCoinDark["HECO"] : colorCoin["HECO"] + case 'QRC-20': return dark_theme ? colorCoinDark["QTUM"] : colorCoin["QTUM"] + case 'KRC-20': return dark_theme ? colorCoinDark["KCS"] : colorCoin["KCS"] + case 'Smart Chain': return dark_theme ? colorCoinDark["KMD"] : colorCoin["KMD"] + case 'Matic': return dark_theme ? colorCoinDark["MATIC"] : colorCoin["MATIC"] + case 'Moonriver': return dark_theme ? colorCoinDark["MOVR"] : colorCoin["MOVR"] + case 'HRC-20': return dark_theme ? colorCoinDark["ONE"] : colorCoin["ONE"] + case 'SmartBCH': return dark_theme ? colorCoinDark["SBCH"] : colorCoin["SBCH"] + case 'Ubiq': return dark_theme ? colorCoinDark["UBQ"] : colorCoin["UBQ"] case 'Optimism': return "#BB2100" - case 'WALLET ONLY': return "#4D4D4D" - default: return dark_theme ? "#FFFFFF" : "#456078" + case 'WALLET ONLY': return dark_theme ? colorCoinDark["WALLET ONLY"] : colorCoin["WALLET ONLY"] + default: return dark_theme ? colorCoinDark["default"] : colorCoin["default"] } } function getCoinColor(ticker) { let info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) + if (!info.type) { return dark_theme ? colorCoin["default"] : colorCoinDark["default"] } let color = getCoinGroupTextColor(info.type) let base_ticker = atomic_qt_utilities.retrieve_main_ticker(ticker) - if (colorCoin.hasOwnProperty(base_ticker)) + if (colorCoin.hasOwnProperty(base_ticker) && !dark_theme) + { + return colorCoin[base_ticker] + } + if (colorCoinDark.hasOwnProperty(base_ticker) && dark_theme) { - color = colorCoin[base_ticker] + return colorCoinDark[base_ticker] } return color } @@ -267,9 +274,33 @@ QtObject { "ARRR": "#C7A34C", "ATOM": "#963b9a", "AVAX": "#E84142", - "BNB": "#f0900b", + "BNB": "#b35900", + "BCH": "#8DC351", + "ETC": "#328432", + "ETH": "#687DE3", + "FTM": "#13B5EC", + "HECO": "#00953F", + "GLMR": "#F6007C", + "QTUM": "#2E9AD0", + "KCS": "#25AF90", + "KMD": "#2d4f86", + "MOVR": "#52CCC9", + "MATIC": "#804EE1", + "ONE": "#00BEEE", + "SBCH": "#74dd54", + "UBQ": "#00EB90", + "UTXO": "#349d5f", + "default": "#2f2f2f", + "IDO": "#536E93", + "WALLET ONLY": "#404040" + }) + + readonly property var colorCoinDark: ({ + "ARRR": "#C7A34C", + "ATOM": "#963b9a", + "AVAX": "#E84142", + "BNB": "#ffc266", "BCH": "#8DC351", - "BTC": "#E9983C", "ETC": "#328432", "ETH": "#687DE3", "FTM": "#13B5EC", @@ -277,11 +308,15 @@ QtObject { "GLMR": "#F6007C", "QTUM": "#2E9AD0", "KCS": "#25AF90", - "KMD": "#7490AA", + "KMD": "#799bd2", "MOVR": "#52CCC9", "MATIC": "#804EE1", "ONE": "#00BEEE", "SBCH": "#74dd54", - "UBQ": "#00EB90" + "UBQ": "#00EB90", + "UTXO": "#349d5f", + "default": "#c8c8c8", + "IDO": "#536E93", + "WALLET ONLY": "#cccccc" }) } diff --git a/atomic_defi_design/Dex/Portfolio/AssetsList.qml b/atomic_defi_design/Dex/Portfolio/AssetsList.qml index 9bf89b1623..2ee0e4582e 100644 --- a/atomic_defi_design/Dex/Portfolio/AssetsList.qml +++ b/atomic_defi_design/Dex/Portfolio/AssetsList.qml @@ -165,7 +165,7 @@ Dex.DexListView text: model.type font: Dex.DexTypo.overLine opacity: .7 - color: Dex.Style.getCoinTypeColor(model.type) + color: Dex.Style.getCoinColor(ticker) Dex.DexLabel { From 59fe417f62488f47e4b3abbd9504862fb0cb995b Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 12 Apr 2023 17:30:43 +0800 Subject: [PATCH 113/251] Set BTC-segwit to wallet only --- src/core/atomicdex/constants/dex.constants.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/atomicdex/constants/dex.constants.hpp b/src/core/atomicdex/constants/dex.constants.hpp index 2a9581bfcb..22944920db 100644 --- a/src/core/atomicdex/constants/dex.constants.hpp +++ b/src/core/atomicdex/constants/dex.constants.hpp @@ -11,7 +11,6 @@ namespace atomic_dex g_primary_dex_coin, g_second_primary_dex_coin, "VOTE2023", - "KIP0001", "BTC" }; inline const std::vector g_wallet_only_coins{ @@ -32,7 +31,7 @@ namespace atomic_dex "REVS", "SUPERNET", "XPM", - "KIP0001", + "BTC-segwit", "VOTE2023", "ATOM" }; From 6b22de9e36494c753f9e6988f29675c1868773e4 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 12 Apr 2023 23:10:07 +0800 Subject: [PATCH 114/251] fix filename error for smart chain icon --- atomic_defi_design/Dex/Constants/General.qml | 7 +- .../assets/languages/atomic_defi_de.ts | 385 ++++++++--------- .../assets/languages/atomic_defi_en.ts | 379 ++++++++--------- .../assets/languages/atomic_defi_es.ts | 385 ++++++++--------- .../assets/languages/atomic_defi_fr.ts | 389 +++++++++--------- .../assets/languages/atomic_defi_ru.ts | 387 ++++++++--------- .../assets/languages/atomic_defi_tr.ts | 389 +++++++++--------- 7 files changed, 1190 insertions(+), 1131 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 0dd9eac874..dfc2128cf2 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -32,8 +32,13 @@ QtObject { { return coin_icons_path + ticker.toString().toLowerCase().replace('-', '_') + ".png" } + if (['SMART CHAIN'].indexOf(ticker) >= 0) + { + return coin_icons_path + ticker.toString().toLowerCase().replace(' ', '_') + ".png" + } const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) - return (coin_info.is_custom_coin ? custom_coin_icons_path : coin_icons_path) + atomic_qt_utilities.retrieve_main_ticker(ticker.toString()).toLowerCase() + ".png" + let icon = atomic_qt_utilities.retrieve_main_ticker(ticker.toString()).toLowerCase() + ".png" + return (coin_info.is_custom_coin ? custom_coin_icons_path : coin_icons_path) + icon } } diff --git a/atomic_defi_design/assets/languages/atomic_defi_de.ts b/atomic_defi_design/assets/languages/atomic_defi_de.ts index 47450a6cc9..9c2a9587b7 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_de.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_de.ts @@ -4,53 +4,53 @@ AddAddressForm - + Use standard network address Standard-Netzwerkadresse verwenden - + Label Bezeichnung - + This key already exists. Dieser Schlüssel existiert bereits. - + Address Adresse - - + + Cancel Abbrechen - + Convert Umwandeln - + Edit Bearbeiten - + Add Hinzufügen - + You need to enable %1 before adding this kind of address. Sie müssen %1 aktivieren, bevor Sie diese Art von Adresse hinzufügen. - + Enable Aktivieren @@ -307,7 +307,7 @@ - + Price provider is: %1 Preisanbieter ist: %1 @@ -502,14 +502,19 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 Chart - + Loading market data Laden von Marktdaten - - There is no chart data for this pair yet - Für dieses Paar liegen noch keine Chartdaten vor + + There is no chart data for this pair + + + + + There is no chart data for %1 (testcoin) pairs + @@ -738,78 +743,78 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456Bestätigen Sie die Austausch-Details - + Trade price is more than 50% different to CEX! Confirm? Der Handelspreis unterscheidet sich um mehr als 50% vom CEX-Preis. Bestätigen? - + This swap request can not be undone and is a final event! Diese Tauschanfrage kann nicht rückgängig gemacht werden und ist ein endgültiges Ereignis! - + This transaction can take up to 60 mins - DO NOT close this application! Diese Transaktion kann bis zu 60 Minuten dauern - schließen Sie diese Anwendung NICHT! - + Loading fees... Lade Gebühren... - + <b>Total %1 fees:</b> <b>Gesamt %1 Gebühren:</b> - + Security configuration Sicherheitskonfiguration - + %1 confirmations for incoming %2 transactions %1 Bestätigungen für eingehende %2 Transaktionen - + Read more about dPoW Lesen Sie mehr über dPoW - + Use custom protection settings for incoming %1 transactions TICKER Benutzerdefinierte Schutzeinstellungen für eingehende %1 Transaktionen verwenden - + Enable Komodo dPoW security Komodo dPoW-Sicherheit aktivieren - + dPoW protected dPoW-gesichert - + Required Confirmations Erforderliche Bestätigungen - + Warning, this atomic swap is not dPoW protected! Achtung, dieser Atomic Swap ist nicht dPoW-geschützt! - + Cancel Abbrechen - + Confirm Bestätigen @@ -825,182 +830,182 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Die aktuelle Anzahl aktivierter Coins stimmt nicht mit Ihrer Konfigurationsvorgabe überein. Die Konfiguration der Assets wird zurückgesetzt. - + Matching Zusammenführung - + Order Matching Order wird zusammengeführt - + Matched Zusammengeführt - + Order Matched Order wurde zusammengeführt - + Ongoing Laufend - + Swap Ongoing Austausch läuft - + Successful Erfolgreich - + Swap Successful Tausch erfolgreich - + Refunding Rückzahlung - + Failed Fehlgeschlagen - + Swap Failed Tausch fehlgeschlagen - + Unknown Unbekannt - + Unknown State Unbekannter Status - + Started Gestartet - + Negotiated Ausgehandelt - + Taker fee sent Taker-Gebühr gesendet - + Maker payment received Maker-Zahlung erhalten - + Maker payment wait confirm started Warten auf die Zahlungsbestätigung des Makers gestartet - + Maker payment validated and confirmed Maker-Zahlung validiert und bestätigt - + Taker payment sent Taker-Zahlung gesendet - + Taker payment spent Taker-Zahlung ausgegeben - + Maker payment spent Maker-Zahlung ausgegeben - + Finished Fertig - + Start failed Start fehlgeschlagen - + Negotiate failed Verhandeln fehlgeschlagen - + Taker fee validate failed Validierung der Abnehmergebühr fehlgeschlagen - + Maker payment transaction failed Maker-Zahlungstransaktion fehlgeschlagen - + Maker payment Data send failed Fehler beim Senden der Maker-Zahlungsdaten - + Maker payment wait confirm failed Warten auf die Zahlungsbestätigung des Makers fehlgeschlagen - + Taker payment validate failed Validierung der Taker-Zahlung fehlgeschlagen - + Taker payment wait confirm failed Warten auf die Zahlungsbestätigung des Takers fehlgeschlagen - + Taker payment spend failed Zahlungsausgabe des Takers fehlgeschlagen - + Maker payment wait refund started Countdown für die Rückerstattung der Maker-Zahlung hat begonnen - + Maker payment refunded Maker-Zahlung zurückerstattet - + Maker payment refund failed Rückerstattung der Maker-Zahlung fehlgeschlagen @@ -1385,7 +1390,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 General - + %n day(s) %n Tag @@ -1393,7 +1398,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nd day @@ -1402,7 +1407,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nh hours @@ -1411,7 +1416,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nm minutes @@ -1420,7 +1425,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %ns seconds @@ -1429,7 +1434,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nms milliseconds @@ -1438,117 +1443,117 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + - - - + <b>Taker tx fee:</b> <b>Taker tx Gebühren:</b> - + <b>Dex tx fee:</b> <b>Dex tx Gebühren:</b> - + <b>Dex fee:</b> <b>Dex Gebühren:</b> - + <b>Maker tx fee:</b> <b>Maker tx Gebühren:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 Minimum: %1 - + Enter an amount Betrag eingeben - + Trading Fee Handelsgebühr - + Minimum Trading Amount Mindesthandelsbetrag - + Wallet %1 already exists WALLETNAME Brieftasche %1 existiert bereits - + %1 balance is lower than the fees amount: %2 %3 Das %1 Guthaben ist niedriger als der Gebührenbetrag: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Handelbares %1 Guthaben (nach Gebühren) ist niedriger als der Mindesthandelsbetrag - + Please fill the price field Bitte füllen Sie das Preisfeld aus - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount %1 Volumen ist niedriger als der minimale Handelsbetrag - - + + %1 needs to be enabled in order to use %2 %1 muss aktiviert werden, um %2 verwenden zu können - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Das %1 Guthaben muss finanziert werden, ein Guthaben größer Null ist erforderlich, um das Benzin von %2 Transaktionen zu bezahlen - + Unknown Error Unbekannter Fehler @@ -1745,10 +1750,15 @@ Try again or select 'Allow custom seed' to continue. ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 ist nicht aktiviert - Möchten Sie es aktivieren, um die günstigsten Order von %2 auswählen zu können? <br><a href='#'>Ja</a> - <a href='#no'>Nein</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 @@ -1876,11 +1886,6 @@ They will be removed from the orderbook until you log in again. Change 24hr 24h Veränderung - - - Porfolio - Portfolio - Contract Address @@ -1912,10 +1917,16 @@ They will be removed from the orderbook until you log in again. Empfangen + Swap Tausch + + + Portfolio + Portfolio + is wallet only @@ -1979,29 +1990,24 @@ They will be removed from the orderbook until you log in again. Klicken Sie hier, um Ihre Adresse im %1 (%2) Block-Explorer anzuzeigen - - Trade - Handeln - - - + Trading Information Handelsinformationen - + Chart Chart - - + + Orders Order - - + + History Historie @@ -2129,17 +2135,17 @@ They will be removed from the orderbook until you log in again. NewContactPopup - + Contact name Kontaktname - + This contact name already exists. Dieser Kontaktname existiert bereits. - + + ADD + HINZUFÜGEN @@ -2296,32 +2302,32 @@ They will be removed from the orderbook until you log in again. Ihre Seed-Phrase ist wichtig – deshalb stellen wir gerne sicher, dass sie korrekt ist. Wir stellen Ihnen drei verschiedene Fragen zu Ihrer Seed-Phrase, um sicherzustellen, dass Sie Ihre Wallet jederzeit problemlos wiederherstellen können. - + Enter the Geben Sie das - + word Wort ein - + Check Prüfen - + Enter password - + Enter the same password to confirm Geben Sie zur Bestätigung dasselbe Kennwort ein - + Continue Fortsetzen @@ -2526,18 +2532,13 @@ They will be removed from the orderbook until you log in again. - Volume - Volumen - - - - Amount to sell - Zu verkaufender Betrag + Send + Senden - - Amount to receive - Zu erhaltender Betrag + + Receive + Empfangen @@ -2619,114 +2620,104 @@ They will be removed from the orderbook until you log in again. OrderModal - - Swap Details - Tauschdetails - - - - Order Details - Orderdetails - - - + Order Type Orderart - + Maker Order Maker-Order - + Taker Order Taker-Order - + Refund State Rückerstattungsstatus - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Ihr Umtausch ist fehlgeschlagen, aber der automatische Rückerstattungsprozess für Ihre Zahlung hat bereits begonnen. Bitte warten Sie und lassen Sie die Anwendung geöffnet, bis Sie Ihre Zahlung zurückerhalten - + Date Datum - + Error ID Fehler-ID - - + + Error Log Fehlerprotokoll - + Close Schließen - + Cancel Order Order Abbrechen - - + + Swap ID Swap ID - + Maker Payment Sent Transaction ID Maker-Zahlung gesendet: Transaktions-ID - + Maker Payment Spent Transaction ID Maker-Zahlung ausgegeben: Transaktions-ID - + Maker Payment TXID Maker-Zahlung: TXID - + Taker Payment Spent Transaction ID Taker-Zahlung ausgegeben: Transaktions-ID - + Taker Payment Sent Transaction ID Taker-Zahlung gesendet: Transaktions-ID - + Taker Payment TXID Taker-Zahlung: TXID - + Recover Funds Rückerstattung der Geldmittel - + Refunding... Rückzahlung… - + View on Explorer Ansicht im Explorer @@ -2755,42 +2746,42 @@ Bitte wählen Sie eine neue Order aus. OrdersPage - + Filter Filter - + Date Datum - + Export CSV CSV exportieren - + Apply Filter Filter anwenden - + Cancel All Alles stornieren - + From Von - + To Bis - + Please choose the CSV export name and location Bitte wählen Sie den CSV-Exportnamen und den Speicherort aus @@ -2872,12 +2863,12 @@ Bitte wählen Sie eine neue Order aus. Asset suchen - + Show only coins with balance Nur Coins mit Guthaben anzeigen - + (%1/%2) (%1/%2) @@ -3109,17 +3100,17 @@ Bitte wählen Sie eine neue Order aus. RestartModal - + Applying the changes... Übernehmen der Änderungen... - + Restarting the application. %1 Neustart der Anwendung. %1 - + Restarting the application... Neustart der Anwendung... @@ -3649,12 +3640,12 @@ Bitte wählen Sie eine neue Order aus. Sidebar - + Search Suchen - + ADD CRYPTO @@ -3687,10 +3678,15 @@ Bitte wählen Sie eine neue Order aus. CEX-Kurs - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 ist nicht aktiviert - Möchten Sie es aktivieren, um die günstigsten Order von %2 auswählen zu können? <br><a href='#'>Ja</a> - <a href='#no'>Nein</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + SubCoinSelector @@ -3787,7 +3783,7 @@ Bitte wählen Sie eine neue Order aus. SubOrders - + Orders Order @@ -3832,12 +3828,12 @@ Bitte wählen Sie eine neue Order aus. Abbrechen - + Apply filter Filter anwenden - + No results found Keine Ergebnisse gefunden @@ -4057,6 +4053,19 @@ Die Netzwerkgebühren können je nach ausgewähltem Handelspaar stark variieren. Klicken Sie hier, um die Details anzuzeigen + + TotalView + + + Receive %1 + + + + + Send %1 + + + Trade @@ -4472,7 +4481,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. @@ -4548,7 +4557,7 @@ This might take a few minutes... Abmelden - + Balance Balance diff --git a/atomic_defi_design/assets/languages/atomic_defi_en.ts b/atomic_defi_design/assets/languages/atomic_defi_en.ts index 1c7bae05ce..2db436f1bd 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_en.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_en.ts @@ -4,53 +4,53 @@ AddAddressForm - + Use standard network address - + Label - + This key already exists. - + Address - - + + Cancel Cancel - + Convert - + Edit - + Add - + You need to enable %1 before adding this kind of address. - + Enable @@ -307,7 +307,7 @@ - + Price provider is: %1 @@ -501,13 +501,18 @@ Chart - + Loading market data - - There is no chart data for this pair yet + + There is no chart data for this pair + + + + + There is no chart data for %1 (testcoin) pairs @@ -737,78 +742,78 @@ - + Trade price is more than 50% different to CEX! Confirm? - + This swap request can not be undone and is a final event! - + This transaction can take up to 60 mins - DO NOT close this application! - + Loading fees... - + <b>Total %1 fees:</b> - + Security configuration - + %1 confirmations for incoming %2 transactions - + Read more about dPoW - + Use custom protection settings for incoming %1 transactions TICKER - + Enable Komodo dPoW security - + dPoW protected - + Required Confirmations - + Warning, this atomic swap is not dPoW protected! - + Cancel Cancel - + Confirm @@ -824,182 +829,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. - + Matching - + Order Matching - + Matched - + Order Matched - + Ongoing - + Swap Ongoing - + Successful - + Swap Successful - + Refunding - + Failed - + Swap Failed - + Unknown - + Unknown State - + Started - + Negotiated - + Taker fee sent - + Maker payment received - + Maker payment wait confirm started - + Maker payment validated and confirmed - + Taker payment sent - + Taker payment spent - + Maker payment spent - + Finished - + Start failed - + Negotiate failed - + Taker fee validate failed - + Maker payment transaction failed - + Maker payment Data send failed - + Maker payment wait confirm failed - + Taker payment validate failed - + Taker payment wait confirm failed - + Taker payment spend failed - + Maker payment wait refund started - + Maker payment refunded - + Maker payment refund failed @@ -1384,7 +1389,7 @@ General - + %n day(s) @@ -1392,7 +1397,7 @@ - + %nd day @@ -1401,7 +1406,7 @@ - + %nh hours @@ -1410,7 +1415,7 @@ - + %nm minutes @@ -1419,7 +1424,7 @@ - + %ns seconds @@ -1428,7 +1433,7 @@ - + %nms milliseconds @@ -1437,117 +1442,117 @@ - + - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 - + Enter an amount - + Trading Fee - + Minimum Trading Amount - + Wallet %1 already exists WALLETNAME - + %1 balance is lower than the fees amount: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount - + Please fill the price field - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error @@ -1744,10 +1749,15 @@ Try again or select 'Allow custom seed' to continue. ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 @@ -1875,11 +1885,6 @@ They will be removed from the orderbook until you log in again. Change 24hr - - - Porfolio - - Contract Address @@ -1911,10 +1916,16 @@ They will be removed from the orderbook until you log in again. + Swap + + + Portfolio + + is wallet only @@ -1978,29 +1989,24 @@ They will be removed from the orderbook until you log in again. - - Trade - - - - + Trading Information - + Chart - - + + Orders - - + + History @@ -2128,17 +2134,17 @@ They will be removed from the orderbook until you log in again. NewContactPopup - + Contact name - + This contact name already exists. - + + ADD @@ -2295,32 +2301,32 @@ They will be removed from the orderbook until you log in again. - + Enter the - + word - + Check - + Enter password - + Enter the same password to confirm - + Continue @@ -2525,17 +2531,12 @@ They will be removed from the orderbook until you log in again. - Volume - - - - - Amount to sell + Send - - Amount to receive + + Receive @@ -2618,114 +2619,104 @@ They will be removed from the orderbook until you log in again. OrderModal - - Swap Details - - - - - Order Details - - - - + Order Type - + Maker Order - + Taker Order - + Refund State - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back - + Date - + Error ID - - + + Error Log - + Close - + Cancel Order - - + + Swap ID - + Maker Payment Sent Transaction ID - + Maker Payment Spent Transaction ID - + Maker Payment TXID - + Taker Payment Spent Transaction ID - + Taker Payment Sent Transaction ID - + Taker Payment TXID - + Recover Funds - + Refunding... - + View on Explorer @@ -2753,42 +2744,42 @@ Please select a new order. OrdersPage - + Filter - + Date - + Export CSV - + Apply Filter - + Cancel All - + From - + To - + Please choose the CSV export name and location @@ -2870,12 +2861,12 @@ Please select a new order. - + Show only coins with balance - + (%1/%2) @@ -3107,17 +3098,17 @@ Please select a new order. RestartModal - + Applying the changes... - + Restarting the application. %1 - + Restarting the application... @@ -3647,12 +3638,12 @@ Please select a new order. Sidebar - + Search - + ADD CRYPTO @@ -3685,10 +3676,15 @@ Please select a new order. - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + SubCoinSelector @@ -3785,7 +3781,7 @@ Please select a new order. SubOrders - + Orders @@ -3830,12 +3826,12 @@ Please select a new order. Cancel - + Apply filter - + No results found @@ -4039,6 +4035,19 @@ Network fees can vary greatly depending on your selected trading pair. + + TotalView + + + Receive %1 + + + + + Send %1 + + + Trade @@ -4454,7 +4463,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. @@ -4530,7 +4539,7 @@ This might take a few minutes... - + Balance diff --git a/atomic_defi_design/assets/languages/atomic_defi_es.ts b/atomic_defi_design/assets/languages/atomic_defi_es.ts index fe0b09d3c6..45a6fb7d48 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_es.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_es.ts @@ -4,53 +4,53 @@ AddAddressForm - + Use standard network address Utilice la dirección de red - + Label Etiqueta - + This key already exists. Esta clave ya existe. - + Address Dirección - - + + Cancel Cancelar - + Convert Convertir - + Edit Editar - + Add Agregar - + You need to enable %1 before adding this kind of address. Debe habilitar %1 antes de agregar este tipo de dirección. - + Enable Habilitar @@ -307,7 +307,7 @@ Activando: - + Price provider is: %1 El proveedor de precios es: %1 @@ -501,14 +501,19 @@ Chart - + Loading market data Cargando datos de mercado - - There is no chart data for this pair yet - Todavía no hay datos de gráficos para este par + + There is no chart data for this pair + + + + + There is no chart data for %1 (testcoin) pairs + @@ -737,78 +742,78 @@ Confirmar Detalles de Intercambio - + Trade price is more than 50% different to CEX! Confirm? ¡El precio comercial es más del 50% diferente al de CEX! ¿Confirmar? - + This swap request can not be undone and is a final event! ¡Esta solicitud de intercambio no se puede deshacer y es un evento final! - + This transaction can take up to 60 mins - DO NOT close this application! Esta transacción puede demorar hasta 60 minutos. ¡NO cierre esta aplicación! - + Loading fees... Cargando tarifas... - + <b>Total %1 fees:</b> <b>Cuota total de %1:</b> - + Security configuration Configuración de seguridad - + %1 confirmations for incoming %2 transactions %1 confirmaciones para %2 transacciones entrantes - + Read more about dPoW Obtenga más información sobre dPoW - + Use custom protection settings for incoming %1 transactions TICKER Utilice configuraciones de protección personalizadas para %1 transacciones entrantes - + Enable Komodo dPoW security Habilite la seguridad dPoW de Komodo - + dPoW protected Protegido por dPoW - + Required Confirmations Confirmaciones Requeridas - + Warning, this atomic swap is not dPoW protected! Advertencia, este intercambio atómico no está protegido por dPoW! - + Cancel Cancelar - + Confirm Confirmar @@ -824,182 +829,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. El número actual de monedas habilitadas no coincide con su especificación de configuración. Se restablecerá la configuración de sus activos. - + Matching Emparejando - + Order Matching Emparejando Orden - + Matched Emparejado - + Order Matched Orden Emparejada - + Ongoing En Curso - + Swap Ongoing Intercambio En Curso - + Successful Exitoso - + Swap Successful Intercambio exitoso - + Refunding Reembolso - + Failed Fallo - + Swap Failed Intercambio fallido - + Unknown Desconocido - + Unknown State Estado Desconocido - + Started Iniciado - + Negotiated Negociado - + Taker fee sent Tarifa taker enviada - + Maker payment received Pago de maker recibido - + Maker payment wait confirm started Inicio de espera de confirmacion de pago de maker - + Maker payment validated and confirmed Validacion y confirmacion de pago de maker - + Taker payment sent Pago de taker enviado - + Taker payment spent Pago del taker gastado - + Maker payment spent Pago del maker gastado - + Finished Terminado - + Start failed Inicio fallido - + Negotiate failed Negociacion fallida - + Taker fee validate failed Validación de tarifa del taker fallida - + Maker payment transaction failed Transacción de pago de maker fallo - + Maker payment Data send failed Envio de data de pago de maker fallo - + Maker payment wait confirm failed Espera de confirmacion de pago de maker fallo - + Taker payment validate failed Validacion de pago de taker fallo - + Taker payment wait confirm failed Espera de confirmacion de pago de taker fallo - + Taker payment spend failed Gasto de pago de taker fallo - + Maker payment wait refund started Reembolso de espera de pago de maker iniciado - + Maker payment refunded Pago de maker reembolsado - + Maker payment refund failed Reembolso del pago de maker fallo @@ -1384,7 +1389,7 @@ General - + %n day(s) %n día @@ -1392,7 +1397,7 @@ - + %nd day @@ -1401,7 +1406,7 @@ - + %nh hours @@ -1410,7 +1415,7 @@ - + %nm minutes @@ -1419,7 +1424,7 @@ - + %ns seconds @@ -1428,7 +1433,7 @@ - + %nms milliseconds @@ -1437,117 +1442,117 @@ - + - - - + <b>Taker tx fee:</b> <b>Cuota de tx del taker:</b> - + <b>Dex tx fee:</b> <b>Cuota de tx del Dex:</b> - + <b>Dex fee:</b> <b>Cuota Dex:</b> - + <b>Maker tx fee:</b> <b>Cuota tx del maker:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 Mín.: %1 - + Enter an amount Ingrese una cantidad - + Trading Fee Tarifa de Intercambio - + Minimum Trading Amount Cantidad Mínima de Intercambio - + Wallet %1 already exists WALLETNAME Monedero %1 ya existe - + %1 balance is lower than the fees amount: %2 %3 El saldo de %1 es inferior al monto de las tarifas: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount El saldo de %1 (después de las tarifas) es inferior al monto mínimo de intercambio - + Please fill the price field Por favor complete el campo de precio - + Please fill the volume field Complete el campo de volumen - - + + Please wait for %1 to fully activate Espere a que %1 se active por completo - - + + %1 volume is lower than minimum trade amount El volumen de %1 es inferior al monto mínimo de intercambio - - + + %1 needs to be enabled in order to use %2 %1 debe habilitarse para usar %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions se debe rellenar el saldo de %1, se requiere un saldo distinto de cero para pagar el gas de %2 transacciones - + Unknown Error Error Desconocido @@ -1745,10 +1750,15 @@ Vuelva a intentarlo o seleccione 'Permitir semilla personalizada' pers ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 no está habilitado. ¿Desea habilitarlo para poder seleccionar %2 mejores ordenes?<br><a href='#'>Sí</a> - <a href='#no'>No</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 @@ -1878,11 +1888,6 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión.Change 24hr Cambio - - - Porfolio - Cartera - Contract Address @@ -1914,10 +1919,16 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión.Recibir + Swap Intercambiar + + + Portfolio + Cartera + is wallet only @@ -1981,29 +1992,24 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión.Haga clic para ver su dirección en %1 (%2) explorador de bloques - - Trade - Intercambio - - - + Trading Information Información de Intercambios - + Chart Gráfico - - + + Orders Pedidos - - + + History Historial @@ -2131,17 +2137,17 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión. NewContactPopup - + Contact name Nombre - + This contact name already exists. Este nombre de contacto ya existe. - + + ADD + Añadir @@ -2298,32 +2304,32 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión.Su frase semilla es importante, por eso nos gusta asegurarnos de que sea correcta. Le haremos tres preguntas diferentes sobre su frase semilla para asegurarnos de que podrá restaurar fácilmente su billetera cuando lo desee. - + Enter the Ingresa la - + word palabra - + Check Verificar - + Enter password - + Enter the same password to confirm Ingrese la misma contraseña para confirmar - + Continue Continuar @@ -2528,18 +2534,13 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión. - Volume - Volumen - - - - Amount to sell - Importe para vender + Send + Enviar - - Amount to receive - Importe para recibir + + Receive + Recibir @@ -2621,114 +2622,104 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión. OrderModal - - Swap Details - Detalles de Intercambio - - - - Order Details - Detalles de Orden - - - + Order Type Tipo de Orden - + Maker Order Orden de Maker - + Taker Order Orden de Taker - + Refund State Estado del Reembolso - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Su intercambio falló, pero el proceso de reembolso automático para su pago ya comenzó. Espere y mantenga la aplicación abierta hasta que reciba su pago - + Date Fecha - + Error ID ID de Error - - + + Error Log Registro de Error - + Close Cerrar - + Cancel Order Cancelar Pedido - - + + Swap ID ID de Intercambio - + Maker Payment Sent Transaction ID ID de la transacción pago enviada de Maker - + Maker Payment Spent Transaction ID ID de la transacción pago gastado de Maker - + Maker Payment TXID TXID del pago de Maker - + Taker Payment Spent Transaction ID ID de la transacción pago gastado de Taker - + Taker Payment Sent Transaction ID ID de la transacción pago enviada de Taker - + Taker Payment TXID TXID del pago de Taker - + Recover Funds Recuperar fondos - + Refunding... Reembolso... - + View on Explorer Ver en Explorer @@ -2757,42 +2748,42 @@ Seleccione un nuevo pedido. OrdersPage - + Filter Filtrar - + Date Fecha - + Export CSV Exportar CSV - + Apply Filter Aplicar Filtro - + Cancel All Cancelar Todo - + From Desde - + To A - + Please choose the CSV export name and location Por favor, elija el nombre y la ubicación de exportación CSV @@ -2874,12 +2865,12 @@ Seleccione un nuevo pedido. Buscar activo - + Show only coins with balance Mostrar solo monedas con saldo - + (%1/%2) (%1/%2) @@ -3111,17 +3102,17 @@ Seleccione un nuevo pedido. RestartModal - + Applying the changes... Aplicando los cambios... - + Restarting the application. %1 Reiniciando la aplicación. %1 - + Restarting the application... Reiniciando la aplicación... @@ -3651,12 +3642,12 @@ Seleccione un nuevo pedido. Sidebar - + Search Buscar - + ADD CRYPTO @@ -3689,10 +3680,15 @@ Seleccione un nuevo pedido. Tasa CEX - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 no está habilitado. ¿Desea habilitarlo para poder seleccionar %2 mejores ordenes?<br><a href='#'>Sí</a> - <a href='#no'>No</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + SubCoinSelector @@ -3789,7 +3785,7 @@ Seleccione un nuevo pedido. SubOrders - + Orders Pedidos @@ -3834,12 +3830,12 @@ Seleccione un nuevo pedido. Cancelar - + Apply filter Aplicar filtro - + No results found No se encontraron resultados @@ -4059,6 +4055,19 @@ Las tarifas de la red pueden variar mucho según el par comercial seleccionado.< Haga clic aquí para ver los detalles + + TotalView + + + Receive %1 + Recibir %1 + + + + Send %1 + + + Trade @@ -4475,7 +4484,7 @@ Esto puede tardar unos minutos... atomic_dex::settings_page - + An error has occurred. Se ha producido un error. @@ -4551,7 +4560,7 @@ Esto puede tardar unos minutos... Cerrar sesión - + Balance Saldo diff --git a/atomic_defi_design/assets/languages/atomic_defi_fr.ts b/atomic_defi_design/assets/languages/atomic_defi_fr.ts index 80242b19bf..b4ad8162ff 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_fr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_fr.ts @@ -4,53 +4,53 @@ AddAddressForm - + Use standard network address - + Label - + This key already exists. Cette clé existe déjà. - + Address Adresse - - + + Cancel Annuler - + Convert - + Edit Éditer - + Add Ajouter - + You need to enable %1 before adding this kind of address. - + Enable Activer @@ -307,7 +307,7 @@ - + Price provider is: %1 Fournisseur de prix : %1 @@ -501,14 +501,19 @@ Chart - + Loading market data Chargement des données de marché - - There is no chart data for this pair yet - Il n'y a pas encore de données graphiques pour cette paire + + There is no chart data for this pair + + + + + There is no chart data for %1 (testcoin) pairs + @@ -737,78 +742,78 @@ Détails de la confirmation de l'échange - + This swap request can not be undone and is a final event! La requête de ce swap ne peut pas être annulé, c'est irréversible ! - + Security configuration Configuration de la sécurité - + Read more about dPoW En savoir plus sur dPoW - + Use custom protection settings for incoming %1 transactions TICKER Utiliser les paramètres de protection personnalisés pour les transactions %1 entrantes - + Enable Komodo dPoW security Activer la sécurité de Komodo dPoW - + %1 confirmations for incoming %2 transactions Il y a %1 confirmations pour les transactions entrantes du ticker %2 - + This transaction can take up to 60 mins - DO NOT close this application! Cette transaction peut prendre jusqu'à 60 minutes - NE fermez PAS cette application ! - + Trade price is more than 50% different to CEX! Confirm? Le prix est supérieur à 50% du prix sur les CEX ! Êtes-vous sûr ? - + Loading fees... - + <b>Total %1 fees:</b> Frais totaux %1: - + dPoW protected Protégé par dPoW - + Required Confirmations Confirmations requises - + Warning, this atomic swap is not dPoW protected! Attention, ce swap atomique n'est pas protégé par dPoW ! - + Cancel Annuler - + Confirm Confirmer @@ -824,182 +829,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Le nombre actuel d'actifs activées ne correspond pas à vos spécifications de configuration. La configuration de vos actifs sera réinitialisée. - + Matching Recherche en cours - + Order Matching Recherche d'un ordre - + Matched Trouvé - + Order Matched Ordre trouvé - + Ongoing En cours - + Swap Ongoing Échange en cours - + Successful Réussi - + Swap Successful Échange terminé - + Refunding En cours de remboursement - + Failed Échoué - + Swap Failed Erreur lors de l'échange - + Unknown Inconnue - + Unknown State État inconnu - + Started Commencé - + Negotiated Négocié - + Taker fee sent Frais de preneur envoyés - + Maker payment received Paiement de l'envoyeur reçu - + Maker payment wait confirm started La confirmation d'attente de paiement de l'envoyeur a commencé - + Maker payment validated and confirmed Paiement de l'envoyeur validé et confirmé - + Taker payment sent Paiement du preneur envoyé - + Taker payment spent Paiement du preneur dépensé - + Maker payment spent Paiement de l'envoyeur dépensé - + Finished Fini - + Start failed Le démarrage a échoué - + Negotiate failed La négociation a échoué - + Taker fee validate failed Échec de la validation des frais du preneur - + Maker payment transaction failed La transaction de paiement du créateur a échoué - + Maker payment Data send failed Échec de l'envoi des données de paiement du créateur - + Maker payment wait confirm failed La confirmation de l'attente de paiement du créateur a échoué - + Taker payment validate failed La validation du paiement du preneur a échoué - + Taker payment wait confirm failed La confirmation de l'attente de paiement du preneur a échoué - + Taker payment spend failed Échec des dépenses de paiement du preneur - + Maker payment wait refund started attente de paiement du créateur, remboursement commencé - + Maker payment refunded Paiement du créateur remboursé - + Maker payment refund failed échec du remboursement du paiement du créateur @@ -1384,7 +1389,7 @@ General - + %n day(s) %n jour(s) @@ -1392,7 +1397,7 @@ - + %nd day @@ -1401,7 +1406,7 @@ - + %nh hours @@ -1410,7 +1415,7 @@ - + %nm minutes @@ -1419,7 +1424,7 @@ - + %ns seconds @@ -1428,7 +1433,7 @@ - + %nms milliseconds @@ -1437,117 +1442,117 @@ - + - - - + <b>Taker tx fee:</b> Taxes de transaction du preneur: - + <b>Dex tx fee:</b> Taxes de transaction de DEX: - + <b>Dex fee:</b> Taxes de DEX: - + <b>Maker tx fee:</b> Taxes de transaction du créateur - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 - + Enter an amount Entrez un montant - + Trading Fee Frais d'échanges - + Minimum Trading Amount Frais d'échange minimum - + Wallet %1 already exists WALLETNAME Le portefeuille %1 existe déjà - + %1 balance is lower than the fees amount: %2 %3 La %1 balance est inférieur aux frais: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Le solde négociable (après frais) %1 est inférieur au montant minimum de la transaction - + Please fill the price field Veuillez remplir le champ de prix - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount Le volume de %1 est inférieur au montant minimum de la transaction - - + + %1 needs to be enabled in order to use %2 %1 doit être activé pour utiliser %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Le solde %1 doit être financé, un solde différent de zéro est requis pour payer les frais de transactions de %2 - + Unknown Error Erreur inconnue @@ -1744,10 +1749,15 @@ Try again or select 'Allow custom seed' to continue. ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 n'est pas activé - Souhaitez vous l'activer pour pouvoir selectionnez les meilleurs offres %2 ?<br><a href='#'>Oui</a> - <a href='#no'>Non</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 @@ -1875,11 +1885,6 @@ They will be removed from the orderbook until you log in again. Change 24hr - - - Porfolio - - Contract Address @@ -1911,10 +1916,16 @@ They will be removed from the orderbook until you log in again. Recevoir + Swap Échange + + + Portfolio + Portfolio + is wallet only @@ -1978,29 +1989,24 @@ They will be removed from the orderbook until you log in again. - - Trade - Échanger - - - + Trading Information Informations de Trading - + Chart Chart - - + + Orders Ordres - - + + History Historique @@ -2128,17 +2134,17 @@ They will be removed from the orderbook until you log in again. NewContactPopup - + Contact name - + This contact name already exists. Ce nom de contact existe déjà. - + + ADD @@ -2295,32 +2301,32 @@ They will be removed from the orderbook until you log in again. Votre phrase de récupération est importante - c'est pourquoi nous aimons nous assurer qu'elle est correcte. Nous vous poserons trois questions différentes au sujet de votre phrase source pour vous assurer que vous pourrez facilement restaurer votre portefeuille à tout moment. - + Enter the - + word - + Check Vérifier - + Enter password - + Enter the same password to confirm Entrez le même mot de passe pour confirmer - + Continue Continuer @@ -2504,14 +2510,14 @@ They will be removed from the orderbook until you log in again. OrderForm - - Amount to sell - Montant à vendre + + Send + Envoyez - - Amount to receive - Montant à recevoir + + Receive + Recevoir @@ -2593,11 +2599,6 @@ They will be removed from the orderbook until you log in again. Increase 1% relative to CEX market price. - - - Volume - Volume - OrderLine @@ -2618,114 +2619,104 @@ They will be removed from the orderbook until you log in again. OrderModal - - Swap Details - Détails de l'échange - - - - Order Details - Détails de l'ordre - - - + Order Type - + Maker Order Ordre de vente - + Taker Order Ordre d'achat - + Refund State État de remboursement - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Votre échange a échoué, mais le processus de remboursement automatique de votre paiement a déjà commencé. Veuillez patienter et garder l'application ouverte jusqu'à ce que vous receviez votre remboursement - + Date Date - + Recover Funds Récupérer des fonds - + Refunding... Remboursement... - + View on Explorer Voir dans l'explorateur - + Cancel Order Annuler l'ordre - + Error ID ID de l'erreur - - + + Swap ID ID du Swap - + Maker Payment Sent Transaction ID - + Maker Payment Spent Transaction ID - + Maker Payment TXID - + Taker Payment Spent Transaction ID - + Taker Payment Sent Transaction ID - + Taker Payment TXID - - + + Error Log Journal des erreurs - + Close Fermer @@ -2752,43 +2743,43 @@ Please select a new order. OrdersPage - + From De - + To Vers - + Apply Filter Appliquer les changements - + Filter Filtrer - + Date Date - + Export CSV Exporter CSV - + Cancel All - + Please choose the CSV export name and location Veuillez choisir le nom et l'emplacement de l'exportation CSV @@ -2870,12 +2861,12 @@ Please select a new order. Rechercher un actif - + Show only coins with balance Afficher uniquement les assets avec solde - + (%1/%2) (%1/%2) @@ -3107,17 +3098,17 @@ Please select a new order. RestartModal - + Applying the changes... Application des modifications... - + Restarting the application... Redémarrage de l'application ... - + Restarting the application. %1 Redémarrage de l'application. %1 @@ -3647,12 +3638,12 @@ Please select a new order. Sidebar - + Search Rechercher - + ADD CRYPTO @@ -3685,10 +3676,15 @@ Please select a new order. Taux CEX - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 n'est pas activé - Souhaitez vous l'activer pour pouvoir selectionnez les meilleurs offres %2 ?<br><a href='#'>Oui</a> - <a href='#no'>Non</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + SubCoinSelector @@ -3785,7 +3781,7 @@ Please select a new order. SubOrders - + Orders Ordres @@ -3830,12 +3826,12 @@ Please select a new order. Annuler - + Apply filter Appliquer changement - + No results found Aucun résultat trouvé @@ -4041,6 +4037,19 @@ Network fees can vary greatly depending on your selected trading pair. Cliquez ici pour voir les détails + + TotalView + + + Receive %1 + + + + + Send %1 + + + Trade @@ -4212,7 +4221,7 @@ Network fees can vary greatly depending on your selected trading pair. There is no chart data for this ticker yet - + Il n'y a pas encore de données graphiques pour ce ticker @@ -4456,7 +4465,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. @@ -4532,7 +4541,7 @@ This might take a few minutes... Se déconnecter - + Balance Balance diff --git a/atomic_defi_design/assets/languages/atomic_defi_ru.ts b/atomic_defi_design/assets/languages/atomic_defi_ru.ts index 4de7d0f1bc..969309617b 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_ru.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_ru.ts @@ -4,53 +4,53 @@ AddAddressForm - + Use standard network address - + Label - + This key already exists. Этот ключ уже существует. - + Address Адрес - - + + Cancel - + Convert Преобразовать - + Edit Редактировать - + Add Добавить - + You need to enable %1 before adding this kind of address. - + Enable Добавить @@ -307,7 +307,7 @@ - + Price provider is: %1 Провайдер цены: %1 @@ -501,14 +501,19 @@ Chart - + Loading market data Загрузка рыночных данных - - There is no chart data for this pair yet - Нет данных для построения графика для этой торговой пары + + There is no chart data for this pair + + + + + There is no chart data for %1 (testcoin) pairs + @@ -737,78 +742,78 @@ Подтвердить данные обмена - + Trade price is more than 50% different to CEX! Confirm? Стоимость обмена в сравнении с CEX дороже более чем на 50%, вы подтверждаете сделку? - + This swap request can not be undone and is a final event! Этот запрос на своп не может быть отменен и является окончательным! - + This transaction can take up to 60 mins - DO NOT close this application! Эта транзакция может занять до 60 минут - НЕ закрывайте приложение! - + Loading fees... - + <b>Total %1 fees:</b> - + Security configuration Настройки безопасности - + %1 confirmations for incoming %2 transactions %1 подтверждений для входящих %2 транзакций - + Read more about dPoW Узнать больше о dPoW - + Use custom protection settings for incoming %1 transactions TICKER Использовать пользовательские настройки защиты для входящих транзакций %1 - + Enable Komodo dPoW security Включить Komodo dPoW - + dPoW protected dPoW защита - + Required Confirmations Необходимое количество подтверждений - + Warning, this atomic swap is not dPoW protected! Предупреждение, этот атомарный своп не защищен dPoW! - + Cancel Отменить - + Confirm Подтверждение @@ -824,182 +829,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Текущее количество включенных монет не совпадает с конфигурацией. Ваша конфигурация активов будет сброшена. - + Matching Матчинг - + Order Matching Матчинг ордеров - + Matched Сматчен - + Order Matched Ордер сматчен - + Ongoing В процессе - + Swap Ongoing Своп продолжается - + Successful Успешно - + Swap Successful Своп успешно завершен - + Refunding Проводится возврат - + Failed Не завершено - + Swap Failed Своп не был завершен - + Unknown Неизвестно - + Unknown State Статус неизвестен - + Started Начат - + Negotiated Согласован - + Taker fee sent Комиссия тейкера отправлена - + Maker payment received Платеж мейкера получен - + Maker payment wait confirm started Ожидание платежа мейкера - + Maker payment validated and confirmed Платеж мейкера валидирован и подтвержден - + Taker payment sent Платеж тейкера отправлен - + Taker payment spent Платеж тейкера потрачен - + Maker payment spent Платеж мейкера потрачен - + Finished Завершено - + Start failed Не удалось начать - + Negotiate failed Согласование не прошло - + Taker fee validate failed Валидация комиссии тейкера не прошла - + Maker payment transaction failed Платежная транзакция мейкера не прошла - + Maker payment Data send failed Отправка платежных данных мейкера не прошла - + Maker payment wait confirm failed Платежная транзакция мейкера не была подтверждена - + Taker payment validate failed Не прошла валидация платежа тейкера - + Taker payment wait confirm failed Платежная транзакция тейкера не была подтверждена - + Taker payment spend failed Spend платежа тейкера не прошел - + Maker payment wait refund started Ожидание возврата платежа мейкера - + Maker payment refunded Платеж мейкера возвращен - + Maker payment refund failed Возврат платежа мейкера не выполнен @@ -1384,7 +1389,7 @@ General - + %n day(s) %n день @@ -1393,7 +1398,7 @@ - + %nd day @@ -1403,7 +1408,7 @@ - + %nh hours @@ -1413,7 +1418,7 @@ - + %nm minutes @@ -1423,7 +1428,7 @@ - + %ns seconds @@ -1433,7 +1438,7 @@ - + %nms milliseconds @@ -1443,117 +1448,117 @@ - + - - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 Мин: %1 - + Enter an amount Введите количество - + Trading Fee Торговая комиссия - + Minimum Trading Amount Минимальный объем сделки - + Wallet %1 already exists WALLETNAME Кошелек %1 уже существует - + %1 balance is lower than the fees amount: %2 %3 %1 баланс менее чем размер комиссий: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Торгуемый (после комиссий) баланс %1 - меньше минимальной суммы сделки - + Please fill the price field Пожалуйста, укажите цену - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount Сумма %1 меньше минимальной суммы сделки - - + + %1 needs to be enabled in order to use %2 %1 должен быть активным для использования %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions нужно пополнить баланс %1 для оплаты газа %2 транзакций - + Unknown Error Неизвестная ошибка @@ -1750,10 +1755,15 @@ Try again or select 'Allow custom seed' to continue. ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 не активирован -Вы хотите активировать этот %2 актив чтобы видеть лучшие ордеры для него ?<br><a href='#'>Да</a> - <a href='#no'>Нет</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 @@ -1881,11 +1891,6 @@ They will be removed from the orderbook until you log in again. Change 24hr - - - Porfolio - - Contract Address @@ -1917,10 +1922,16 @@ They will be removed from the orderbook until you log in again. Получить + Swap Обменять + + + Portfolio + Портфолио + is wallet only @@ -1984,29 +1995,24 @@ They will be removed from the orderbook until you log in again. - - Trade - торговля - - - + Trading Information Торговая информация - + Chart График - - + + Orders Ордеры - - + + History История @@ -2134,17 +2140,17 @@ They will be removed from the orderbook until you log in again. NewContactPopup - + Contact name - + This contact name already exists. Контакт с таким именем уже существует. - + + ADD @@ -2301,32 +2307,32 @@ They will be removed from the orderbook until you log in again. Ваш seed ключ важен, и поэтому мы хотим убедиться, что вы его сохранили. Мы зададим вам три разных вопроса о вашем seed ключе, чтобы убедиться, что вы сможете легко восстановить свой кошелек, когда захотите. - + Enter the - + word - + Check Проверить - + Enter password - + Enter the same password to confirm Введите тот же пароль для подтверждения - + Continue Продолжить @@ -2531,18 +2537,13 @@ They will be removed from the orderbook until you log in again. - Volume - Объем - - - - Amount to sell - Сумма для продажи + Send + Отправить - - Amount to receive - Получаемая сумма + + Receive + Получить @@ -2624,114 +2625,104 @@ They will be removed from the orderbook until you log in again. OrderModal - - Swap Details - Детали свопа - - - - Order Details - Детали ордера - - - + Order Type - + Maker Order Мейкер ордер - + Taker Order Тейкер ордер - + Refund State Статус рефанда - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Обмен не был завершен, но процесс автоматического рефанда уже начался. Пожалуйста, подождите, оставляя приложение открытым, пока вы не получите свои средства - + Date Дата - + Error ID ID ошибки - - + + Error Log Лог ошибки - + Close Закрыть - + Cancel Order Отменить ордер - - + + Swap ID ID обмена - + Maker Payment Sent Transaction ID - + Maker Payment Spent Transaction ID - + Maker Payment TXID - + Taker Payment Spent Transaction ID - + Taker Payment Sent Transaction ID - + Taker Payment TXID - + Recover Funds Восстановить средства - + Refunding... Возмещается... - + View on Explorer Показать в эксплорере @@ -2758,43 +2749,43 @@ Please select a new order. OrdersPage - + From От - + To Кому - + Export CSV Скачать CSV - + Filter Фильтр - + Date Дата - + Apply Filter Применить фильтр - + Cancel All - + Please choose the CSV export name and location Выберите название и расположение загружаемого файла @@ -2876,12 +2867,12 @@ Please select a new order. Поиск актива - + Show only coins with balance Показывать только монеты с балансом - + (%1/%2) (%1/%2) @@ -3113,17 +3104,17 @@ Please select a new order. RestartModal - + Applying the changes... Применяю изменения... - + Restarting the application... Перезапуск приложения... - + Restarting the application. %1 Перезапуск приложения. %1 @@ -3653,12 +3644,12 @@ Please select a new order. Sidebar - + Search Поиск - + ADD CRYPTO @@ -3691,10 +3682,15 @@ Please select a new order. CEX цена - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 не активирован -Вы хотите активировать этот %2 актив чтобы видеть лучшие ордеры для него ?<br><a href='#'>Да</a> - <a href='#no'>Нет</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + SubCoinSelector @@ -3791,7 +3787,7 @@ Please select a new order. SubOrders - + Orders Ордеры @@ -3836,12 +3832,12 @@ Please select a new order. Отменить - + Apply filter Применить фильтр - + No results found Не найдено результатов @@ -4045,6 +4041,19 @@ Network fees can vary greatly depending on your selected trading pair. Нажмите, чтобы узнать подробности + + TotalView + + + Receive %1 + + + + + Send %1 + + + Trade @@ -4216,7 +4225,7 @@ Network fees can vary greatly depending on your selected trading pair. There is no chart data for this ticker yet - + Для данного актива пока еще нет графиков данных @@ -4460,7 +4469,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. @@ -4536,7 +4545,7 @@ This might take a few minutes... Выход - + Balance Баланс diff --git a/atomic_defi_design/assets/languages/atomic_defi_tr.ts b/atomic_defi_design/assets/languages/atomic_defi_tr.ts index 34e9b6e6db..708b7d982d 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_tr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_tr.ts @@ -4,53 +4,53 @@ AddAddressForm - + Use standard network address - + Label - + This key already exists. Bu anahtar zaten mevcut. - + Address Adres - - + + Cancel İptal - + Convert - + Edit Düzenle - + Add Ekle - + You need to enable %1 before adding this kind of address. - + Enable Etkinleştir @@ -307,7 +307,7 @@ - + Price provider is: %1 @@ -501,14 +501,19 @@ Chart - + Loading market data Piyasa bilgisi yükleniyor - - There is no chart data for this pair yet - Bu parite için henüz grafik verisi yok + + There is no chart data for this pair + + + + + There is no chart data for %1 (testcoin) pairs + @@ -737,78 +742,78 @@ Al-Sat Detaylarını Onayla - + This swap request can not be undone and is a final event! Bu takas isteği geri döndürülemez! - + Security configuration Güvenlik yapılandırması - + Read more about dPoW dPoW hakkında daha fazla bilgi - + Use custom protection settings for incoming %1 transactions TICKER %1 işlemleri için özel güvenlik ayarları kullan - + Enable Komodo dPoW security Komodo dPoW güvenliğini etkinleştir - + %1 confirmations for incoming %2 transactions Gelen %2 işlemleri için %1 onay - + This transaction can take up to 60 mins - DO NOT close this application! Bu işlem 60 dakikayı bulabilir - Programı KAPATMAYINIZ! - + Trade price is more than 50% different to CEX! Confirm? Takas ücreti CEX ile karşılaştırıldığında %50'den daha fazla farka sahip. Onaylıyor musunuz? - + Loading fees... - + <b>Total %1 fees:</b> <b>Toplam %1 işlem giderleri: </b> - + dPoW protected dPoW korumalı - + Required Confirmations Gereken Onaylar - + Warning, this atomic swap is not dPoW protected! Uyarı, bu atomik takas dPoW korumalı değil! - + Cancel İptal - + Confirm Onayla @@ -824,182 +829,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Etkinleştirilmiş koinlerin mevcut sayısı yapılandırma ayarlarınızla eşleşmiyor. Varlık yapılandırmanız sıfırlanacak. - + Matching Eşleşiyor - + Order Matching Emir Eşleşiyor - + Matched Eşleşti - + Order Matched Emir Eşleşti - + Ongoing Devam ediyor - + Swap Ongoing Takas Devam Ediyor - + Successful Başarılı - + Swap Successful Takas Başarılı - + Refunding Geri ödeniyor - + Failed Başarısız - + Swap Failed Takas Başarısız - + Unknown Bilinmiyor - + Unknown State Bilinmeyen durum - + Started Başlatıldı - + Negotiated Pazarlık yapıldı - + Taker fee sent Alıcı ücreti gönderildi - + Maker payment received Yapıcı ödemesi alındı - + Maker payment wait confirm started Yapıcı ödemesi bekleme onayı başladı - + Maker payment validated and confirmed Yapıcı ödemesi doğrulandı ve onaylandı - + Taker payment sent Alıcı ödemesi gönderildi - + Taker payment spent Alıcı ödemesi harcandı - + Maker payment spent Yapıcı ödemesi harcandı - + Finished Tamamlandı - + Start failed Başlatılamadı - + Negotiate failed Pazarlık başarısız - + Taker fee validate failed Alıcı ücreti doğrulanamadı - + Maker payment transaction failed Yapıcı ödeme işlemi başarısız - + Maker payment Data send failed Yapıcı ödeme verileri gönderilemedi - + Maker payment wait confirm failed Yapıcı ödemesi bekleme onayı başarısız - + Taker payment validate failed Alıcı ödemesi doğrulanamadı - + Taker payment wait confirm failed Alıcı ödemesi bekleme onayı başarısız oldu - + Taker payment spend failed Alıcı ödeme harcaması başarısız oldu - + Maker payment wait refund started Yapıcı ödemesi bekleme iadesi başladı - + Maker payment refunded Yapıcı ödemesi iade edildi - + Maker payment refund failed Yapıcı ödeme iadesi başarısız @@ -1384,14 +1389,14 @@ General - + %n day(s) %n gün - + %nd day @@ -1399,7 +1404,7 @@ - + %nh hours @@ -1407,7 +1412,7 @@ - + %nm minutes @@ -1415,7 +1420,7 @@ - + %ns seconds @@ -1423,7 +1428,7 @@ - + %nms milliseconds @@ -1431,117 +1436,117 @@ - + - - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 - + Enter an amount Bir miktar gir - + Trading Fee Takas Ücreti - + Minimum Trading Amount Minimum Takas Hacmi - + Wallet %1 already exists WALLETNAME %1 cüzdanı zaten mevcut - + %1 balance is lower than the fees amount: %2 %3 %1 bakiye ücret tutarının altında: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Takas edilebilir (ücretlerden sonra)%1 bakiyesi minimum işlem ücretinden düşük - + Please fill the price field Lütfen fiyat alanını doldurun - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount %1 hacmi, minimum işlem ücretinden düşük - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error Bilinmeyen Hata @@ -1738,10 +1743,15 @@ Try again or select 'Allow custom seed' to continue. ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 etkin değil - En iyi %2 siparişini seçebilmesi için etkinleştirmek istiyor musunuz ? <br><a href='#'>Evet</a> - <a href='#no'>Hayır</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 @@ -1869,11 +1879,6 @@ They will be removed from the orderbook until you log in again. Change 24hr - - - Porfolio - - Contract Address @@ -1905,10 +1910,16 @@ They will be removed from the orderbook until you log in again. Al + Swap Takasla + + + Portfolio + + is wallet only @@ -1972,29 +1983,24 @@ They will be removed from the orderbook until you log in again. - - Trade - Al Sat - - - + Trading Information Al Sat Bilgisi - + Chart Grafik - - + + Orders Emirler - - + + History Tarihçe @@ -2122,17 +2128,17 @@ They will be removed from the orderbook until you log in again. NewContactPopup - + Contact name - + This contact name already exists. Bu kişi adı zaten mevcut. - + + ADD @@ -2289,32 +2295,32 @@ They will be removed from the orderbook until you log in again. Seed kelimeleriniz önemlidir - bu yüzden doğru olduğundan emin olmak istiyoruz. Cüzdanınızı istediğiniz zaman kolayca kurtarabileceğinizden emin olmak için seed kelimeleriniz hakkında üç farklı soru soracağız. - + Enter the - + word - + Check - + Enter password - + Enter the same password to confirm Doğrulamak için aynı parolayı giriniz - + Continue Devam @@ -2498,14 +2504,14 @@ They will be removed from the orderbook until you log in again. OrderForm - - Amount to sell - Satılacak miktar + + Send + Gönder - - Amount to receive - Alınacak miktar + + Receive + Al @@ -2587,11 +2593,6 @@ They will be removed from the orderbook until you log in again. Increase 1% relative to CEX market price. - - - Volume - Hacim - OrderLine @@ -2612,114 +2613,104 @@ They will be removed from the orderbook until you log in again. OrderModal - - Swap Details - Takas Detayları - - - - Order Details - Emir Detayları - - - + Order Type - + Maker Order Yapıcı Emri - + Taker Order Alıcı Emri - + Refund State Geri Ödeme Durumu - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Takas işlemi başarısız oldu, ancak otomatik geri ödeme süreci başladı. Lütfen bekleyin ve ödemenizi geri alana kadar uygulamayı açık tutun - + Date Tarih - + Recover Funds Fon Kurtar - + Refunding... - + View on Explorer Explorer'da Göster - + Cancel Order Emri İptal Et - + Error ID Hata ID - - + + Swap ID - + Maker Payment Sent Transaction ID - + Maker Payment Spent Transaction ID - + Maker Payment TXID - + Taker Payment Spent Transaction ID - + Taker Payment Sent Transaction ID - + Taker Payment TXID - - + + Error Log Hata Kaydı - + Close Kapat @@ -2746,43 +2737,43 @@ Please select a new order. OrdersPage - + From Gönderen - + To Alan - + Apply Filter Filtreyi Uygula - + Filter - + Date Tarih - + Export CSV CSV'yi dışa aktar - + Cancel All - + Please choose the CSV export name and location Lütfen CSV dışa aktarma adını ve konumunu seçin @@ -2864,12 +2855,12 @@ Please select a new order. - + Show only coins with balance Sadece bakiyesi olan koinleri göster - + (%1/%2) @@ -3101,17 +3092,17 @@ Please select a new order. RestartModal - + Applying the changes... Değişiklikler uygulanıyor... - + Restarting the application... Uygulama yeniden başlatılıyor... - + Restarting the application. %1 @@ -3641,12 +3632,12 @@ Please select a new order. Sidebar - + Search Ara - + ADD CRYPTO @@ -3679,10 +3670,15 @@ Please select a new order. CEX Oranı - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 etkin değil - En iyi %2 siparişini seçebilmesi için etkinleştirmek istiyor musunuz ? <br><a href='#'>Evet</a> - <a href='#no'>Hayır</a> + + + %1 is not enabled - Please enable it through the coin activation menu + + SubCoinSelector @@ -3779,7 +3775,7 @@ Please select a new order. SubOrders - + Orders Emirler @@ -3824,12 +3820,12 @@ Please select a new order. İptal - + Apply filter Filtreyi uygula - + No results found @@ -4033,6 +4029,19 @@ Network fees can vary greatly depending on your selected trading pair. Detayları görmek için buraya tıklayın + + TotalView + + + Receive %1 + + + + + Send %1 + + + Trade @@ -4204,7 +4213,7 @@ Network fees can vary greatly depending on your selected trading pair. There is no chart data for this ticker yet - + Henüz bu hisse senedi için grafik verisi yok @@ -4448,7 +4457,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. @@ -4524,7 +4533,7 @@ This might take a few minutes... Çıkış - + Balance Bakiye From 259779eb302b26f0b6c593e40b1148d32b31f07e Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 13 Apr 2023 00:48:49 +0800 Subject: [PATCH 115/251] fix implicitHeight binding loop in combo searchbar --- atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml b/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml index 0009bc9d0a..bbd86393f1 100644 --- a/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml +++ b/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml @@ -24,8 +24,7 @@ ComboBox background: Rectangle { id: bg - implicitWidth: control.width - implicitHeight: control.height + anchors.fill: parent color: control.backgroundColor radius: control.radius } From 8aa55d46bec79ade517680f10ffb987b71e006d6 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 13 Apr 2023 00:49:56 +0800 Subject: [PATCH 116/251] unwrap assetrow --- .../Dex/Addressbook/AddressTypeSelector.qml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml b/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml index b8ad13881b..94fee46e9f 100644 --- a/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml +++ b/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml @@ -77,16 +77,13 @@ Dex.ComboBoxWithSearchBar } } - contentItem: Item + contentItem: AssetRow { - AssetRow - { - id: _contentRow + id: _contentRow - anchors.left: parent.left - anchors.leftMargin: 13 - anchors.verticalCenter: parent.verticalCenter - } + anchors.left: parent.left + anchors.leftMargin: 13 + anchors.verticalCenter: parent.verticalCenter } onCurrentIndexChanged: From f11c5b590e509146f30c512cd6904d1a8e931481 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 13 Apr 2023 00:58:56 +0800 Subject: [PATCH 117/251] fix typeError in AddressTypeSelector --- atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml b/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml index 94fee46e9f..6e79fabad7 100644 --- a/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml +++ b/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml @@ -38,9 +38,9 @@ Dex.ComboBoxWithSearchBar } else { - _contentRow.ticker = model.data(model.index(index, 0), Qt.UserRole + 1) - _contentRow.name = model.data(model.index(index, 0), Qt.UserRole + 3) - _contentRow.type = model.data(model.index(index, 0), Qt.UserRole + 9) + _contentRow.ticker = model.data ? model.data(model.index(index, 0), Qt.UserRole + 1) : "" + _contentRow.name = model.data ? model.data(model.index(index, 0), Qt.UserRole + 3) : "" + _contentRow.type = model.data ? model.data(model.index(index, 0), Qt.UserRole + 9) : "" } } From 44a179650f4e359e31a6bae51bc5947d93fe2d35 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 13 Apr 2023 02:05:09 +0800 Subject: [PATCH 118/251] fix typeError in searchField file when model is array --- atomic_defi_design/Dex/Components/SearchField.qml | 6 ++++-- atomic_defi_design/Dex/Constants/General.qml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Components/SearchField.qml b/atomic_defi_design/Dex/Components/SearchField.qml index 1c18a39086..40bcae12df 100644 --- a/atomic_defi_design/Dex/Components/SearchField.qml +++ b/atomic_defi_design/Dex/Components/SearchField.qml @@ -51,8 +51,10 @@ Rectangle placeholderText: qsTr("Search") placeholderTextColor: Dex.CurrentTheme.textPlaceholderColor - onTextChanged: searchModel.setFilterFixedString(_textField.text) - Component.onDestruction: searchModel.setFilterFixedString("") + onTextChanged: Array.isArray(searchModel) ? "" : searchModel.setFilterFixedString(_textField.text) + + + Component.onDestruction: Array.isArray(searchModel) ? "" : searchModel.setFilterFixedString("") } DefaultRectangle diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index dfc2128cf2..1a43d617e6 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -32,7 +32,7 @@ QtObject { { return coin_icons_path + ticker.toString().toLowerCase().replace('-', '_') + ".png" } - if (['SMART CHAIN'].indexOf(ticker) >= 0) + if (['Smart Chain'].indexOf(ticker) >= 0) { return coin_icons_path + ticker.toString().toLowerCase().replace(' ', '_') + ".png" } From 2d33fcbd3b83829a41f200bc7d7ed3da391e3b5d Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 13 Apr 2023 16:40:45 +0800 Subject: [PATCH 119/251] handle button where no notifications --- atomic_defi_design/Dex/Dashboard/NotificationsModal.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml index 4b494de500..8753f8abc8 100644 --- a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml +++ b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml @@ -622,8 +622,8 @@ DexPopup } OutlineButton - { - text: qsTr('Mark all as read') + { + text: notifications_list.length !== 0 ? qsTr('Mark all as read') : qsTr('Close') height: 40 width: 260 Layout.alignment: Qt.AlignHCenter From 4b60d5fb5784d2e82585af578727c433edf498f5 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 13 Apr 2023 23:01:22 +0800 Subject: [PATCH 120/251] update API to v1.0.2-beta --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 06895d2628..46ae0923fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,13 +60,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.1-beta/mm2-6bb79b3d8-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.2-beta/mm2-fa745617d-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.1-beta/mm2-6bb79b3d8-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.2-beta/mm2-fa745617d-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.1-beta/mm2-6bb79b3d8-Win64.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.2-beta/mm2-fa745617d-Win64.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 114c8ec815e597b95dc69e12e5636f35c69c9938 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 18 Apr 2023 02:45:46 +0800 Subject: [PATCH 121/251] extend loop from 2 min to 5 min --- src/core/atomicdex/services/price/global.provider.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/services/price/global.provider.cpp b/src/core/atomicdex/services/price/global.provider.cpp index 966b67dd48..2871dec2d4 100644 --- a/src/core/atomicdex/services/price/global.provider.cpp +++ b/src/core/atomicdex/services/price/global.provider.cpp @@ -177,9 +177,9 @@ namespace atomic_dex const auto now = std::chrono::high_resolution_clock::now(); const auto s = std::chrono::duration_cast(now - m_update_clock); - if (s >= 2min) + if (s >= 5min) { - SPDLOG_INFO("2min spend - refreshing provider"); + SPDLOG_INFO("[global_price_service::update()] - 5min elapsed, updating providers"); this->on_force_update_providers({}); m_update_clock = std::chrono::high_resolution_clock::now(); } From b8ba4dacaddba3650f3bb41ad5a7f887bfc7ce28 Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Sun, 14 May 2023 15:08:57 +0800 Subject: [PATCH 122/251] Update cmake for windows --- ci_tools_atomic_dex/ci_scripts/windows_script.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index 643323683c..e22db59635 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -6,7 +6,7 @@ iwr -useb 'https://raw.githubusercontent.com/scoopinstaller/install/master/insta #Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') -RunAsAdmin scoop install llvm --global scoop install ninja --global -scoop install cmake@3.22.0 --global +scoop install cmake@3.26.3 --global scoop install git --global scoop install 7zip --global scoop cache rm 7zip From a9dbbc76e98966901d5a435eaa4d230d2095f4d9 Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 20 May 2023 15:18:16 +0000 Subject: [PATCH 123/251] add Energy Web (EWT) --- atomic_defi_design/Dex/Constants/Style.qml | 4 ++++ src/core/atomicdex/api/mm2/rpc.enable.cpp | 7 +++++++ src/core/atomicdex/api/mm2/rpc.enable.hpp | 2 ++ src/core/atomicdex/config/coins.cfg.cpp | 9 +++++++++ src/core/atomicdex/models/qt.global.coins.cfg.model.cpp | 8 +++++++- src/core/atomicdex/models/qt.global.coins.cfg.model.hpp | 5 ++++- 6 files changed, 33 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 642d778762..9f7ed893d5 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -196,6 +196,7 @@ QtObject { case 'Ethereum Classic': return dark_theme ? colorCoinDark["ETC"] : colorCoin["ETC"] case 'Arbitrum': return dark_theme ? colorCoinDark["ETH"] : colorCoin["ETH"] case 'ERC-20': return dark_theme ? colorCoinDark["ETH"] : colorCoin["ETH"] + case 'EWT': return dark_theme ? colorCoinDark["EWT"] : colorCoin["EWT"] case 'FTM-20': return dark_theme ? colorCoinDark["FTM"] : colorCoin["FTM"] case 'Moonbeam': return dark_theme ? colorCoinDark["GLMR"] : colorCoin["GLMR"] case 'HecoChain': return dark_theme ? colorCoinDark["HECO"] : colorCoin["HECO"] @@ -237,6 +238,7 @@ QtObject { case 'Ethereum Classic': return dark_theme ? colorCoinDark["ETC"] : colorCoin["ETC"] case 'Arbitrum': return dark_theme ? colorCoinDark["ETH"] : colorCoin["ETH"] case 'ERC-20': return dark_theme ? colorCoinDark["ETH"] : colorCoin["ETH"] + case 'EWT': return dark_theme ? colorCoinDark["EWT"] : colorCoin["EWT"] case 'FTM-20': return dark_theme ? colorCoinDark["FTM"] : colorCoin["FTM"] case 'Moonbeam': return dark_theme ? colorCoinDark["GLMR"] : colorCoin["GLMR"] case 'HecoChain': return dark_theme ? colorCoinDark["HECO"] : colorCoin["HECO"] @@ -278,6 +280,7 @@ QtObject { "BCH": "#8DC351", "ETC": "#328432", "ETH": "#687DE3", + "EWT": "#A466FF", "FTM": "#13B5EC", "HECO": "#00953F", "GLMR": "#F6007C", @@ -303,6 +306,7 @@ QtObject { "BCH": "#8DC351", "ETC": "#328432", "ETH": "#687DE3", + "EWT": "#A466FF", "FTM": "#13B5EC", "HECO": "#00953F", "GLMR": "#F6007C", diff --git a/src/core/atomicdex/api/mm2/rpc.enable.cpp b/src/core/atomicdex/api/mm2/rpc.enable.cpp index 0722bb9c23..60cd1c7614 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.cpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.cpp @@ -62,6 +62,13 @@ namespace atomic_dex::mm2 j["fallback_swap_contract"] = cfg.arbitrum_erc_fallback_swap_contract_address; break; } + case CoinType::EWT: + { + j["urls"] = cfg.urls; + j["swap_contract_address"] = cfg.ewt_erc_swap_contract_address; + j["fallback_swap_contract"] = cfg.ewt_erc_fallback_swap_contract_address; + break; + } case CoinType::BEP20: { j["swap_contract_address"] = cfg.is_testnet ? cfg.bnb_testnet_swap_contract_address : cfg.bnb_swap_contract_address; diff --git a/src/core/atomicdex/api/mm2/rpc.enable.hpp b/src/core/atomicdex/api/mm2/rpc.enable.hpp index 2b7d3274e3..d00206ad76 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.hpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.hpp @@ -39,6 +39,8 @@ namespace atomic_dex::mm2 const std::string etc_erc_testnet_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; const std::string etc_erc_fallback_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; const std::string etc_erc_testnet_fallback_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; + const std::string ewt_erc_swap_contract_address{"0x304896fc2F242f13dd852b412E7B60C5F495B79c"}; + const std::string ewt_erc_fallback_swap_contract_address{"0x304896fc2F242f13dd852b412E7B60C5F495B79c"}; const std::string ubiq_erc_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; const std::string ubiq_erc_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; const std::string ubiq_erc_testnet_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index e688c3293d..1c728ac200 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -33,6 +33,10 @@ namespace { return CoinType::ERC20; } + if (coin_type == "EWT") + { + return CoinType::EWT; + } if (coin_type == "UTXO") { return CoinType::UTXO; @@ -249,6 +253,11 @@ namespace atomic_dex cfg.fees_ticker = "ETH-ARB20"; cfg.is_erc_family = true; break; + case CoinType::EWT: + cfg.has_parent_fees_ticker = true; + cfg.fees_ticker = "EWT"; + cfg.is_erc_family = true; + break; case CoinType::AVX20: cfg.has_parent_fees_ticker = true; cfg.fees_ticker = cfg.is_testnet.value() ? "AVAXT" : "AVAX"; diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp index d8cf145bfe..8247facccf 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp @@ -308,6 +308,12 @@ namespace atomic_dex return m_proxies[CoinType::ERC20]; } + global_coins_cfg_proxy_model* + global_coins_cfg_model::get_all_ewt_proxy() const + { + return m_proxies[CoinType::EWT]; + } + global_coins_cfg_proxy_model* global_coins_cfg_model::get_all_bep20_proxy() const { @@ -398,4 +404,4 @@ namespace atomic_dex auto cfg = get_coin_info(ticker.toStdString()); return QString::fromStdString(cfg.fees_ticker); } -} // namespace atomic_dex \ No newline at end of file +} // namespace atomic_dex diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.hpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.hpp index f64b244322..17ceb76bbb 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.hpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.hpp @@ -83,6 +83,7 @@ namespace atomic_dex [[nodiscard]] global_coins_cfg_proxy_model* get_all_proxy() const; [[nodiscard]] global_coins_cfg_proxy_model* get_all_qrc20_proxy() const; [[nodiscard]] global_coins_cfg_proxy_model* get_all_erc20_proxy() const; + [[nodiscard]] global_coins_cfg_proxy_model* get_all_ewt_proxy() const; [[nodiscard]] global_coins_cfg_proxy_model* get_all_bep20_proxy() const; [[nodiscard]] global_coins_cfg_proxy_model* get_all_smartchains_proxy() const; [[nodiscard]] global_coins_cfg_proxy_model* get_all_utxo_proxy() const; @@ -104,6 +105,7 @@ namespace atomic_dex Q_PROPERTY(global_coins_cfg_proxy_model* all_proxy READ get_all_proxy NOTIFY all_proxyChanged) Q_PROPERTY(global_coins_cfg_proxy_model* all_qrc20_proxy READ get_all_qrc20_proxy NOTIFY all_qrc20_proxyChanged) Q_PROPERTY(global_coins_cfg_proxy_model* all_erc20_proxy READ get_all_erc20_proxy NOTIFY all_erc20_proxyChanged) + Q_PROPERTY(global_coins_cfg_proxy_model* all_ewt_proxy READ get_all_ewt_proxy NOTIFY all_ewt_proxyChanged) Q_PROPERTY(global_coins_cfg_proxy_model* all_bep20_proxy READ get_all_bep20_proxy NOTIFY all_bep20_proxyChanged) Q_PROPERTY(global_coins_cfg_proxy_model* all_smartchains_proxy READ get_all_smartchains_proxy NOTIFY all_smartchains_proxyChanged) Q_PROPERTY(global_coins_cfg_proxy_model* all_utxo_proxy READ get_all_utxo_proxy NOTIFY all_utxo_proxyChanged) @@ -119,6 +121,7 @@ namespace atomic_dex void all_proxyChanged(); void all_qrc20_proxyChanged(); void all_erc20_proxyChanged(); + void all_ewt_proxyChanged(); void all_bep20_proxyChanged(); void all_smartchains_proxyChanged(); void all_utxo_proxyChanged(); @@ -139,4 +142,4 @@ namespace atomic_dex entt::registry& m_entity_registry; }; -} // namespace atomic_dex \ No newline at end of file +} // namespace atomic_dex From d5a82bf0ab601688abb9d27b86af2c46f1b56f4d Mon Sep 17 00:00:00 2001 From: cipig Date: Sat, 20 May 2023 15:26:36 +0000 Subject: [PATCH 124/251] enum --- src/core/atomicdex/constants/qt.coins.enums.hpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/core/atomicdex/constants/qt.coins.enums.hpp b/src/core/atomicdex/constants/qt.coins.enums.hpp index 83f70bcc5e..4b57885f9c 100644 --- a/src/core/atomicdex/constants/qt.coins.enums.hpp +++ b/src/core/atomicdex/constants/qt.coins.enums.hpp @@ -52,10 +52,11 @@ namespace atomic_dex EthereumClassic = 18, RSK = 19, ZHTLC = 20, - Disabled = 21, - Invalid = 22, - All = 23, - Size = 24 + EWT = 21, + Disabled = 22, + Invalid = 23, + All = 24, + Size = 25 }; Q_ENUM(CoinTypeEnum) @@ -65,4 +66,4 @@ namespace atomic_dex }; } // namespace atomic_dex -using CoinType = atomic_dex::CoinTypeGadget::CoinTypeEnum; \ No newline at end of file +using CoinType = atomic_dex::CoinTypeGadget::CoinTypeEnum; From 15d32617a8d6d93534a495896e7c14454c3e016a Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 25 May 2023 22:35:32 +0800 Subject: [PATCH 125/251] filter out zero value transactions --- src/core/atomicdex/pages/qt.wallet.page.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index ec0fd4e477..ec9e35215e 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -978,15 +978,23 @@ namespace atomic_dex { std::error_code ec; t_transactions transactions = m_system_manager.get_system().get_tx_history(ec); + t_transactions to_init; + for (auto&& cur_tx: transactions) + { + if (safe_float(cur_tx.total_amount) != 0) + { + to_init.push_back(cur_tx); + } + } if (m_transactions_mdl->rowCount() == 0) { //! insert all transactions - m_transactions_mdl->init_transactions(transactions); + m_transactions_mdl->init_transactions(to_init); } else { //! Update tx (only unconfirmed) or insert (new tx) - m_transactions_mdl->update_or_insert_transactions(transactions); + m_transactions_mdl->update_or_insert_transactions(to_init); } if (ec) { From 3bba74e9b3698a388924152f1e7aba3a551a46f2 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 26 May 2023 22:49:11 +0800 Subject: [PATCH 126/251] add `spamfilter_enabled` to backend config settings --- src/core/atomicdex/config/app.cfg.cpp | 20 +++++++++++++++++++ src/core/atomicdex/config/app.cfg.hpp | 2 ++ src/core/atomicdex/pages/qt.settings.page.cpp | 14 +++++++++++++ src/core/atomicdex/pages/qt.settings.page.hpp | 4 ++++ src/core/atomicdex/pages/qt.wallet.page.cpp | 14 ++++++++++--- 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/core/atomicdex/config/app.cfg.cpp b/src/core/atomicdex/config/app.cfg.cpp index c4b25502cb..d60580bb58 100644 --- a/src/core/atomicdex/config/app.cfg.cpp +++ b/src/core/atomicdex/config/app.cfg.cpp @@ -48,6 +48,7 @@ namespace config_json_data["current_fiat_sign"] = config.current_fiat_sign; config_json_data["available_signs"] = config.available_currency_signs; config_json_data["notification_enabled"] = config.notification_enabled; + config_json_data["spamfilter_enabled"] = config.spamfilter_enabled; file.close(); @@ -71,6 +72,15 @@ namespace atomic_dex j.at("available_signs").get_to(config.available_currency_signs); j.at("current_fiat_sign").get_to(config.current_fiat_sign); j.at("notification_enabled").get_to(config.notification_enabled); + + if (j.contains("spamfilter_enabled")) + { + j.at("spamfilter_enabled").get_to(config.spamfilter_enabled); + } + else + { + config.spamfilter_enabled = true; + } } void @@ -83,6 +93,16 @@ namespace atomic_dex } } + void + change_spamfilter_status(cfg& config, bool is_enabled) + { + if (config.spamfilter_enabled != is_enabled) + { + config.spamfilter_enabled = is_enabled; + upgrade_cfg(config); + } + } + cfg load_cfg() { diff --git a/src/core/atomicdex/config/app.cfg.hpp b/src/core/atomicdex/config/app.cfg.hpp index 3edd54cfa6..e5286d9095 100644 --- a/src/core/atomicdex/config/app.cfg.hpp +++ b/src/core/atomicdex/config/app.cfg.hpp @@ -31,12 +31,14 @@ namespace atomic_dex std::vector available_fiat; std::vector possible_currencies; bool notification_enabled; + bool spamfilter_enabled{false}; }; void from_json(const nlohmann::json& j, cfg& config); void change_currency(cfg& config, const std::string& new_currency); void change_fiat(cfg& config, const std::string& new_fiat); void change_notification_status(cfg& config, bool is_enabled); + void change_spamfilter_status(cfg& config, bool is_enabled); [[nodiscard]] bool is_this_currency_a_fiat(const cfg& config, const std::string& currency); cfg load_cfg(); std::string retrieve_sign_from_ticker(const cfg& config, const std::string& currency); diff --git a/src/core/atomicdex/pages/qt.settings.page.cpp b/src/core/atomicdex/pages/qt.settings.page.cpp index 1183ad18cb..a851ffc257 100644 --- a/src/core/atomicdex/pages/qt.settings.page.cpp +++ b/src/core/atomicdex/pages/qt.settings.page.cpp @@ -136,6 +136,20 @@ namespace atomic_dex emit onLangChanged(); } + bool atomic_dex::settings_page::is_spamfilter_enabled() const + { + return m_config.spamfilter_enabled; + } + + void settings_page::set_spamfilter_enabled(bool is_enabled) + { + if (m_config.spamfilter_enabled != is_enabled) + { + change_spamfilter_status(m_config, is_enabled); + emit onSpamFilterEnabledChanged(); + } + } + bool atomic_dex::settings_page::is_notification_enabled() const { return m_config.notification_enabled; diff --git a/src/core/atomicdex/pages/qt.settings.page.hpp b/src/core/atomicdex/pages/qt.settings.page.hpp index d1dd6712cb..874e76aaf9 100644 --- a/src/core/atomicdex/pages/qt.settings.page.hpp +++ b/src/core/atomicdex/pages/qt.settings.page.hpp @@ -45,6 +45,7 @@ namespace atomic_dex Q_PROPERTY(QString current_fiat_sign READ get_current_fiat_sign NOTIFY onFiatSignChanged) Q_PROPERTY(QString current_fiat READ get_current_fiat WRITE set_current_fiat NOTIFY onFiatChanged) Q_PROPERTY(bool notification_enabled READ is_notification_enabled WRITE set_notification_enabled NOTIFY onNotificationEnabledChanged) + Q_PROPERTY(bool spamfilter_enabled READ is_spamfilter_enabled WRITE set_spamfilter_enabled NOTIFY onSpamFilterEnabledChanged) Q_PROPERTY(QVariant custom_token_data READ get_custom_token_data WRITE set_custom_token_data NOTIFY customTokenDataChanged) Q_PROPERTY(bool fetching_custom_token_data_busy READ is_fetching_custom_token_data_busy WRITE set_fetching_custom_token_data_busy NOTIFY customTokenDataStatusChanged) Q_PROPERTY(bool fetching_priv_keys_busy READ is_fetching_priv_key_busy WRITE set_fetching_priv_key_busy NOTIFY privKeyStatusChanged) @@ -82,6 +83,8 @@ namespace atomic_dex [[nodiscard]] QString get_current_fiat() const; [[nodiscard]] bool is_notification_enabled() const; void set_notification_enabled(bool is_enabled); + [[nodiscard]] bool is_spamfilter_enabled() const; + void set_spamfilter_enabled(bool is_enabled); void set_current_currency(const QString& current_currency); void set_current_fiat(const QString& current_fiat); [[nodiscard]] bool is_fetching_custom_token_data_busy() const; @@ -124,6 +127,7 @@ namespace atomic_dex void onFiatSignChanged(); void onFiatChanged(); void onNotificationEnabledChanged(); + void onSpamFilterEnabledChanged(); void customTokenDataChanged(); void customTokenDataStatusChanged(); void privKeyStatusChanged(); diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index ec9e35215e..a470bfc81e 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -977,15 +977,23 @@ namespace atomic_dex if (!evt.with_error && QString::fromStdString(evt.ticker) == get_current_ticker()) { std::error_code ec; + const auto& settings = m_system_manager.get_system(); t_transactions transactions = m_system_manager.get_system().get_tx_history(ec); t_transactions to_init; - for (auto&& cur_tx: transactions) + if (settings.is_spamfilter_enabled()) { - if (safe_float(cur_tx.total_amount) != 0) + for (auto&& cur_tx: transactions) { - to_init.push_back(cur_tx); + if (safe_float(cur_tx.total_amount) != 0) + { + to_init.push_back(cur_tx); + } } } + else + { + to_init = transactions; + } if (m_transactions_mdl->rowCount() == 0) { //! insert all transactions From 91766e2ced1a7c89c196dac5c54c0ed94debdce0 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 26 May 2023 22:51:50 +0800 Subject: [PATCH 127/251] add spamfilter_enabled to config template --- assets/config/cfg.json | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/config/cfg.json b/assets/config/cfg.json index 2cc5b79023..46d1b624b8 100644 --- a/assets/config/cfg.json +++ b/assets/config/cfg.json @@ -1,5 +1,6 @@ { "notification_enabled": true, + "spamfilter_enabled": false, "current_currency": "USD", "current_fiat": "USD", "current_currency_sign": "$", From 1413e6daa467f0cc4e05af5af0c6fa7b3127b007 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 26 May 2023 22:52:31 +0800 Subject: [PATCH 128/251] update .gitignore to exclude .vscode folder --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index df4eea238a..93ff04824c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # This file is used to ignore files which are generated # ---------------------------------------------------------------------------- - +.vscode/ *~ *.autosave *.a From 870e2ab5ab2be1bb04156762bf560b068744187a Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 26 May 2023 22:53:01 +0800 Subject: [PATCH 129/251] add section about poison tx in faq --- atomic_defi_design/Dex/Support/SupportModal.qml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Support/SupportModal.qml b/atomic_defi_design/Dex/Support/SupportModal.qml index 3c197c9b4f..84c54e129b 100644 --- a/atomic_defi_design/Dex/Support/SupportModal.qml +++ b/atomic_defi_design/Dex/Support/SupportModal.qml @@ -29,7 +29,7 @@ Qaterial.Dialog topPadding: 30 bottomPadding: 30 anchors.centerIn: parent - + dim: true modal: true title: "Support" @@ -142,6 +142,19 @@ For this reason, we recommend cancelling orders before closing %1, or reviewing Network fees can vary greatly depending on your selected trading pair.").arg(API.app_name) } + // TODO: Update link to the KP blog when relevent article available. + FAQLine + { + title: qsTr("I see a transaction in my wallet that was marked as 'poison'. What does this mean?") + text: qsTr('Address poisoning is a relatively new tye of phishing attack, where a malicious actor aims to trick you into sending funds to an address that you did not intend to send funds to. + +This is often done by sending a zero value transaction to your wallet from an address which looks very similar to your actual address, with the exact same letters at the start and end. This transaction will then appear in your transaction history, with the scammer hoping you will mistake the fake address for your own and send funds to it. + +To protect you from this, %1 will mark any transaction that it detects as potentially being a poison transaction with a "poison" label. You should always be careful to confirm any address you send funds to is correct. + +There is a toggle in settings where you can turn on/off the display of these transactions.').arg(API.app_name) + } + FAQLine { title: qsTr("Do you provide user support?") From 953c248982366656cf0e2f8066c2604d3fcabbf4 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 26 May 2023 22:53:35 +0800 Subject: [PATCH 130/251] add spam filter toggle to settings --- .../Dex/Settings/SettingModal.qml | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/atomic_defi_design/Dex/Settings/SettingModal.qml b/atomic_defi_design/Dex/Settings/SettingModal.qml index f10b31015b..aff1141241 100644 --- a/atomic_defi_design/Dex/Settings/SettingModal.qml +++ b/atomic_defi_design/Dex/Settings/SettingModal.qml @@ -205,6 +205,7 @@ Qaterial.Dialog topPadding: 10 spacing: 15 + // Notifications toggle RowLayout { width: parent.width - 30 @@ -229,6 +230,32 @@ Qaterial.Dialog } } + // Spam filter toggle + RowLayout + { + width: parent.width - 30 + anchors.horizontalCenter: parent.horizontalCenter + height: 50 + + DexLabel + { + Layout.alignment: Qt.AlignVCenter + Layout.fillWidth: true + font: DexTypo.subtitle1 + text: qsTr("Hide Poison Transactions in History") + } + + Item { Layout.fillWidth: true } + + DexSwitch + { + Layout.alignment: Qt.AlignVCenter + Component.onCompleted: checked = API.app.settings_pg.spamfilter_enabled + onCheckedChanged: API.app.settings_pg.spamfilter_enabled = checked + } + } + + // Max Coins Dropdown RowLayout { width: parent.width - 30 From fb9fc85628bc7f9ed96fc7f3ff0bb0475eaad114 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 26 May 2023 22:54:14 +0800 Subject: [PATCH 131/251] add some comments in frontend wallet page --- atomic_defi_design/Dex/Wallet/Main.qml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Wallet/Main.qml b/atomic_defi_design/Dex/Wallet/Main.qml index 101c341420..0358b98547 100644 --- a/atomic_defi_design/Dex/Wallet/Main.qml +++ b/atomic_defi_design/Dex/Wallet/Main.qml @@ -42,6 +42,7 @@ Item Layout.fillHeight: true Layout.fillWidth: true + // TODO: Move this section for the coin summary bar at the top to its own component ColumnLayout { id: wallet_layout @@ -970,13 +971,15 @@ Item GradientStop { position: 1; color: Dex.CurrentTheme.backgroundColor } } } - + + // Transactions history table Transactions { width: parent.width height: parent.height } + // Placeholder if no tx history available, or being fetched. ColumnLayout { visible: current_ticker_infos.tx_state !== "InProgress" && transactions_mdl.length === 0 @@ -1011,6 +1014,7 @@ Item visible: api_wallet_page.tx_fetching_busy } + // When no tx history available, or being fetched, show a button to open the explorer. DefaultText { id: explorerLink From d39f0558c0c101ee604a8713b7b2374146d48d0b Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 26 May 2023 22:55:02 +0800 Subject: [PATCH 132/251] apply spam tx detection and styling in history rows --- .../Dex/Wallet/Transactions.qml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/atomic_defi_design/Dex/Wallet/Transactions.qml b/atomic_defi_design/Dex/Wallet/Transactions.qml index 67608f5bdb..c86c58ef11 100644 --- a/atomic_defi_design/Dex/Wallet/Transactions.qml +++ b/atomic_defi_design/Dex/Wallet/Transactions.qml @@ -22,10 +22,11 @@ Dex.ListView model: transactions_mdl.proxy_mdl - // Row + // Transaction Row delegate: Dex.Rectangle { id: rectangle + property bool is_spam: amount == 0 width: list.width height: row_height radius: 0 @@ -64,13 +65,13 @@ Dex.ListView visible: transaction_note !== "" } - + // When a spam / poison tx, we show a warning icon Qaterial.Icon { id: received_icon size: 16 - icon: am_i_sender ? Qaterial.Icons.arrowTopRight : Qaterial.Icons.arrowBottomRight - color: am_i_sender ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor + icon: is_spam ? Qaterial.Icons.radioactive : am_i_sender ? Qaterial.Icons.arrowTopRight : Qaterial.Icons.arrowBottomRight + color: is_spam ? Style.colorOrange : am_i_sender ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor } // Description @@ -78,8 +79,9 @@ Dex.ListView { id: description horizontalAlignment: Qt.AlignLeft - text_value: am_i_sender ? qsTr("Sent") : qsTr("Received") + text_value: is_spam ? qsTr("Poison") : am_i_sender ? qsTr("Sent") : qsTr("Received") font.pixelSize: Style.textSizeSmall3 + color: is_spam ? Style.colorOrange : am_i_sender ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor } } @@ -97,7 +99,7 @@ Dex.ListView } font.pixelSize: description.font.pixelSize - color: am_i_sender ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor + color: is_spam ? Style.colorWhite7 : am_i_sender ? Dex.CurrentTheme.warningColor : Dex.CurrentTheme.okColor privacy: true } @@ -108,8 +110,9 @@ Dex.ListView horizontalAlignment: Text.AlignRight text_value: General.formatFiat(!am_i_sender, amount_fiat, API.app.settings_pg.current_currency) font.pixelSize: description.font.pixelSize - color: crypto_amount.color + color: is_spam ? Style.colorWhite7 : crypto_amount.color privacy: true + } // Fee @@ -121,6 +124,7 @@ Dex.ListView current_ticker_infos.fee_ticker + " " + qsTr("fees")) font.pixelSize: description.font.pixelSize privacy: true + color: is_spam ? Style.colorWhite7 : crypto_amount.color } // Date @@ -131,6 +135,7 @@ Dex.ListView font.pixelSize: description.font.pixelSize text_value: !date || unconfirmed ? qsTr("Unconfirmed") : date privacy: true + color: is_spam ? Style.colorWhite7 : crypto_amount.color } } } From 1f131583cf8a081a507e32ff709e971db69e616e Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 26 May 2023 22:55:37 +0800 Subject: [PATCH 133/251] Add note in trasaction details modal for poison tx --- .../Dex/Wallet/TransactionDetailsModal.qml | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml index c05e7463ef..321c9c19bf 100644 --- a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml +++ b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml @@ -18,6 +18,7 @@ MultipageModal function reset() { } property var details + property bool is_spam: !details ? false : details.amount == 0 onClosed: { @@ -29,6 +30,30 @@ MultipageModal { titleText: qsTr("Transaction Details") + // Warning for spam/poison transactions + DefaultText + { + id: warning_text + visible: is_spam + Layout.alignment: Qt.AlignVCenter + Layout.fillWidth: true + wrapMode: Label.Wrap + color: Style.colorOrange + text_value: qsTr("This transaction has been identified as a potential address poisoning attack.") + } + + // Warning for spam/poison transactions + DefaultText + { + id: warning_text2 + visible: is_spam + Layout.alignment: Qt.AlignVCenter + Layout.fillWidth: true + wrapMode: Label.Wrap + color: Style.colorOrange + text_value: qsTr("Please see the Support FAQ for more information.") + } + // Transaction Hash TitleText { From ae89b83a432be4e5bac9ba4ef933f12a4720cb63 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 27 May 2023 00:47:49 +0800 Subject: [PATCH 134/251] force refresh history when toggling poison display --- src/core/atomicdex/pages/qt.settings.page.cpp | 6 ++++++ src/core/atomicdex/pages/qt.wallet.page.cpp | 4 ++-- src/core/atomicdex/pages/qt.wallet.page.hpp | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/core/atomicdex/pages/qt.settings.page.cpp b/src/core/atomicdex/pages/qt.settings.page.cpp index a851ffc257..269a204bd4 100644 --- a/src/core/atomicdex/pages/qt.settings.page.cpp +++ b/src/core/atomicdex/pages/qt.settings.page.cpp @@ -32,6 +32,7 @@ #include "atomicdex/models/qt.global.coins.cfg.model.hpp" #include "atomicdex/pages/qt.portfolio.page.hpp" #include "atomicdex/pages/qt.settings.page.hpp" +#include "atomicdex/pages/qt.wallet.page.hpp" #include "atomicdex/services/mm2/mm2.service.hpp" #include "atomicdex/services/price/coingecko/coingecko.wallet.charts.hpp" #include "atomicdex/services/price/global.provider.hpp" @@ -145,8 +146,13 @@ namespace atomic_dex { if (m_config.spamfilter_enabled != is_enabled) { + + auto& mm2 = m_system_manager.get_system(); + auto& wallet_pg = m_system_manager.get_system(); + QString ticker = QString::fromStdString(mm2.get_current_ticker()); change_spamfilter_status(m_config, is_enabled); emit onSpamFilterEnabledChanged(); + wallet_pg.set_current_ticker(ticker, true); } } diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index a470bfc81e..07e7f73576 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -107,11 +107,11 @@ namespace atomic_dex return QString::fromStdString(mm2_system.get_current_ticker()); } - void wallet_page::set_current_ticker(const QString& ticker) + void wallet_page::set_current_ticker(const QString& ticker, bool force) { auto& mm2_system = m_system_manager.get_system(); auto coin_info = mm2_system.get_coin_info(ticker.toStdString()); - if (mm2_system.set_current_ticker(ticker.toStdString())) + if (mm2_system.set_current_ticker(ticker.toStdString()) || force) { SPDLOG_INFO("new ticker: {}", ticker.toStdString()); m_transactions_mdl->reset(); diff --git a/src/core/atomicdex/pages/qt.wallet.page.hpp b/src/core/atomicdex/pages/qt.wallet.page.hpp index 033699279b..4b4c6f15f5 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.hpp +++ b/src/core/atomicdex/pages/qt.wallet.page.hpp @@ -30,7 +30,7 @@ namespace atomic_dex // Getters/Setters [[nodiscard]] transactions_model* get_transactions_mdl() const; [[nodiscard]] QString get_current_ticker() const; - void set_current_ticker(const QString& ticker); + void set_current_ticker(const QString& ticker, bool force = false); [[nodiscard]] QVariant get_ticker_infos() const; [[nodiscard]] bool is_broadcast_busy() const; void set_broadcast_busy(bool status); From 816d21aba504cd53f4d548f3e1a48f94db21b91b Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 27 May 2023 00:55:04 +0800 Subject: [PATCH 135/251] disables copy button for poison tx adresses --- atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml index 321c9c19bf..ab69b7cba4 100644 --- a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml +++ b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml @@ -71,7 +71,7 @@ MultipageModal text_box_width: 600 text_value: !details ? "" : details.tx_hash linkURL: !details ? "" :General.getTxExplorerURL(api_wallet_page.ticker, details.tx_hash, false) - onCopyNotificationTitle: qsTr("%1 txid", "TICKER").arg(api_wallet_page.ticker) + onCopyNotificationTitle: qsTr("%1 txid", "TICKER").arg(api_wallet_page.ticker) onCopyNotificationMsg: qsTr("copied to clipboard.") privacy: true } @@ -103,7 +103,7 @@ MultipageModal model: !details ? [] : details.from linkURL: !details ? "" :General.getAddressExplorerURL(api_wallet_page.ticker, details.from) - onCopyNotificationTitle: qsTr("From address") + onCopyNotificationTitle: is_spam ? "" : qsTr("From address") } AddressList @@ -117,7 +117,7 @@ MultipageModal : details.to.length > 1 ? General.getAddressExplorerURL(api_wallet_page.ticker, General.arrayExclude(details.to, details.from[0])) : General.getAddressExplorerURL(api_wallet_page.ticker, details.to) - onCopyNotificationTitle: qsTr("To address") + onCopyNotificationTitle: is_spam ? "" : qsTr("To address") } // Date From 89cce001aa02ab23cb3b732657293f8f7d74d1c7 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Jun 2023 18:02:59 +0800 Subject: [PATCH 136/251] Use cmake 3.25.0 so CI/CD builds --- ci_tools_atomic_dex/ci_scripts/windows_script.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 index 643323683c..9441a9abec 100644 --- a/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 +++ b/ci_tools_atomic_dex/ci_scripts/windows_script.ps1 @@ -6,7 +6,7 @@ iwr -useb 'https://raw.githubusercontent.com/scoopinstaller/install/master/insta #Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') -RunAsAdmin scoop install llvm --global scoop install ninja --global -scoop install cmake@3.22.0 --global +scoop install cmake@3.25.0 --global scoop install git --global scoop install 7zip --global scoop cache rm 7zip From cf9767fd051b726a74f0b5ba994331f2f16234a9 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Jun 2023 21:41:44 +0800 Subject: [PATCH 137/251] use swap contract addresses from coins config file --- src/core/atomicdex/api/mm2/rpc.electrum.cpp | 4 +- src/core/atomicdex/api/mm2/rpc.electrum.hpp | 10 +- src/core/atomicdex/api/mm2/rpc.enable.cpp | 116 +------------------- src/core/atomicdex/api/mm2/rpc.enable.hpp | 64 +---------- src/core/atomicdex/config/coins.cfg.cpp | 28 +++++ src/core/atomicdex/config/coins.cfg.hpp | 34 +++--- 6 files changed, 59 insertions(+), 197 deletions(-) diff --git a/src/core/atomicdex/api/mm2/rpc.electrum.cpp b/src/core/atomicdex/api/mm2/rpc.electrum.cpp index dfea39b95b..5c8849b2fe 100644 --- a/src/core/atomicdex/api/mm2/rpc.electrum.cpp +++ b/src/core/atomicdex/api/mm2/rpc.electrum.cpp @@ -37,8 +37,8 @@ namespace atomic_dex::mm2 if (cfg.coin_type == CoinType::QRC20) { - j["swap_contract_address"] = cfg.is_testnet ? cfg.testnet_qrc_swap_contract_address : cfg.mainnet_qrc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.testnet_fallback_qrc_swap_contract_address : cfg.mainnet_fallback_qrc_swap_contract_address; + j["swap_contract_address"] = cfg.swap_contract_address; + j.contains("fallback_swap_contract") ? j.at("fallback_swap_contract").get() : cfg.swap_contract_address; } if (cfg.bchd_urls.has_value()) { diff --git a/src/core/atomicdex/api/mm2/rpc.electrum.hpp b/src/core/atomicdex/api/mm2/rpc.electrum.hpp index 1960e56ec3..a41dd47b06 100644 --- a/src/core/atomicdex/api/mm2/rpc.electrum.hpp +++ b/src/core/atomicdex/api/mm2/rpc.electrum.hpp @@ -32,14 +32,12 @@ namespace atomic_dex::mm2 CoinType coin_type; bool is_testnet{false}; bool with_tx_history{true}; - const std::string testnet_qrc_swap_contract_address{"0xba8b71f3544b93e2f681f996da519a98ace0107a"}; - const std::string testnet_fallback_qrc_swap_contract_address{testnet_qrc_swap_contract_address}; - const std::string mainnet_qrc_swap_contract_address{"0x2f754733acd6d753731c00fee32cb484551cc15d"}; - const std::string mainnet_fallback_qrc_swap_contract_address{mainnet_qrc_swap_contract_address}; + const std::string swap_contract_address; + const std::string fallback_swap_contract_address; std::optional address_format; std::optional merge_params; - std::optional> bchd_urls; - std::optional allow_slp_unsafe_conf; + std::optional> bchd_urls; + std::optional allow_slp_unsafe_conf; }; struct electrum_answer diff --git a/src/core/atomicdex/api/mm2/rpc.enable.cpp b/src/core/atomicdex/api/mm2/rpc.enable.cpp index 60cd1c7614..6e13301f95 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.cpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.cpp @@ -34,126 +34,16 @@ namespace atomic_dex::mm2 case CoinType::ERC20: { j["gas_station_url"] = cfg.gas_station_url; - j["urls"] = cfg.urls; - j["swap_contract_address"] = cfg.is_testnet ? cfg.erc_testnet_swap_contract_address : cfg.erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.erc_testnet_fallback_swap_contract_address : cfg.erc_fallback_swap_contract_address; - break; } case CoinType::Matic: { j["gas_station_url"] = cfg.is_testnet ? cfg.testnet_matic_gas_station_url : cfg.matic_gas_station_url; j["gas_station_decimals"] = cfg.matic_gas_station_decimals; - j["urls"] = cfg.urls; - j["swap_contract_address"] = cfg.is_testnet ? cfg.matic_erc_testnet_swap_contract_address : cfg.matic_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.matic_erc_testnet_fallback_swap_contract_address : cfg.matic_erc_fallback_swap_contract_address; - break; - } - case CoinType::Optimism: - { - j["urls"] = cfg.urls; - j["swap_contract_address"] = cfg.optimism_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.optimism_erc_fallback_swap_contract_address; - break; - } - case CoinType::Arbitrum: - { - j["urls"] = cfg.urls; - j["swap_contract_address"] = cfg.arbitrum_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.arbitrum_erc_fallback_swap_contract_address; - break; - } - case CoinType::EWT: - { - j["urls"] = cfg.urls; - j["swap_contract_address"] = cfg.ewt_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.ewt_erc_fallback_swap_contract_address; - break; - } - case CoinType::BEP20: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.bnb_testnet_swap_contract_address : cfg.bnb_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.bnb_testnet_fallback_swap_contract_address : cfg.bnb_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::AVX20: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.avax_erc_testnet_swap_contract_address : cfg.avax_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.avax_erc_testnet_fallback_swap_contract_address : cfg.avax_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::FTM20: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.ftm_erc_testnet_swap_contract_address : cfg.ftm_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.ftm_erc_testnet_fallback_swap_contract_address : cfg.ftm_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::HRC20: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.one_erc_testnet_swap_contract_address : cfg.one_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.one_erc_testnet_fallback_swap_contract_address : cfg.one_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::Ubiq: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.ubiq_erc_testnet_swap_contract_address : cfg.ubiq_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.ubiq_erc_testnet_fallback_swap_contract_address : cfg.ubiq_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::KRC20: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.krc_erc_testnet_swap_contract_address : cfg.krc_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.krc_erc_testnet_fallback_swap_contract_address : cfg.krc_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::Moonriver: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.movr_erc_testnet_swap_contract_address : cfg.movr_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.movr_erc_testnet_fallback_swap_contract_address : cfg.movr_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::Moonbeam: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.glmr_erc_testnet_swap_contract_address : cfg.glmr_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.glmr_erc_testnet_fallback_swap_contract_address : cfg.glmr_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::HecoChain: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.hco_erc_testnet_swap_contract_address : cfg.hco_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.hco_erc_testnet_fallback_swap_contract_address : cfg.hco_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::SmartBCH: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.sbch_erc_testnet_swap_contract_address : cfg.sbch_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.sbch_erc_testnet_fallback_swap_contract_address : cfg.sbch_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::EthereumClassic: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.etc_erc_testnet_swap_contract_address : cfg.etc_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.etc_erc_testnet_fallback_swap_contract_address : cfg.etc_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; - } - case CoinType::RSK: - { - j["swap_contract_address"] = cfg.is_testnet ? cfg.rsk_erc_testnet_swap_contract_address : cfg.rsk_erc_swap_contract_address; - j["fallback_swap_contract"] = cfg.is_testnet ? cfg.rsk_erc_testnet_fallback_swap_contract_address : cfg.rsk_erc_fallback_swap_contract_address; - j["urls"] = cfg.urls; - break; } default: + j["urls"] = cfg.urls; + j["swap_contract_address"] = cfg.swap_contract_address; + j["fallback_swap_contract"] = cfg.fallback_swap_contract_address; break; } diff --git a/src/core/atomicdex/api/mm2/rpc.enable.hpp b/src/core/atomicdex/api/mm2/rpc.enable.hpp index d00206ad76..fc7d127607 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.hpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.hpp @@ -31,68 +31,8 @@ namespace atomic_dex::mm2 std::vector urls; CoinType coin_type; bool is_testnet{false}; - const std::string erc_swap_contract_address{"0x24ABE4c71FC658C91313b6552cd40cD808b3Ea80"}; - const std::string erc_testnet_swap_contract_address{"0x6b5A52217006B965BB190864D62dc3d270F7AaFD"}; - const std::string erc_fallback_swap_contract_address{"0x8500AFc0bc5214728082163326C2FF0C73f4a871"}; - const std::string erc_testnet_fallback_swap_contract_address{"0x7Bc1bBDD6A0a722fC9bffC49c921B685ECB84b94"}; - const std::string etc_erc_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; - const std::string etc_erc_testnet_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; - const std::string etc_erc_fallback_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; - const std::string etc_erc_testnet_fallback_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; - const std::string ewt_erc_swap_contract_address{"0x304896fc2F242f13dd852b412E7B60C5F495B79c"}; - const std::string ewt_erc_fallback_swap_contract_address{"0x304896fc2F242f13dd852b412E7B60C5F495B79c"}; - const std::string ubiq_erc_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string ubiq_erc_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string ubiq_erc_testnet_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string ubiq_erc_testnet_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string krc_erc_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string krc_erc_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string krc_erc_testnet_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string krc_erc_testnet_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string movr_erc_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string movr_erc_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string movr_erc_testnet_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string movr_erc_testnet_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string glmr_erc_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; - const std::string glmr_erc_fallback_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; - const std::string glmr_erc_testnet_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; - const std::string glmr_erc_testnet_fallback_swap_contract_address{"0x6d9ce4BD298DE38bAfEFD15f5C6f5c95313B1d94"}; - const std::string hco_erc_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string hco_erc_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string hco_erc_testnet_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string hco_erc_testnet_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string avax_erc_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string avax_erc_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string avax_erc_testnet_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string avax_erc_testnet_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string one_erc_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string one_erc_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string one_erc_testnet_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string one_erc_testnet_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string ftm_erc_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string ftm_erc_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string ftm_erc_testnet_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string ftm_erc_testnet_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string matic_erc_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string matic_erc_fallback_swap_contract_address{"0x9130b257D37A52E52F21054c4DA3450c72f595CE"}; - const std::string matic_erc_testnet_swap_contract_address{"0x73c1Dd989218c3A154C71Fc08Eb55A24Bd2B3A10"}; - const std::string matic_erc_testnet_fallback_swap_contract_address{"0x73c1Dd989218c3A154C71Fc08Eb55A24Bd2B3A10"}; - const std::string optimism_erc_swap_contract_address{"0x9130b257d37a52e52f21054c4da3450c72f595ce"}; - const std::string optimism_erc_fallback_swap_contract_address{"0x9130b257d37a52e52f21054c4da3450c72f595ce"}; - const std::string arbitrum_erc_swap_contract_address{"0x9130b257d37a52e52f21054c4da3450c72f595ce"}; - const std::string arbitrum_erc_fallback_swap_contract_address{"0x9130b257d37a52e52f21054c4da3450c72f595ce"}; - const std::string sbch_erc_swap_contract_address{"0x25bF2AAB8749AD2e4360b3e0B738f3Cd700C4D68"}; - const std::string sbch_erc_fallback_swap_contract_address{"0x25bF2AAB8749AD2e4360b3e0B738f3Cd700C4D68"}; - const std::string sbch_erc_testnet_swap_contract_address{"0x25bF2AAB8749AD2e4360b3e0B738f3Cd700C4D68"}; - const std::string sbch_erc_testnet_fallback_swap_contract_address{"0x25bF2AAB8749AD2e4360b3e0B738f3Cd700C4D68"}; - const std::string rsk_erc_swap_contract_address{"0x6D9CE4bD298de38Bafefd15F5C6F5c95313B1d94"}; - const std::string rsk_erc_fallback_swap_contract_address{"0x6D9CE4bD298de38Bafefd15F5C6F5c95313B1d94"}; - const std::string rsk_erc_testnet_swap_contract_address{"0x6D9CE4bD298de38Bafefd15F5C6F5c95313B1d94"}; - const std::string rsk_erc_testnet_fallback_swap_contract_address{"0x6D9CE4bD298de38Bafefd15F5C6F5c95313B1d94"}; - const std::string bnb_testnet_swap_contract_address{"0xcCD17C913aD7b772755Ad4F0BDFF7B34C6339150"}; - const std::string bnb_swap_contract_address{"0xeDc5b89Fe1f0382F9E4316069971D90a0951DB31"}; - const std::string bnb_fallback_swap_contract_address{bnb_swap_contract_address}; - const std::string bnb_testnet_fallback_swap_contract_address{bnb_testnet_swap_contract_address}; + const std::string swap_contract_address; + const std::string fallback_swap_contract_address; const std::size_t matic_gas_station_decimals{9}; std::string gas_station_url{"https://ethgasstation.info/json/ethgasAPI.json"}; std::string matic_gas_station_url{"https://gasstation-mainnet.matic.network/"}; diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index 1c728ac200..74aa73234d 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -213,6 +213,7 @@ namespace atomic_dex { cfg.alias_ticker = j.at("alias_ticker").get(); } + // Explorer url suffixes if (j.contains("explorer_tx_url")) { j.at("explorer_tx_url").get_to(cfg.tx_uri); @@ -221,6 +222,33 @@ namespace atomic_dex { j.at("explorer_address_url").get_to(cfg.address_url); } + // Swap contract addresses + if (j.contains("swap_contract_address")) + { + cfg.swap_contract_address = j.at("swap_contract_address").get(); + } + if (j.contains("fallback_swap_contract_address")) + { + cfg.fallback_swap_contract_address = j.at("fallback_swap_contract_address").get(); + } + // Gas station urls + if (j.contains("gas_station_url")) + { + cfg.gas_station_url = j.at("gas_station_url").get(); + } + if (j.contains("matic_gas_station_url")) + { + cfg.matic_gas_station_url = j.at("matic_gas_station_url").get(); + } + if (j.contains("testnet_matic_gas_station_url")) + { + cfg.testnet_matic_gas_station_url = j.at("testnet_matic_gas_station_url").get(); + } + if (j.contains("matic_gas_station_decimals")) + { + cfg.matic_gas_station_decimals = j.at("matic_gas_station_decimals").get(); + } + switch (cfg.coin_type) { diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index 4ec95f07dc..318938d1ad 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -41,6 +41,12 @@ namespace atomic_dex using light_wallet_d_servers = std::vector; ///< For ZHTLC std::string ticker; std::optional alias_ticker{std::nullopt}; + std::optional swap_contract_address{std::nullopt}; + std::optional fallback_swap_contract_address{std::nullopt}; + std::optional matic_gas_station_decimals{std::nullopt}; + std::optional gas_station_url{std::nullopt}; + std::optional matic_gas_station_url{std::nullopt}; + std::optional testnet_matic_gas_station_url{std::nullopt}; std::string gui_ticker; ///< Ticker displayed in the gui std::string name; ///< nice name std::optional utxo_merge{false}; @@ -59,21 +65,21 @@ namespace atomic_dex std::string livecoinwatch_id{"test-coin"}; bool is_custom_coin{false}; std::string type; - std::optional> other_types; - std::string explorer_url; ///< usefull for transaction, take this url and append transaction id - std::string tx_uri{"tx/"}; - std::string address_url{"address/"}; - std::optional custom_backup; + std::optional> other_types; + std::string explorer_url; ///< usefull for transaction, take this url and append transaction id + std::string tx_uri{"tx/"}; + std::string address_url{"address/"}; + std::optional custom_backup; nlohmann::json activation_status; - std::optional is_testnet{false}; ///< True if testnet (tBTC, tQTUM, QRC-20 on testnet, tETH) - CoinType coin_type; - bool checked{false}; - bool wallet_only{false}; - bool has_parent_fees_ticker{false}; ///< True if parent fees is different from current ticker eg: ERC20 tokens - std::string fees_ticker; - bool segwit{false}; - bool is_segwit_on{false}; - bool is_erc_family{false}; + std::optional is_testnet{false}; ///< True if testnet (tBTC, tQTUM, QRC-20 on testnet, tETH) + CoinType coin_type; + bool checked{false}; + bool wallet_only{false}; + bool has_parent_fees_ticker{false}; ///< True if parent fees is different from current ticker eg: ERC20 tokens + std::string fees_ticker; + bool segwit{false}; + bool is_segwit_on{false}; + bool is_erc_family{false}; bool is_zhtlc_family{false}; bool default_coin{false}; }; From 33beccc479f1a3ca0720dea6a7a5d250c727b424 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 7 Jun 2023 23:28:48 +0800 Subject: [PATCH 138/251] remove unused variable --- src/core/atomicdex/models/qt.orderbook.model.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/atomicdex/models/qt.orderbook.model.cpp b/src/core/atomicdex/models/qt.orderbook.model.cpp index 71615ad4bf..44296bea92 100644 --- a/src/core/atomicdex/models/qt.orderbook.model.cpp +++ b/src/core/atomicdex/models/qt.orderbook.model.cpp @@ -448,7 +448,6 @@ namespace atomic_dex { //! ID Found, update ! const QModelIndex& idx = res.at(0); - const auto uuid_to_be_updated = this->data(idx, OrderbookRoles::UUIDRole).toString().toStdString(); auto&& [_, new_price, is_price_changed] = update_value(OrderbookRoles::PriceRole, QString::fromStdString(order.price), idx, *this); update_value(OrderbookRoles::PriceNumerRole, QString::fromStdString(order.price_fraction_numer), idx, *this); update_value(OrderbookRoles::PriceDenomRole, QString::fromStdString(order.price_fraction_denom), idx, *this); From d5adbb9e83685990cb5b7ee40982bb90c214b978 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 8 Jun 2023 04:31:06 +0800 Subject: [PATCH 139/251] remove old segwit switch code --- atomic_defi_design/Dex/App.qml | 1 - .../Dex/Dashboard/NotificationsModal.qml | 32 ++---- atomic_defi_design/Dex/Wallet/Main.qml | 71 ------------ atomic_defi_design/Dex/Wallet/SendModal.qml | 13 +-- src/core/atomicdex/config/coins.cfg.cpp | 9 +- src/core/atomicdex/config/coins.cfg.hpp | 1 - .../atomicdex/constants/dex.constants.hpp | 6 +- .../atomicdex/models/qt.orderbook.model.cpp | 4 +- .../atomicdex/models/qt.orderbook.model.hpp | 4 +- src/core/atomicdex/pages/qt.wallet.page.cpp | 107 +----------------- src/core/atomicdex/pages/qt.wallet.page.hpp | 2 - .../pages/widgets/dex/qt.orderbook.cpp | 4 +- .../atomicdex/services/mm2/mm2.service.cpp | 14 --- .../atomicdex/services/mm2/mm2.service.hpp | 1 - 14 files changed, 25 insertions(+), 244 deletions(-) diff --git a/atomic_defi_design/Dex/App.qml b/atomic_defi_design/Dex/App.qml index b0137c1c15..47b9735d40 100644 --- a/atomic_defi_design/Dex/App.qml +++ b/atomic_defi_design/Dex/App.qml @@ -32,7 +32,6 @@ DexRectangle property var notification_modal: notifications_modal property var logout_confirm_modal: logout_modal property var notifications_list: _currentPage === App.ScreenType.Dashboard ? loader.item.notifications_list : [] - property bool segwit_on: false property var _currentPage: API.app.wallet_mgr.log_status() ? App.ScreenType.Dashboard : App.ScreenType.Startup property var _availablePages: [_startup, dashboard] diff --git a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml index 8753f8abc8..46bd8e7b57 100644 --- a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml +++ b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml @@ -234,28 +234,20 @@ DexPopup function onBalanceUpdateStatus(am_i_sender, amount, ticker, human_date, timestamp) { - - if (!app.segwit_on) + if (amount != 0) { - if (amount != 0) - { - newNotification( - balanceUpdateStatusNotification, - { - am_i_sender, - amount, - ticker, - human_date, - timestamp - }, - timestamp, + newNotification( + balanceUpdateStatusNotification, + { + am_i_sender, + amount, + ticker, human_date, - "open_wallet_page") - } - } - else - { - app.segwit_on = false + timestamp + }, + timestamp, + human_date, + "open_wallet_page") } } diff --git a/atomic_defi_design/Dex/Wallet/Main.qml b/atomic_defi_design/Dex/Wallet/Main.qml index 0358b98547..dbe6b35d91 100644 --- a/atomic_defi_design/Dex/Wallet/Main.qml +++ b/atomic_defi_design/Dex/Wallet/Main.qml @@ -167,77 +167,6 @@ Item Item { Layout.fillWidth: true } - ColumnLayout - { - visible: false //current_ticker_infos.segwit_supported - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - spacing: 2 - - DefaultText - { - text_value: qsTr("Segwit") - Layout.alignment: Qt.AlignLeft - font.pixelSize: headerTitleFont - color: headerTitleColor - } - - DefaultSwitch - { - id: segwitSwitch - Layout.alignment: Qt.AlignVCenter - - onToggled: - { - if(parseFloat(current_ticker_infos.balance) > 0) { - Qaterial.DialogManager.showDialog({ - title: qsTr("Confirmation"), - text: qsTr("Do you want to send your %1 funds to %2 wallet first?").arg(current_ticker_infos.is_segwit_on ? "segwit" : "legacy").arg(!current_ticker_infos.is_segwit_on ? "segwit" : "legacy"), - standardButtons: Dialog.Yes | Dialog.No, - onAccepted: function() { - var address = API.app.wallet_pg.switch_address_mode(!current_ticker_infos.is_segwit_on); - if (address != current_ticker_infos.address && address != "") { - send_modal.open() - send_modal.item.address_field.text = address - send_modal.item.max_mount.checked = true - send_modal.item.segwit = true - send_modal.item.segwit_callback = function () { - if(send_modal.item.segwit_success) { - API.app.wallet_pg.post_switch_address_mode(!current_ticker_infos.is_segwit_on) - Qaterial.DialogManager.showDialog({ - title: qsTr("Success"), - text: qsTr("Your transaction is send, may take some time to arrive") - }) - } else { - segwitSwitch.checked = current_ticker_infos.is_segwit_on - } - } - } - }, - - onRejected: function () { - app.segwit_on = true - API.app.wallet_pg.post_switch_address_mode(!current_ticker_infos.is_segwit_on) - } - }) - - } else { - app.segwit_on = true - API.app.wallet_pg.post_switch_address_mode(!current_ticker_infos.is_segwit_on) - } - } - } - } - - Connections - { - target: API.app.wallet_pg - function onTickerInfosChanged() { - if (segwitSwitch.checked != current_ticker_infos.is_segwit_on) { - segwitSwitch.checked = current_ticker_infos.is_segwit_on - } - } - } - // Price ColumnLayout { diff --git a/atomic_defi_design/Dex/Wallet/SendModal.qml b/atomic_defi_design/Dex/Wallet/SendModal.qml index 4c87983bc1..e21a31f106 100644 --- a/atomic_defi_design/Dex/Wallet/SendModal.qml +++ b/atomic_defi_design/Dex/Wallet/SendModal.qml @@ -18,9 +18,6 @@ MultipageModal property bool needFix: false property bool errorView: false - property bool segwit: false - property bool segwit_success: false - property var segwit_callback property var address_data readonly property var default_send_result: ({ has_error: false, error_message: "", @@ -156,11 +153,6 @@ MultipageModal onClosed: { - if (segwit) - { - segwit_callback() - } - segwit = false reset() } @@ -262,7 +254,7 @@ MultipageModal DefaultRectangle { - enabled: !root.segwit && !root.is_send_busy + enabled: !root.is_send_busy Layout.preferredWidth: 500 Layout.preferredHeight: 44 @@ -566,7 +558,7 @@ MultipageModal DefaultRectangle { visible: General.isCoinWithMemo(api_wallet_page.ticker) - enabled: !root.segwit && !root.is_send_busy + enabled: !root.is_send_busy Layout.preferredWidth: 500 Layout.preferredHeight: 44 @@ -949,7 +941,6 @@ MultipageModal function onClose() { - if (root.segwit) root.segwit_success = true root.close() } } diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index 1588e95836..c6490bb99d 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -222,14 +222,7 @@ namespace atomic_dex if (j.contains("light_wallet_d_servers")) { cfg.z_urls = j.at("light_wallet_d_servers").get>(); - } - if (j.contains("is_segwit_on")) - { - cfg.segwit = true; - j.at("is_segwit_on").get_to(cfg.is_segwit_on); - SPDLOG_INFO("coin: {} support segwit with current_segwit mode: {}", cfg.ticker, cfg.is_segwit_on); - } - if (j.contains("alias_ticker")) + } if (j.contains("alias_ticker")) { cfg.alias_ticker = j.at("alias_ticker").get(); } diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index 76604fafed..c5ccf49180 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -68,7 +68,6 @@ namespace atomic_dex std::optional is_testnet{false}; ///< True if testnet (tBTC, tQTUM, QRC-20 on testnet, tETH) std::optional utxo_merge{false}; bool segwit{false}; - bool is_segwit_on{false}; bool active{false}; bool checked{false}; bool wallet_only{false}; diff --git a/src/core/atomicdex/constants/dex.constants.hpp b/src/core/atomicdex/constants/dex.constants.hpp index 22944920db..98820c9583 100644 --- a/src/core/atomicdex/constants/dex.constants.hpp +++ b/src/core/atomicdex/constants/dex.constants.hpp @@ -10,8 +10,9 @@ namespace atomic_dex inline const std::vector g_default_coins{ g_primary_dex_coin, g_second_primary_dex_coin, - "VOTE2023", - "BTC" + "BTC-segwit", + "LTC-segwit", + "DGB-segwit", }; inline const std::vector g_wallet_only_coins{ "ARRR-BEP20", @@ -31,7 +32,6 @@ namespace atomic_dex "REVS", "SUPERNET", "XPM", - "BTC-segwit", "VOTE2023", "ATOM" }; diff --git a/src/core/atomicdex/models/qt.orderbook.model.cpp b/src/core/atomicdex/models/qt.orderbook.model.cpp index 44296bea92..5b6822c570 100644 --- a/src/core/atomicdex/models/qt.orderbook.model.cpp +++ b/src/core/atomicdex/models/qt.orderbook.model.cpp @@ -362,7 +362,7 @@ namespace atomic_dex } void - orderbook_model::reset_orderbook(const t_orders_contents& orderbook) + orderbook_model::reset_orderbook(const t_orders_contents& orderbook, bool is_bestorders) { SPDLOG_DEBUG("[orderbook_model::reset_orderbook]"); if (!orderbook.empty()) @@ -528,7 +528,7 @@ namespace atomic_dex } void - orderbook_model::refresh_orderbook(const t_orders_contents& orderbook) + orderbook_model::refresh_orderbook(const t_orders_contents& orderbook, bool is_bestorders) { auto refresh_functor = [this](const std::vector& contents) { diff --git a/src/core/atomicdex/models/qt.orderbook.model.hpp b/src/core/atomicdex/models/qt.orderbook.model.hpp index 6e320e68f9..0e74f3d645 100644 --- a/src/core/atomicdex/models/qt.orderbook.model.hpp +++ b/src/core/atomicdex/models/qt.orderbook.model.hpp @@ -88,8 +88,8 @@ namespace atomic_dex bool setData(const QModelIndex& index, const QVariant& value, int role) final; bool removeRows(int row, int count, const QModelIndex& parent) override; - void reset_orderbook(const t_orders_contents& orderbook); - void refresh_orderbook(const t_orders_contents& orderbook); + void reset_orderbook(const t_orders_contents& orderbook, bool is_bestorders=false); + void refresh_orderbook(const t_orders_contents& orderbook, bool is_bestorders=false); void clear_orderbook(); [[nodiscard]] int get_length() const; [[nodiscard]] orderbook_proxy_model* get_orderbook_proxy() const; diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index 7b4dcf31b3..9d6fffa7ea 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -269,8 +269,7 @@ namespace atomic_dex {"current_block", 1}, {"is_smartchain_test_coin", false}, {"qrcode_address", ""}, - {"segwit_supported", false}, - {"is_segwit_on", false}}; + {"segwit_supported", false}}; std::error_code ec; auto& mm2_system = m_system_manager.get_system(); if (mm2_system.is_mm2_running()) @@ -285,7 +284,6 @@ namespace atomic_dex obj["name"] = QString::fromStdString(coin_info.name); obj["type"] = QString::fromStdString(coin_info.type); obj["segwit_supported"] = coin_info.segwit; - obj["is_segwit_on"] = coin_info.is_segwit_on; obj["has_parent_fees_ticker"] = coin_info.has_parent_fees_ticker; obj["fees_ticker"] = QString::fromStdString(coin_info.fees_ticker); obj["is_claimable"] = coin_info.is_claimable; @@ -1173,107 +1171,4 @@ namespace atomic_dex m_converted_address = converted_address; emit convertedAddressChanged(); } - - QString - wallet_page::switch_address_mode(bool checked) - { - auto& mm2_system = m_system_manager.get_system(); - std::string address = ""; - if (mm2_system.is_mm2_running()) - { - const auto ticker = get_current_ticker().toStdString(); - const auto coin_cfg = mm2_system.get_coin_info(ticker); - if (coin_cfg.segwit) - { - nlohmann::json address_format = nlohmann::json::object(); - address_format = {{"format", "segwit"}}; - if (!checked) - { - //! We go from segwit to legacy - if (coin_cfg.ticker != "BCH") - { - address_format = {{"format", "standard"}}; - } - else - { - address_format = {{"format", "bch"}}; - } - } - - - std::error_code ec; - address = mm2_system.address(ticker, ec); - t_convert_address_request req{.coin = ticker, .from = address, .to_address_format = address_format}; - nlohmann::json batch = nlohmann::json::array(); - nlohmann::json json_data = mm2::template_request("convertaddress"); - mm2::to_json(json_data, req); - batch.push_back(json_data); - json_data["userpass"] = "******"; - SPDLOG_INFO("convertaddress request: {}", json_data.dump()); - web::http::http_response resp = mm2_system.get_mm2_client().async_rpc_batch_standalone(batch).get(); - std::string body = TO_STD_STR(resp.extract_string(true).get()); - SPDLOG_DEBUG("resp convertaddress: {}", body); - if (resp.status_code() == static_cast(antara::app::http_code::ok)) - { - auto answers = nlohmann::json::parse(body); - auto convert_answer = mm2::rpc_process_answer_batch(answers[0], "convertaddress"); - if (convert_answer.result.has_value()) - { - return QString::fromStdString(convert_answer.result.value().address); - } - } - } - } - return QString::fromStdString(address); - } - - void - wallet_page::post_switch_address_mode(bool is_segwit) - { - SPDLOG_INFO("switching to : {}", is_segwit ? "segwit" : "legacy"); - auto& mm2_system = m_system_manager.get_system(); - if (mm2_system.is_mm2_running()) - { - //! Need disable + enable + refresh balance + refresh current coin info (address) + change segwit in cfg - const auto ticker = get_current_ticker().toStdString(); - nlohmann::json batch = nlohmann::json::array(); - nlohmann::json json_data = mm2::template_request("disable_coin"); - t_disable_coin_request req{.coin = ticker}; - mm2::to_json(json_data, req); - batch.push_back(json_data); - //! Disable is in the batch - - //! electrum - auto coin_info = mm2_system.get_coin_info(ticker); - t_electrum_request electrum_req{ - .coin_name = coin_info.ticker, .servers = coin_info.electrum_urls.value(), .coin_type = coin_info.coin_type, .with_tx_history = true}; - if (is_segwit) - { - electrum_req.address_format = nlohmann::json::object(); - electrum_req.address_format.value()["format"] = "segwit"; - } - nlohmann::json electrum_data = mm2::template_request("electrum"); - mm2::to_json(electrum_data, electrum_req); - batch.push_back(electrum_data); - electrum_data["userpass"] = "*******"; - SPDLOG_INFO("electrum_req: {}", electrum_data.dump(-1)); - - //! Answer functor - auto answer_functor = [this, ticker, is_segwit](web::http::http_response resp) - { - std::string body = TO_STD_STR(resp.extract_string(true).get()); - SPDLOG_DEBUG("resp disable/enable: {}", body); - if (resp.status_code() == static_cast(antara::app::http_code::ok)) - { - auto& mm2_system = m_system_manager.get_system(); - mm2_system.change_segwit_status(ticker, is_segwit); - mm2_system.fetch_infos_thread(true, false); - SPDLOG_INFO("Switching address mode success"); - } - }; - - //! Rpc processing - mm2_system.get_mm2_client().async_rpc_batch_standalone(batch).then(answer_functor).then(&handle_exception_pplx_task); - } - } } // namespace atomic_dex \ No newline at end of file diff --git a/src/core/atomicdex/pages/qt.wallet.page.hpp b/src/core/atomicdex/pages/qt.wallet.page.hpp index 0669e688d8..8e52e47568 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.hpp +++ b/src/core/atomicdex/pages/qt.wallet.page.hpp @@ -89,8 +89,6 @@ namespace atomic_dex const QString& amount); // Broadcast requires OS local user credentials verification. This is called by the Q_INVOKABLE broadcast() method after // entering credentials. Q_INVOKABLE void send(const QString& address, const QString& amount, bool max, bool with_fees, QVariantMap fees_data, const QString& memo); - Q_INVOKABLE QString switch_address_mode(bool checked); - Q_INVOKABLE void post_switch_address_mode(bool is_segwit); // QML API Properties Q_PROPERTY(transactions_model* transactions_mdl READ get_transactions_mdl NOTIFY transactionsMdlChanged) diff --git a/src/core/atomicdex/pages/widgets/dex/qt.orderbook.cpp b/src/core/atomicdex/pages/widgets/dex/qt.orderbook.cpp index 3f9eb34d2d..d8c68184ef 100644 --- a/src/core/atomicdex/pages/widgets/dex/qt.orderbook.cpp +++ b/src/core/atomicdex/pages/widgets/dex/qt.orderbook.cpp @@ -91,12 +91,12 @@ namespace atomic_dex else if (m_best_orders->rowCount() == 0) { // SPDLOG_INFO("[qt_orderbook_wrapper::refresh_orderbook] : reset_best_orders"); - m_best_orders->reset_orderbook(data); + m_best_orders->reset_orderbook(data, true); } else { // SPDLOG_INFO("[qt_orderbook_wrapper::refresh_orderbook] : refresh_best_orders"); - m_best_orders->refresh_orderbook(data); + m_best_orders->refresh_orderbook(data, true); } this->set_both_taker_vol(); } diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 2b9bc9df78..f98cd9ebc6 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -164,10 +164,6 @@ namespace SPDLOG_DEBUG("ticker: {} status active: {}", ticker, status); registry[ticker].active = status; } - else if (field_name == "is_segwit_on") - { - registry[ticker].is_segwit_on = status; - } } } @@ -774,12 +770,6 @@ namespace atomic_dex .is_testnet = coin_config.is_testnet.value_or(false), .with_tx_history = true }; - - if (coin_config.segwit && coin_config.is_segwit_on) - { - request.address_format = nlohmann::json::object(); - request.address_format.value()["format"] = "segwit"; - } if (coin_config.utxo_merge.value_or(false)) { mm2::utxo_merge_params merge_params{.merge_at = 250, .check_every = 300, .max_merge_at_once = 125}; @@ -2705,8 +2695,4 @@ namespace atomic_dex } } - void mm2_service::change_segwit_status(std::string ticker, bool status) - { - update_coin_status(this->m_current_wallet_name, {ticker}, status, m_coins_informations, m_coin_cfg_mutex, "is_segwit_on"); - } } // namespace atomic_dex diff --git a/src/core/atomicdex/services/mm2/mm2.service.hpp b/src/core/atomicdex/services/mm2/mm2.service.hpp index c6d5bb9c25..a10b20de19 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.hpp +++ b/src/core/atomicdex/services/mm2/mm2.service.hpp @@ -279,7 +279,6 @@ namespace atomic_dex //! Pagination void set_orders_and_swaps_pagination_infos(std::size_t current_page = 1, std::size_t limit = 50, t_filtering_infos infos = {}); - void change_segwit_status(std::string ticker, bool status); }; } // namespace atomic_dex From 72da7901afcaf89d0dccafecedbcdf7544b459ec Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 8 Jun 2023 18:07:15 +0800 Subject: [PATCH 140/251] append `-segwit` to segwit bestorder uuids --- .../api/mm2/orderbook.order.contents.cpp | 11 ++++++++-- .../atomicdex/models/qt.orderbook.model.cpp | 21 +++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/core/atomicdex/api/mm2/orderbook.order.contents.cpp b/src/core/atomicdex/api/mm2/orderbook.order.contents.cpp index 7c066603fd..0da85f01c7 100644 --- a/src/core/atomicdex/api/mm2/orderbook.order.contents.cpp +++ b/src/core/atomicdex/api/mm2/orderbook.order.contents.cpp @@ -32,6 +32,15 @@ namespace atomic_dex::mm2 { j.at("coin").get_to(contents.coin); + if (contents.coin.find("-segwit") != std::string::npos) + { + std::string uuid = j["uuid"]; + contents.uuid = uuid + "-segwit"; + } + else + { + j.at("uuid").get_to(contents.uuid); + } if (j.at("address").contains("address_data")) { j.at("address").at("address_data").get_to(contents.address); @@ -40,9 +49,7 @@ namespace atomic_dex::mm2 { contents.address = "Shielded"; } - j.at("pubkey").get_to(contents.pubkey); - j.at("uuid").get_to(contents.uuid); j.at("is_mine").get_to(contents.is_mine); j.at("price").at("decimal").get_to(contents.price); diff --git a/src/core/atomicdex/models/qt.orderbook.model.cpp b/src/core/atomicdex/models/qt.orderbook.model.cpp index 5b6822c570..3abd2b6151 100644 --- a/src/core/atomicdex/models/qt.orderbook.model.cpp +++ b/src/core/atomicdex/models/qt.orderbook.model.cpp @@ -375,14 +375,6 @@ namespace atomic_dex m_orders_id_registry.clear(); for (auto&& order: m_model_data) { - - // Maybe adding a suffix for segwit entries could avoid this? - // Working so far, but needs more testing to see if there are ripple effects due to the uuid suffix. - // Early tests confirm order selection and placing do not appear to be negatively affected. - if (order.coin.find("-segwit") != std::string::npos) - { - order.uuid = order.uuid + "-segwit"; - } if (this->m_orders_id_registry.find(order.uuid) == m_orders_id_registry.end()) { this->m_orders_id_registry.emplace(order.uuid); @@ -410,7 +402,6 @@ namespace atomic_dex SPDLOG_WARN("Order with uuid: {} already present...skipping.", order.uuid); return; } - assert(m_model_data.size() == m_orders_id_registry.size()); beginInsertRows(QModelIndex(), m_model_data.size(), m_model_data.size()); m_model_data.push_back(order); @@ -532,15 +523,15 @@ namespace atomic_dex { auto refresh_functor = [this](const std::vector& contents) { - for (auto&& current_order: contents) + for (auto&& order: contents) { - if (this->m_orders_id_registry.find(current_order.uuid) != this->m_orders_id_registry.end()) + if (this->m_orders_id_registry.find(order.uuid) != this->m_orders_id_registry.end()) { - this->update_order(current_order); + this->update_order(order); } else { - this->initialize_order(current_order); + this->initialize_order(order); } } @@ -549,7 +540,8 @@ namespace atomic_dex for (auto&& id: this->m_orders_id_registry) { bool res = std::none_of(begin(contents), end(contents), [id](auto&& contents) { return contents.uuid == id; }); - //! Need to remove the row + // Need to remove the row + // segwits are deleted here when they shouldnt be if (res) { auto res_list = this->match(index(0, 0), UUIDRole, QString::fromStdString(id)); @@ -627,6 +619,7 @@ namespace atomic_dex return m_current_orderbook_kind; } + // This is used when betterOrderDetected QVariantMap orderbook_model::get_order_from_uuid([[maybe_unused]] QString uuid) { From 206323e100b63cfe0aaa77a0496d96016ca6d176 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 9 Jun 2023 04:23:42 +0800 Subject: [PATCH 141/251] fix contract address variables --- src/core/atomicdex/api/mm2/rpc.electrum.hpp | 2 +- src/core/atomicdex/api/mm2/rpc.enable.cpp | 6 ++- src/core/atomicdex/api/mm2/rpc.enable.hpp | 25 +++++------ src/core/atomicdex/config/coins.cfg.cpp | 42 +++++++++---------- .../atomicdex/services/mm2/mm2.service.cpp | 18 +++++--- 5 files changed, 50 insertions(+), 43 deletions(-) diff --git a/src/core/atomicdex/api/mm2/rpc.electrum.hpp b/src/core/atomicdex/api/mm2/rpc.electrum.hpp index a41dd47b06..29970186e2 100644 --- a/src/core/atomicdex/api/mm2/rpc.electrum.hpp +++ b/src/core/atomicdex/api/mm2/rpc.electrum.hpp @@ -33,7 +33,7 @@ namespace atomic_dex::mm2 bool is_testnet{false}; bool with_tx_history{true}; const std::string swap_contract_address; - const std::string fallback_swap_contract_address; + const std::optional fallback_swap_contract_address{std::nullopt}; std::optional address_format; std::optional merge_params; std::optional> bchd_urls; diff --git a/src/core/atomicdex/api/mm2/rpc.enable.cpp b/src/core/atomicdex/api/mm2/rpc.enable.cpp index 6e13301f95..b0a4fa56a5 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.cpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.cpp @@ -28,7 +28,6 @@ namespace atomic_dex::mm2 to_json(nlohmann::json& j, const enable_request& cfg) { j["coin"] = cfg.coin_name; - switch (cfg.coin_type) { case CoinType::ERC20: @@ -43,7 +42,10 @@ namespace atomic_dex::mm2 default: j["urls"] = cfg.urls; j["swap_contract_address"] = cfg.swap_contract_address; - j["fallback_swap_contract"] = cfg.fallback_swap_contract_address; + if (cfg.fallback_swap_contract_address.has_value()) + { + j["fallback_swap_contract"] = cfg.fallback_swap_contract_address.value(); + } break; } diff --git a/src/core/atomicdex/api/mm2/rpc.enable.hpp b/src/core/atomicdex/api/mm2/rpc.enable.hpp index fc7d127607..62c6ebe02f 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.hpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.hpp @@ -17,6 +17,7 @@ #pragma once //! Deps +#include #include //! Project Headers @@ -27,18 +28,18 @@ namespace atomic_dex::mm2 //! Only for erc 20 struct enable_request { - std::string coin_name; - std::vector urls; - CoinType coin_type; - bool is_testnet{false}; - const std::string swap_contract_address; - const std::string fallback_swap_contract_address; - const std::size_t matic_gas_station_decimals{9}; - std::string gas_station_url{"https://ethgasstation.info/json/ethgasAPI.json"}; - std::string matic_gas_station_url{"https://gasstation-mainnet.matic.network/"}; - std::string testnet_matic_gas_station_url{"https://gasstation-mumbai.matic.today/"}; - std::string type; ///< QRC-20 ? - bool with_tx_history{true}; + std::string coin_name; + std::vector urls; + CoinType coin_type; + bool is_testnet{false}; + const std::string swap_contract_address; + std::optional fallback_swap_contract_address{std::nullopt}; + const std::size_t matic_gas_station_decimals{9}; + std::string gas_station_url{"https://ethgasstation.info/json/ethgasAPI.json"}; + std::string matic_gas_station_url{"https://gasstation-mainnet.matic.network/"}; + std::string testnet_matic_gas_station_url{"https://gasstation-mumbai.matic.today/"}; + std::string type; ///< QRC-20 ? + bool with_tx_history{true}; }; void to_json(nlohmann::json& j, const enable_request& cfg); diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index 74aa73234d..4a92bdd874 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -23,7 +23,8 @@ namespace { - CoinType get_coin_type_from_str(const std::string& coin_type) + CoinType + get_coin_type_from_str(const std::string& coin_type) { if (coin_type == "QRC-20") { @@ -117,15 +118,17 @@ namespace return CoinType::Invalid; // throw std::invalid_argument{"Undefined given coin type."}; } -} +} // namespace namespace atomic_dex { - bool is_wallet_only(std::string ticker) + bool + is_wallet_only(std::string ticker) { return std::any_of(g_wallet_only_coins.begin(), g_wallet_only_coins.end(), [ticker](std::string x) { return ticker == x; }); } - bool is_default_coin(std::string ticker) + bool + is_default_coin(std::string ticker) { return std::any_of(g_default_coins.begin(), g_default_coins.end(), [ticker](std::string x) { return ticker == x; }); } @@ -144,23 +147,20 @@ namespace atomic_dex cfg.minimal_claim_amount = cfg.is_claimable ? j.at("minimal_claim_amount").get() : "0"; cfg.coinpaprika_id = j.contains("coinpaprika_id") ? j.at("coinpaprika_id").get() : "test-coin"; cfg.coingecko_id = j.contains("coingecko_id") ? j.at("coingecko_id").get() : "test-coin"; - cfg.livecoinwatch_id = j.contains("livecoinwatch_id") ? j.at("livecoinwatch_id").get() : "test-coin"; + cfg.livecoinwatch_id = j.contains("livecoinwatch_id") ? j.at("livecoinwatch_id").get() : "test-coin"; cfg.is_claimable = j.count("is_claimable") > 0; cfg.is_custom_coin = j.contains("is_custom_coin") ? j.at("is_custom_coin").get() : false; cfg.is_testnet = j.contains("is_testnet") ? j.at("is_testnet").get() : false; - cfg.wallet_only = is_wallet_only(cfg.ticker) ? is_wallet_only(cfg.ticker) : j.contains("wallet_only") ? j.at("wallet_only").get() : false; - cfg.default_coin = is_default_coin(cfg.ticker); + cfg.wallet_only = is_wallet_only(cfg.ticker) ? is_wallet_only(cfg.ticker) : j.contains("wallet_only") ? j.at("wallet_only").get() : false; + cfg.default_coin = is_default_coin(cfg.ticker); if (j.contains("other_types")) { std::vector other_types; - + j.at("other_types").get_to(other_types); cfg.other_types = std::set(); - for (const auto& other_type : other_types) - { - cfg.other_types->emplace(get_coin_type_from_str(other_type)); - } + for (const auto& other_type: other_types) { cfg.other_types->emplace(get_coin_type_from_str(other_type)); } } if (j.contains("utxo_merge")) { @@ -186,13 +186,10 @@ namespace atomic_dex if (j.contains("nodes")) { // Todo: this is bad, we are using 2 times the required memory. Something can be improved here. - cfg.urls = j.at("nodes").get>(); + cfg.urls = j.at("nodes").get>(); cfg.eth_family_urls = std::vector(); cfg.eth_family_urls.value().reserve(cfg.urls.value().size()); - for (const auto& url : cfg.urls.value()) - { - cfg.eth_family_urls->push_back(url.url); - } + for (const auto& url: cfg.urls.value()) { cfg.eth_family_urls->push_back(url.url); } } if (j.contains("allow_slp_unsafe_conf")) { @@ -225,11 +222,11 @@ namespace atomic_dex // Swap contract addresses if (j.contains("swap_contract_address")) { - cfg.swap_contract_address = j.at("swap_contract_address").get(); + cfg.swap_contract_address = j["swap_contract_address"]; } if (j.contains("fallback_swap_contract_address")) { - cfg.fallback_swap_contract_address = j.at("fallback_swap_contract_address").get(); + cfg.fallback_swap_contract_address = j["fallback_swap_contract_address"]; } // Gas station urls if (j.contains("gas_station_url")) @@ -361,13 +358,12 @@ namespace atomic_dex } } - void print_coins(std::vector coins) + void + print_coins(std::vector coins) { std::stringstream ss; ss << "["; - for (auto&& coin: coins) { - ss << coin.ticker << " "; - } + for (auto&& coin: coins) { ss << coin.ticker << " "; } ss << "]"; SPDLOG_INFO("{}", ss.str()); } diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 3faf992992..ebd0577901 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -626,15 +626,23 @@ namespace atomic_dex { t_enable_request request { - .coin_name = coin_config.ticker, - .urls = coin_config.eth_family_urls.value_or(std::vector{}), - .coin_type = coin_config.coin_type, - .is_testnet = coin_config.is_testnet.value_or(false), - .with_tx_history = false + .coin_name = coin_config.ticker, + .urls = coin_config.eth_family_urls.value_or(std::vector{}), + .coin_type = coin_config.coin_type, + .is_testnet = coin_config.is_testnet.value_or(false), + .swap_contract_address = coin_config.swap_contract_address.value_or(""), + .with_tx_history = false }; + if (coin_config.fallback_swap_contract_address.value_or("") != "") + { + request.fallback_swap_contract_address = coin_config.fallback_swap_contract_address; + } + + nlohmann::json j = mm2::template_request("enable"); mm2::to_json(j, request); + SPDLOG_INFO("enable coin: {} {}", request.coin_name, j.dump()); batch_array.push_back(j); } m_mm2_client.async_rpc_batch_standalone(batch_array) From 7bee3082fcccd4ff37c777a24cc89b7da4190005 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 9 Jun 2023 07:01:43 +0800 Subject: [PATCH 142/251] Add coin activation modal trigger button to sidebar --- atomic_defi_design/Dex/Screens/Dashboard.qml | 1 + atomic_defi_design/Dex/Sidebar/Bottom.qml | 16 +++++++++++++--- atomic_defi_design/Dex/Sidebar/Main.qml | 2 ++ atomic_defi_design/assets/images/bank-plus.svg | 1 + 4 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 atomic_defi_design/assets/images/bank-plus.svg diff --git a/atomic_defi_design/Dex/Screens/Dashboard.qml b/atomic_defi_design/Dex/Screens/Dashboard.qml index a93bcf813c..a59d814663 100644 --- a/atomic_defi_design/Dex/Screens/Dashboard.qml +++ b/atomic_defi_design/Dex/Screens/Dashboard.qml @@ -279,6 +279,7 @@ Item enabled: loader.status === Loader.Ready onLineSelected: currentPage = lineType; + onAddCryptoClicked: enable_coin_modal.open() onSettingsClicked: setting_modal.open() onSupportClicked: support_modal.open() } diff --git a/atomic_defi_design/Dex/Sidebar/Bottom.qml b/atomic_defi_design/Dex/Sidebar/Bottom.qml index 775caf2b55..70e911b958 100644 --- a/atomic_defi_design/Dex/Sidebar/Bottom.qml +++ b/atomic_defi_design/Dex/Sidebar/Bottom.qml @@ -11,6 +11,7 @@ MouseArea { id: root + signal addCryptoClicked() signal supportClicked() signal settingsClicked() @@ -27,6 +28,7 @@ MouseArea if (isExpanded) waitForSidebarExpansionAnimation.start(); else { + addCryptoLine.label.opacity = 0; settingsLine.label.opacity = 0; supportLine.label.opacity = 0; privacyLine.label.opacity = 0; @@ -37,7 +39,7 @@ MouseArea NumberAnimation { id: waitForSidebarExpansionAnimation - targets: [settingsLine.label, supportLine.label, privacyLine.label] + targets: [addCryptoLine.label, settingsLine.label, supportLine.label, privacyLine.label] properties: "opacity" duration: 200 from: 0 @@ -48,7 +50,7 @@ MouseArea NumberAnimation { id: labelsOpacityAnimation - targets: [settingsLine.label, supportLine.label, privacyLine.label] + targets: [addCryptoLine.label, settingsLine.label, supportLine.label, privacyLine.label] properties: "opacity" duration: 350 from: 0.0 @@ -59,6 +61,15 @@ MouseArea { anchors.fill: parent FigurativeLine + { + id: addCryptoLine + + Layout.fillWidth: true + label.text: isExpanded ? qsTr("Add Crypto") : "" + icon.source: General.image_path + "bank-plus.svg" + onClicked: addCryptoClicked() + } + FigurativeLine { id: settingsLine @@ -67,7 +78,6 @@ MouseArea icon.source: General.image_path + "menu-settings-white.svg" onClicked: settingsClicked() } - FigurativeLine { id: supportLine diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index 3a09d8fda5..212e949395 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -26,6 +26,7 @@ Item signal lineSelected(var lineType) signal settingsClicked() signal supportClicked() + signal addCryptoClicked() signal privacySwitched(var checked) signal expanded(var isExpanded) signal expandStarted(var isExpanding) @@ -121,6 +122,7 @@ Item anchors.bottom: parent.bottom anchors.bottomMargin: 62 + onAddCryptoClicked: root.addCryptoClicked() onSettingsClicked: root.settingsClicked() onSupportClicked: root.supportClicked() } diff --git a/atomic_defi_design/assets/images/bank-plus.svg b/atomic_defi_design/assets/images/bank-plus.svg new file mode 100644 index 0000000000..a7f8e8dbbf --- /dev/null +++ b/atomic_defi_design/assets/images/bank-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file From ba23116035ce55975d5470d68f546dcdc6a7fa0a Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 9 Jun 2023 08:37:18 +0800 Subject: [PATCH 143/251] tweak tooltip --- .../Dex/Exchange/Trade/SimpleView/Trade.qml | 7 +- .../assets/languages/atomic_defi_de.ts | 289 ++++++++++-------- .../assets/languages/atomic_defi_en.ts | 287 +++++++++-------- .../assets/languages/atomic_defi_es.ts | 289 ++++++++++-------- .../assets/languages/atomic_defi_fr.ts | 289 ++++++++++-------- .../assets/languages/atomic_defi_ru.ts | 289 ++++++++++-------- .../assets/languages/atomic_defi_tr.ts | 289 ++++++++++-------- .../atomicdex/models/qt.portfolio.model.cpp | 11 + .../atomicdex/models/qt.portfolio.model.hpp | 21 +- 9 files changed, 1017 insertions(+), 754 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml index ed097bdd2a..e8f5950ecd 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml @@ -269,6 +269,7 @@ ClipRRect // Trade Card opacity: .6 } + // Tooltip MouseArea { anchors.left: _fromBalanceIcon.left @@ -279,7 +280,11 @@ ClipRRect // Trade Card DefaultTooltip { visible: parent.containsMouse - text: qsTr("Tradable: ") + parent.parent.text + text: + { + let balance = Constants.API.app.portfolio_pg.portfolio_mdl.coin_balance(selectedTicker); + return qsTr("Balance: ") + Constants.API.app.portfolio_pg.portfolio_mdl.coin_balance(selectedTicker) + ' (' + parent.parent.text + ' tradable)' + } } } diff --git a/atomic_defi_design/assets/languages/atomic_defi_de.ts b/atomic_defi_design/assets/languages/atomic_defi_de.ts index 9c2a9587b7..dd2bcf09d2 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_de.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_de.ts @@ -1852,140 +1852,140 @@ They will be removed from the orderbook until you log in again. Main - + Segwit Segwit - + Confirmation Bestätigung - + Do you want to send your %1 funds to %2 wallet first? Möchten Sie Ihr %1-Guthaben zuerst an die %2-Brieftasche senden? - + Success Erfolg - + Your transaction is send, may take some time to arrive Ihre Transaktion wird gesendet, es kann einige Zeit dauern, bis sie ankommt - + Price Preis - + Change 24hr 24h Veränderung - + Contract Address Vertragsadresse - + Send Senden - + Enable %1 ? %1 aktivieren? - + Yes Ja - + No Nein - + Receive Empfangen - + Swap Tausch - + Portfolio Portfolio - + is wallet only nur Brieftasche (kein DEX möglich) - + Rewards Belohnungen - + Faucet Faucet - - - + + + Public Key Öffentlicher Schlüssel - + Copied to Clipboard In die Zwischenablage kopiert - + Loading market data Laden von Marktdaten - + There is no chart data for this ticker yet Für diesen Ticker liegen noch keine Chartdaten vor - + Fetching transactions... Transaktionen werden abgerufen... - + Please wait, %1 is %2 - + % activated... - + No transactions available Keine Transaktionen verfügbar - + Click to view your address on %1 (%2) block explorer Klicken Sie hier, um Ihre Adresse im %1 (%2) Block-Explorer anzuzeigen @@ -2442,6 +2442,11 @@ They will be removed from the orderbook until you log in again. Your wallet balance changed Ihr Guthaben hat sich geändert + + + Close + Schließen + %1 Enable status @@ -3412,8 +3417,8 @@ Bitte wählen Sie eine neue Order aus. SettingModal - - + + Cancel Abbrechen @@ -3443,98 +3448,103 @@ Bitte wählen Sie eine neue Order aus. Sicherheit - + Enable Desktop Notifications Desktop-Benachrichtigungen aktivieren - + + Hide Poison Transactions in History + + + + Maximum number of enabled coins Maximale Anzahl aktivierter Coins - + Logs Protokolle - + Open Folder Ordner öffnen - + Reset Zurücksetzen - + Current Font Aktuelle Schriftart - + Current font changed to %1. Aktuelle Schriftart in %1 geändert. - + Theme Thema - + Changing theme to %1 Design zu %1 geändert - + Disable 2FA? 2FA deaktivieren? - + Enter your wallet password to confirm Geben Sie zur Bestätigung das Kennwort ihrer Brieftasche ein - + Type password Kennwort eingeben - + 2FA status 2FA Status - + 2FA disabled successfully 2FA erfolgreich deaktiviert - - + + Ok Ok - + Wrong password! Falsches Kennwort! - + Wallet password is incorrect Kennwort der Brieftasche ist falsch - + Application Version Anwendungsversion - + copied to clipboard In die Zwischenablage kopiert @@ -3544,95 +3554,95 @@ Bitte wählen Sie eine neue Order aus. Über & Version - - + + Reset wallet configuration Konfiguration der Brieftasche zurücksetzen - + This will restart your wallet with default settings Dadurch wird Ihre Brieftasche mit den Standardeinstellungen neu gestartet - - + + Confirm Bestätigen - + Ask system's password before sending coins ? (2FA) Vor dem Senden von Coins nach dem Kennwort des Systems fragen? (2FA) - + View seed and private keys Seed- und privaten Schlüsseln anzeigen - - + + Show Zeigen - + Setup Camouflage Password Tarnkennwort einrichten - + Open Öffnen - + Disclaimer and ToS Haftungsausschluss und Nutzungsbedingungen - + Application version Anwendungsversion - + MM2 version MM2 Version - + MM2 Version MM2 Version - + MM2 Version copied to clipboard. MM2 Version in die Zwischenablage kopiert. - + Qt version Qt Version - + Qt Version Qt Version - + Qt Version copied to clipboard. Qt Version in die Zwischenablage kopiert. - + Search Update Update suchen - + Logout Abmelden @@ -3928,62 +3938,78 @@ Network fees can vary greatly depending on your selected trading pair. Die Netzwerkgebühren können je nach ausgewähltem Handelspaar stark variieren. - + + I see a transaction in my wallet that was marked as 'poison'. What does this mean? + + + + + Address poisoning is a relatively new tye of phishing attack, where a malicious actor aims to trick you into sending funds to an address that you did not intend to send funds to. + +This is often done by sending a zero value transaction to your wallet from an address which looks very similar to your actual address, with the exact same letters at the start and end. This transaction will then appear in your transaction history, with the scammer hoping you will mistake the fake address for your own and send funds to it. + +To protect you from this, %1 will mark any transaction that it detects as potentially being a poison transaction with a "poison" label. You should always be careful to confirm any address you send funds to is correct. + +There is a toggle in settings where you can turn on/off the display of these transactions. + + + + Do you provide user support? Bieten Sie Benutzerunterstützung an? - + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! Ja! %1 bietet Support über den <a href="%2">%1 Discord server</a>. Das Team und die Community helfen Euch gerne weiter! - + Who is behind %1? Wer steckt hinter %1? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. %1 wird vom Komodo-Team entwickelt. Komodo ist eines der etabliertesten Blockchain-Projekte, das an innovativen Lösungen wie Atomic Swaps, Delayed Proof of Work und einer interoperablen Multi-Chain-Architektur arbeitet. - + Is it possible to develop my own white-label exchange on %1? Ist es möglich, meine eigene White-Label-Börse auf %1 zu entwickeln? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! Auf jeden Fall! Sie können unsere Entwicklerdokumentation für weitere Details lesen oder uns mit Ihren Partnerschaftsanfragen kontaktieren. Haben Sie eine spezielle technische Frage? Die %1-Entwicklercommunity ist immer bereit zu helfen! - + Which devices can I use %1 on? Auf welchen Geräten kann ich %1 verwenden? - + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. %1 ist auf Mobilgeräte für <a href="%2">Android und iPhone sowie auf dem Desktop für Windows, Mac und Linux</a> Betriebssystemen erhältlich. - + Compliance Info Compliance-Informationen - + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. Aufgrund regulatorischer und rechtlicher Umstände sind die Bürger bestimmter Gerichtsbarkeiten, einschließlich, aber nicht beschränkt auf, der Vereinigten Staaten von Amerika, Kanada, Hongkong, Israel, Singapur, Sudan, Österreich, Iran und alle anderen Staaten, Länder oder anderen Gerichtsbarkeiten, die mit einem Embargo von den Vereinigten Staaten von Amerika oder der Europäischen Union belegt sind, dürfen diese Anwendung nicht verwenden. - + Changelog Änderungsprotokoll - + Open Logs Folder Protokollordner öffnen @@ -4094,32 +4120,32 @@ Die Netzwerkgebühren können je nach ausgewähltem Handelspaar stark variieren. Von - + Entered amount must be higher than 0. - + Select an order. - + MAX MAX - + To Nach - + Pick an order Order auswählen - + Price Preis @@ -4139,52 +4165,52 @@ Die Netzwerkgebühren können je nach ausgewähltem Handelspaar stark variieren. %1 - - Tradable: - Handelbar: + + Balance: + - + Pick a coin Wählen Sie einen Coin - + SWAP NOW JETZT TAUSCHEN - + Failed to place the order Die Order konnte nicht platziert werden - + Placed the order Order platziert - + No buy orders found for %1. Keine Kauforder für %1 gefunden. - + You can check later or try to sell a different coin. Sie können später nachsehen oder versuchen, einen anderen Coin zu verkaufen. - + Calculating fee estimate... Geschätzten Gebühren werden berechnet... - + Total %1 fees: %1 Gesamtgebühren: - + %2 (%3) %2 (%3) @@ -4243,88 +4269,98 @@ Die Netzwerkgebühren können je nach ausgewähltem Handelspaar stark variieren. TransactionDetailsModal - + Transaction Details Transaktionsdetails - + Amount Menge - + Fees Gebühren - + Date Datum - + Unconfirmed Unbestätigt - + Transaction Hash Transaktions-Hash - + Confirmations Bestätigungen - + Block Height Blockhöhe - + From Von - + + This transaction has been identified as a potential address poisoning attack. + + + + + Please see the Support FAQ for more information. + + + + %1 txid TICKER - + copied to clipboard. In die Zwischenablage kopiert - + From address Von Adresse - + To Nach - + To address Nach Adresse - + Notes Anmerkungen - + Close Schließen - + View on Explorer Ansicht im Explorer @@ -4332,22 +4368,27 @@ Die Netzwerkgebühren können je nach ausgewähltem Handelspaar stark variieren. Transactions - + Sent Gesendet - + Received Erhalten - + + Poison + + + + fees Gebühren - + Unconfirmed Unbestätigt @@ -4481,7 +4522,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. diff --git a/atomic_defi_design/assets/languages/atomic_defi_en.ts b/atomic_defi_design/assets/languages/atomic_defi_en.ts index 2db436f1bd..de05e9a886 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_en.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_en.ts @@ -1851,140 +1851,140 @@ They will be removed from the orderbook until you log in again. Main - + Segwit - + Confirmation - + Do you want to send your %1 funds to %2 wallet first? - + Success - + Your transaction is send, may take some time to arrive - + Price - + Change 24hr - + Contract Address - + Send - + Enable %1 ? - + Yes Yes - + No - + Receive - + Swap - + Portfolio - + is wallet only - + Rewards - + Faucet - - - + + + Public Key - + Copied to Clipboard - + Loading market data - + There is no chart data for this ticker yet - + Fetching transactions... - + Please wait, %1 is %2 - + % activated... - + No transactions available - + Click to view your address on %1 (%2) block explorer @@ -2441,6 +2441,11 @@ They will be removed from the orderbook until you log in again. Your wallet balance changed + + + Close + + %1 Enable status @@ -3410,8 +3415,8 @@ Please select a new order. SettingModal - - + + Cancel Cancel @@ -3441,57 +3446,57 @@ Please select a new order. - + Enable Desktop Notifications - + Maximum number of enabled coins - + Logs - + Open Folder - + Reset - + Current Font - + Current font changed to %1. - + Theme - + Changing theme to %1 - + Application Version - + copied to clipboard @@ -3501,136 +3506,141 @@ Please select a new order. - - + + Hide Poison Transactions in History + + + + + Reset wallet configuration - + This will restart your wallet with default settings - - + + Confirm - + Ask system's password before sending coins ? (2FA) - + Disable 2FA? - + Enter your wallet password to confirm - + Type password - + 2FA status - + 2FA disabled successfully - - + + Ok - + Wrong password! - + Wallet password is incorrect - + View seed and private keys - - + + Show - + Setup Camouflage Password - + Open - + Disclaimer and ToS - + Application version - + MM2 version - + MM2 Version - + MM2 Version copied to clipboard. - + Qt version - + Qt Version - + Qt Version copied to clipboard. - + Search Update - + Logout @@ -3910,62 +3920,78 @@ Network fees can vary greatly depending on your selected trading pair. - + + I see a transaction in my wallet that was marked as 'poison'. What does this mean? + + + + + Address poisoning is a relatively new tye of phishing attack, where a malicious actor aims to trick you into sending funds to an address that you did not intend to send funds to. + +This is often done by sending a zero value transaction to your wallet from an address which looks very similar to your actual address, with the exact same letters at the start and end. This transaction will then appear in your transaction history, with the scammer hoping you will mistake the fake address for your own and send funds to it. + +To protect you from this, %1 will mark any transaction that it detects as potentially being a poison transaction with a "poison" label. You should always be careful to confirm any address you send funds to is correct. + +There is a toggle in settings where you can turn on/off the display of these transactions. + + + + Do you provide user support? - + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! - + Who is behind %1? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. - + Is it possible to develop my own white-label exchange on %1? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! - + Which devices can I use %1 on? - + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. - + Compliance Info - + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. - + Changelog - + Open Logs Folder @@ -4076,32 +4102,32 @@ Network fees can vary greatly depending on your selected trading pair. - + Entered amount must be higher than 0. - + Select an order. - + MAX - + To - + Pick an order - + Price @@ -4121,52 +4147,52 @@ Network fees can vary greatly depending on your selected trading pair. - - Tradable: + + Balance: - + Pick a coin - + SWAP NOW - + Failed to place the order - + Placed the order - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + Calculating fee estimate... - + Total %1 fees: - + %2 (%3) @@ -4225,88 +4251,98 @@ Network fees can vary greatly depending on your selected trading pair. TransactionDetailsModal - + Transaction Details - + + This transaction has been identified as a potential address poisoning attack. + + + + + Please see the Support FAQ for more information. + + + + %1 txid TICKER - + copied to clipboard. - + Amount - + Fees - + From address - + To address - + Date - + Unconfirmed - + Transaction Hash - + Confirmations - + Block Height - + From - + To - + Notes - + Close - + View on Explorer @@ -4314,22 +4350,27 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Sent - + Received - + + Poison + + + + fees - + Unconfirmed @@ -4463,7 +4504,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. diff --git a/atomic_defi_design/assets/languages/atomic_defi_es.ts b/atomic_defi_design/assets/languages/atomic_defi_es.ts index 45a6fb7d48..a366eb5f36 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_es.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_es.ts @@ -1854,140 +1854,140 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión. Main - + Segwit Segwit - + Confirmation Confirmación - + Do you want to send your %1 funds to %2 wallet first? ¿Desea enviar sus fondos de %1 a la billetera %2 primero? - + Success Éxito - + Your transaction is send, may take some time to arrive Su transacción se envió, puede demorar algún tiempo en llegar - + Price Precio - + Change 24hr Cambio - + Contract Address Dirección del Contrato - + Send Enviar - + Enable %1 ? ¿Habilitar %1? - + Yes - + No No - + Receive Recibir - + Swap Intercambiar - + Portfolio Cartera - + is wallet only es solo billetera - + Rewards Recompensas - + Faucet Grifo - - - + + + Public Key Clave Pública - + Copied to Clipboard Copiada en el Portapapeles - + Loading market data Cargando datos de mercado - + There is no chart data for this ticker yet No hay datos de gráficos para este ticker aún - + Fetching transactions... Obteniendo transacciones... - + Please wait, %1 is %2 Por favor espera %1 es %2 - + % activated... % activado... - + No transactions available No hay transacciones disponibles - + Click to view your address on %1 (%2) block explorer Haga clic para ver su dirección en %1 (%2) explorador de bloques @@ -2444,6 +2444,11 @@ Se eliminarán del libro de pedidos hasta que vuelva a iniciar sesión.Your wallet balance changed El saldo de tu billetera cambió + + + Close + Cerrar + %1 Enable status @@ -3414,8 +3419,8 @@ Seleccione un nuevo pedido. SettingModal - - + + Cancel Cancelar @@ -3445,57 +3450,57 @@ Seleccione un nuevo pedido. Seguridad - + Enable Desktop Notifications Habilitar notificaciones de escritorio - + Maximum number of enabled coins Número máximo de monedas habilitadas - + Logs Registros - + Open Folder Carpeta Abierta - + Reset Restablecer - + Current Font Fuente Actual - + Current font changed to %1. La fuente actual cambió a %1. - + Theme Tema - + Changing theme to %1 Cambiando el tema a %1 - + Application Version La versión de la aplicación - + copied to clipboard copiado al portapapeles @@ -3505,136 +3510,141 @@ Seleccione un nuevo pedido. Acerca de & Versión - - + + Hide Poison Transactions in History + + + + + Reset wallet configuration Restablecer configuración de billetera - + This will restart your wallet with default settings Esto reiniciará su billetera con la configuración predeterminada - - + + Confirm Confirmar - + Ask system's password before sending coins ? (2FA) ¿Preguntar la contraseña del sistema antes de enviar monedas? (2FA) - + Disable 2FA? ¿Deshabilitar 2FA? - + Enter your wallet password to confirm Ingrese la contraseña de su billetera para confirmar - + Type password Escriba la contraseña - + 2FA status Estado 2FA - + 2FA disabled successfully 2FA deshabilitado correctamente - - + + Ok Ok - + Wrong password! ¡Contraseña incorrecta! - + Wallet password is incorrect Contraseña de la billetera es incorrecta - + View seed and private keys Ver semilla y claves privadas - - + + Show Mostrar - + Setup Camouflage Password Configuración de Contraseña Camuflaje - + Open Abrir - + Disclaimer and ToS Descargo de Responsabilidad y Terminos de Servicio - + Application version Versión de Aplicación - + MM2 version Versión MM2 - + MM2 Version Versión MM2 - + MM2 Version copied to clipboard. Versión MM2 copiada al portapapeles. - + Qt version Versión Qt - + Qt Version Versión Qt - + Qt Version copied to clipboard. Versión de Qt copiada al portapapeles. - + Search Update Buscar Actualizacion - + Logout Cerrar sesión @@ -3930,62 +3940,78 @@ Network fees can vary greatly depending on your selected trading pair. Las tarifas de la red pueden variar mucho según el par comercial seleccionado. - + + I see a transaction in my wallet that was marked as 'poison'. What does this mean? + + + + + Address poisoning is a relatively new tye of phishing attack, where a malicious actor aims to trick you into sending funds to an address that you did not intend to send funds to. + +This is often done by sending a zero value transaction to your wallet from an address which looks very similar to your actual address, with the exact same letters at the start and end. This transaction will then appear in your transaction history, with the scammer hoping you will mistake the fake address for your own and send funds to it. + +To protect you from this, %1 will mark any transaction that it detects as potentially being a poison transaction with a "poison" label. You should always be careful to confirm any address you send funds to is correct. + +There is a toggle in settings where you can turn on/off the display of these transactions. + + + + Do you provide user support? ¿Ofrecen soporte al usuario? - + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! ¡Sí! %1 ofrece soporte a través del <a href="%2">%1 servidor Discord</a>. ¡El equipo y la comunidad siempre están dispuestos a ayudar! - + Who is behind %1? ¿Quién está detrás de %1? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. %1 está desarrollado por el equipo de Komodo. Komodo es uno de los proyectos de cadena de bloques más establecidos que trabaja en soluciones innovadoras como intercambios atómicos, prueba de trabajo retrasada y una arquitectura multicadena interoperable. - + Is it possible to develop my own white-label exchange on %1? ¿Es posible desarrollar mi propio intercambio de marca blanca en %1? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! ¡Absolutamente! Puede leer nuestra documentación para desarrolladores para obtener más detalles o ponerse en contacto con nosotros con sus consultas de asociación. ¿Tiene una pregunta técnica específica? ¡La comunidad de desarrolladores de %1 siempre está lista para ayudar! - + Which devices can I use %1 on? ¿En qué dispositivos puedo usar %1? - + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. %1 está disponible para dispositivos móviles en <a href="%2">Android y iPhone, y para escritorio en Windows, Mac y Linux</a> sistemas operativos. - + Compliance Info Información de cumplimiento - + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. Debido a circunstancias reglamentarias y legales, los ciudadanos de ciertas jurisdicciones, incluidos, entre otros, los Estados Unidos de América, Canadá, Hong Kong, Israel, Singapur, Sudán, Austria, Irán y cualquier otro estado, país u otra jurisdicción que está embargado por los Estados Unidos de América o la Unión Europea no se les permite utilizar esta aplicación. - + Changelog Cambios - + Open Logs Folder Abrir Carpeta de Registros @@ -4096,32 +4122,32 @@ Las tarifas de la red pueden variar mucho según el par comercial seleccionado.< Desde - + Entered amount must be higher than 0. - + Select an order. - + MAX MAX - + To A - + Pick an order Elegir una orden - + Price Precio @@ -4141,52 +4167,52 @@ Las tarifas de la red pueden variar mucho según el par comercial seleccionado.< %1 - - Tradable: - Negociable: + + Balance: + - + Pick a coin Elija una moneda - + SWAP NOW CAMBIE AHORA - + Failed to place the order Error al realizar el pedido - + Placed the order Realizó el pedido El - + No buy orders found for %1. No se encontraron órdenes de compra para %1. - + You can check later or try to sell a different coin. Puede verificar más tarde o intentar vender una moneda diferente. - + Calculating fee estimate... Calculando tarifa estimada... - + Total %1 fees: Total de %1 tarifas: - + %2 (%3) %2 (%3) @@ -4245,88 +4271,98 @@ Las tarifas de la red pueden variar mucho según el par comercial seleccionado.< TransactionDetailsModal - + Transaction Details Detalles de Transacción - + + This transaction has been identified as a potential address poisoning attack. + + + + + Please see the Support FAQ for more information. + + + + %1 txid TICKER %1 txid - + copied to clipboard. copiado al portapapeles. - + Amount Cantidad - + Fees Tarifas - + From address Desde dirección - + To address Para dirección - + Date Fecha - + Unconfirmed Sin confirmar - + Transaction Hash Hash de Transaccion - + Confirmations Confirmaciones - + Block Height Altura del Bloque - + From Desde - + To A - + Notes Notas - + Close Cerrar - + View on Explorer Ver en Explorer @@ -4334,22 +4370,27 @@ Las tarifas de la red pueden variar mucho según el par comercial seleccionado.< Transactions - + Sent Enviado - + Received Recibido - + + Poison + + + + fees tarifas - + Unconfirmed Sin confirmar @@ -4484,7 +4525,7 @@ Esto puede tardar unos minutos... atomic_dex::settings_page - + An error has occurred. Se ha producido un error. diff --git a/atomic_defi_design/assets/languages/atomic_defi_fr.ts b/atomic_defi_design/assets/languages/atomic_defi_fr.ts index b4ad8162ff..ebadd233ee 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_fr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_fr.ts @@ -1851,140 +1851,140 @@ They will be removed from the orderbook until you log in again. Main - + Segwit Segwit - + Confirmation Confirmation - + Do you want to send your %1 funds to %2 wallet first? Voulez-vous d'abord envoyer vos fonds %1 vers le portefeuille %2 ? - + Success Succès - + Your transaction is send, may take some time to arrive Votre transaction est envoyée, peut prendre un certain temps pour arriver - + Price Prix - + Change 24hr - + Contract Address - + Send Envoyez - + Enable %1 ? Activer %1 ? - + Yes Oui - + No Non - + Receive Recevoir - + Swap Échange - + Portfolio Portfolio - + is wallet only - + Rewards Récompenses - + Faucet Robinet - - - + + + Public Key - + Copied to Clipboard Copier dans le presse-papier - + Loading market data Chargement des données de marché - + There is no chart data for this ticker yet Il n'y a pas encore de données graphiques pour ce ticker - + Fetching transactions... - + Please wait, %1 is %2 - + % activated... - + No transactions available - + Click to view your address on %1 (%2) block explorer @@ -2441,6 +2441,11 @@ They will be removed from the orderbook until you log in again. Your wallet balance changed Le solde de votre portefeuille a changé + + + Close + Fermer + %1 Enable status @@ -3410,8 +3415,8 @@ Please select a new order. SettingModal - - + + Cancel Annuler @@ -3446,191 +3451,196 @@ Please select a new order. À propos & version - + Enable Desktop Notifications Activer les notifications - + + Hide Poison Transactions in History + + + + Maximum number of enabled coins Nombre maximum d'actifs activés - + Logs Journaux - + Open Folder Ouvrir le dossier - - + + Reset wallet configuration Réinitialiser la configuration du portefeuille - + This will restart your wallet with default settings Cela redémarrera votre portefeuille avec les paramètres par défaut - - + + Confirm Confirmer - + Changing theme to %1 Changer le thème en %1 - + Disable 2FA? - + Enter your wallet password to confirm - + Type password Tapez votre mot de passe - + 2FA status - + 2FA disabled successfully - - + + Ok Ok - + Wrong password! - + Wallet password is incorrect - + Application Version - + copied to clipboard copié dans le presse-papier - + Reset Réinitialiser - + Current Font Police actuelle - + Current font changed to %1. La police actuelle est passée à %1. - + Theme Thème - + Ask system's password before sending coins ? (2FA) Demander le mot de passe du système avant d'envoyer des actifs ? (2FA) - + Application version Version de l'application - + MM2 version Version de MM2 - + MM2 Version MM2 Version - + MM2 Version copied to clipboard. MM2 Version copiée dans le presse-papiers. - + Qt version Version de Qt - + Qt Version Qt Version - + Qt Version copied to clipboard. Version Qt copiée dans le presse-papiers. - + Search Update Rechercher une mise à jour - + Logout Se déconnecter - + View seed and private keys Afficher la phrase de récupération et les clefs privées - - + + Show Montrer - + Setup Camouflage Password Configurer le mot de passe de camouflage - + Open Ouvrir - + Disclaimer and ToS Clause de non-responsabilité et conditions d'utilisation @@ -3912,62 +3922,78 @@ Network fees can vary greatly depending on your selected trading pair. - + + I see a transaction in my wallet that was marked as 'poison'. What does this mean? + + + + + Address poisoning is a relatively new tye of phishing attack, where a malicious actor aims to trick you into sending funds to an address that you did not intend to send funds to. + +This is often done by sending a zero value transaction to your wallet from an address which looks very similar to your actual address, with the exact same letters at the start and end. This transaction will then appear in your transaction history, with the scammer hoping you will mistake the fake address for your own and send funds to it. + +To protect you from this, %1 will mark any transaction that it detects as potentially being a poison transaction with a "poison" label. You should always be careful to confirm any address you send funds to is correct. + +There is a toggle in settings where you can turn on/off the display of these transactions. + + + + Do you provide user support? Fournissez-vous un support utilisateur ? - + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! Oui! %1 offre une assistance via le <a href="%2">%1 serveur Discord</a>. L'équipe et la communauté sont toujours ravies de vous aider ! - + Who is behind %1? Qui est derrière %1 ? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. %1 est développé par l'équipe de Komodo. Komodo est l'un des projets de blockchain les plus établis travaillant sur des solutions innovantes telles que les échanges atomiques, la preuve de travail différée et une architecture multichaîne interopérable. - + Is it possible to develop my own white-label exchange on %1? Est-il possible de développer mon propre échange en white label sur %1 ? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! Absolument! Vous pouvez lire notre documentation développeur pour plus de détails ou nous contacter avec vos demandes de partenariat. Vous avez une question technique spécifique? La communauté de développeurs %1 est toujours prête à vous aider ! - + Which devices can I use %1 on? Sur quels appareils puis-je utiliser %1 ? - + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. %1 est disponible pour mobile sur <a href="%2">Android et iPhone, et pour ordinateur de bureau sur les systèmes d'exploitation Windows, Mac et Linux</a>. - + Compliance Info Informations de conformité - + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. En raison de circonstances réglementaires et juridiques, les citoyens de certaines juridictions, y compris, mais sans s'y limiter, les États-Unis d'Amérique, le Canada, Hong Kong, Israël, Singapour, le Soudan, l'Autriche, l'Iran et tout autre État, pays ou autre juridiction sous embargo par les États-Unis d'Amérique ou l'Union européenne ne sont pas autorisés à utiliser cette application. - + Changelog Changelog - + Open Logs Folder Ouvrir le répertoire de logs @@ -4078,32 +4104,32 @@ Network fees can vary greatly depending on your selected trading pair. De - + Entered amount must be higher than 0. - + Select an order. - + MAX MAX - + To Vers - + Pick an order Choisir une commande - + Price Prix @@ -4123,52 +4149,52 @@ Network fees can vary greatly depending on your selected trading pair. - - Tradable: - Disponible: + + Balance: + - + Pick a coin Choisissez un actif - + SWAP NOW ÉCHANGER MAINTENANT - + Failed to place the order Échec lors du placement de l'ordre - + Placed the order L'ordre a été placé - + No buy orders found for %1. Aucun ordre d'achat trouvé pour %1. - + You can check later or try to sell a different coin. Vous pouvez vérifier plus tard ou essayer de vendre un actif différent. - + Calculating fee estimate... - + Total %1 fees: Frais totaux %1 : - + %2 (%3) @@ -4227,88 +4253,98 @@ Network fees can vary greatly depending on your selected trading pair. TransactionDetailsModal - + Transaction Details Détails de la transaction - + + This transaction has been identified as a potential address poisoning attack. + + + + + Please see the Support FAQ for more information. + + + + %1 txid TICKER - + copied to clipboard. - + Amount Montant - + Fees Frais - + From address - + To address - + Date Date - + Unconfirmed Non confirmé - + Transaction Hash Hachage de la transaction - + Confirmations Confirmations - + Block Height Hauteur de bloc - + From De - + To Vers - + Notes Remarques - + Close Fermer - + View on Explorer Voir dans l'explorateur @@ -4316,22 +4352,27 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Received Reçue - + Sent Envoyé - + + Poison + + + + fees frais - + Unconfirmed Non confirmé @@ -4465,7 +4506,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. diff --git a/atomic_defi_design/assets/languages/atomic_defi_ru.ts b/atomic_defi_design/assets/languages/atomic_defi_ru.ts index 969309617b..f1a8a3107b 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_ru.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_ru.ts @@ -1857,140 +1857,140 @@ They will be removed from the orderbook until you log in again. Main - + Segwit Segwit - + Confirmation Подтверждение - + Do you want to send your %1 funds to %2 wallet first? Хотели бы вы сначала отправить ваши %1 средства на кошелек %2? - + Success Успех - + Your transaction is send, may take some time to arrive Ваша транзакция была отправлена, получение может занять какое-то время - + Price Цена - + Change 24hr - + Contract Address - + Send Отправить - + Enable %1 ? Активировать %1 ? - + Yes Да - + No Нет - + Receive Получить - + Swap Обменять - + Portfolio Портфолио - + is wallet only - + Rewards Награды - + Faucet Фаусет - - - + + + Public Key - + Copied to Clipboard Скопировано в буфер обмена - + Loading market data Загрузка рыночных данных - + There is no chart data for this ticker yet Для данного актива пока еще нет графиков данных - + Fetching transactions... - + Please wait, %1 is %2 - + % activated... - + No transactions available - + Click to view your address on %1 (%2) block explorer @@ -2447,6 +2447,11 @@ They will be removed from the orderbook until you log in again. Your wallet balance changed Баланс вашего кошелька изменился + + + Close + Закрыть + %1 Enable status @@ -3416,8 +3421,8 @@ Please select a new order. SettingModal - - + + Cancel Отмена @@ -3452,191 +3457,196 @@ Please select a new order. О программе - + Enable Desktop Notifications Включить уведомления для рабочего стола - + + Hide Poison Transactions in History + + + + Maximum number of enabled coins Макс. количество активированных монет - + Logs Логи - + Open Folder Открыть папку с логами - - + + Reset wallet configuration Сбросить конфигурацию кошелька - + This will restart your wallet with default settings Эта опция перезапустит ваш кошелек с настройками по умолчанию - - + + Confirm Подтвердить - + Changing theme to %1 Изменить тему на %1 - + Disable 2FA? - + Enter your wallet password to confirm - + Type password Введите пароль - + 2FA status - + 2FA disabled successfully - - + + Ok Ок - + Wrong password! - + Wallet password is incorrect - + Application Version - + copied to clipboard скопировано в буфер - + Reset Сбросить - + Current Font Текущий шрифт - + Current font changed to %1. Текущий шрифт изменен на %1. - + Theme Тема - + Ask system's password before sending coins ? (2FA) Спрашивать системный пароль перед отправкой монет? (2FA) - + Application version Версия приложения - + MM2 version Версия MM2 - + MM2 Version Версия MM2 - + MM2 Version copied to clipboard. Версия MM2 скопирована в буфер обмена. - + Qt version Версия Qt - + Qt Version Версия Qt - + Qt Version copied to clipboard. Версия Qt скопирована в буфер обмена. - + Search Update Проверить на обновления - + Logout Выход - + View seed and private keys Показать seed-фразу и приватные ключи - - + + Show Показать - + Setup Camouflage Password Установить камуфляжный пароль - + Open Установить - + Disclaimer and ToS Дисклеймер и Условия Использования @@ -3916,62 +3926,78 @@ Network fees can vary greatly depending on your selected trading pair. - + + I see a transaction in my wallet that was marked as 'poison'. What does this mean? + + + + + Address poisoning is a relatively new tye of phishing attack, where a malicious actor aims to trick you into sending funds to an address that you did not intend to send funds to. + +This is often done by sending a zero value transaction to your wallet from an address which looks very similar to your actual address, with the exact same letters at the start and end. This transaction will then appear in your transaction history, with the scammer hoping you will mistake the fake address for your own and send funds to it. + +To protect you from this, %1 will mark any transaction that it detects as potentially being a poison transaction with a "poison" label. You should always be careful to confirm any address you send funds to is correct. + +There is a toggle in settings where you can turn on/off the display of these transactions. + + + + Do you provide user support? Предоставляете ли вы поддержку пользователей? - + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! Да! %1 предоставляет саппорт через <a href="%2">%1 Discord сервер</a>. Команда и сообщество проекта всегда рады помочь! - + Who is behind %1? Кто создал %1? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. %1 разрабатывается командой Komodo. Komodo один из наиболее известных блокчейн проектов который работает над такими инновационными решениями как Атомарные Свопы, "Отложенный" PoW, а также над совместимой мульти-чейн архитектурой. - + Is it possible to develop my own white-label exchange on %1? Возможно ли разработать децентрализованную биржу с моим брендом на %1? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! Обязательно! Вы можете прочитать нашу документацию для разработчиков для более детального ревью или же связаться с нашей командой по поводу партнерства. Есть очень специфичный технический вопрос? %1 наше комьюнити разработчиков всегда готово помочь! - + Which devices can I use %1 on? На каких устройствах я могу использовать %1 ? - + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. %1 доступен для Android и iOS мобильных устройв <a href="%2">, и для операционных систем Windows, Mac и Linux</a> на PC. - + Compliance Info Комплаенс информация - + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. В связи с нормативными и правовыми обстоятельствами граждане определенных юрисдикций, включая, помимо прочего, Соединенные Штаты Америки, Канаду, Гонконг, Израиль, Сингапур, Судан, Австрию, Иран и любые другие государства, страны или другие юрисдикции, на которые введено эмбарго. Соединенных Штатов Америки или Европейского Союза не могут использовать это приложение. - + Changelog Журнал изменений - + Open Logs Folder Открыть папку с логами @@ -4082,32 +4108,32 @@ Network fees can vary greatly depending on your selected trading pair. От - + Entered amount must be higher than 0. - + Select an order. - + MAX МАКС - + To Получатель - + Pick an order Выберите ордер - + Price Цена @@ -4127,52 +4153,52 @@ Network fees can vary greatly depending on your selected trading pair. %1 - - Tradable: - Доступно: + + Balance: + - + Pick a coin Выберите монету - + SWAP NOW - + Failed to place the order Не удалось разместить ордер - + Placed the order Ордер размещен - + No buy orders found for %1. Не найдено ордеров на покупку дл] %1. - + You can check later or try to sell a different coin. Вы можете попробовать позже или попробовать продать другой актив. - + Calculating fee estimate... - + Total %1 fees: Всего %1 комиссий: - + %2 (%3) %2 (%3) @@ -4231,88 +4257,98 @@ Network fees can vary greatly depending on your selected trading pair. TransactionDetailsModal - + Transaction Details Детали транзакции - + + This transaction has been identified as a potential address poisoning attack. + + + + + Please see the Support FAQ for more information. + + + + %1 txid TICKER - + copied to clipboard. - + Amount Сумма - + Fees Комиссия сети - + From address - + To address - + Date Дата - + Unconfirmed Не подтверждена - + Transaction Hash Хэш транзакции - + Confirmations Подтверждения - + Block Height Блок - + From От - + To Получатель - + Notes Заметки - + Close Закрыть - + View on Explorer Смотреть в эксплорере @@ -4320,22 +4356,27 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Received Получено - + Sent Отправлено - + + Poison + + + + fees комиссии - + Unconfirmed Не подтверждена @@ -4469,7 +4510,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. diff --git a/atomic_defi_design/assets/languages/atomic_defi_tr.ts b/atomic_defi_design/assets/languages/atomic_defi_tr.ts index 708b7d982d..2650d38322 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_tr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_tr.ts @@ -1845,140 +1845,140 @@ They will be removed from the orderbook until you log in again. Main - + Segwit - + Confirmation - + Do you want to send your %1 funds to %2 wallet first? - + Success - + Your transaction is send, may take some time to arrive - + Price Fiyat - + Change 24hr - + Contract Address - + Send Gönder - + Enable %1 ? %1 Etkinleştirilsin mi ? - + Yes Evet - + No Hayır - + Receive Al - + Swap Takasla - + Portfolio - + is wallet only - + Rewards - + Faucet Musluk - - - + + + Public Key - + Copied to Clipboard Panoya Kopyalandı - + Loading market data Piyasa bilgisi yükleniyor - + There is no chart data for this ticker yet Henüz bu hisse senedi için grafik verisi yok - + Fetching transactions... - + Please wait, %1 is %2 - + % activated... - + No transactions available - + Click to view your address on %1 (%2) block explorer @@ -2435,6 +2435,11 @@ They will be removed from the orderbook until you log in again. Your wallet balance changed Cüzdan bakiyeniz değişti + + + Close + Kapat + %1 Enable status @@ -3404,8 +3409,8 @@ Please select a new order. SettingModal - - + + Cancel İptal @@ -3440,191 +3445,196 @@ Please select a new order. - + Enable Desktop Notifications Masaüstü Bildirimlerini Aktif Et - + + Hide Poison Transactions in History + + + + Maximum number of enabled coins Maksimum etkin koin sayısı - + Logs Günlük Kaydı - + Open Folder Klasörü Aç - - + + Reset wallet configuration - + This will restart your wallet with default settings - - + + Confirm Onayla - + Changing theme to %1 - + Disable 2FA? - + Enter your wallet password to confirm - + Type password - + 2FA status - + 2FA disabled successfully - - + + Ok Tamam - + Wrong password! - + Wallet password is incorrect - + Application Version - + copied to clipboard - + Reset Sıfırla - + Current Font Geçerli Yazı Tipi - + Current font changed to %1. - + Theme Tema - + Ask system's password before sending coins ? (2FA) Para göndermeden önce sistem parolası sorulsun mu ? (2FA) - + Application version Uygulama sürümü - + MM2 version MM2 sürümü - + MM2 Version - + MM2 Version copied to clipboard. - + Qt version Qt sürümü - + Qt Version - + Qt Version copied to clipboard. - + Search Update Güncelleme Ara - + Logout Çıkış - + View seed and private keys Seed ve özel anahtarları görüntüle - - + + Show Göster - + Setup Camouflage Password Kamuflaj Parolasını Ayarla - + Open - + Disclaimer and ToS Sorumluluk Reddi ve K.Ş. @@ -3904,62 +3914,78 @@ Network fees can vary greatly depending on your selected trading pair. - + + I see a transaction in my wallet that was marked as 'poison'. What does this mean? + + + + + Address poisoning is a relatively new tye of phishing attack, where a malicious actor aims to trick you into sending funds to an address that you did not intend to send funds to. + +This is often done by sending a zero value transaction to your wallet from an address which looks very similar to your actual address, with the exact same letters at the start and end. This transaction will then appear in your transaction history, with the scammer hoping you will mistake the fake address for your own and send funds to it. + +To protect you from this, %1 will mark any transaction that it detects as potentially being a poison transaction with a "poison" label. You should always be careful to confirm any address you send funds to is correct. + +There is a toggle in settings where you can turn on/off the display of these transactions. + + + + Do you provide user support? Kullanıcı desteği sağlıyor musunuz? - + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! - + Who is behind %1? %1 arkasında kim var? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. %1, Komodo ekibi tarafından geliştirilmiştir. Komodo, atomik takaslar, Gecikmeli Çalışma Kanıtı ve birlikte çalışabilir bir çok zincirli mimari gibi yenilikçi çözümler üzerinde çalışan en köklü blok zinciri projelerinden biridir. - + Is it possible to develop my own white-label exchange on %1? %1 üzerinde kendi markamla borsamı geliştirmem mümkün mü? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! Kesinlikle! Daha fazla ayrıntı için geliştirici belgelerimizi okuyabilir veya ortaklık sorularınız için bizimle iletişime geçebilirsiniz. Belirli bir teknik sorunuz mu var? %1 geliştirici topluluğu her zaman yardıma hazır! - + Which devices can I use %1 on? %1 'i hangi cihazlarda kullanabilirim? - + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. - + Compliance Info Uyumluluk Bilgisi - + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. Düzenleyici ve yasal koşullar nedeniyle, Amerika Birleşik Devletleri, Kanada, Hong Kong, İsrail, Singapur, Sudan, Avusturya, İran ve Amerika Birleşik Devletleri veya Avrupa Birliği tarafından ambargo uygulanan diğer herhangi bir eyalet, ülke veya diğer bölge vatandaşlarının bu uygulamayı kullanmasına izin verilmez. - + Changelog Değişim günlüğü - + Open Logs Folder Günlük Kaydı Klasörünü Aç @@ -4070,32 +4096,32 @@ Network fees can vary greatly depending on your selected trading pair. Gönderen - + Entered amount must be higher than 0. - + Select an order. - + MAX MAKS - + To Alan - + Pick an order Emri seç - + Price Fiyat @@ -4115,52 +4141,52 @@ Network fees can vary greatly depending on your selected trading pair. %1 - - Tradable: - Al sat yapılabilir: + + Balance: + - + Pick a coin - + SWAP NOW - + Failed to place the order Emir başarısız oldu - + Placed the order Emir başarılı - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + Calculating fee estimate... - + Total %1 fees: Toplam %1 işlem giderleri: - + %2 (%3) %2 (%3) @@ -4219,88 +4245,98 @@ Network fees can vary greatly depending on your selected trading pair. TransactionDetailsModal - + Transaction Details İşlem Detayları - + + This transaction has been identified as a potential address poisoning attack. + + + + + Please see the Support FAQ for more information. + + + + %1 txid TICKER - + copied to clipboard. - + Amount Miktar - + Fees İşlem Ücreti - + From address - + To address - + Date Tarih - + Unconfirmed Onaylanmamış - + Transaction Hash İşlem Hash'i - + Confirmations Onay Sayısı - + Block Height Blok Uzunluğu - + From Gönderen - + To Alan - + Notes Notlar - + Close Kapat - + View on Explorer Explorer'da göster @@ -4308,22 +4344,27 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Received Alınan - + Sent Gönderilen - + + Poison + + + + fees işlem ücretleri - + Unconfirmed Onaylanmamış @@ -4457,7 +4498,7 @@ This might take a few minutes... atomic_dex::settings_page - + An error has occurred. diff --git a/src/core/atomicdex/models/qt.portfolio.model.cpp b/src/core/atomicdex/models/qt.portfolio.model.cpp index 24e70efad8..d8e946b68e 100644 --- a/src/core/atomicdex/models/qt.portfolio.model.cpp +++ b/src/core/atomicdex/models/qt.portfolio.model.cpp @@ -399,6 +399,17 @@ namespace atomic_dex return true; } + QString + portfolio_model::coin_balance(QString coin) + { + auto res = this->match(this->index(0, 0), TickerRole, coin, 1, Qt::MatchFlag::MatchExactly); + // assert(not res.empty()); + if (not res.empty()) + { + return QString(this->data(res.at(0), BalanceRole).toString()); + } + } + void portfolio_model::disable_coins(const QStringList& coins) { diff --git a/src/core/atomicdex/models/qt.portfolio.model.hpp b/src/core/atomicdex/models/qt.portfolio.model.hpp index 9ed6e57ff1..fb0d99bcc7 100644 --- a/src/core/atomicdex/models/qt.portfolio.model.hpp +++ b/src/core/atomicdex/models/qt.portfolio.model.hpp @@ -96,18 +96,19 @@ namespace atomic_dex Q_INVOKABLE void clean_priv_keys(); //! Public api - void initialize_portfolio(const std::vector& tickers); - bool update_currency_values(); - bool update_balance_values(const std::vector& tickers); - void adjust_percent_current_currency(QString balance_all); - void disable_coins(const QStringList& coins); - void set_cfg(atomic_dex::cfg& cfg); - [[nodiscard]] t_portfolio_datas get_underlying_data() const; + void initialize_portfolio(const std::vector& tickers); + bool update_currency_values(); + bool update_balance_values(const std::vector& tickers); + void adjust_percent_current_currency(QString balance_all); + void disable_coins(const QStringList& coins); + void set_cfg(atomic_dex::cfg& cfg); + [[nodiscard]] t_portfolio_datas get_underlying_data() const; + [[nodiscard]] Q_INVOKABLE QString coin_balance(QString coin); //! Properties - [[nodiscard]] portfolio_proxy_model* get_portfolio_proxy_mdl() const; - [[nodiscard]] portfolio_proxy_model* get_pie_char_proxy_mdl() const; - [[nodiscard]] int get_length() const; + [[nodiscard]] portfolio_proxy_model* get_portfolio_proxy_mdl() const; + [[nodiscard]] portfolio_proxy_model* get_pie_char_proxy_mdl() const; + [[nodiscard]] int get_length() const; void reset(); From 1fcb83d00e87c9eb55dc39784e5abf3e4cb1808f Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 11 Jun 2023 21:48:06 +0800 Subject: [PATCH 144/251] Dont send notifications for 0 value balance changes --- src/core/atomicdex/models/qt.portfolio.model.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core/atomicdex/models/qt.portfolio.model.cpp b/src/core/atomicdex/models/qt.portfolio.model.cpp index 24e70efad8..b0eebdd95f 100644 --- a/src/core/atomicdex/models/qt.portfolio.model.cpp +++ b/src/core/atomicdex/models/qt.portfolio.model.cpp @@ -522,7 +522,12 @@ namespace atomic_dex QString amount = QString::fromStdString(amount_f.str(8, std::ios_base::fixed)); 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")); - this->m_dispatcher.trigger(am_i_sender, amount, ticker, human_date, timestamp); + // Logs showed `balance update notification: am_i_sender: false amount: 0.00000000 ticker: USDT-SLP` sometimes, just before a crash. + // This is a temporary fix to see if it prevents the crash. + if (amount_f > 0.0) + { + this->m_dispatcher.trigger(am_i_sender, amount, ticker, human_date, timestamp); + } emit portfolioItemDataChanged(); } From ec85e361d9e24ba4405d0f315bfb71b85aa7946b Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 11 Jun 2023 22:47:00 +0800 Subject: [PATCH 145/251] increment version --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/workflows/atomicdex-desktop-cd.yml | 1 + .github/workflows/atomicdex-desktop-ci.yml | 1 + CMakeLists.txt | 2 +- src/core/atomicdex/version/version.hpp | 6 +++--- vcpkg.json | 2 +- 6 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 51cdf57ac8..b9a906e883 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,7 +26,7 @@ Please describe what you expected to happen. **Operating Environment(s):** - OS: [e.g. Windows/OSX/Linux. If Linux, include distro. ] - OS version: [e.g. 7/10/11, 10.13/10.15, 18.04/20.04 ] - - AtomicDEX Version: [e.g. 0.5.7.2] + - AtomicDEX Version: [e.g. 0.5.8] - Build branch: [e.g. master/dev] diff --git a/.github/workflows/atomicdex-desktop-cd.yml b/.github/workflows/atomicdex-desktop-cd.yml index f9f3dae234..8231d00f83 100644 --- a/.github/workflows/atomicdex-desktop-cd.yml +++ b/.github/workflows/atomicdex-desktop-cd.yml @@ -9,6 +9,7 @@ env: DEX_PROJECT_NAME: "atomicdex-desktop" DEX_DISPLAY_NAME: "AtomicDex Desktop" DEX_COMPANY: "KomodoPlatform" + DEX_VERSION: "0.5.8" DEX_WEBSITE: "https://atomicdex.io/" jobs: diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index d6df9925c2..6c473f73fa 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -16,6 +16,7 @@ env: DEX_PROJECT_NAME: "atomicdex-desktop" DEX_DISPLAY_NAME: "AtomicDex Desktop" DEX_COMPANY: "KomodoPlatform" + DEX_VERSION: "0.5.8" DEX_WEBSITE: "https://atomicdex.io/" VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/b/vcpkg_cache VCPKG_BINARY_SOURCES: clear;x-gha,readwrite diff --git a/CMakeLists.txt b/CMakeLists.txt index 46ae0923fd..fc44bd51a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ include(vcpkg_prerequisites) include(qt_prerequisites) include(cfg_hash) -project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.7.2) +project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.8) message(STATUS "${PROJECT_NAME} is version ${PROJECT_VERSION}") include(cmake_default_options) diff --git a/src/core/atomicdex/version/version.hpp b/src/core/atomicdex/version/version.hpp index 8fce7de2ff..816d3f013d 100644 --- a/src/core/atomicdex/version/version.hpp +++ b/src/core/atomicdex/version/version.hpp @@ -21,7 +21,7 @@ namespace atomic_dex constexpr const char* get_version() { - return "0.5.7.2-beta"; + return "0.5.8-beta"; } constexpr int @@ -33,12 +33,12 @@ namespace atomic_dex constexpr const char* get_raw_version() { - return "0.5.7.2"; + return "0.5.8"; } constexpr const char* get_precedent_raw_version() { - return "0.5.7.1"; + return "0.5.7.2"; } } // namespace atomic_dex diff --git a/vcpkg.json b/vcpkg.json index 933bbee3d5..a8e1b48608 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "atomicdex-desktop", - "version-string": "0.5.7.2", + "version-string": "0.5.8", "dependencies": [ "entt", "boost-multiprecision", From 100dfd8dad39a8c5f4cc4e1edc65c2f1b2d48b47 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 11 Jun 2023 22:47:48 +0800 Subject: [PATCH 146/251] Adds cmake DEX_VERSION variable --- ci_tools_atomic_dex/installer/osx/config/config.xml.in | 2 +- .../com.komodoplatform.atomicdex/meta/package.xml.in | 4 ++-- ci_tools_atomic_dex/installer/windows/config/config.xml.in | 4 ++-- .../com.komodoplatform.atomicdex/meta/package.xml.in | 4 ++-- cmake/install/macos/dex_install.cmake | 6 ++++-- cmake/project.metadata.cmake | 5 +++++ src/CMakeLists.txt | 2 +- 7 files changed, 17 insertions(+), 10 deletions(-) diff --git a/ci_tools_atomic_dex/installer/osx/config/config.xml.in b/ci_tools_atomic_dex/installer/osx/config/config.xml.in index 838e6f170d..3662ef3bc5 100644 --- a/ci_tools_atomic_dex/installer/osx/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/osx/config/config.xml.in @@ -1,7 +1,7 @@ ${DEX_DISPLAY_NAME} - 0.5.7.2 + @DEX_VERSION@ ${DEX_DISPLAY_NAME} Installer ${DEX_WEBSITE} ${DEX_COMPANY} diff --git a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in index 57bb3278f8..a9487a11ad 100644 --- a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.7.2 - 2023-03-04 + ${DEX_VERSION} + 2023-11-06 diff --git a/ci_tools_atomic_dex/installer/windows/config/config.xml.in b/ci_tools_atomic_dex/installer/windows/config/config.xml.in index 886bb6f594..98cb57e66d 100644 --- a/ci_tools_atomic_dex/installer/windows/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/windows/config/config.xml.in @@ -1,11 +1,11 @@ @DEX_DISPLAY_NAME@ - 0.5.7.2 + @DEX_VERSION@ @DEX_DISPLAY_NAME@ Installer @DEX_WEBSITE@ @DEX_COMPANY@ - @DEX_INSTALL_TARGET_DIR_WIN64@/@DEX_DISPLAY_NAME@ + @DEX_INSTALL_TARGET_DIR_WIN64@/@DEX_DISPLAY_NAME@_@DEX_VERSION@ @DEX_TARGET_DIR@/bin/@DEX_PROJECT_NAME@.exe Run @DEX_DISPLAY_NAME@ now. @DEX_DISPLAY_NAME@ diff --git a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in index 57bb3278f8..a9487a11ad 100644 --- a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.7.2 - 2023-03-04 + ${DEX_VERSION} + 2023-11-06 diff --git a/cmake/install/macos/dex_install.cmake b/cmake/install/macos/dex_install.cmake index 7eb09e6edd..8b27af7e9b 100644 --- a/cmake/install/macos/dex_install.cmake +++ b/cmake/install/macos/dex_install.cmake @@ -1,11 +1,13 @@ if (APPLE) message(STATUS "ICON ->>>> ${ICON}") + message(STATUS "PROJECT_NAME ->>>> ${PROJECT_NAME}") + message(STATUS "DEX_VERSION ->>>> ${DEX_VERSION}") set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}" RESOURCE ${ICON} MACOSX_BUNDLE_ICON_FILE dex-logo - MACOSX_BUNDLE_SHORT_VERSION_STRING 0.5.7.2 - MACOSX_BUNDLE_LONG_VERSION_STRING 0.5.7.2 + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} + MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION} MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index ba3ba0ee1b..1d4c5ad090 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -7,6 +7,7 @@ set(DEX_DISPLAY_NAME "AtomicDEX Desktop") set(DEX_MAINTENANCE_TOOL_NAME "AtomicDEX Maintenance Tool") set(DEX_COMPANY "KomodoPlatform") set(DEX_WEBSITE "https://atomicdex.io/") +set(DEX_VERSION "0.5.8") set(DEX_SUPPORT_PAGE "https://support.komodoplatform.com/support/home") set(DEX_DISCORD "https://komodoplatform.com/discord") set(DEX_TWITTER "https://twitter.com/AtomicDEX") @@ -47,6 +48,9 @@ endif () if (DEFINED ENV{DEX_WEBSITE}) set(DEX_WEBSITE $ENV{DEX_WEBSITE}) endif () +if (DEFINED ENV{DEX_VERSION}) + set(DEX_VERSION $ENV{DEX_VERSION}) +endif () if (DEFINED ENV{PROJECT_ROOT}) set(PROJECT_ROOT $ENV{PROJECT_ROOT}) else () @@ -67,6 +71,7 @@ message(STATUS "CMAKE_BUILD_TYPE --> ${CMAKE_BUILD_TYPE}") message(STATUS "DEX_PROJECT_NAME --> ${DEX_PROJECT_NAME}") message(STATUS "DEX_DISPLAY_NAME --> ${DEX_DISPLAY_NAME}") message(STATUS "DEX_COMPANY --> ${DEX_COMPANY}") +message(STATUS "DEX_VERSION --> ${DEX_VERSION}") message(STATUS "DEX_WEBSITE --> ${DEX_WEBSITE}") message(STATUS "CMAKE_SOURCE_DIR --> ${CMAKE_SOURCE_DIR}") message(STATUS "PROJECT_ROOT --> ${PROJECT_ROOT}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 531c27e8d6..5d33a981a0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,7 +17,7 @@ DEX_NEW_LIB(core INTERFACE DEX_API="${DEX_API}" DEX_RPC="${DEX_RPC}" DEX_RPCPORT="${DEX_RPCPORT}" DEX_NAME="${DEX_DISPLAY_NAME}" DEX_WEBSITE_URL="${DEX_WEBSITE}" DEX_SUPPORT_URL="${DEX_SUPPORT_PAGE}" DEX_DISCORD_URL="${DEX_DISCORD}" DEX_TWITTER_URL="${DEX_TWITTER}" DEX_PRIMARY_COIN="${DEX_PRIMARY_COIN}" DEX_SECOND_PRIMARY_COIN="${DEX_SECOND_PRIMARY_COIN}" #DEX_COMMON_DATA_FOLDER="${DEX_COMMON_DATA_FOLDER}" - DEX_PROJECT_NAME="${DEX_PROJECT_NAME}" DEX_COMPANY_NAME="${DEX_COMPANY_NAME}" + DEX_PROJECT_NAME="${DEX_PROJECT_NAME}" DEX_COMPANY_NAME="${DEX_COMPANY_NAME}" DEX_VERSION="${DEX_VERSION}" DEX_REPOSITORY_OWNER="${DEX_REPOSITORY_OWNER}" DEX_REPOSITORY_NAME="${DEX_REPOSITORY_NAME}" DEX_CHECKSUM_API_URL="${DEX_CHECKSUM_API_URL}" DEX_APPDATA_FOLDER="${DEX_APPDATA_FOLDER}" INTERFACE_DEFS From 9aa6ba7fa541538522726a5aed4f1a8c432a1c0e Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 11 Jun 2023 23:12:08 +0800 Subject: [PATCH 147/251] try qtinstaller workaround --- .../meta/installscript.qs.in | 50 +++++++- .../meta/package.xml.in | 3 + .../meta/targetwidget.ui | 113 ++++++++++++++++++ 3 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/targetwidget.ui diff --git a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/installscript.qs.in b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/installscript.qs.in index 204713cb6d..106dd0af5e 100644 --- a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/installscript.qs.in +++ b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/installscript.qs.in @@ -1,12 +1,12 @@ function Component() { - -} + // installer.gainAdminRights(); + component.loaded.connect(this, this.installerLoaded); +} Component.prototype.createOperations = function() { component.createOperations(); - if (installer.value("os") === "win") { // Start Menu Shortcut component.addOperation("CreateShortcut", @@ -32,4 +32,48 @@ Component.prototype.createOperations = function() "iconPath=@DEX_ICON_DIR@", "iconId=0", "description=Start @DEX_MAINTENANCE_TOOL_NAME@"); } +} + +Component.prototype.installerLoaded = function() +{ + installer.setDefaultPageVisible(QInstaller.TargetDirectory, false); + installer.addWizardPage(component, "TargetWidget", QInstaller.TargetDirectory); + + targetDirectoryPage = gui.pageWidgetByObjectName("DynamicTargetWidget"); + targetDirectoryPage.windowTitle = "Choose Installation Directory"; + targetDirectoryPage.description.setText("Please select where the app will be installed:"); + targetDirectoryPage.targetDirectory.textChanged.connect(this, this.targetDirectoryChanged); + targetDirectoryPage.targetDirectory.setText(installer.value("TargetDir")); + targetDirectoryPage.targetChooser.released.connect(this, this.targetChooserClicked); + + gui.pageById(QInstaller.ComponentSelection).entered.connect(this, this.componentSelectionPageEntered); +} + +Component.prototype.targetChooserClicked = function() +{ + var dir = QFileDialog.getExistingDirectory("", targetDirectoryPage.targetDirectory.text); + targetDirectoryPage.targetDirectory.setText(dir); +} + +Component.prototype.targetDirectoryChanged = function() +{ + var dir = targetDirectoryPage.targetDirectory.text; + if (installer.fileExists(dir) && installer.fileExists(dir + "/maintenancetool.exe")) { + targetDirectoryPage.warning.setText("

Existing installation detected and will be overwritten.

"); + } + else if (installer.fileExists(dir)) { + targetDirectoryPage.warning.setText("

Installing in existing directory. It will be wiped on uninstallation.

"); + } + else { + targetDirectoryPage.warning.setText(""); + } + installer.setValue("TargetDir", dir); +} + +Component.prototype.componentSelectionPageEntered = function() +{ + var dir = installer.value("TargetDir"); + if (installer.fileExists(dir) && installer.fileExists(dir + "/maintenancetool.exe")) { + installer.execute(dir + "/maintenancetool.exe", ["purge", "-c"]); + } } \ No newline at end of file diff --git a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in index a9487a11ad..090e2c430f 100644 --- a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -9,4 +9,7 @@ true + + targetwidget.ui +
diff --git a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/targetwidget.ui b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/targetwidget.ui new file mode 100644 index 0000000000..6237332046 --- /dev/null +++ b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/targetwidget.ui @@ -0,0 +1,113 @@ + + + TargetWidget + + + + 0 + 0 + 491 + 190 + + + + + 0 + 0 + + + + + 491 + 190 + + + + Form + + + + + + + + + + + + + + + true + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + ... + + + + + + + + + 0 + + + + + true + + + TextLabel + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 122 + + + + + + + + + \ No newline at end of file From e0a60c0895b8f2dbf0e69aa9cd14f76f711b4a33 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 12 Jun 2023 02:17:16 +0800 Subject: [PATCH 148/251] fix qrc activation --- src/core/atomicdex/api/mm2/rpc.electrum.cpp | 10 ++++++++-- src/core/atomicdex/api/mm2/rpc.electrum.hpp | 4 ++-- src/core/atomicdex/services/mm2/mm2.service.cpp | 12 ++++++++---- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/core/atomicdex/api/mm2/rpc.electrum.cpp b/src/core/atomicdex/api/mm2/rpc.electrum.cpp index 5c8849b2fe..9ac193efba 100644 --- a/src/core/atomicdex/api/mm2/rpc.electrum.cpp +++ b/src/core/atomicdex/api/mm2/rpc.electrum.cpp @@ -37,8 +37,14 @@ namespace atomic_dex::mm2 if (cfg.coin_type == CoinType::QRC20) { - j["swap_contract_address"] = cfg.swap_contract_address; - j.contains("fallback_swap_contract") ? j.at("fallback_swap_contract").get() : cfg.swap_contract_address; + if (cfg.swap_contract_address.has_value()) + { + j["swap_contract_address"] = cfg.swap_contract_address.value(); + } + if (cfg.fallback_swap_contract_address.has_value()) + { + j["fallback_swap_contract_address"] = cfg.fallback_swap_contract_address.value(); + } } if (cfg.bchd_urls.has_value()) { diff --git a/src/core/atomicdex/api/mm2/rpc.electrum.hpp b/src/core/atomicdex/api/mm2/rpc.electrum.hpp index 29970186e2..86dc73d6ac 100644 --- a/src/core/atomicdex/api/mm2/rpc.electrum.hpp +++ b/src/core/atomicdex/api/mm2/rpc.electrum.hpp @@ -32,8 +32,8 @@ namespace atomic_dex::mm2 CoinType coin_type; bool is_testnet{false}; bool with_tx_history{true}; - const std::string swap_contract_address; - const std::optional fallback_swap_contract_address{std::nullopt}; + std::optional swap_contract_address{std::nullopt}; + std::optional fallback_swap_contract_address{std::nullopt}; std::optional address_format; std::optional merge_params; std::optional> bchd_urls; diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index ebd0577901..e3b16986e0 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -637,12 +637,8 @@ namespace atomic_dex { request.fallback_swap_contract_address = coin_config.fallback_swap_contract_address; } - - nlohmann::json j = mm2::template_request("enable"); - mm2::to_json(j, request); - SPDLOG_INFO("enable coin: {} {}", request.coin_name, j.dump()); batch_array.push_back(j); } m_mm2_client.async_rpc_batch_standalone(batch_array) @@ -754,6 +750,14 @@ namespace atomic_dex mm2::to_json(json_merge_params, merge_params); request.merge_params = json_merge_params; } + if (coin_config.swap_contract_address.value_or("") != "") + { + request.swap_contract_address = coin_config.swap_contract_address; + } + if (coin_config.fallback_swap_contract_address.value_or("") != "") + { + request.fallback_swap_contract_address = coin_config.fallback_swap_contract_address; + } mm2::to_json(j, request); batch_array.push_back(j); } From 3b075db122fd053c42dcfd566ed6629f8fe813be Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 12 Jun 2023 20:55:24 +0800 Subject: [PATCH 149/251] revert version string in destination folder --- ci_tools_atomic_dex/installer/windows/config/config.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_tools_atomic_dex/installer/windows/config/config.xml.in b/ci_tools_atomic_dex/installer/windows/config/config.xml.in index 98cb57e66d..bf4f0848fa 100644 --- a/ci_tools_atomic_dex/installer/windows/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/windows/config/config.xml.in @@ -5,7 +5,7 @@ @DEX_DISPLAY_NAME@ Installer @DEX_WEBSITE@ @DEX_COMPANY@ - @DEX_INSTALL_TARGET_DIR_WIN64@/@DEX_DISPLAY_NAME@_@DEX_VERSION@ + @DEX_INSTALL_TARGET_DIR_WIN64@/@DEX_DISPLAY_NAME@ @DEX_TARGET_DIR@/bin/@DEX_PROJECT_NAME@.exe Run @DEX_DISPLAY_NAME@ now. @DEX_DISPLAY_NAME@ From 436642ea60e422b34f63659091b387c38846f3d5 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 13 Jun 2023 15:48:49 +0800 Subject: [PATCH 150/251] update mm2 to v1.0.5 (latest release) --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fc44bd51a6..e390d48e2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,13 +60,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.2-beta/mm2-fa745617d-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.5-beta/mm2-1d8bebd15-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.2-beta/mm2-fa745617d-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.5-beta/mm2-1d8bebd15-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.2-beta/mm2-fa745617d-Win64.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.5-beta/mm2-1d8bebd15-Win64.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 9094d42a82f69e812d7c989ebc30a9b3d80b78ff Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 13 Jun 2023 17:18:50 +0800 Subject: [PATCH 151/251] update api version to latest release --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46ae0923fd..e390d48e2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ include(vcpkg_prerequisites) include(qt_prerequisites) include(cfg_hash) -project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.7.2) +project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.8) message(STATUS "${PROJECT_NAME} is version ${PROJECT_VERSION}") include(cmake_default_options) @@ -60,13 +60,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.2-beta/mm2-fa745617d-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.5-beta/mm2-1d8bebd15-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.2-beta/mm2-fa745617d-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.5-beta/mm2-1d8bebd15-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.2-beta/mm2-fa745617d-Win64.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.5-beta/mm2-1d8bebd15-Win64.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 3162f9affcd273fef746b05fe0305b6ad9302462 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 14 Jun 2023 17:37:15 +0800 Subject: [PATCH 152/251] update changelog link --- atomic_defi_design/Dex/Support/SupportModal.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Support/SupportModal.qml b/atomic_defi_design/Dex/Support/SupportModal.qml index 84c54e129b..01d756dcbc 100644 --- a/atomic_defi_design/Dex/Support/SupportModal.qml +++ b/atomic_defi_design/Dex/Support/SupportModal.qml @@ -208,7 +208,7 @@ There is a toggle in settings where you can turn on/off the display of these tra Layout.preferredHeight: column_layout.height hoverEnabled: true - onClicked: update_modal.open() + onClicked: Qt.openUrlExternally("https://github.com/KomodoPlatform/atomicDEX-Desktop/pull/2296") ColumnLayout { From 4e1e896b95fc3dcbd7d4b7cdcbbc492b435adae3 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 14 Jun 2023 18:58:42 +0800 Subject: [PATCH 153/251] add DOC and MARTY faucet buttons --- atomic_defi_design/Dex/Constants/General.qml | 5 +++++ atomic_defi_design/Dex/Wallet/Main.qml | 2 +- src/app/app.cpp | 2 ++ src/core/atomicdex/config/coins.cfg.cpp | 11 ++++++++--- src/core/atomicdex/config/coins.cfg.hpp | 2 ++ src/core/atomicdex/constants/dex.constants.hpp | 7 +++++++ src/core/atomicdex/pages/qt.wallet.page.cpp | 4 ++-- 7 files changed, 27 insertions(+), 6 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index eca0e68467..cdee60c2bc 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -87,6 +87,11 @@ QtObject { return API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker).is_wallet_only } + function isFaucetCoin(ticker) + { + return API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker).is_faucet_coin + } + function isCoinWithMemo(ticker) { const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) return coin_info.has_memos diff --git a/atomic_defi_design/Dex/Wallet/Main.qml b/atomic_defi_design/Dex/Wallet/Main.qml index dbe6b35d91..7ecf682d91 100644 --- a/atomic_defi_design/Dex/Wallet/Main.qml +++ b/atomic_defi_design/Dex/Wallet/Main.qml @@ -595,7 +595,7 @@ Item { Layout.preferredWidth: 180 Layout.preferredHeight: 48 - visible: current_ticker_infos.is_smartchain_test_coin + visible: current_ticker_infos.is_faucet_coin DefaultButton { diff --git a/src/app/app.cpp b/src/app/app.cpp index d27000f8d9..d7cd93d9a7 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -180,6 +180,8 @@ namespace atomic_dex bool application::has_coins_with_balance() { + // TODO: Does this ignore test coins? + // Simple view on fresh wallet with only test coins from faucet returns `no tradable assets` auto* portfolio_page = get_portfolio_page(); auto* portfolio_mdl = portfolio_page->get_portfolio(); auto portfolio_data = portfolio_mdl->get_underlying_data(); diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index 51a06c6634..6ec8039b6b 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -140,6 +140,11 @@ namespace atomic_dex { return std::any_of(g_default_coins.begin(), g_default_coins.end(), [ticker](std::string x) { return ticker == x; }); } + bool + is_faucet_coin(std::string ticker) + { + return std::any_of(g_faucet_coins.begin(), g_faucet_coins.end(), [ticker](std::string x) { return ticker == x; }); + } void from_json(const nlohmann::json& j, coin_config& cfg) @@ -151,7 +156,6 @@ namespace atomic_dex j.at("active").get_to(cfg.active); j.at("explorer_url").get_to(cfg.explorer_url); cfg.has_memos = false; - cfg.gui_ticker = j.contains("gui_coin") ? j.at("gui_coin").get() : cfg.ticker; cfg.parent_coin = j.contains("parent_coin") ? j.at("parent_coin").get() : cfg.ticker; cfg.minimal_claim_amount = cfg.is_claimable ? j.at("minimal_claim_amount").get() : "0"; @@ -161,8 +165,9 @@ namespace atomic_dex cfg.is_claimable = j.count("is_claimable") > 0; cfg.is_custom_coin = j.contains("is_custom_coin") ? j.at("is_custom_coin").get() : false; cfg.is_testnet = j.contains("is_testnet") ? j.at("is_testnet").get() : false; - cfg.wallet_only = is_wallet_only(cfg.ticker) ? is_wallet_only(cfg.ticker) : j.contains("wallet_only") ? j.at("wallet_only").get() : false; - cfg.default_coin = is_default_coin(cfg.ticker); + cfg.wallet_only = is_wallet_only(cfg.ticker) ? is_wallet_only(cfg.ticker) : j.contains("wallet_only") ? j.at("wallet_only").get() : false; + cfg.default_coin = is_default_coin(cfg.ticker); + cfg.is_faucet_coin = is_faucet_coin(cfg.ticker); if (j.contains("other_types")) { diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index ce2bd3f098..6a4bafbd93 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -62,6 +62,7 @@ namespace atomic_dex bool is_claimable{false}; bool has_memos{false}; bool is_custom_coin{false}; + bool is_faucet_coin{false}; bool currently_enabled{false}; bool has_parent_fees_ticker{false}; ///< True if parent fees is different from current ticker eg: ERC20 tokens bool is_erc_family{false}; @@ -92,4 +93,5 @@ namespace atomic_dex void print_coins(std::vector coins); bool is_wallet_only(std::string ticker); bool is_default_coin(std::string ticker); + bool is_faucet_coin(std::string ticker); } // namespace atomic_dex \ No newline at end of file diff --git a/src/core/atomicdex/constants/dex.constants.hpp b/src/core/atomicdex/constants/dex.constants.hpp index 98820c9583..e399e89a06 100644 --- a/src/core/atomicdex/constants/dex.constants.hpp +++ b/src/core/atomicdex/constants/dex.constants.hpp @@ -14,6 +14,13 @@ namespace atomic_dex "LTC-segwit", "DGB-segwit", }; + inline const std::vector g_faucet_coins{ + "DOC", + "MARTY", + "RICK", + "MORTY", + "ZOMBIE", + }; inline const std::vector g_wallet_only_coins{ "ARRR-BEP20", "RBTC", diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index 9d6fffa7ea..14f35759b5 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -267,7 +267,7 @@ namespace atomic_dex {"blocks_left", 1}, {"transactions_left", 0}, {"current_block", 1}, - {"is_smartchain_test_coin", false}, + {"is_faucet_coin", false}, {"qrcode_address", ""}, {"segwit_supported", false}}; std::error_code ec; @@ -300,7 +300,7 @@ namespace atomic_dex obj["blocks_left"] = static_cast(tx_state.blocks_left); obj["transactions_left"] = static_cast(tx_state.transactions_left); obj["current_block"] = static_cast(tx_state.current_block); - obj["is_smartchain_test_coin"] = coin_info.ticker == "RICK" || coin_info.ticker == "MORTY" || coin_info.ticker == "ZOMBIE"; + obj["is_faucet_coin"] = coin_info.is_faucet_coin; std::error_code ec; if (!mm2_system.is_zhtlc_coin_ready(coin_info.ticker)) From 579c3aeb8f17f7b2f73854395253751598d02d3e Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 15 Jun 2023 03:09:10 +0800 Subject: [PATCH 154/251] add close button for faucet response modal --- .../Dex/Wallet/ClaimFaucetResultModal.qml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/atomic_defi_design/Dex/Wallet/ClaimFaucetResultModal.qml b/atomic_defi_design/Dex/Wallet/ClaimFaucetResultModal.qml index 7e74f78fd2..203658f13b 100644 --- a/atomic_defi_design/Dex/Wallet/ClaimFaucetResultModal.qml +++ b/atomic_defi_design/Dex/Wallet/ClaimFaucetResultModal.qml @@ -24,5 +24,15 @@ MultipageModal { text_value: claiming_faucet_rpc_result && claiming_faucet_rpc_result.message ? claiming_faucet_rpc_result.message : "" } + + CancelButton + { + Layout.preferredWidth: 300 + text: qsTr("Close") + Layout.topMargin: 20 + Layout.alignment: Qt.AlignCenter + radius: 18 + onClicked: close() + } } } From 3dad871407d5308e484488335145ff5ebd1a8422 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 15 Jun 2023 03:31:27 +0800 Subject: [PATCH 155/251] improve contrast on filter "All" line --- atomic_defi_design/Dex/Constants/Style.qml | 2 +- atomic_defi_design/assets/languages/atomic_defi_de.ts | 8 ++++++++ atomic_defi_design/assets/languages/atomic_defi_en.ts | 8 ++++++++ atomic_defi_design/assets/languages/atomic_defi_es.ts | 8 ++++++++ atomic_defi_design/assets/languages/atomic_defi_fr.ts | 8 ++++++++ atomic_defi_design/assets/languages/atomic_defi_ru.ts | 8 ++++++++ atomic_defi_design/assets/languages/atomic_defi_tr.ts | 8 ++++++++ 7 files changed, 49 insertions(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 9f7ed893d5..e53a2422bf 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -258,7 +258,7 @@ QtObject { function getCoinColor(ticker) { let info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) - if (!info.type) { return dark_theme ? colorCoin["default"] : colorCoinDark["default"] } + if (!info.type) { return colorWhite3 } let color = getCoinGroupTextColor(info.type) let base_ticker = atomic_qt_utilities.retrieve_main_ticker(ticker) if (colorCoin.hasOwnProperty(base_ticker) && !dark_theme) diff --git a/atomic_defi_design/assets/languages/atomic_defi_de.ts b/atomic_defi_design/assets/languages/atomic_defi_de.ts index ce5680beed..a4493b0f88 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_de.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_de.ts @@ -522,6 +522,14 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456
+ + ClaimFaucetResultModal + + + Close + Schließen + + ClaimRewardsModal diff --git a/atomic_defi_design/assets/languages/atomic_defi_en.ts b/atomic_defi_design/assets/languages/atomic_defi_en.ts index 65eedbca04..6899dad1c9 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_en.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_en.ts @@ -521,6 +521,14 @@ + + ClaimFaucetResultModal + + + Close + + + ClaimRewardsModal diff --git a/atomic_defi_design/assets/languages/atomic_defi_es.ts b/atomic_defi_design/assets/languages/atomic_defi_es.ts index 1db7bb15f4..08582df328 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_es.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_es.ts @@ -521,6 +521,14 @@ + + ClaimFaucetResultModal + + + Close + Cerrar + + ClaimRewardsModal diff --git a/atomic_defi_design/assets/languages/atomic_defi_fr.ts b/atomic_defi_design/assets/languages/atomic_defi_fr.ts index 81f0ff3168..0281cd7df4 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_fr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_fr.ts @@ -521,6 +521,14 @@ + + ClaimFaucetResultModal + + + Close + Fermer + + ClaimRewardsModal diff --git a/atomic_defi_design/assets/languages/atomic_defi_ru.ts b/atomic_defi_design/assets/languages/atomic_defi_ru.ts index 35377d3599..b76edaa350 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_ru.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_ru.ts @@ -521,6 +521,14 @@ + + ClaimFaucetResultModal + + + Close + Закрыть + + ClaimRewardsModal diff --git a/atomic_defi_design/assets/languages/atomic_defi_tr.ts b/atomic_defi_design/assets/languages/atomic_defi_tr.ts index 8709f1d98a..cd9be8da99 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_tr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_tr.ts @@ -521,6 +521,14 @@ + + ClaimFaucetResultModal + + + Close + Kapat + + ClaimRewardsModal From 8c1661536b5041936008e1d7a35c4926be4f1570 Mon Sep 17 00:00:00 2001 From: gcharang <21151592+gcharang@users.noreply.github.com> Date: Mon, 19 Jun 2023 01:17:36 +0530 Subject: [PATCH 156/251] updates domain --- cmake/project.metadata.cmake | 2 +- src/core/atomicdex/api/faucet/faucet.cpp | 2 +- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 2 +- src/core/atomicdex/api/mm2/mm2.hpp | 2 +- src/core/atomicdex/services/ip/ip.checker.service.cpp | 2 +- src/core/atomicdex/services/price/global.provider.cpp | 2 +- src/core/atomicdex/services/update/update.checker.service.cpp | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index 1d4c5ad090..52fa2fe95c 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -16,7 +16,7 @@ set(DEX_SECOND_PRIMARY_COIN "KMD") option(DISABLE_GEOBLOCKING "Enable to disable geoblocking (for dev purpose)" OFF) set(DEX_REPOSITORY_OWNER ${DEX_COMPANY}) set(DEX_REPOSITORY_NAME "atomicDEX-Desktop") -set(DEX_CHECKSUM_API_URL "https://komodo.live/static/checksum.json") +set(DEX_CHECKSUM_API_URL "https://komodo.earth/static/checksum.json") if (APPLE) set(DEX_APPDATA_FOLDER "AtomicDex Desktop") else () diff --git a/src/core/atomicdex/api/faucet/faucet.cpp b/src/core/atomicdex/api/faucet/faucet.cpp index 2fb699ceb1..06e2e44cb3 100644 --- a/src/core/atomicdex/api/faucet/faucet.cpp +++ b/src/core/atomicdex/api/faucet/faucet.cpp @@ -23,7 +23,7 @@ namespace { - constexpr const char* g_faucet_api_endpoint = "https://faucet.komodo.live/faucet/"; + constexpr const char* g_faucet_api_endpoint = "https://faucet.komodo.earth/faucet/"; const auto g_faucet_api_client = std::make_unique(FROM_STD_STR(g_faucet_api_endpoint)); } // namespace diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index e596de60c7..02bd2b109a 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -10,7 +10,7 @@ namespace { - constexpr const char* g_komodo_prices_endpoint = "https://prices.komodo.live:1313"; + constexpr const char* g_komodo_prices_endpoint = "https://prices.komodo.earth:1313"; constexpr const char* g_komodo_prices_endpoint_fallback = "https://prices.cipig.net:1717"; web::http::client::http_client_config g_komodo_prices_cfg{[]() diff --git a/src/core/atomicdex/api/mm2/mm2.hpp b/src/core/atomicdex/api/mm2/mm2.hpp index ae8c9f170d..4c55afafe8 100644 --- a/src/core/atomicdex/api/mm2/mm2.hpp +++ b/src/core/atomicdex/api/mm2/mm2.hpp @@ -34,7 +34,7 @@ namespace ag = antara::gaming; namespace atomic_dex::mm2 { - inline constexpr const char* g_etherscan_proxy_endpoint = "https://komodo.live:3334"; + inline constexpr const char* g_etherscan_proxy_endpoint = "https://komodo.earth:3334"; inline std::unique_ptr g_etherscan_proxy_http_client{ std::make_unique(FROM_STD_STR(g_etherscan_proxy_endpoint))}; inline std::unique_ptr g_qtum_proxy_http_client{ diff --git a/src/core/atomicdex/services/ip/ip.checker.service.cpp b/src/core/atomicdex/services/ip/ip.checker.service.cpp index ec9880d4df..26223954cd 100644 --- a/src/core/atomicdex/services/ip/ip.checker.service.cpp +++ b/src/core/atomicdex/services/ip/ip.checker.service.cpp @@ -33,7 +33,7 @@ namespace return cfg; }()}; - t_http_client_ptr g_ip_proxy_client{std::make_unique(FROM_STD_STR("https://komodo.live:3335"), g_ip_cfg)}; + t_http_client_ptr g_ip_proxy_client{std::make_unique(FROM_STD_STR("https://komodo.earth:3335"), g_ip_cfg)}; t_http_client_ptr g_ipify_client{std::make_unique(FROM_STD_STR("https://api.ipify.org"), g_ip_cfg)}; pplx::task diff --git a/src/core/atomicdex/services/price/global.provider.cpp b/src/core/atomicdex/services/price/global.provider.cpp index 25fc2feecc..465d989bfe 100644 --- a/src/core/atomicdex/services/price/global.provider.cpp +++ b/src/core/atomicdex/services/price/global.provider.cpp @@ -29,7 +29,7 @@ namespace cfg.set_timeout(std::chrono::seconds(5)); return cfg; }()}; - t_http_client_ptr g_openrates_client = std::make_unique(FROM_STD_STR("https://rates.komodo.live"), g_openrates_cfg); + t_http_client_ptr g_openrates_client = std::make_unique(FROM_STD_STR("https://rates.komodo.earth"), g_openrates_cfg); pplx::cancellation_token_source g_token_source; pplx::task diff --git a/src/core/atomicdex/services/update/update.checker.service.cpp b/src/core/atomicdex/services/update/update.checker.service.cpp index db89277ca7..e366ae316e 100644 --- a/src/core/atomicdex/services/update/update.checker.service.cpp +++ b/src/core/atomicdex/services/update/update.checker.service.cpp @@ -29,7 +29,7 @@ namespace { - constexpr const char* g_komodolive_endpoint = "https://komodo.live/adexproversion"; + constexpr const char* g_komodolive_endpoint = "https://komodo.earth/adexproversion"; t_http_client_ptr g_komodolive_client{std::make_unique(FROM_STD_STR(g_komodolive_endpoint))}; pplx::task async_check_retrieve() From a55e94fca82e0edaa4b916c2a0e7b97f620c2f0d Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 19 Jun 2023 17:30:39 +0800 Subject: [PATCH 157/251] remove matic gas urls, make param optional --- src/core/atomicdex/api/mm2/rpc.enable.cpp | 20 ++++++++++++++++++-- src/core/atomicdex/api/mm2/rpc.enable.hpp | 8 ++++---- src/core/atomicdex/config/coins.cfg.hpp | 2 +- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/core/atomicdex/api/mm2/rpc.enable.cpp b/src/core/atomicdex/api/mm2/rpc.enable.cpp index b0a4fa56a5..a553a8c85b 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.cpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.cpp @@ -36,8 +36,24 @@ namespace atomic_dex::mm2 } case CoinType::Matic: { - j["gas_station_url"] = cfg.is_testnet ? cfg.testnet_matic_gas_station_url : cfg.matic_gas_station_url; - j["gas_station_decimals"] = cfg.matic_gas_station_decimals; + if (cfg.is_testnet) + { + if (cfg.testnet_matic_gas_station_url.has_value()) + { + j["gas_station_url"] = cfg.testnet_matic_gas_station_url.value(); + } + } + else + { + if (cfg.matic_gas_station_url.has_value()) + { + j["gas_station_url"] = cfg.matic_gas_station_url.value(); + } + } + if (cfg.matic_gas_station_decimals.has_value()) + { + j["gas_station_decimals"] = cfg.matic_gas_station_decimals.value(); + } } default: j["urls"] = cfg.urls; diff --git a/src/core/atomicdex/api/mm2/rpc.enable.hpp b/src/core/atomicdex/api/mm2/rpc.enable.hpp index 62c6ebe02f..9d5a14486d 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.hpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.hpp @@ -34,11 +34,11 @@ namespace atomic_dex::mm2 bool is_testnet{false}; const std::string swap_contract_address; std::optional fallback_swap_contract_address{std::nullopt}; - const std::size_t matic_gas_station_decimals{9}; + std::optional matic_gas_station_decimals{9}; std::string gas_station_url{"https://ethgasstation.info/json/ethgasAPI.json"}; - std::string matic_gas_station_url{"https://gasstation-mainnet.matic.network/"}; - std::string testnet_matic_gas_station_url{"https://gasstation-mumbai.matic.today/"}; - std::string type; ///< QRC-20 ? + std::optional matic_gas_station_url{std::nullopt}; + std::optional testnet_matic_gas_station_url{std::nullopt}; + std::optional type; ///< QRC-20 ? bool with_tx_history{true}; }; diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index 6a4bafbd93..e1e2f7c348 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -33,7 +33,7 @@ namespace atomic_dex struct coin_config { static constexpr const char* erc_gas_stations = "https://ethgasstation.info/json/ethgasAPI.json"; - static constexpr const char* matic_gas_stations = "https://gasstation-mainnet.matic.network/"; + std::optional matic_gas_stations{std::nullopt}; using electrum_servers = std::vector; using nodes = std::vector; using url_list = std::vector; From 92186e8cb2933f95528c30e1f5d68d11ea7ea373 Mon Sep 17 00:00:00 2001 From: naezith Date: Wed, 5 Jul 2023 13:07:42 +0300 Subject: [PATCH 158/251] atomicDEX Desktop to Komodo Wallet --- .github/workflows/atomicdex-desktop-cd.yml | 2 +- .github/workflows/atomicdex-desktop-ci.yml | 2 +- README.md | 2 +- assets/config/game.config.maker.json | 2 +- cmake/project.metadata.cmake | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-cd.yml b/.github/workflows/atomicdex-desktop-cd.yml index 8231d00f83..ddf0312b74 100644 --- a/.github/workflows/atomicdex-desktop-cd.yml +++ b/.github/workflows/atomicdex-desktop-cd.yml @@ -7,7 +7,7 @@ on: env: DEX_PROJECT_NAME: "atomicdex-desktop" - DEX_DISPLAY_NAME: "AtomicDex Desktop" + DEX_DISPLAY_NAME: "Komodo Wallet" DEX_COMPANY: "KomodoPlatform" DEX_VERSION: "0.5.8" DEX_WEBSITE: "https://atomicdex.io/" diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 6c473f73fa..73ec0de1a4 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -14,7 +14,7 @@ env: DEX_RPCPORT: 7762 DEX_RPC: "http://127.0.0.1:7762" DEX_PROJECT_NAME: "atomicdex-desktop" - DEX_DISPLAY_NAME: "AtomicDex Desktop" + DEX_DISPLAY_NAME: "Komodo Wallet" DEX_COMPANY: "KomodoPlatform" DEX_VERSION: "0.5.8" DEX_WEBSITE: "https://atomicdex.io/" diff --git a/README.md b/README.md index ab1040c4b2..e771578b30 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ AtomicDEX is a secure wallet and non-custodial decentralized exchange rolled into one application. Store your coins, trade peer-to-peer with minimal fees and never give up control over your digital assets. -AtomicDEX Desktop has been tested on the following platforms: +Komodo Wallet has been tested on the following platforms: - Windows 10 - Linux (Ubuntu 18.04+) diff --git a/assets/config/game.config.maker.json b/assets/config/game.config.maker.json index 666850111a..390e7d0647 100644 --- a/assets/config/game.config.maker.json +++ b/assets/config/game.config.maker.json @@ -12,7 +12,7 @@ "native_desktop_mode": false, "scale_mode": "fit", "window_height": 900.0, - "window_title": "atomicDEX Desktop", + "window_title": "Komodo Wallet", "window_width": 1280.0, "no_style": false, "mouse_grabbed": false, diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index 52fa2fe95c..ec5dc881ca 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -3,8 +3,8 @@ set(DEX_API "mm2") set(DEX_RPCPORT 7762) set(DEX_RPC "http://127.0.0.1:7762") set(DEX_PROJECT_NAME "atomicdex-desktop") -set(DEX_DISPLAY_NAME "AtomicDEX Desktop") -set(DEX_MAINTENANCE_TOOL_NAME "AtomicDEX Maintenance Tool") +set(DEX_DISPLAY_NAME "Komodo Wallet") +set(DEX_MAINTENANCE_TOOL_NAME "Komodo Wallet Maintenance Tool") set(DEX_COMPANY "KomodoPlatform") set(DEX_WEBSITE "https://atomicdex.io/") set(DEX_VERSION "0.5.8") @@ -18,7 +18,7 @@ set(DEX_REPOSITORY_OWNER ${DEX_COMPANY}) set(DEX_REPOSITORY_NAME "atomicDEX-Desktop") set(DEX_CHECKSUM_API_URL "https://komodo.earth/static/checksum.json") if (APPLE) - set(DEX_APPDATA_FOLDER "AtomicDex Desktop") + set(DEX_APPDATA_FOLDER "Komodo Wallet") else () set(DEX_APPDATA_FOLDER "atomic_qt") endif () From b661f7633e9e50579efef37580e757773c443111 Mon Sep 17 00:00:00 2001 From: naezith Date: Wed, 5 Jul 2023 13:18:48 +0300 Subject: [PATCH 159/251] AtomicDEX to Komodo Wallet --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/workflows/atomicdex-desktop-ci.yml | 6 +++--- README.md | 20 +++++++++---------- ci_tools_atomic_dex/README.md | 10 +++++----- .../ci_scripts/ATOMICDEXinstaller_script.iss | 2 +- .../ci_tools_atomic_dex.nimble | 2 +- ci_tools_atomic_dex/src/tests.nim | 6 +++--- src/core/atomicdex/pages/qt.settings.page.cpp | 4 ++-- 8 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b9a906e883..486fea1015 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,7 +26,7 @@ Please describe what you expected to happen. **Operating Environment(s):** - OS: [e.g. Windows/OSX/Linux. If Linux, include distro. ] - OS version: [e.g. 7/10/11, 10.13/10.15, 18.04/20.04 ] - - AtomicDEX Version: [e.g. 0.5.8] + - Komodo Wallet Version: [e.g. 0.5.8] - Build branch: [e.g. master/dev] diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 73ec0de1a4..eac54935a0 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -215,7 +215,7 @@ jobs: - - name: Build AtomicDEX (MacOS) + - name: Build Komodo Wallet (MacOS) if: runner.os == 'macOS' run: | xcrun --sdk macosx --show-sdk-path @@ -239,7 +239,7 @@ jobs: - - name: Build AtomicDEX (Linux) + - name: Build Komodo Wallet (Linux) if: runner.os == 'Linux' run: | export QT_INSTALL_CMAKE_PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/gcc_64/lib/cmake @@ -257,7 +257,7 @@ jobs: ./ci_tools_atomic_dex bundle ${{ matrix.type }} - - name: Build AtomicDEX (Windows) + - name: Build Komodo Wallet (Windows) if: runner.os == 'Windows' shell: powershell run: | diff --git a/README.md b/README.md index e771578b30..8c2015d765 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +

@@ -47,9 +47,9 @@

-## What is AtomicDEX? +## What is Komodo Wallet? -AtomicDEX is a secure wallet and non-custodial decentralized exchange rolled into one application. Store your coins, +Komodo Wallet is a secure wallet and non-custodial decentralized exchange rolled into one application. Store your coins, trade peer-to-peer with minimal fees and never give up control over your digital assets. Komodo Wallet has been tested on the following platforms: @@ -72,16 +72,16 @@ feedback. ## Useful links -- :book: [AtomicDEX Documentation](https://developers.komodoplatform.com/basic-docs/atomicdex/atomicdex-tutorials/introduction-to-atomicdex.html) -- :link: [AtomicDEX Website](https://atomicdex.io/) -- :speech_balloon: [AtomicDEX Discord](https://discord.gg/tvp96Gf) -- :hammer_and_wrench: [AtomicDEX Development Boards](https://github.com/KomodoPlatform/atomicDEX-Desktop/projects) -- :notebook_with_decorative_cover: [AtomicDex Wiki](https://github.com/KomodoPlatform/atomicDEX-Desktop/wiki/) +- :book: [Komodo Wallet Documentation](https://developers.komodoplatform.com/basic-docs/atomicdex/atomicdex-tutorials/introduction-to-atomicdex.html) +- :link: [Komodo Wallet Website](https://atomicdex.io/) +- :speech_balloon: [Komodo Wallet Discord](https://discord.gg/tvp96Gf) +- :hammer_and_wrench: [Komodo Wallet Development Boards](https://github.com/KomodoPlatform/atomicDEX-Desktop/projects) +- :notebook_with_decorative_cover: [Komodo Wallet Wiki](https://github.com/KomodoPlatform/atomicDEX-Desktop/wiki/) -## AtomicDEX mobile +## Komodo Wallet mobile -Check out AtomicDEX mobile, available for [Android and iOS](https://atomicdex.io) +Check out Komodo Wallet mobile, available for [Android and iOS](https://atomicdex.io) ## Self-Hosted Dependencies diff --git a/ci_tools_atomic_dex/README.md b/ci_tools_atomic_dex/README.md index ccd2ff8e1f..81ea9c9f98 100644 --- a/ci_tools_atomic_dex/README.md +++ b/ci_tools_atomic_dex/README.md @@ -1,4 +1,4 @@ -# AtomicDEX Pro alpha build instructions +# Komodo Wallet Pro alpha build instructions ## Prerequisites @@ -140,7 +140,7 @@ mv packages_commandline.json packages_official.json cd - ``` -## Build AtomicDEX Pro +## Build Komodo Wallet Pro Please clone with submodules initialization : `git clone --recurse-submodules --remote-submodules https://github.com/KomodoPlatform/atomicDEX-Pro.git` @@ -176,7 +176,7 @@ nimble build ./ci_tools_atomic_dex build release ``` -## Bundle AtomicDEX Pro +## Bundle Komodo Wallet Pro ### Windows @@ -202,7 +202,7 @@ nimble build -## Create AtomicDEX Pro Installer +## Create Komodo Wallet Pro Installer ### Windows @@ -229,7 +229,7 @@ chmod +x QtInstallerFramework-linux-x64.run e.g.: In `.bashrc` add: `export QT_IFW_PATH=~/Qt/QtIFW-3.2.2` -- Build AtomicDex Pro `./ci_tools_atomic_dex build release` +- Build Komodo Wallet Pro `./ci_tools_atomic_dex build release` - Run `ci_tools_atomic_dex\create_installer_linux.sh` script, pass build type as argument to script diff --git a/ci_tools_atomic_dex/ci_scripts/ATOMICDEXinstaller_script.iss b/ci_tools_atomic_dex/ci_scripts/ATOMICDEXinstaller_script.iss index 17d94e2837..11c3bc373b 100644 --- a/ci_tools_atomic_dex/ci_scripts/ATOMICDEXinstaller_script.iss +++ b/ci_tools_atomic_dex/ci_scripts/ATOMICDEXinstaller_script.iss @@ -1,7 +1,7 @@ ; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! -#define MyAppName "AtomicDEX-Desktop" +#define MyAppName "Komodo-Wallet" #define MyAppVersion "0.5.0" #define MyAppPublisher "Komodo Platform" #define MyAppURL "https://www.komodoplatform.com/" diff --git a/ci_tools_atomic_dex/ci_tools_atomic_dex.nimble b/ci_tools_atomic_dex/ci_tools_atomic_dex.nimble index b684a5b138..189a9d0ac4 100644 --- a/ci_tools_atomic_dex/ci_tools_atomic_dex.nimble +++ b/ci_tools_atomic_dex/ci_tools_atomic_dex.nimble @@ -2,7 +2,7 @@ version = "0.1.0" author = "romanszterg" -description = "AtomicDex CI utilities" +description = "Komodo Wallet CI utilities" license = "MIT" srcDir = "src" bin = @["ci_tools_atomic_dex"] diff --git a/ci_tools_atomic_dex/src/tests.nim b/ci_tools_atomic_dex/src/tests.nim index 78ee2980ff..0508b9cabb 100644 --- a/ci_tools_atomic_dex/src/tests.nim +++ b/ci_tools_atomic_dex/src/tests.nim @@ -32,20 +32,20 @@ proc run_tests*(build_type: string, osx_sdk_path: string, compiler_path: string) echo os.getCurrentDir() discard osproc.execCmd("ls") # os.setCurrentDir(os.getCurrentDir().joinPath("bin").joinPath(os.getEnv("DEX_PROJECT_NAME") & "_tests.app").joinPath("Contents").joinPath("MacOS")) - echo "Running AtomicDex Pro Unit tests" + echo "Running Komodo Wallet Pro Unit tests" discard osproc.execCmd("./" & os.getEnv("DEX_PROJECT_NAME") & "_tests --reporters=xml --out=" & os.getEnv("DEX_PROJECT_NAME") & "-tests-result.xml -s") echo "Successfully Generated", os.getEnv("DEX_PROJECT_NAME"), "-tests-result.xml" when defined(linux): echo os.getCurrentDir() os.setCurrentDir(os.getCurrentDir().joinPath("bin").joinPath("AntaraAtomicDexTestsAppDir").joinPath("usr").joinPath("bin")) - echo "Running AtomicDex Pro Unit tests" + echo "Running Komodo Wallet Pro Unit tests" discard osproc.execCmd("./" & os.getEnv("DEX_PROJECT_NAME") & "_tests --reporters=xml --out=" & os.getEnv("DEX_PROJECT_NAME") & "-tests-result.xml -s") echo "Successfully Generated", os.getEnv("DEX_PROJECT_NAME"), "-tests-result.xml" when defined(windows): echo os.getCurrentDir() os.setCurrentDir(os.getCurrentDir().joinPath("bin")) - echo "Running AtomicDex Pro Unit tests" + echo "Running Komodo Wallet Pro Unit tests" discard osproc.execCmd(".\\" & os.getEnv("DEX_PROJECT_NAME") & "_tests --reporters=xml --out=" & os.getEnv("DEX_PROJECT_NAME") & "-tests-result.xml -s") echo "Successfully Generated", os.getEnv("DEX_PROJECT_NAME"), "-tests-result.xml" diff --git a/src/core/atomicdex/pages/qt.settings.page.cpp b/src/core/atomicdex/pages/qt.settings.page.cpp index 269a204bd4..e63e29ab95 100644 --- a/src/core/atomicdex/pages/qt.settings.page.cpp +++ b/src/core/atomicdex/pages/qt.settings.page.cpp @@ -123,9 +123,9 @@ namespace atomic_dex auto path = QString{":/assets/languages/atomic_defi_" + new_lang}; - SPDLOG_INFO("Locale before parsing AtomicDEX settings: {}", QLocale().name().toStdString()); + SPDLOG_INFO("Locale before parsing Komodo Wallet settings: {}", QLocale().name().toStdString()); QLocale::setDefault(get_locale(new_lang.toStdString())); - SPDLOG_INFO("Locale after parsing AtomicDEX settings: {}", QLocale().name().toStdString()); + SPDLOG_INFO("Locale after parsing Komodo Wallet settings: {}", QLocale().name().toStdString()); if (!this->m_translator.load(path)) { SPDLOG_ERROR("Failed to load {} translation in {}.qm", new_lang.toStdString(), path.toStdString()); From f5c4ca5566f299cf9b6f20d493783814b291598f Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 08:22:30 +0300 Subject: [PATCH 160/251] change app logos and images --- assets/logo/dex-logo-64.png | Bin 15220 -> 1232 bytes assets/logo/dex-logo-big.png | Bin 9236 -> 2908 bytes assets/logo/dex-logo.icns | Bin 145000 -> 179235 bytes assets/logo/dex-logo.ico | Bin 23130 -> 5211 bytes assets/logo/dex-logo.png | Bin 14353 -> 12899 bytes assets/logo/dex-tray-icon.png | Bin 5369 -> 5211 bytes assets/themes/Binance - Dark/dex-logo-big.png | Bin 24016 -> 2908 bytes assets/themes/Binance - Dark/dex-logo.png | Bin 29144 -> 2720 bytes .../themes/Default - Light/dex-logo-big.png | Bin 9713 -> 2908 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/logo/dex-logo-64.png b/assets/logo/dex-logo-64.png index c7d99459d299c3c5c0539fa59f55af674e6b6883..1e65c39a1a2802029314846cef116899744f40c1 100644 GIT binary patch delta 1213 zcmV;u1Va1tcF+lsBYyx1a7bBm000XU000XU0RWnu7ytkO0drDELIAGL9O(c600d`2 zO+f$vv5yP;Xqg}| zL16-y2~sAonIK_;KT;$&i5s7!vy`~N?>)tBBA-rQr>_&yKYz}MG6P_&ALlN-)j_#H zJI`8&wF~C&pE^8_MxzIMiI`05aIHg$eyoffdMRjSCkZlrhzSiDtze-;g?ub16R)TT zu4YUVolst0(~yAeLO>{VA_`7LW$-f0Zd^LT!M0Zy#Cy5Ny|8z^)RfU6D#AVMPL9Yki4yOa(d|D*RbH(wIqfNdgeQjtGV#f!(A% zgz0LVMbepz%S~*4kc?a6*AcNujGpTFzA>&r1@Mg`fi+ao&DDcsQNz8nR{-ysh?0`e zahM@l*FP}7nNzB#0_YNMHW;Hy-qpUM^eBqN>3_cF4C@xl~pZ&o54vuLb<|GzC!8%b=!s-f*&fEkIE`HRYqG zbZl&cuLUTI=R4(LE!=(XvPpXd&}k?Tf3OfebIc{z>E1cVF&|9y+w;7F?*>mhC=w9oMP|~PQ4ioh z+EZOGmds0Y>Iv)?mFX7keZmTM(=y17CVwEE1(T1`r(hSox5keF{Iy^B1XPfe-ar7~ ziv7ps@E<+*>Yq7*->0Dn6;v`pOjpRc<`)6KFH^X)1bADp5rzTT1B9JHs2G_cGr0-_ zD1^Yw&q)IO$66Im*d1V7s?S$Q<|pJ57_yt(Re)X<`nFPp`v)&@gf8JKr3}y~oqw@L zxL20pI!8fZdkrVlSv&2~oGXOT#499f5wQK-=UA~zGWVH7%A6zq$b0EBU@{WwF5hH2 z*0-QSWV4rEnDDvKa@4ecP0lcO@|vdvv%_ zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3;uk|amYWdHjq<_K=P*>P+YnH$XU=P4|rDp}3$ zk1aDSl9?45>0ypVp$fpC{eS-VdHxsw)Yjq?Q>nS-{PIt1vH8w7^}YWz`@egm{onqH zpC9q}zr6nZ`hn-Az}Im9TKebxo!8UvU-*888-IQMsh^+t`nk~O2j2?@eX{49_4AOt z?(ggFbCRd+`%P}O{5FHoY7hq&|cTQUQG|9ss4{)it!6%QsebL9s6JMJY$a=&9Mn4bghOMJa4 zXsGd$*_!{bFBAfUZ`_Es08m*?cOw|SBxc@CN6n`b$B z3>U`jd^+xz?|yskANlP`^&k1o|4*KKcqt7moF_JZ_J(SIR5;8ap@ClA9a`)WZooueG_O z^X^jPIKzj{@9#EtK5dM0Hdb0QhbQb^R>lgwWZyf9D z55X|@+)u=5ab-NQYR+Tslgc5Wv0&7P^sJNbb6QRf50rjl>=avk?Hu6%n^{zpXGFa9 zuGqMV5EEfU0AyW)AZqE1&5`DudgY~n*I6*t%4HRz0Mk1!Gwr90%rEv`uZNne$;Bj& z@!x%Y{_Pvw2>s2~QD550RVRv#8iWnZ;kcf9bc)+8?UkR}MhTcOB+RJe4{qRKY=S~% zl~C9ft4F!n*O?XjYY_qb+B>JuJ0)V~Ip7jOQHgY4wg-(uIob0vQRn!G6L2X$jcah3 zb$z`<#3&)Q`wY)8$h*$l!U#JB%7)!3U;st6@9XpZ=Kt;MCfDXmK4Q05pNkU?mPvVl&SfNk&hceV zJQYudB?XvF7MktJ4Uq68s9VE5NfZa;;!7;;V*&j3=_5?u>)+ko#{Hzr-dI{rszc@{ z8QyN5j9VG=fUrByLzD#&7`U%rUsLgMb zc77mIk^HA9`Y|fyWkVtazm8v>&3a(WF`Fw^f?j6m^k>yeJQ%iUd0234o2DlGvyxb}kB=2nUvY%Em6MHLL=r0&)AOKthH(3D<`? zlQJe|)t*5pq^R$$9FY%UxA_l}ggr!O*0v%E z!aJc?q$%~f5sMxkF)D}Q)>bOqT_k$8F4DwCX2}Zhha2ULK2Rt-dDSUAQcr12Qf>8g z3pXSy$g{^tf)m7BrNg4Vrv)55US>$boGzjQ##_FpPrf(hJJK7#;uBwS6kUF#P*4y6 zAQ2jLtcMy@NfwxeORW{sj|)>oVLLiEL5S%)BEd(9ALgh05>S-`K`9B2^ja1?vspdO z?S)VWev#s7S>&^Y|8UTHU?u3~P&SA>>!MaQ0M?MzSw23LXfD+Cw-zj2fh;c)H0^J_ zl4CpKC(^|1g|RsV^{y&aJXwr}NKeAn!&8P1nNA8cp~(=VBEozZvn7xs45?uYa+rAH zvZUc@K#r$!c@*$|PVZrMp_`|okxdxWTr0b8w7Hf1Ky>$&6^nt31m)+7R#CZC(cnin zh*1gHGZfm;JK`2#M;}7!MumJ?g{1tB^Yus!BWX{6y=XX4@Uvi5@Wl$Ys0{(> zq#OzqGy-yfV92FMSDp^r_M~zVEdWReBO%Xnx=CLw0HdKkg`;o@JRg)wP~kYC+dk>D z@-r>iy9*6@qAo$ew}a>qu7gS-K~5*vV$kwQt7g>(>Qd5p7^a~aDq#*&gN6Tm@R>7p(uE8%+U z3-_cWNG!#o)8W3J$0J5YYLO|NmXDywlf0CEM1??aARVJ!p2$ zjv9Kn8!>wf5!NvmA-JM0jI|ME$OomxcEk{FBIZe+@=YFSR_LxaMfTQbK?E{JfkePi zYxR6EJYndwLPHEpM@k?~=emW;5xI7|TR6@Y7nsf6236vwn1M%j@j4;}kQFE=*Zh`L zM8XBCI^<*m+>IIz(Kk@piCf#n0E@&*0%W%rq6^VMvDs={fyl)DM8KxhK4iXT`;uPN zv)YfA{Y}WCI-dv*Tq6BBe?|>XMvaT4%L9u=aCaEY#r5#lz|emJuV6WcL7ISGyaI z(~HHHxTd~P5>UbO8^nPVaRZ2w1Wh4NI-mNcLLol#Y2;cxs9&)7uIc`}K>@E?2mrb| z)5_;T|A0A!0Oy4s!lu5AkGBzdRs#$dO|f>@O3Km@Nw|YMQHwQ4BAXg=_C;yJSv3;I zfErdRsu<(lDWzo>E~Z7{`$6@8z89JiAH_6nC95%0$+zsGiFJ;0>=b=CPBE!TsAezH zH!G+!@e-^Ubd0(9ke|HBc`?5GEW4bWd;(App1RbUI6zO%Z*dQ-IS_K9z!G zp7I0g<@@;<2n#Gb6_Hm=`wX=V;4cK_hS&u1?18(GWx_Rh{VMQw=g+%T*eu$!`Akg+ zRcitfO)cvWPKK!mJi7-GzNYzShrZ9UIYS4FyQ45sH#zx^2 z7Ii^ScCQbx7KD)w(o#S=st?sTK)$FU6eO^rP@{*~mOzW-rX1x$ViN_chA9@%%3~Iz z{G|IK_&i{*EqQ^xOYkb-bG-O)*YyHSU3k9W<9kD0bW&NA)*Hk<~{)k+!NFr1JgnN$qwz$iBAZ;Bt1BA`}Mv_0MGawe7 z!0$n_5{YPKDs!Mjw-yYv3V54;w>Pi}LQepaj;N&SgLuc~8@tb^E>}!fQGP6Q$T&&o z{N)713%YJ_YKn&Bwv{cb-C*cW)CV=((ET{G`-G1o1vpuo3DZI>lX8~OyY8sRG=pjW z4OvG6psG#)cqwv7(X0v$_Y$9(D1FS1L&A@8e+5IKAV*{b|L)xKM?4T0?;(fL{iA$v z89ap6-nQBPeN!!Z__%Z+rGsMGBdU;e%oG(-4M%1}2_8;9jM55kjkckDhWw(80s|nX zL@u6C>w-Fkt@sy?Or%$Um0M8f@gcjGdRvgEK(tmhjF7QW+(MdN%^E>Qxy;Re2tM?y z=Zdj^(h9w%5Wf_ZXyzQz^lXxwKxUY-_map>6f71fZU-105gN|Lge;0s9^{$myt@g4 z!B%=P09--*aZ-e-O*>@WYDtUofup2( z`lgVkcf;O#-41G?Pty2}%mn-T6DyUOk^q}QDpCk;H?6N1!M4(&TpLNjaVfR}`^e-7 z+7F`kIx-QK4}yZ(q$*ODe63c3X1L8pkUp>M5TU(8b7mR=Iheg_9MMm5s(m{{LhMT( zK3m0T zA9l~#2<1TX-!vkt<3}DHik@0AkgrRC>SGMjUk16w;kM+3RM?CnXq;4yUtS|^2=>r2 zrcs-8tI-O;a+_fKL;dn-!XT!VQBEs=sln~1F3mI$+R&RsnS~Mn`gjEngu>6*3HG^b z0obfM1EUS@*{CI1qaE_Qe>@9$7<2sT+BTwFZ;^&o?{_}}v115Z!(Uq6p+im86cBJ? zSGC?y&(o|Mhob#hwMy!Sr-~-?|9K<Ya5N2+yHnu2Sl)x+ij`OZ)dgea)<@v{xS9`Duiz#`a@GX!L#n*0Spg+(cJXeLmULIGhw zw!nC%iA{pRS)SsQqjKa275ptGx8mj6CI!T`f$m`~^{Tp*mUNzqSC+hnBAfNHX?#?+ z8~j*(=YdL9Gx7jwy^K(!W&rBHH_{l8hI664wrEzmQyd_`PIZpvA|3g$(Do&DIM9{` zvuV{f)nYzR*XPQ<)#3@7&-r@00rDaoQjHOD7V76z*LT+dj2?~6>^5I@eFb@zk?V$} zH8#aj#NLwnto2C=DnwPMP5_HtDgzohNC+V-b>;kGyr>-bg4c*(r*EID>@zR*8=oHV zZFFr_SPhdjsuK0Z$qW5JzV7rEO=r}y2pISPsHY;$Vf7=T`$xK3D5|TcR`czI^jc!T z^5K3Wm`34*;mUsqs$zl$oP-=Ltf^b;s$6+n@!v#|I=QX<3G~p;K+(s9BCXc{G=B-{ zx$y^0Y1i(M?x16D@`Jw=vg$KtSps1MBUiT`s_nPg5V4~+6 zg?1N_;D(@2my>RS0t~A%Q@@%zP;8I~CDx~r?w=+{+%{4U$#l&tAWveC0oRnz+$dN# z7Xh3Ai$yMUPvr*-9`X+#2Wu5Vwo9vfh@^jr3zidJC1az)EBLoSMt#*4rHEAX_n<(k zt9$dfS{~zQBDbQT6X`XZ2s5Q%5f1AY^rI>MY>kCo$Dl-sNLUG2pN5lN`@#x2lx-e> zGt|Ry_MZ+*r9Von&v#%OLwPCI9va)r>IWw?v||Y76Ei`je+nggC77HbZ9k z=!orcZ$)yW)c`>CW(38WA!eH)PVz;7t8V)cyZK5_>!+i2W^ig4z#)&hQt5R2BLX93 z>As_$A61k5e9;XR%Mlt?Cjz)redp_Yc$9O9JGgDk@aA%7BA9D@dbNSD_6qBEfBfeJ zfUFdKAlLLV7_XEH5bH^$qynX5SI3nV{4(+_F8do3Azs{e?f0YKN4a#9c6fE40F~3K z+O}|qBz~~a@>m367}Q$6tx+EabrTOvO@`o?&%d2|5*NKg{St{EVkyqX=N-(1?Y?8C zOVHeBs{Gh$laVciYPq!*a2Jz`s-=jzqJ08 zQ#7cPI%MZ|v#}*qcDo^v5~TcKE^5gpwVx8=H$O@V1o}=0$sV_F4GTri*RSR3?c}7b zZh-@}nlAXMy3wjEksZQ=8AV&xtN8$BX?hh)$NB0Y%3Dlpy;Y-p6dRmp#(Sb70Y##G z`rax>;;fiaeF5Y0>IAGfr?WeREXxE-Iu}40*H=N9!qcBE&urV4_&{ccI=vmz;G{_8U z^tf~3PRWIIld-s_YVUV20fG?cr9G-R!0jE0lsghZ_smmKi8iYwl0=f1Z5-@!31Hq2VJk+zfkp#VBtSJ_S)n-ux}?1uev z5FDzDhV^I`0!Zn+39BtZWnst(=AG5HDor(R|7dB}xz$4&<52uW?Cd>0@heU^$ORy5)cofzK|Kc|4B1K) z)zI+?u;8~-k2OclAk+cJ&>!JXc`!Z^E}t+TY8N8(NAHW}^FCYP`m;eWmbQG5un4o9 z8kxC_Ab_)^@0g@#>h9UDsi(iTmpCF+tuq{DGC}AEK;fxshzFpOszSb12;Llx^L*-) zZD{_vwWexB(n>vMK@a5|>n?3vkX7(h=(k8X8E269O89YhkiYV~SXT6x>~>=#!#O%g z9y^AaP*f59Y8ztQQni5?kZ~@N9|UApgPNEU^x|f*p{aR=(~u-+F{g>56jlCh|FiyS!5cY%5Dp%+g*CyBCnHgO> zdmyAV#0vzyv&{c=9dEv?QzH00TI!7@^B;FUafHFZQnGPqWkLkXaqsFOs(9q{zrn)>FA=9*3 zP3cn)h>PQQBJ)SB(ebj6N*lt&)nD*MHNvTUf#n4QdN~xvh zq_z;}g!vMZREdyqkoG5&N+)&e0rO!+m*Rc^dRBm|Xr9WaI@e+6v7r=+%;R2L3e);^ zCHwDwE`}e^rB2&M=s_#4S@k+}2l_R%SX*CsFFzJsAy)y-q>hK!5}^I4*NL@CH<2|n zwVqcrf-t&yM}|vVaCcAu^O-{p2edtMEle#qRVr;)Sw(i7`eMDifl6xSJFbZB>c^|x z1OT>(YP(}L70y+|NVMRC^#CGD8}-(9inY8UzSxV0%#)p1+$> zPfqdTbyO2uo%z$=@L7FRUa1}_T)R49TC3FT&LcC#J|qpJ2$`~9y5ckR`Rp;NQvGF< zsV=8#-vpqzUJHSoS&x!H_w%+c$~j~e1)lZF z)w}*i>vO|(ycqp8ve0~sV3*eMNS6^%`ZIQcA@l*dO{}O>)(q&1lwJc{%j2CUsoDek z*&-nqVL~797)GszA)+?nCUx+1mtk!+mWk|B(PYL0pi=?R)ymTpSB5Cp|-no0lK#_ZeSzV)NMbbO8b(G2SQaP!ZtRuC|9l+Pk0LNpM((X6;u zzX8ZQN!XoX1W|l)NfLmzwa&?JKNa0MlnXck20wlSpjpyVlQ(wsSQ$RR?B%$EN%Cx5h~iuTW0! z9MJl+e2#?D{rG01g99Ufp$kU3zWwEJhd1Ffym@TzYDH9ZZ9sopcu}=xy6_T^Q_BQ+ zJ@l=RUTV4ByXi zc6&(m^k?IZ>W}4S`LK^5*htM*57YqI-|Yii4d~Y7&rrYJ??T6~9)BZK(@M@l7%6FT z@6~n(l$ZSE6Py-aRYnZ{K65+tpIAB zCD>-t5xuqTq@!k!Hd)k#vynur;d_r5Su4vaY4ZJQrE%!fbOB{ks!1*S-J3?d5cwJ& zm!j9>Rn&1DZ@Uq=_hD5Piai2tR5e1sT zQ_LU_@i>A~nki}YKo&%ao+N}ycXJh@Ami@=!Gp1Zt+t>i#r%0bL^XREP}{RaLe?6< zW?ZjsSQ54NM3SE2$`#DLoi zr)XQZQ`e63pW&It^;?5>-1~E3uX0^qsx%8Cf!fohNvVMp6yp4*`ZHQw8e|pFSPR=; z+rA&QahDBM6n;H-Fm3C-B{byly_rqn%+<$nMd#M?P$+s(dtl_$V^iph2K| z0egw3=wIkd$%ruu@+0W~V>|cX?dHOSGy_r#1kje;3!0{CI}Cm#vKMmgHf4%i6L~#L zpohnd@Wp@d?IK2y|^_Qq79weXYfxsn#L%hOe- z0p$7FQYI_xp)g1rNiZO#+A$5DqLFY@5;JgG`A{6#^k*OK$UWM5o#E50HC6?whS?F2 z$3~y(ZyU#z$B1mYO3SlMlih6HOrbQx?p>p zxOw$tH$&34@u;JOmo!Y&Y;22kdz%#$I}xR0+xp}$xmCeUgew5x1gB^$J-(%FpEzGC zw6?%Bo7h@WCj+!vsAZD=8E)Rap03Sh)j^0|mW0>Mst@}>zdc;A?x5x??2jw;iBg96 zbE^(zhK80(#u1;b$lDFjs%mQ-xo8&gXgfXEV@o8{mbu1fiN7D~D{3PV>i~V4qfq6z zn>c_zt+Hz^rUAP$wmnF-?~W4af_V4(;I79S`yJUe|Cu(Xg88TQb2fqmuBKg;Nd0yX zRL~wwP^(g7w_Fq#<6l;>x2@D`tSzc^MTJIzD&kcL`KjW_H#qp{Hr>_ErRW5H>$X>M zd~4bjqIQvKT2j)`g6qtXwAl}ve!injA!Gg`(bLq z|qxp%Z)3C5S!ETz_wN71-V(UkqqUokpp9Kx8vNR zw?GE~E4k(LJmhY-X{R>ABBve2P^+tYZtgRDeH7-ONk{v!zmyxLK~K3g?!Wj6J0-B; zqr!eSckS>!0G|R+&mr`4ljkp!$eKxF5V41xt`yYdk+{uT3Gqz}j(qNX z)X){}yQ>LP>vhn35zu=(B#HRoeK?Q%1*u_FRZS{AUE`2Um`2+^8jI*DH}&NEUoRJf z^}S9IGw4>JOpR`7DGeXHQ%_ePl%C#EJuwW3%k}k-**`VNzsF%@HPmPz?rXn-+5ZXd+6HCNcR5 zHCc~cY;D0;f{wgt%c(aNyUqyq`U>W1U69vE1Mpf8nXL0<|AS-yWf?=#W2Mg~4VbM; zdFjRP^-^0f(lZ3OzkHSZpTfO3H8#M*w@=CVqFl1{0i)}%XT(VP&l>PEP1k=kar?)Q zb=%nQ`M*?KEX`6e!b|`F0fcEoLr_UWLm+T+Z)Rz1WdHzpoPCi!NW(xJ#a~;sDisGi zl;V(~I$01Eanvdlp+cw?T6HkF^b49aBq=VAf@{ISkHxBki?gl{u7V)=0pjH7r060g z{x2!Ci1FaKAMfrx?%o0ZMun+n*EpbRmXS^-glukA2)?2R5roi(sKiWtP83t{9AEeF z@%1jwv%Js!IR=!x$pD`~Jj-;$BHkdL-n4Yi`@~^Zk`&@|;xU6RNc_lk+2uFRMTh-7 zGi+qi^Tc6dq1eH42eXo)5>FAw6jh^qf7WG%^A=~dQe&-q@)w5k+R8H5X$~WaMJz#t z02wuuQGtaxtr{sN(zKuO@JAiLNG_RNWiWCqpb8a|;|KqP-`$#p$q6?plmNP4Z2Myb z2<`&Sx@~_S+jjE=2s{H4lRq6&fI0QzEl)dip?%vMc{yo#`?*}Tna*90a%WMDu z00v@9M??Vs0RI60puMM)00009a7bBm000fw000fw0YWI7cmMzZ2XskIMF->t7z_#* zE6VN7000%sNkl2rNc%0M7@7)_${Qi~AAF=l_WWOr1*e_=kNJYo$Q6C_4~3oX$Cv zwCcrr`QFvrrbk89o$YejC8Bf@XsIp^VElF-PhWM@0FWEiam=Utsa+oYmKer}k|&15 zlB{1-*G}$s&gc$${Nor7;bT!A!PXp6iQBaLt=!DyDSuuSX!g_`YPo_N1EV}YjVL{F z=={Y4sLj6QX^16Hp}JQf6!fiDZJz#ft3ZQcUx6ukON6GPBq=f>d2AiMRNa#YlW|%B zLE~?x4uX9jKiH>TAZLF#eV?r@hwGmmM&tn zr7<+I&=3S)0q-;1M!=|0;wt7?{px*YJFuqOO>>G?Z+qj$0iYt`f;Lp8R7BS1rSG`v zK5|mlo(`|wZX-|^=$LS8|2d5k`qdDl?ZwdZxXW}Gl@LVTOBGPT7Nr2;s4B$*s;Hmk zjyviiykHwMFfQglx>a?yNt?g9-wgnu^Hf0FdHOtD<}3S-&YyVo{ghY$$-rQsw@Wq7 zg4+6i7YwEnBEhP3MVTrP3(Sj(O1zcLH$Vbn zn=}BS4Q`?T>D1<{BQYID{6IkXtxgAaQw$w&Z*Vjat%8lpUQu0)vfO1@RdPJH?8vSx ze%;;Wa$Ob!#VuR!`@C6X<#nLjQJNX7u5EihwtVf9kN#Ky91a7}-V~xuw&V$k6us2C%~CFyR>$_ov`T-Rsol#jR1#2ndNZ&b~)P7dHgnN0s6wszXeBsHe*UNSSF(i7x*!KSHLpQ_=#CyJXVQkmA zFG5>ANL0%Kgw|^Ahpi*T@RC4)XM0i=-f=pe(~s?0S+?;@H*xAaE_07ZnwnRsR{NSK zbx)5CpfXaSl87EK$Yz*z0{}4mfbbdc{jptZ&iem^kqfBaxz-o%HtOo?U-~su2LdISdE*Zom6;3R6i`p&&*r@O2U;$RhcNcKvheLxmo}Q z_TGSH+Ych#hk}Ycc`#>vNrkC!=$IKqb{Qbp>L-}ymaR?ll%P->M_4n;tcOp2lKT3C zS+#~tz$>I~Z)58hK!Bh{fzb(%w3@Q@YhRTUCFpV>OD&mDn3t28wQ)A-iziheppkM^ zj{+eoRBw0h41S(9yh4k=v+FXdRH@M#_`s+JY^S^-=R3;H|J+tnzVRE?Wa^yK*>ObLzjS6cKeN=w@IL zg0I36ROczY3%u_6Oix|?B^YUg;Cq4J^;KwEEOoH~Z|^dyMK>ZSu6M;_g4ARM@;#3s zYF|07>haeZlsUrdsOTz?NEP-A4E}ZJCoULUv2Zw`S;v~d3`BfXH3^si)`q<8NuYw4 zDz*Wy(v2Kl^EuHY-rf$X=Vq7{Y=IP0GnR1MZ-78=u~`@r*M6B@oL!Xm^Ead}dHD)n zMF8^70B|K@*}wl5{QV;8in0Qwx}vE9T^&w4ck|xYDwYqZK6Mc)JS<98h3#Ur*P(^q zmYn=_#QFN^6GZr(|3SpSiR9;`r3Qt@JPEvgR-%*_PMo%7v{t?YEECa$&4r58zed+7clh@r{ z@q~zl0chuWoLRKtr;8RJ-G3|*1IAexy%(jD82QXDI6BSpja&xWOhvYooIG-1^Y{cB zkN!?W>USK8;YmUJ3)B!8DZruRSPTcJaB9|oBpfs1krZO^?SP2KISAXUooM{b@RCUYfD>$?*CepGQqMkY|CGqC6_fgL!_%OG9h7o6up* z&fVo3X0d+#6ps+e1pr)J65BlsM*oiC6_2a^1)+D!;T_pOt?qHnDY4&yRzRZ~{RVJ2 z`2_$XN4!b(?!!V$4D$urf|LvT+UeZj!)?Df;f<|hR7oiaaee#S-@?y!w(Y&M$%j+5 zyHA`~x7)~h4qLjY=+gpSQ0@f1BQPlZW4excy<=>nw4B4c&PYItr|q$GC)j()W`Y8u zf{aVwwuA?8JE*zF*!S(+KD}hyj#sZODOwh|7GR}k3;G8)h^zz<_Tndm_Zl9fLb3>L zJ=VFOpP%cMob@lE5Q{KHgbzZqy}d3s*uiBlvEr#PPN)31!j@A#6=?-5^h9fq0XqX@ zx=w7-wFk#Dw`0RsqBI1?J5RdpVeMfn2ndLZGpg$m9`G35@eYUg;GH`^zN*E;B`iz) ziu@okq>3R3)uDFzsach@N?nYuw3HYOS(ehfB>V8@og*6q&}QbzI8n0;_wRS|v zsfr99-FYertsg=w*?+N&zAA>6D95phIk4)3qN)*1QHKpi32`1|;heDy9F zl_`fO-F04@HZxDu7S&Xge9NZZnun_8UQb~4w`ULGu)Jnj%3uswHlQ3pHPKnNzM$}A zXB?8r{{6Gq{mZ258R}vQ$osE<5dN3Dvb?L+7y-=3&3)1ZZa-P@+rbMLe6a*ze5#X(g z|Fuk{d7pP^dGB0eJHJR&Q0O*b{RJRrDJ&2bI`y8z?Y-vw@c>jEF$u3$ZL1-??hZ+L zUD3Ac<_3`{Kl;bs7G39s`4{RyDZ(k-_YDHXyW$wMxOWD9CgoTWw+(6?Ubn-vhHXd2 z|FUrn2t82VLD{V^7o=@wdU94|jZWc_G3~cTMz?=!!06-7_FX^!;{XWmau)*60TC#B z4Q6tA&Y_b6J%EFryFRO{CUlB#{J}Y=K2EFDlZOWgsQ<(lR~)$Iumuc$p^%WcK5dQa zLXdU1Z#Da>)-1ROOSA?`Q_wM9rKO8vYIO^2 za_fZa2OwzpB)mhahXJGA85y2BQI=k`=fMQ>wyi#>n2tcIKrJB2H>AdG^}pOm^Fs7^e2WC#8yONpq{ z#=B;nPTmL{*f!OjIzGB_3veGwDQ-KpJfX=G!GGyC=la}W)YL@;Bz71r@U9rPT9CN2 zTi{tkRBP;)gtX{Y6J;q%ytpV5^by6(I{e*x^nYY58}^^DT&D}nwx{FHk0EX!MT<_O zDfSQWaT=?)7#jXmO-Rc_nG7rtM$WFU9mvuTsR ze~mj(766IH#lrabk$tdD$(C)CuMz-JJUR@}$R{H1k_~d_zJkNyRq9`-$+MzLT;2(? zTlf8|1)m`9l%c>wK;`fz9fzokQj}xBQP6h~ouB*rnu5H;+euk^X%^RF$TtADoH-xJ zJhb+b^%i{7g6@A?x;iYR$pByxLKjQTq^5DB{(jW}oHjOrFi+twQ6BRR58K^%Y2JSq z?A?4y3Qu9#?rf+S5Osf73M?blRHF)XKNG;8Q@XnpFNaED?%vf+#VGk{+elk>W$Nm5 zIRI(m5zCzpyZo|sm;I{;50BZiy!2$ic;GEjo>9@C`}bPE@VmvWD-M8P$^pWg^!qB) ztDpxk6yZY*F9z1TZL27$mQA6kdRc~G3^8J;B&zop?V6EFe245y^qnb)Sv9KKRa@qm z*jAL3>zN4Wm*ZJG|84#C$unuzXw=)HGzIPh{Uj)`=ElUv&t-1eIr%Drp+Qq=Fz8Xs zS&4C$(UGE5_uRKZ3|Pj!^C*a|h;q-SK~?9pnRzly)Fh)c@B}U;ViVr9vR}l<- zHI{7OQd6zt-IFVaR(~JW1chb-QJ%W0P${gxVmWY`i{tLKt>}xi!v^4_YzWmoVLnQ$-jlbP?Qvb zFkl?W!OH$M-stsePQ6}}v!%t5GgMZiaNi6m7iI1KU#>3LS(Y>qfuGLoiLYOrb<+Uw zIaLPkyEp)M#5V5km9gk$Hay*k(1-6P(8F*UJUAXu@EVkp|J}+hYAkr6b zqU;El<2eco_p^3fJj=&~o<6a6 z&1?}8QSAY&#(mz}Q;=EM90C6B5#Mi4=N}>N{_lzIJhejOCnP*i|Gt}0q~{rp$aiJf zH`NFxPWlzU@R%>eFjQ2RS|UA@9=(_gG<#qk5zP{i!hoihVUQRdD28YZSO!E%7h97> zNfMj&HE&7#eaqr>0=#`FKEC(7Yp)3j&l6I$2~KByq9Q`>7sJPv;)Bu0($ZIdykf(> zHxGaYgU1ox>F-U&uvJvc#n3Ee`Ltab3od;a+Nkfl`1#i)yiQwh3`;R|7K6(&>aY~S z%|Tq2(L%9VC&~^nq>HV`L^a>C#aoPoi<(Aa(^r&OF^DMt5<~yRs|UD_9b0?z003w| z{e;6ZCP|=!7(O!&$3v?h4ZiI8cHJ%$h-){xp%}Kf&l?$F89i;;bjHxuG9-v<<+IXZ z|1TZ4&Jr~bNi*bGHXkYS%C28$7jN483^!E;02)2ykDv_GD)2JbSP$e8vHY_pYOYW!%>jax!a3pwk{LJ4_jZ(N?9{; z)2zF=Sw(JS=MnF`NJHo7{$lt>3=T26P>hZ*Ey>&K>kRU@3C6bV8AilQirq9}?o zZ_YrO3`8`}zdz5;&VGV2I%>ot&=~7^^RZ}-Pt9TM-$oFBXnzhe=I_l>Hilh-q8y6G zcrTh`(;QDYoEuP-eL}r18QzYD>vIl@vJV<#%SSfej(4CaQ_>ij!FJd%1r;be@f#>X z8Y9b^kGtlGz2(zGTMg|4+&^C4d#h(*KS}O0$mb@R+{)@hpps5wL|2i$DGf0SYw)qU z&46=PedQG87k}73y!Ek3G2Dc6=b>|gqVy4Az|`~RFcH{4{?0&AB(R*!0plrP5A@scbaw&e#KG`wynsE>oF|JgVgriegW-p%0`^36u2qi#7oaE{ zC=VmoZ+Z&qL~oojS%RC$#@Lx0en3kU#ih6(SM-a3+J#0upI|i`~Km)6=uKe zYz@^gSr5%J?;3{b?3RnWWo9~P8Tt{n{=`Jq9GCW!sGH+sbKV*hB^H!tBrYHkJ0w`) zaLj=7sT=2R3NlP+px|ChEDw-HGn`ksrfnFjM{q z^ClD0*MATRwnKnu`2cl{kUgJavXX~CZ-u!V@p~qXb|pVRJY#v4J;eywhdyrCw1Js2 zcOy1TTC@S9JhL%1HIw!pW{Mi|YaSt_!OY>hY&+%IZe zY0Hmk$SKo$hD)4lz{0r?Cu%0mKs;YzJjw)F?uS;xOqsh8bG={6EWtgD!#dG(jjLk~ zGiB~Z{11~xPC-$IY$NiNup4!Ae2EpdJ`&ulNXq>7n_})pEcK)*eh3tXs)phGmDmeQ zb$=V{uArO}*t%kJ?vp~0hJ>L;SgI73!f4>`0&&*7(NCvw;+n zf#4C0H8DKq&OuRZk0}{R^xn4#>vt#p$bUdlIxrl@>R=l&F&t(#2Sstga6rMm8*+~U zAN&rX93j|_J)e%jkb4ZcLX8rnNML_x)zy>+gzfnJuBQ$eC`yRNNUnQ~sKN=xqZk)} zMWe(kaiBcy=CT>1SH!mW-$b0R07Xdw`+MY$%F0GBC0oP2!T8Wu+5-!mffB^_w0|@c zU?Pjq?urL{_}hivSv}p$7-RK)))z4%yp~% zSf~+Ch&AqRXz){wRZ$d0Q50pKpntw3<)}e^Y5k;jPwyjmiiu294g=@!aZ<68H9oO& z@~9CjCyyGja`LDVD<_W{v2yaL5i2LpZ*W9lyCptjvg)(5vp*Sm@=M5}b-L+%6zb;q z-W=r+Uj;jd{mJSxR^Ox5_aM~a!l}c#SEhzUY#kP`btbBzbr>p#?C@apQGdHo8x5Kd z_O99330-bSdy4G!Z*(075mvGMc`jf5{=^GP9GTyFDLfd*K6dP0#aV?-(43l4ijAY;sfifkN=3e6>pYQJwF zBj#b-!<&>cz}MZtgdCd@XF@MDBo4!nO_@W=JV6>U*HXhUB!AsQH>mEb-FM;`mz`Q`3Gu4c_7#C zG(nlQ&6l3ISAU+KjUoEN3<+}k2GZaq#Im%GGEF3v$PCK@pD%{S` z2iwWhR|NEBj$DTF%t!{OjBrtRPQF2T70#U!lb*a|DZF}Bj7%Q5j?s$h3dQbLIB3xMJ$w&?VVm=bneH=O}rd|~zmwyMYV=5yK{fPT0g!6827(WDk zvBAcD-t@9_#>g%E8WzJ7{t^}P&mli4j}5AwD5R;JicHiR4W{XOXDy)q>5* zB3xj`$c20(Zaujr#zAtD<4?uN=Yi{(%!nQRF@{IRaSc7-NbTh53@v}VY;cb~@Z0~e?<`NaNw4c9vPy0pF@S+<^WR86I_q`+E1ura{<8P*nav)}5#MWV^Y>owP z$HiUGOSfan|Kt?;V9S+G+J*h>99*c(6(|R1PVtG!v#omvGeJgMTTi!d@N$D=2Cw(4 zb^F`8^smrvR?T2quIv!SJql2MF()G~?SE(He3nk$xg864`M+W-;MV=njlJ6qH7;OU zI6vQLSIjvum)VKup+RGe^yPnG43!L$He6;-k<$6QOQ$IsMPxQc zY$>5N$P4HH=P`3*oHVTH9{g(0q23+)8s~5NQ9SqH>Ii-~=Jw8xZd^>gr~f(x%75$P zRg_(#9ZFF8w?_UC_h`~STd_+}4#wPiVj4Ekb|Et4?@V6TFezoP0cakV?0NgGcXI{D+U%@c)(uUK*U6jD^cKJ?b z9gtaBnc%WBG8@HTD2k#ehvh$i3&u3B#0~ub0000w9ueBSqc z@Aubb5TI+g=Bp=?0Bn>AwwVbT1|joIKz>zuU@~im3lQMEfI)zcv2}MbQijS5lMqAF z0`7t19;5{IUZ|I;r|wxd4FS52fW#dlh6LukGRGy05P4DhmY4%MMtl4iU#sJa%)sm? zzqED|0(2DtiGMo)5_pJ*#1STC1j!3T-U@$hBsa0Cb3jOmrq1dPd>zi2xHrlQ)clWeq~)A0(1o& z0{OyMOj z;%WGwV?%(hARuuYKnA8s3QIDkmCL@Z4QMMaNvM2{IE*Jp5??$XNaHRbAaRR`J#sRJ zsJc92*KGY4os;Y*iRAybc}$+Eka5@3JgUlDZ|`q+2)(IH=#5Zv!=7* z#N7)q2+$D%61RZZOmPV1ZxYEz6wc-DY|oX<9hsFN%^S820(69c#4W%nI|-6KsuWU*V>UGMg_FY&plyU8fPY9x zNHR`o2=5C)ZtVhx za$(>8O*!Zj1SIx}-$JW|c2tmu8M4qJ4(wWc7)@*?>}xfXRzpdgNX-weIva{IW^LmF zqJPYhQ6|NZ5FxbG;rx=uq&zOl^{t;0&H&tT(~BibLY6t!qljOQI85AJ{1*Udw1a=1CM4aTz*Jl!_ufA+hod>I@kq@xlEMZpc9g*z^6%>>Y_0P~Vm@<)jHn+`n)@ zY_`m6!9?4V_<9??bJ9u+N5&Y6UVkY_^lGJ+LW1zX)lWRo8F6cYw@4oEkYT(jhM-3g zkk|*%d=+(H|K%sv=AcDv-L(+2z)GVk5>uM3nt+j2K^~@;l*UAggySexpvw^WJsb@h z(6b1f9e#k5Ba)Y>zP2>O-+J%K*mYk%Imekb2b4sr*-Pp!dhA3z`{hgGNPk`(M}eP( zLIazj+h8narig)cqOZZwHjDoVM-==t-+KSa7)m~ryfAF$X>7yc_wI5 zO~Q;`T-gL&#E!%Q-h9qxCHz~w0WTy3B=!NMz-lrfzzRh8;O>)@-JBLm>Q)W7X!~VT zuQ{(x=j=M!A8(#5!8WAh9oq+esRSLZP}upsZ&L z%2Pnj1%jEZA%CXMo_lSwE_n^e!7+08%LTkcHll4e3|#`+g(CuF(x~6LN3xp&N!-u) ztFbkiMxR~%;K?*dbSwxqM4E%DoB}M%L}lXXFZgzf6m+^1|8?jR#D73&j&i58moYR3 zJ&b_F9U%6nrw*W&v5gA~V*ny>4()N1&wjo|3kH+N4EwvH6W?*mOKB-YM7#S~X3v2j zcA~HGf!Si3p=pes$rd^xesX(w*8L1g5>f6p)O*p2m3nS`%`CJ5rcG;%q^389q8;3^ z{e>9bNNHmUDKHUgIe+`)LPKAXIC7vkgvx6|az4z^;Xpw$XuBPv;wQRx8sz`xBjGJ> z`~UK2aW{JEl$T2x8H9*kx%YJJr=Pr7J)R}EMx^7QH}99(l~VSbfq_+|I#((_0#=bz zqOHDmY+s0!Wo1U2L&!11MjrWIZ%bi9-&6p){OL2}_}I76?0+>xzA;h(boe6W-K*Fz znxlf3zx3=7Frslbx6(bh5pRcQnT%EhKb*D!o-1xbLB=$VRRcx`0Kk?Pp zy>>|?u*C)H!7_r9SaKl(HS%~Nn3?JfVy+fASDaPm^_lSB&9e* zQW+;!NAhm4JAY?H26K}eYXi9{kojVHFAH+0L`b{A zVNUP;ZhsJ%(DNjI?{lw?N+HuUQ^&_F5>`&L3QXlkR>;f{vY_@9-k?Lum>Z}gMCF*< zEcW$NqZC)+l&!bFdjF+SC1MYf$^jW6U?#+z`QQHP zsTrzO46TA&YCJ05T~aKuKO~b25fFoOI4I>L!L#$u8|Ql3oK_D#P2%@FTO_LjNhnlj z<#hhK)_)}BDgig*E<@G_?BfjDgLm=)D_(6-384dl6?8;|64*&cROYX_|K!}Y_Z?3_ zi_nG+e;@)&KotVmX3Cnz6Z7JYay*l5e}Z|TqNgWzzxLx|5*64Pnv|h>5dVkk!ntPc z|MPc>qd3{KkrY#Zy*=#PO?&m%P9(YDqskN~n19ZF6EtCz$1KV1zxb1tO>Z}T?q$Kr zFM*TKCmz_))GS5>#>O~_LlYnUHi`D>UzSJuk-&r=S0^l;Ow3l6aR2eU#WXg`knIpK*2kpsq6W+J6?!6 zmVZ0~RM?w-9f#S>x8Bv464*sglep|SDqcVl#NrKuYu^7vaRzrby%tiIxDZqBXOz|P zo3q7Hs{R8jAUClt|Lh;F8RL$#i9#%Ol^+#8ya`p2%=MEe<`OpQv2}p0ifXKqH@x9) z`{Y6zD6A9Y5U9XpurrxUlhEhrX%hdN0e>hciv<0>g{CVFpK-R&7;9PC4;t=F*<`#`!_dJ3HR{?5lHHSCtStE5oj3f`15% zKYk7sjVRYE92G1F;?Mv7;^gm&nPP-9G0(IO*Z!-IU)&aHwjyCIi`(E(X0u*|2AvVd z4(?jNVywjW9Saf8VGhTS`md7HXQZr*Jhtz$90XA4c@rB-Lq$At={gs2CCP}uD&dnc zSH;MeYY6NG>D0V~EA_O!q3{>?tbb2BD4B86cWh~5=nAlaBydEJLmn+#uq7byQuMsD z;~%aG=PrM`ltUVmG)`Uq=f#7lf9^)<994b{Byh!oc>bp4w&PW3T05s4&B{gH@l%V) zjJr)Y+;ei6Td!3UP7|MhDPc)#oJr*p#~VscW~X$_1KvPcCPfUj_376yDu3IZ1PAph z`XYAX@~4V1l*IT*2K6|`{c0|hIV+D+F5b-f@qyV_1nAg_+5h|Ti@WYf_`N?lF)kgP zND5Qs2gik~M&X=1yCop3KlDYSsIm_WHl+%wQskPXm>-x&&Wx<&z0+aB^1R*bju0v3 z3DkxR_ZuUFu&O6(M4S)wPk**E)r*k2z`J^D@ku0bVa3y=JYy`l&}}5{UWnj;BFfpv zbOCBw!mmLrxRUxrZZ9Y7*SRyv>JB7ZpW)o>mlg|JDT z(EK$clu#&hYYGDRLeG=<*PbaRksKS1`#E#;`k^?Axt*FVY$Hze=9&>1Cxr8$Q->nZ zArkid(1-1l=^O4jvDyCvq z1gMLiHnF{D4#`<&#(&F&&I}OBW}M#^wxikNMwEC-BC_SkLrCPS>*>fSDgTMn9iB@x2=YFI^3K zS`u?%k!dZWim5YhdqXkviSQT$o-uDDp$Z&|etWq@W)z0mfq!jc>#mcr5A8ZW&s6DF zw$W5cDe zdg!JBzMRMcIO?Xj2{8gK;M)66jb3-}i6hLCbEw7;c_rhFmN&31>-Bf*Nu35+DQ^7S zf=&C{ejfkd>wofSREdL5ry^Ti@}nPrDIl^3J?rfF56={%1DqdGaSs6Y&#zhC@G<=U zCr(c>!N%2^7mh@0ff)P$x30-Ti=awCgHB}}FKY^|AF7xN#rtx}N~niVzvjF?Rj(S* z@7?|KoD^&rCCbq!?q9#9Uf&c$VWIwx{cR+N2;QKXZ-0IB(ylvSE=2UKBpzfurmPS+ zYvLddH*5QMH(i`U!?A7Zts?oX2cQKYc_Sa3KA9en&M)YOK~LanmE_M@5iJk)zm#9w z^yEG3?MCISgi2CX2~Z6kFZ=gwC^!t_*gvTjXf0vM(d0kxh5)@gv6G-ZbM(4WS-I}- z-`>1>@_#oTFP_0O#-(SHMUiYcAsk1&B7st{#2HNe$j^Gx!9U ze&dZ_PBp8;Rs~s4bO%k_5|L3N$GJciMFOcP=?yrHdT;jJtFO-b zA}<)Pow9tWB+(U%{t=Or$%Qy-$8#v`BRH(|*vDSV&pdi*M~g#V$mm&hf}+#Z9;s!8 z_&Br!4#O%9NJ#H;Tlj{j-AoTr;bGUYg<0?PTmk>8j-J#MMkV_gyg zEf*>;NI5?S`M>LQXm;)60{lud6D2Wfjg%32!Az6 zlxAgInCu3D6*%8$GCgw84lGqHMduNsT|AkX@5r-wA)@DFC;kz=bU*){p-uQVj-wv= zHKxcyYsG0ul|P3bF~%rB{vg_}lJ2=gR3XUG02!oiUeXGn(wX?lA1>zF#lChb*;dsb zpjZl;)JbI*7SP_(VwudQ65e074u3<2Fkdy;p8kIUqo>u0^NrYpC#O&q7*`Gr;P!Ll zttFC%1c!9RR5oI67lPgf}Y`I;@jL8p%RH5xYLO|jcaMixz_*S!q!gr+7PQVRHlfLQ=GyyD%y0c)E0Y=ddzC7z&Dc?IEJZsIsJ~ZLBnJ}E zM+ivV0#IP4P;Mp$*rGWrch|biq4BkwD3e;7^pwFYA{{xi^}c9;`Km&GJy zW|$leoVbY$9|-;IcXypwTJ@(gIIL5Vl)1!<(|O54dAlMYaSM<_9AvtP zR9L(L+iE}0O>8JU^T!uYa>t3IWFAAAJg*m2kYN?QW?WMFdx{L$7E0X;}L11EQ5m)X#HOB>usk-rJtuVQr z{hW9Gu7wzLES&7gq<>z>MlWWgqCcs|nvjRlOqZ3yIoj&NGs)Zjd7Mi*W$G{&23RP* zXMgXnn&cuNaf^sObTTG6Kcw8)z$SBdwq_fqN#3Btf2M4@syr4I3Dhe&ap{tqv<#WU z<3}wKny)x#k5OPfov*?UE4Z&PTJ|=oihEP+1TA4k_G-Zr`+vUEUlDBqiQB+cdrr(+wd4k_aRfElSMEZOa)#D)^s!*(j?dLqQPB>DgK`)0_$lklb zJugH5-1J8aNPlEisWXOViwII#ug9Sa9~yyU60Y3RS_}?Lf!2-J-<;jor`6&EN!%u4 z51pPzE^TCvJR>XC7C*~>p%mVY>`O6+EC`Uy?p!~+(mA(&>O@os2i1l0P>2r)qk4cF#Ab+ZA&J(04pOPaTh>Dwipswu#HToLAi@D>a-@R{_e=hC)4X~2+(x| zB<>=9`+-xV=y^+_^o{BjlAwgnj2!9^Q%`+yZO4&n0Rp_G*m`gOrqBln5FkK+009C7 z2oNAZfB*pk1PBlyK!5-NdI(ZdLMT;sS6g2dHGg@l5V)PsGmyBnm}A6qD9pN;Qvcp( zUY*hTd6Xoo^YrM2a(fF}Fj`RQ+LDx<3UeR*+nd8VzkSF4^fV=)Ms@xk{TQLYqxwBM zRZ0gw>DLO_PN!LgazEIqmxj<;EiBC`a8l@g^!d)g?7f$+n4SHRyIvkAcfKBn4!@L+ zEPs9b;df4)_w*!^M7Z-xpbY*I3(yBJtB^)&4iAHgL+%u`W;FwuRGHVR28$~1%9vng zt!P1S^)W-h|Fr*=0unRF&hp9U$C_uOFnV$bs+O-S?t{wbbL-R7_vo6>)U_fNxOsrg ztl^`WYO+^W;f?!djIN2>gDzqaN+j-H$bUC0 zY)>sjB=JW5Ec4qy6^faE{i3q1#tCmd`l`edg0eVB8qp(jq}xxSDq)ng1Xh)TuJkm2 zbV@a4Cb_iw8OZbpW?wl%3+&YIUEd(OU$uNX5k~b1IwKnvrK9>l)gWimE#tBjS$kcc zaXFzAUG;-Q5mK_@8$bVYs_qCJT7QXEtrP|NDZtd;0eN+HO6L~_nH}dDL|WXExDkPK z&}GOfNdb(s)x^@rq?U-TG=}QpIRLI?g{TGcKy7U~-H$6#U9xJuTPqc2#WVMYskWEy zaS3Aicz>|-l4(`wTzbZ%$`ZhrYFAVxJs5i(R_mkyxN3w%X>QXhQf|A@3V#=f^x0wD z+@j62*h#)aY0_57CLBu)cbmI47VMA4LArXx94gS(h-jvL)H8-6=!FsU-IlKAx<@@@ zqwhLeJGNCoC99zNNH>pns(3#_+*pMo$|=JT(h48huo<@$sS~c$)-+P2iXMiX3B{9l_34E9p)D2{sfG;sAcC zD(5RTLP%TR7z`GlDDvRrd*3-(`<3-BB9+Xyp)uizKvSko#B)4O7n;mTK(!MZqhvNO zQh4scnsLzg(^yhX#*)KrvI+Szpl?JM^jMEJ8D9anDeP~$g)wBz7=H?|eEdgX>5W1X zISF0Y&=6lqwsGlRAtK*$3X3l7zyfy`#ZgTFYCvg=jXT5XPezOS^_fZ zKGKy^Dj77x^S6d)p~B+WvZy7j(U_IW;n+(W3%$^eT6GH4I)By8J8uE15~x6)83Jq7 zL;Z^M&7WCVTmaKmPbkF}oUvL06RIROq#+3!g1NG-u{h@Yq zX6(LU2;Ay#^>kqV)soB?$&_ggb#y}x>8{j=``DFxi^JZ&jR}qP(C#tVKvdqCWV9rk zx%FH#9+EQVT7N*yxM-M@kL{^nqRXojH@cAY2y-8Qbiv!wY5l@HRvV3_0E;H8Se?(4 zc>YoMaq9yGXx?8fN~V1Y7A3nEH1?F)R)it^0jPgXz1Q8<$Ctrl0@Dx@{NVq6EPVJk zXI{xMJ=bt=1vKqeNEJ~k1=q)LU!APMhjyKqA}P)#8h@i{ML#s7xv$YAha?m^zx9^M zx{ydMj0|x0GnDgTt@oNqoc?ZU%8(y>{Gm(jM*S!fo5yCP=CcBBW3{@bX-kjpW@Mi9 z^fzA9mi{>P77WaI+DBFziy=S~wC&l8-S}B{g~?V9YV>H+AN{UGo%Tu>1?{LQdCp0h zbG#VEDX*2qd>5GvOOAwivp!r&TuX!k=t)|k_5?hZ z!3#}$-7wf1*yX>cv3%#*`={aihG+2qX&L(0*b!v$!3-RW3nc~7Jh3-$L`RFeKAF~KRz zqnt@*^k`kSkZiKm2A)2vwqW{3p|x*g;c(Re(oEW!^?i5uCDS+GwJ=In65}jkuC6Q` zIe)o-?>h_4&gaH-6{$IHHtEnN%}3%xul!QD}^#P5LU;=?hkn z>X|yn{LCxrwXs_@*J-DP_LQmj{?uXx&a47kv??1LFI##8S6#ed92_94Zs@9IfmOYD z;Qt<~g3M{01cjbNDocoKN5%uA$z=0N`hRre)Lu-omCnM-@T+&Wg4(g5tB|td*fu)VF9qXHs2ESm;RiwrG$3v&0r*R z3%8I4E%kui&$$i~R{id(Z8};Gy(8VM4^k&;SzZ7iU~0LkHg3D-h(H@-f%=c`c7G?J zestMxVA*wVC%TPk4&jWRX?Ji-G-AW93mAl!=%|{UsebClIA}G)STW>{$lekW*m4^> zdM9~EiZ@>K|+Td$8^F0y@Ittf9J zNVPnImdMbOB&Mf<^myd7U_G$3cYo=+pOwV^b9;Rjx`bQqI*xj6*L@wx5PS|MnOaKjH6M5g#0Lc;gLKCyILL1^l)N z<&_i8NHsvH`ny;xnWUhgrGMaNVv?&lp049UtpYzAh2|CjFKWpYZ6w8wZM3%iOf#u3 z^%@wpWAQUF{Z)f**xKJZ-t4;9gX`&HKFn(rsdnWzPVYwA&eRZIN0gPzlS|KV;})0- z1Y%th#kbtGpq>KKb!!`21jS9bZso`JU6!*zxuvBW{G-O~I8({nUVn&r`*U?-8oc)d z6}Y1ARwRTw12<%HgH-$?XU_5B0QNQF={M>LilMQ19S9N7?pz!92VDtkBsBG#sOg*f z%)r|mW@1cc%32%qvg=MTzn6Y%!RwKfuANrvlccvsulPTwZ8wcbB@c;8n1QvqB18<_ z)tJCF&sF_m_T0o$eSg!ft8APP$}*AoZwpD)E9h_s3Y@2jojb|1Ty@4FX)8*9_VuNy zN2o@`(8-r(?qWK+f4T`Xk3Y0wiSS{SHzzrNM?$JN3Sf)Tde%45?Djr)y^@f*pgHn# z!E!>_u;@@2g7zj$InWZvdoD?vd2he?dV>Bq#(_Xf&c;0LBY$9s>0>O@tjnR1=Mh9k zdWuA9j@zKGJ6*R@&F2|!Lv5dR*DF;UUKgfr3~g^9uNwE*dzp$s=2Z!+h-@GFbe;A1 zOnZ9dSM9)@&!|NosaHqp<75~yZG>F(?s1`}npOXY&eC8rdMwPyp zO(tI$!!G7bZhxIlR}nH|y*Wtwv2t2@9W2%M#bgU{ z6TfnpYZHgYzt#2r)d#tqt5Vh2+Dsy)g0|m!l>%7QKbc8cl9RblH&{?oo8D9>>KsvZ zLCD1jH|;Lr`n9ZnlU4zis2_O0>^9~!rXC%VOoLQ_oPUqFSsJy-WG>6$6JgRFkNaKt zE^+%UFDi|I*SVlw*C!3Je0%teByD9ZH1>%V+}UqScz$cP<&#$}IwGXI#O~s!9{Q@J z&Z=im5kbnsI8lq|KE2j%I5yP_n8hIh+|WoBbYvv7n{Ba}d#4C47o9H}x1^5a(?M>l zM#Gt`6Ms}K?8hEn-_*98dGt~n`^{;ULQ8M@hcig;*uD^1Vkb64PMSdSdio~8b|z6!M`o3W3W;HpNy6--}?UOke;mVb5|n+Z}?dXfrJ6Us=h&L9hNNVe(R zooe-`<`7=jU(PU82KUS_@kb5H}Z++|Ah$uLLx&WV-o<7|H^;>zySY=`Hu(sZ$9Av=>M5B{FVDv z0ATu$^grhQ1OMy(Uor?dAmIN)zeWJW0D!^{#`;dS4qOCM`i}C(4g{*k4vyxwHUx}x zoD2+fjK7KiF#jw80)T>m0091K10V|sNJz;4pY*E(fCBh`)dKxrwZQ*hZ5+UVx(ldd z<6jYpyTJ>HxCM1b{SiI)-VUOW((1{F{i0Fx^yp<_rfB@bF1FRLKP~aF1t&g|*8@|> zSWMI+KM|X+VdKt=khdv6S|x4em+Qs6Yf``;cFt&?VI8q*Cl{yKy&bu*2Vu@?a8{1s zv}l2=NraH;`bo+1!fz)tUVU9YG3LKM1*Bl1a-&zfQwBV#GmxH07r@M}Yjpv0PWDl3 zClfC?KPXEBwtSL&dWX$a_NJS9s6ZF@$MseO`)M?EB2y5oroyejw%eRqd|{LE_jXt8 zS+<-IlX_G6cF17{;K|S;UaO8+sU6&9Qk#^wQ98ZwyCMDn|No734&poaB>)wJ{j0M- zQSOLfZ6-74mN9X~-X2Ne z`iJZIdrA&3v%9CSO0e4YblFlOfJi)uvfQ0x)6mO-Yd?FUP=a0kO&D0+gVnMvt$coCpka+|8q8vQm|cA#CN5ee!K(g^4NJ@LnD8R~ zh*$a#>>3?*KoMy&Bnjh;IVh*Nw1&0&i3vq*{3YHJj?R>-&s0@B}2lfDEITKRUdF6nNp~*~2Unz<)X>=P?!6hkyl;anIv~zu;n) zNRue;bk(S9QNOz{#byn_S2q~r&x;EnpseplueU8g%Hf7Art1huyakv~u4wNtZ`sq( zc?69zU_e(1XpsZyI7qD+QX%klh z0c?{;35x1g?$A!k$#h&`8tDCxu-;l2b>h@Mk)Qjb4fXXDeVsz#yRl)?ywv;+U&ag% zL1*F~l8qF*Zwr9SlLh9g*REKTzA)#b)dckrZLIu8t7o*yN^2ZYTdPyy6{O6o9slU2`ac@H zuJw~au$vSfWpeJJuaIzb1ccAC`awv5+~CTl6-1xAA-y*SN?8gNcmDzcx2R#AE>H})VXhSj8WcIo{*1M1jT@gvE#y^vIi+%hs^GwEchhr*s zvVZ?M>)XW7V)()`_Iz^d#Bu*t%?%f?ERY9Qd$bYevZs}#DN6ry2u8$b1FXI}+m>&W zUIZjCoio0ba`+|Lfb}cEjrEjRoC@h!aQ@5;$^bxfnF}2u)N9<>Xc^#~tdbbIl(c81 zt&4||5|#W8IXV%!INmD*%b#Sv@T|mEIcfDjo3e{2tA$|P+qzF7m$;@oILDm@Xyfkmvg$8ue*stw?c=0 zN#0kx`$pPwnN0y4J2>hzq#o2x+Cd-@wPt7%cavLfSBVEU8Ptp?(r)V)&F%b5x z>M39z>ZaF?-b>-q&uL){eF|Bp5T?*!hy(q$wk)-As@z_yE`lImzNK=#3y%tqiNK~^ zk&vLr&T_}Pxhi+>CQ?$q*AE>@jDZYP4sh(Yqm1kgs%7v+fmWQz+_|c*px@yG`0&Gh zCrNy7Bf3f=^Om9{9-1+7FU10w0(X^PHMAbUsII0!5yAWugAcjy!x`}Qw?Sf^)9G*# zTZCmoI2rw?A1dK{^Gz0MEXA0pxVnbYqcQ*Nz)Ws%F@A8HiFCZ#5ZT(Q<`Z$%J&YpG zzd1Vng^43wuPzglig#zrWBI%Fb+V6b{`yxYaAt)w2Qx0Do}5KoLYRus@Zl zA^eXpzn{W=_CmLjP(GK8b{Ft>Ap=taaYYW?D!rI6YLaVXr;w4$N1lVM`)w*4wxQQs ziOFRb76)e9L=)Z4xGGby5bsd6HXu8v4q*sx649y<)(&DH(O{uB4JLiLchx8vIS&RV zo__=_zr>SnlLwKtPy%mt-%{#qRYZA95hY?p3NqlJw|2qB6#pAuH0-hv^?QX+g&ahRV@dURJOnftmdB? z>Y(~RtR+77ucWqBF%W5^XEqEUD;%YJl)+%&vm!x(zf?^*`*un&BhgTQ)N7s;s0*L=C_VKwT6yYwb@fv|+qj?r2_rLJWR z*7)cZiAmsV;uNS{(X)Sg43e4lK3IiWUJP&^*x>)Ts zNYgE`=deEeNq7km-ON9X)we7Ro5I7i3|2dmY`&yPKEE;P)x=ygX19RuB0O?mW~StE z&;o8B6#3E*xPCcBj%iX4igoIAZ)_*Dr{@R{hCSKMZ+vJ;XC*4&*V>A)&P2EiN)78F zt+?2js!|h5P!2=d=owyQFf^@zTm)-;*|Jok6ZZd@Tp@X0xd?R6xhBxU6swC6&kh{r z1`qRdFUcV2FmXRSrtlPdSz`l7vW;39VFb4*NotwloES(49`(CE&EJpLbi$V6gD*Hx zpU$-tX+T!-a2bx{Bs-~yV+}4art|v`drk5OA4TB$Yn`V3kig)b+KmI$X$By^c|u1~ zI^I|b!sd3nXYtNRA%>D`;3brtx>2Ejtnev-=@6`C&Ym&Zrbdagw#8xTV?`8WZ&_m! z+%o;7Gc0dT0lMZUmsa-oS`*=>a#6VTo2kg<4;;|gw^JR~UMB$HaPx&5A$3c?Nt7?> zat8u3<3h@UVe+0&e)4PMD0VO^P>7m*^fG2noL_Cn;-t^0T(9+}$OHBCH=hUsUY+Jp zQT&-zfo+Ce5#(2LDeG(Ko^y8=E7QJn59nQ?ig{S{x7W9k%EHw72n2jrJB8)IQh)qO zo@{E|o|<1GvG&|n}_zPo$ZDY&%n{6%0A-<7#O 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 literal 145000 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

yA`yqb~@H}>|2&1l9K8s6=Tt9!@ z=k$?(&bz2S~&{ zRi)a%Z}b_0)e~#XGz4|8U1~>dQz;zd7)!A$;Z!NU(o_g9iU8q&f=Yvn3}mw-GMy)S z#qv=pU<@_J06|Ak_r_X90-%H3p&)Yz&Kc^)zV!twyhLi2FXJO1^u$g^;s<(L z*NqPrVw=`qC~cf|^0LOrDWjoc5f!Vc_3q=`?D)EAvwDsTu9INC=k<3NSmj4{`biv} zP@lTj!@)$FOL&SAm5;Mc6>`&NkApVsVa)MfOuV^^JIc9KqBmRc(vyyvfvOele|CqP z_Z66|0=8(MVBwxAbfrT9%*?4^Ti#L!uB0qD{*vmW=xuT10izN5V-ZJUyQ(3#Nt%OJ z>W0vzZ6U4ZtB?v2;sTaRj2x&EP8=gs_!pdsUVxH(s-4tJ`2CDA6;br_cXEE$`e2

t)HQ03kb}V4Uiiw3HA~j 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 diff --git a/assets/logo/dex-logo.ico b/assets/logo/dex-logo.ico index b1d5347cc3db2e43456978d74443eba3406461d4..d525f15df905038a28945c1c7ce90e0d8cf76f2e 100644 GIT binary patch literal 5211 zcmV-h6r}5kP)=7ki3Je$-dtx|a`@zMu~9kq%{P&}I^h$aHt5lDFec9uvX zFUYo3(KKzcvlS_Zlz6SG$^+0HOKlpZrMn>!sJwVgDx$PCyAgrf-udq7x%ZrNzdLKM zcfYmQP9-1znVE0C@BTUW{P~@8&mDm4be*o#b-H?la22U__|(`9uGmFTjuW|UNWSR^ z#*k%n<^L*ZHmdd;Y`MdDK{zyTAJMZ}wml z>54Mv?&-H$NW~~R_{ioF<5nOc+twI?za zOdQb<(a_SGY8~$(q^gN1Y=Mu&U7m(bqzy6Ww~n1TKz`5(#+D6jTw7UwglJQu6!>8& z5vE10P<}@Qr5`_EYSwIxEMw@8Eoc)oq%;Z;6Kse=5U|;5yxB$EVga*ILZk`42yy z<`K4wWv{L^d6S_@1r`NY94)OEV-j66MWGSQ0*Yxo_4&2W*Opj7miTicGOA>$Bxsro z7cUo$7Z1Ttz4X*?bS}ymDCYQ{29}iJrHZ++V^7`gb03*lYrgANt2@8?<7uAPes|ty zwlVq*OnL&wZ9=saN#A_5#*BP{P821aTxLVsJG8yOR=;~X|H&SyY;v#L9O4rF@7bAE z-M1^|n5m7#1RZBw6|eUM`v}->KlGi`-RF09F4gzCBGfY z-ZXq$V0jO}%&gYtC7E;QiABaRWk)3;^(aA(7&>z;!kEal;HY{9(Nyo@5B1a8 zJ_=Wx2*>aO2FQ8}ND3hdkueK(H80iVs?5RShPe<7g0IZ4LDp(OBw)UX_w=bO@BP-q ztqX8X$Ty<4Bt%}Rd@{%peu*?u3~I~Mmum5%%xQjoagyVtfP77z5}Z#r34|l@OVEdc zcE9rAt(%HiSEEn;$r~-qJ(HkI^-v~F3P44I^o3?G)vjB4;Wkz$mNvFC(r_Zm#Fdiq zVH<;eU&8KJ9{8ne!k9n>;(i;GBCSZ6@VAg?QPin0n{KyzX|#L+b8gsj)6D zb^ z|Jq`!a4;u$M)Cp)nWk57Zkja@$G`KyE!W7#Fk_yWZ&R-~RGqi&b@QWZB!m=z<(e zTrNk&^75~4ggLwa=B-`4>Ro0=!_>j{sT@`Bv%s**5k-~8@EY8!q*A@*X=Lf#V0n8T z#(d^8-#x&p#|b;QSpw#mbLz7cPkiav$9mzO=*qDu_Q!ZKe31V!&)9|s)fdccgfXoz z{9r$~(PM3Cs6e&2hqX`2`4jc42t;1g&g_v4Ai8^7@}!SZP?|M2vy&r`E{~z zNR0?u{{dEs@=#hvP`=`_cO6(KwcFq3m=PvX+qGtLDhhWvyt?3}_^U<|6#`9u#~H-6 z3?7QPc>24a{$LMkQ0w!j8r)bnrAcK+O4>)rQyoLoO^Xw+$_9i4k07gT#zx*Py!6+< zetMllVlBCGm)a~$=@!bGll`^UWA}b^(oiLkDP0ToI?|n zDxsw(EJcwX;3rN%4f@2h|JCNXHk@r3=q8@VWb&Cr*Hf&o*9>*W$yk=8+7FA~D$8mu zLLKt1pKXccZ%NZWmYQj};3_Q$K}~a9K>WpMv0MucJLe`XHCd@ll7d``Ax$<7Q(o0l zVl{;b(9swy3`3|z{(Mh-aYkxw#UTimj7+&KUV?87GaXLDj6v3H)$K0D*y#E`bqCy z;g>1fq8og{fShlx>2${ww9(m_CQoC(g~Q&Mjs0b)=k{j5~k-PlE8{dwn)6GSUn-T z3sJ?Aqg-jZ)<-@@9rqB|ga63~CND zA`%-?n=pB38P{C7&b2&t&T`SCSm%ABhO)A_L}z>8jo zq`FDh%?sGBnAu259<6#U64_P||4+8=7QyY<+apVhh8zO~|xQy!h1ZwKo)5P}*S0 zGfdMZs1gx60;y7sEFtet5aO`f4cUU&3IkEv)0{q43lR1m{gqjMbT4bC®{lrU8-QILJuX%5zZ_onQ>U zgI5zY_&v#>*BwVbzbDo56w>9Hh%ocUwa)kK>Pl1zQGJ= zUo48Yhy@MxV3jLRJD%?U{ZW4-bfW0T3X5uM1T6WU3YLm#{}d z(%@KtVE#{bUb|oT%3Txo?2sbifTl$A#3tybveR}H&dwKpPzxAdZMy%_`6hzz zRE7+z*b&64hSy|tJWb`#4>4!qccNkLk;}uq3X2$Ij(7w7%>|4c4`;35eMrI1Fh7pN z5K>qPpYn(VXV?(;^ENIhd*k~VxUt^bRxD!j=Bd3PmSuGQ+i(=--fs*FXCT}tvYo+g zxujSCn`Wb7fB0LBmKUJy3z)O;$*p~E@Mt`%pl%jY9WthU^9YsXTxNsg6=qP_`n~oP z4~KX+7sh4jPN_$TU(*o!PSFu{p1DXF9In<$^Thwmvk_|+rJj%h$c_fZ{HmQo(FmI{ z%m}rvWmW0@2j`m%RgZ_0H+B}(jxr_V8)^kfOIjoX=s!2}(d`#&&#l^%$Gz;wLlCdkE z@$x{`2_F8O4zh{lKz1e!Y4G^--Md!J2jN^kI zjkVo?J1V_E?b27}Y58j8C+YxXPzei>doy;!oumJA_c%6OJT~ zIjc2JmFT3!mD+y_Zzz4Xu~00Y(gc8~nVEGmrZ#f|ef00&>2T+h@x-o4P?8*~R?dfQ zLW^fCCum0E@P_Rt`N02I_ETKhv)a8 zx%+U=8`2L61U0443<_P$%_vGJ!Jk{Unxysbfd3%%PA#SClzMp*Wk0 zQAV%O;8Fj$ VLvUUBiA4Ya002ovPDHLkV1mj%6QBS9 literal 23130 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 N002ovPDHLkV1h87mQDZw literal 14353 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 delta 5332 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 mQaTPx#1ZP1_K>z@;j|==^1pojF@kvBM zRCodHo&R;)xDUXQ@4NrMxe3afpx&VB1WhN1Zi3_{h&n-h6WE;~=>%3MXflCx6Qnl* zPKcv{9BXpT?KVeH>V5PxV6GUo5iQ8tEMf}$LX#&|E9W78Z@IGh_$lzl?IE*ajA zhU;?O-KCPGdw@k-aGmF$!z&vAWHGb60)k6y+D#KD_m@Nip1n zbLXLRf}->hVZhY$<}eZ1KmN`@Q6#XP`wel26Hkd@Ki8lr9N5l6Q~~2DU=Q@$@N{

! z=!MC64D11XJsw}G(JIlP+zaQh2e2InSNs0qycK4@>}(CyFj)`HGVdCO>Fkz^yJcoN zXc_tuw*JIK)*P4ilc<~HV{_gb6eSjvXCy8l5j!MU;c(1=^Qjx>oWa&Nm?PP<4BJJL zUEDNR3Fq?1&+30zKUYv*om(dAxy0Rx?)i})!)Gv4{s;3W6VlfZ3ARIkX!!tjjF3H_ zVX~5kKW~M(8}WN4jdmqJKs;l4l|97>*@r%E*R+9|GIt|3Oj@)7qdc=QH8qp=9%hOf z@oOF-o=X^yj|s9|9SzKs*%~p*Q&TAcP8Kj8DY|Md5odq8;dIVD@lNxr_5o|mIokh& zGKjekCzLn9oQ-(bxM*X?Rr?oqXAB)D$83!_5Zo_nTxrXXX~-$ldWK7!Yrw*}4<~9S z%|JX~VLZwNS?-5c!%UgG5p%s?$}GV>jKez7bB(KG4Kro#M*I(xMovLdhHNA9l&~9h zb9{*vwmyFn+^k5-{Pvq-?nW&2q$z#~6o#sX;rx}@3rlqy>#m@j64<(8a_*Bq67}?L z^_R#Yk-&M>uXwJY>=d6R>LEj3V;mJm4q3c&NP7Xb7oIaH$9Wj!oo4l|@pX^+WPdP& zT_*9sdjXXr2IUqgTYX_uoXE zuK<5VNdfzN!@a@y&{x_63!H%x#P+l_6JR2X(C&%{d-&Uh-dR1}%NS$z zebyH-Dm#H`&OKwYL7jzA#su31kqW1$LS4vEres26?q08}zQM|Vu*TdsryFCq8`Qbq z!RUkC2-u#J9@fZLm;(D5kRJqVXdn7$e;vrtNmE05l@IU?rv!CQ;k(o6h%=K zWuBnEB;}|?|Hd=%>D_}(1l5MKp5hyBUwGgjZD)%SlO z)ZxOZ!?{9{6i>3jO{5qOmcnt$P#uWOyRIJrol9Gf>p&e+ z3~uA-3*CV>j=n5VzwVm5c9O{8l)-e?f}Vn`o<6!0Nrrdc(@uXx!PHS|1J{UGLj4S*Pa5u>b_7pM<4({aec4&yyqi#C z3iLpP}ItKE0v7?+)C#=!5PxQ3xI;yaM}z@#19t7D}v zob92p9fukws~)1y!nNUZI|WwWLi)J8(A{chj@5VK4qra7m4ci!cBF>Pn5;<~a{#rF zevACP_N5@-T~{gOUm}11AeI5&P9>w;E*it3NsW={yEA}yDS_zX-+$~ohsbU&j;Jd(^mxaWsY2i^2|sEr;Kn> zcTT=Rc@@r`5|f_1V=26PRg6p?xQ@|{*vhPNH%!bq6DT}=())j}V@Y~X_E92SSmwz{ z4gX?364QMgIx41K6(g4iu45`A4*iJxD1`HFa2P)XeX+sDectr4bH>Om`x+L*6aEqv z^5emZk%KxdJt@703M$s$}}#>jW>~|;)Oqq?%GmI{x5YF{n4#M?WTOC>OOE%oQjHXHM~n$+N9{2QxuNTU$@JZ}4)1V+Mb(_p5dL+q(3x&~8@EU|O#15XC(T zP<}BdBQEV{=6se;-nktMclp0!E8y1s(2c#@4K*%cS~x%7XjjZRFqheh=b=GkjP&Jy zU<{QEk~UmsPLb02yGy4jEkBwL_0ZQa9pvM@21R5xMr(eOueW7It0q=;#HJgq8&<5`nN{@5BF%&K3lO% zP!7i2dSV(j&~_m*=31H{-k;6zuX^%@bGo-_3)R>gCQ-jxaazW z{C>6NkavkYPG%jDSy`FjvNJLpRB@(@9g3nT jilQirq9}@@D2L@ge+$Mmufz@g00000NkvXXu0mjfs6UFT literal 24016 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 diff --git a/assets/themes/Binance - Dark/dex-logo.png b/assets/themes/Binance - Dark/dex-logo.png index b720c06d36050af57619af80833d34684221990c..ddc2c4b6542e7b86a8347429446775eb7b83c146 100644 GIT binary patch delta 2714 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 aWcvSW#JDQ_PYK@u0000C6bV8AilQirq9}?o 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 From 92c441acca255652b53bba7168b123b899365772 Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 08:31:18 +0300 Subject: [PATCH 161/251] change DEX_PROJECT_NAME to komodo-wallet --- .github/workflows/atomicdex-desktop-ci.yml | 2 +- cmake/project.metadata.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index eac54935a0..1a0a9f0c41 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -13,7 +13,7 @@ env: DEX_API: "mm2" DEX_RPCPORT: 7762 DEX_RPC: "http://127.0.0.1:7762" - DEX_PROJECT_NAME: "atomicdex-desktop" + DEX_PROJECT_NAME: "komodo-wallet" DEX_DISPLAY_NAME: "Komodo Wallet" DEX_COMPANY: "KomodoPlatform" DEX_VERSION: "0.5.8" diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index ec5dc881ca..3b76cf5b26 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -2,7 +2,7 @@ set(DEX_API "mm2") set(DEX_RPCPORT 7762) set(DEX_RPC "http://127.0.0.1:7762") -set(DEX_PROJECT_NAME "atomicdex-desktop") +set(DEX_PROJECT_NAME "komodo-wallet") set(DEX_DISPLAY_NAME "Komodo Wallet") set(DEX_MAINTENANCE_TOOL_NAME "Komodo Wallet Maintenance Tool") set(DEX_COMPANY "KomodoPlatform") From 7711eda967e2aba6eefea503a3dbf3fc8d7456f2 Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 08:53:42 +0300 Subject: [PATCH 162/251] change DEX_PROJECT_NAME to komodo-wallet --- .github/workflows/atomicdex-desktop-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/atomicdex-desktop-cd.yml b/.github/workflows/atomicdex-desktop-cd.yml index ddf0312b74..c9254c6055 100644 --- a/.github/workflows/atomicdex-desktop-cd.yml +++ b/.github/workflows/atomicdex-desktop-cd.yml @@ -6,7 +6,7 @@ on: - temporary_disabled env: - DEX_PROJECT_NAME: "atomicdex-desktop" + DEX_PROJECT_NAME: "komodo-wallet" DEX_DISPLAY_NAME: "Komodo Wallet" DEX_COMPANY: "KomodoPlatform" DEX_VERSION: "0.5.8" From 41ff63ae029ea4b05b3af6cd2a158d29c77d8e0e Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 09:12:52 +0300 Subject: [PATCH 163/251] vcpkg name to komodo-wallet --- vcpkg.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vcpkg.json b/vcpkg.json index a8e1b48608..1a85f577ce 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,5 +1,5 @@ { - "name": "atomicdex-desktop", + "name": "komodo-wallet", "version-string": "0.5.8", "dependencies": [ "entt", From dd49815b624caabc56c2cbc9a222b52f149332b6 Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 09:18:43 +0300 Subject: [PATCH 164/251] atomicdex-wallet to komodo-wallet --- .gitlab-ci.yml | 20 +++++++++---------- CMakeLists.txt.user | 12 +++++------ .../ci_scripts/ATOMICDEXinstaller_script.iss | 10 +++++----- .../macos/Packaging_CMakeDMGSetup.scpt | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 02e4592433..1c25541055 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,9 +18,9 @@ variables: cache: - key: $CI_COMMIT_REF_SLUG paths: - - atomicdex-desktop-linux-${CI_COMMIT_SHA::9}.zip - - atomicdex-desktop-linux-${CI_COMMIT_SHA::9}.tar.zst - - atomicdex-desktop-${CI_COMMIT_SHA::9}-x86_64.AppImage + - komodo-wallet-linux-${CI_COMMIT_SHA::9}.zip + - komodo-wallet-linux-${CI_COMMIT_SHA::9}.tar.zst + - komodo-wallet-${CI_COMMIT_SHA::9}-x86_64.AppImage - key: $CI_PROJECT_NAME paths: - "$CI_PROJECT_DIR/.cache/vcpkg" @@ -68,12 +68,12 @@ linux:build: - rm -rf build_ninja || echo "no build_ninja folder to rm" - mkdir build_ninja && cd $_ - cmake -DCMAKE_BUILD_TYPE=Release -GNinja ../ - - ninja atomicdex-desktop - ninja install + - ninja komodo-wallet - cd $CI_PROJECT_DIR - - cp $CI_PROJECT_DIR/bundled/linux/atomicdex-desktop-linux-${CI_COMMIT_SHA::9}.zip . - - cp $CI_PROJECT_DIR/bundled/linux/atomicdex-desktop-linux-${CI_COMMIT_SHA::9}.tar.zst . - - cp $CI_PROJECT_DIR/bundled/linux/atomicdex-desktop-${CI_COMMIT_SHA::9}-x86_64.AppImage . + - cp $CI_PROJECT_DIR/bundled/linux/komodo-wallet-linux-${CI_COMMIT_SHA::9}.zip . + - cp $CI_PROJECT_DIR/bundled/linux/komodo-wallet-linux-${CI_COMMIT_SHA::9}.tar.zst . + - cp $CI_PROJECT_DIR/bundled/linux/komodo-wallet-${CI_COMMIT_SHA::9}-x86_64.AppImage . AtomicDex-linux-zip: stage: upload_linux_zip @@ -83,7 +83,7 @@ AtomicDex-linux-zip: artifacts: name: "AtomicDex-linux-${CI_COMMIT_SHA::9}.zip" paths: - - $CI_PROJECT_DIR/atomicdex-desktop-linux-${CI_COMMIT_SHA::9}.zip + - $CI_PROJECT_DIR/komodo-wallet-linux-${CI_COMMIT_SHA::9}.zip when: always expire_in: 3 days @@ -95,7 +95,7 @@ AtomicDex-linux-AppImage: artifacts: name: "AtomicDex-linux-${CI_COMMIT_SHA::9}-AppImage" paths: - - $CI_PROJECT_DIR/atomicdex-desktop-${CI_COMMIT_SHA::9}-x86_64.AppImage + - $CI_PROJECT_DIR/komodo-wallet-${CI_COMMIT_SHA::9}-x86_64.AppImage when: always expire_in: 3 days @@ -107,6 +107,6 @@ AtomicDex-linux-tar: artifacts: name: "AtomicDex-linux-${CI_COMMIT_SHA::9}.tar.zst" paths: - - $CI_PROJECT_DIR/atomicdex-desktop-linux-${CI_COMMIT_SHA::9}.tar.zst + - $CI_PROJECT_DIR/komodo-wallet-linux-${CI_COMMIT_SHA::9}.tar.zst when: always expire_in: 3 days diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index fc0b09b16b..3640a29bef 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -215,9 +215,9 @@ 2 - atomicdex-desktop - CMakeProjectManager.CMakeRunConfiguration.atomicdex-desktop - atomicdex-desktop + komodo-wallet + CMakeProjectManager.CMakeRunConfiguration.komodo-wallet + komodo-wallet false true true @@ -286,9 +286,9 @@ 2 - atomicdex-desktop_tests - CMakeProjectManager.CMakeRunConfiguration.atomicdex-desktop_tests - atomicdex-desktop_tests + komodo-wallet_tests + CMakeProjectManager.CMakeRunConfiguration.komodo-wallet_tests + komodo-wallet_tests false true true diff --git a/ci_tools_atomic_dex/ci_scripts/ATOMICDEXinstaller_script.iss b/ci_tools_atomic_dex/ci_scripts/ATOMICDEXinstaller_script.iss index 11c3bc373b..e050f2f114 100644 --- a/ci_tools_atomic_dex/ci_scripts/ATOMICDEXinstaller_script.iss +++ b/ci_tools_atomic_dex/ci_scripts/ATOMICDEXinstaller_script.iss @@ -5,7 +5,7 @@ #define MyAppVersion "0.5.0" #define MyAppPublisher "Komodo Platform" #define MyAppURL "https://www.komodoplatform.com/" -#define MyAppExeName "atomicdex-desktop.exe" +#define MyAppExeName "komodo-wallet.exe" #define MyUserName "smk" #define CommitHash "b2ce1cc" @@ -27,8 +27,8 @@ DisableProgramGroupPage=yes ;PrivilegesRequired=lowest ;PrivilegesRequiredOverridesAllowed=dialog OutputDir=C:\Users\{#MyUserName}\Documents\temp -OutputBaseFilename=atomicdex-desktop-{#MyAppVersion}-windows-installer -SetupIconFile=C:\Users\{#MyUserName}\Downloads\atomicdex-desktop-windows-10-qt-5-15-2-{#CommitHash}.zip\bin\assets\logo\dex-logo.ico +OutputBaseFilename=komodo-wallet-{#MyAppVersion}-windows-installer +SetupIconFile=C:\Users\{#MyUserName}\Downloads\komodo-wallet-windows-10-qt-5-15-2-{#CommitHash}.zip\bin\assets\logo\dex-logo.ico Compression=lzma SolidCompression=yes WizardStyle=modern @@ -43,8 +43,8 @@ Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl" Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] -Source: "C:\Users\{#MyUserName}\Downloads\atomicdex-desktop-windows-10-qt-5-15-2-{#CommitHash}.zip\bin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion -Source: "C:\Users\{#MyUserName}\Downloads\atomicdex-desktop-windows-10-qt-5-15-2-{#CommitHash}.zip\bin\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "C:\Users\{#MyUserName}\Downloads\komodo-wallet-windows-10-qt-5-15-2-{#CommitHash}.zip\bin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion +Source: "C:\Users\{#MyUserName}\Downloads\komodo-wallet-windows-10-qt-5-15-2-{#CommitHash}.zip\bin\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] diff --git a/cmake/install/macos/Packaging_CMakeDMGSetup.scpt b/cmake/install/macos/Packaging_CMakeDMGSetup.scpt index b816533e58..f06196f7f3 100644 --- a/cmake/install/macos/Packaging_CMakeDMGSetup.scpt +++ b/cmake/install/macos/Packaging_CMakeDMGSetup.scpt @@ -39,7 +39,7 @@ on run argv set statusbar visible to false set toolbar visible to false set the bounds to { 400, 100, 900, 465 } - set position of item "atomicdex-desktop.app" to { 133, 200 } + set position of item "komodo-wallet.app" to { 133, 200 } set position of item "Applications" to { 378, 200 } end tell update without registering applications From 50362e0104f7ecece7861a30efa7ce165b319ded Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 09:19:33 +0300 Subject: [PATCH 165/251] atomicdex-desktop to komodo-wallet in comments --- src/core/atomicdex/api/mm2/my_tx_history_rpc.cpp | 2 +- src/core/atomicdex/api/mm2/my_tx_history_rpc.hpp | 2 +- src/core/atomicdex/api/mm2/my_tx_history_v1_rpc.hpp | 2 +- src/core/atomicdex/api/mm2/paging_options.cpp | 2 +- src/core/atomicdex/api/mm2/paging_options.hpp | 2 +- src/core/atomicdex/services/mm2/mm2_events.hpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/atomicdex/api/mm2/my_tx_history_rpc.cpp b/src/core/atomicdex/api/mm2/my_tx_history_rpc.cpp index 6a0c86ef95..a154fa4a0f 100644 --- a/src/core/atomicdex/api/mm2/my_tx_history_rpc.cpp +++ b/src/core/atomicdex/api/mm2/my_tx_history_rpc.cpp @@ -1,4 +1,4 @@ -// atomicdex-desktop +// komodo-wallet // Author(s): syl #include diff --git a/src/core/atomicdex/api/mm2/my_tx_history_rpc.hpp b/src/core/atomicdex/api/mm2/my_tx_history_rpc.hpp index ea308b14b6..bc7e6e1c94 100644 --- a/src/core/atomicdex/api/mm2/my_tx_history_rpc.hpp +++ b/src/core/atomicdex/api/mm2/my_tx_history_rpc.hpp @@ -1,4 +1,4 @@ -// atomicdex-desktop +// komodo-wallet // Author(s): syl #include diff --git a/src/core/atomicdex/api/mm2/my_tx_history_v1_rpc.hpp b/src/core/atomicdex/api/mm2/my_tx_history_v1_rpc.hpp index 8b85d28cc5..1ff69bcc08 100644 --- a/src/core/atomicdex/api/mm2/my_tx_history_v1_rpc.hpp +++ b/src/core/atomicdex/api/mm2/my_tx_history_v1_rpc.hpp @@ -1,4 +1,4 @@ -// atomicdex-desktop +// komodo-wallet // Author(s): syl #pragma once diff --git a/src/core/atomicdex/api/mm2/paging_options.cpp b/src/core/atomicdex/api/mm2/paging_options.cpp index a0f95fc001..91e2c9b834 100644 --- a/src/core/atomicdex/api/mm2/paging_options.cpp +++ b/src/core/atomicdex/api/mm2/paging_options.cpp @@ -1,4 +1,4 @@ -// atomicdex-desktop +// komodo-wallet // Author(s): syl #include diff --git a/src/core/atomicdex/api/mm2/paging_options.hpp b/src/core/atomicdex/api/mm2/paging_options.hpp index df3ba02200..4f48ec69db 100644 --- a/src/core/atomicdex/api/mm2/paging_options.hpp +++ b/src/core/atomicdex/api/mm2/paging_options.hpp @@ -1,4 +1,4 @@ -// atomicdex-desktop +// komodo-wallet // Author(s): syl #pragma once diff --git a/src/core/atomicdex/services/mm2/mm2_events.hpp b/src/core/atomicdex/services/mm2/mm2_events.hpp index 2329a147f9..b5b24fa784 100644 --- a/src/core/atomicdex/services/mm2/mm2_events.hpp +++ b/src/core/atomicdex/services/mm2/mm2_events.hpp @@ -1,4 +1,4 @@ -// atomicdex-desktop +// komodo-wallet // Author(s): syl #pragma once From aef991361d187566f84649e3ac30d77b282ff2d4 Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 09:37:18 +0300 Subject: [PATCH 166/251] tests atomicdex-desktop to komodo-wallet --- src/tests/atomic.dex.tests.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tests/atomic.dex.tests.hpp b/src/tests/atomic.dex.tests.hpp index 93b3611a39..205dcbf8cd 100644 --- a/src/tests/atomic.dex.tests.hpp +++ b/src/tests/atomic.dex.tests.hpp @@ -81,16 +81,16 @@ struct tests_context : public antara::gaming::world::app SPDLOG_INFO("Using default password from the application"); } - if (not wallet_manager.get_wallets().contains("atomicdex-desktop_tests")) + if (not wallet_manager.get_wallets().contains("komodo-wallet_tests")) { wallet_manager.create( - test_password != nullptr ? test_password : "fakepasswordtemporary", test_seed != nullptr ? test_seed : "fake seed", "atomicdex-desktop_tests"); + test_password != nullptr ? test_password : "fakepasswordtemporary", test_seed != nullptr ? test_seed : "fake seed", "komodo-wallet_tests"); } else { - SPDLOG_INFO("atomicdex-desktop_tests already exists - skipping"); + SPDLOG_INFO("komodo-wallet_tests already exists - skipping"); } - wallet_manager.login(test_password != nullptr ? test_password : "fakepasswordtemporary", "atomicdex-desktop_tests"); + wallet_manager.login(test_password != nullptr ? test_password : "fakepasswordtemporary", "komodo-wallet_tests"); //! Waits for mm2 to be initialized before running tests while (!mm2.is_mm2_running() && !m_test_context_ready) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); } From 5aae7dc95a133354c43e36a08dcd5aac1067c0df Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 17:06:02 +0300 Subject: [PATCH 167/251] bump version from 0.5.8 to 0.6.0 --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/workflows/atomicdex-desktop-cd.yml | 2 +- .github/workflows/atomicdex-desktop-ci.yml | 2 +- CMakeLists.txt | 2 +- cmake/project.metadata.cmake | 2 +- src/core/atomicdex/version/version.hpp | 4 ++-- vcpkg.json | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 486fea1015..4622a86c29 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,7 +26,7 @@ Please describe what you expected to happen. **Operating Environment(s):** - OS: [e.g. Windows/OSX/Linux. If Linux, include distro. ] - OS version: [e.g. 7/10/11, 10.13/10.15, 18.04/20.04 ] - - Komodo Wallet Version: [e.g. 0.5.8] + - Komodo Wallet Version: [e.g. 0.6.0] - Build branch: [e.g. master/dev] diff --git a/.github/workflows/atomicdex-desktop-cd.yml b/.github/workflows/atomicdex-desktop-cd.yml index c9254c6055..f955fa601f 100644 --- a/.github/workflows/atomicdex-desktop-cd.yml +++ b/.github/workflows/atomicdex-desktop-cd.yml @@ -9,7 +9,7 @@ env: DEX_PROJECT_NAME: "komodo-wallet" DEX_DISPLAY_NAME: "Komodo Wallet" DEX_COMPANY: "KomodoPlatform" - DEX_VERSION: "0.5.8" + DEX_VERSION: "0.6.0" DEX_WEBSITE: "https://atomicdex.io/" jobs: diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 1a0a9f0c41..57a1ad1125 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -16,7 +16,7 @@ env: DEX_PROJECT_NAME: "komodo-wallet" DEX_DISPLAY_NAME: "Komodo Wallet" DEX_COMPANY: "KomodoPlatform" - DEX_VERSION: "0.5.8" + DEX_VERSION: "0.6.0" DEX_WEBSITE: "https://atomicdex.io/" VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/b/vcpkg_cache VCPKG_BINARY_SOURCES: clear;x-gha,readwrite diff --git a/CMakeLists.txt b/CMakeLists.txt index e390d48e2c..50aa3bcd64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ include(vcpkg_prerequisites) include(qt_prerequisites) include(cfg_hash) -project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.8) +project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.6.0) message(STATUS "${PROJECT_NAME} is version ${PROJECT_VERSION}") include(cmake_default_options) diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index 3b76cf5b26..e6b9adf429 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -7,7 +7,7 @@ set(DEX_DISPLAY_NAME "Komodo Wallet") set(DEX_MAINTENANCE_TOOL_NAME "Komodo Wallet Maintenance Tool") set(DEX_COMPANY "KomodoPlatform") set(DEX_WEBSITE "https://atomicdex.io/") -set(DEX_VERSION "0.5.8") +set(DEX_VERSION "0.6.0") set(DEX_SUPPORT_PAGE "https://support.komodoplatform.com/support/home") set(DEX_DISCORD "https://komodoplatform.com/discord") set(DEX_TWITTER "https://twitter.com/AtomicDEX") diff --git a/src/core/atomicdex/version/version.hpp b/src/core/atomicdex/version/version.hpp index 816d3f013d..714e1c61de 100644 --- a/src/core/atomicdex/version/version.hpp +++ b/src/core/atomicdex/version/version.hpp @@ -21,7 +21,7 @@ namespace atomic_dex constexpr const char* get_version() { - return "0.5.8-beta"; + return "0.6.0-beta"; } constexpr int @@ -33,7 +33,7 @@ namespace atomic_dex constexpr const char* get_raw_version() { - return "0.5.8"; + return "0.6.0"; } constexpr const char* diff --git a/vcpkg.json b/vcpkg.json index 1a85f577ce..3406a644b2 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "komodo-wallet", - "version-string": "0.5.8", + "version-string": "0.6.0", "dependencies": [ "entt", "boost-multiprecision", From e7598c52541e132fc9f0b3c7c19d9779c8905709 Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 18:55:50 +0300 Subject: [PATCH 168/251] update logos --- assets/logo/dex-logo-big.png | Bin 2908 -> 10090 bytes assets/logo/dex-logo.png | Bin 12899 -> 9449 bytes assets/themes/Binance - Dark/dex-logo-big.png | Bin 2908 -> 10090 bytes assets/themes/Binance - Dark/dex-logo.png | Bin 2720 -> 9449 bytes assets/themes/Default - Dark/dex-logo-big.png | Bin 0 -> 10090 bytes assets/themes/Default - Dark/dex-logo.png | Bin 0 -> 9449 bytes .../themes/Default - Light/dex-logo-big.png | Bin 2908 -> 13422 bytes assets/themes/Default - Light/dex-logo.png | Bin 0 -> 12031 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/themes/Default - Dark/dex-logo-big.png create mode 100644 assets/themes/Default - Dark/dex-logo.png create mode 100644 assets/themes/Default - Light/dex-logo.png diff --git a/assets/logo/dex-logo-big.png b/assets/logo/dex-logo-big.png index 525a29a58e6b11feb329ea04b2230c15e1f1083c..97a45e5f45df7d11ab2d5830089ae8cf36db4e03 100644 GIT binary patch literal 10090 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 Hj`9BmLBHAV literal 2908 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 literal 12899 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 N002ovPDHLkV1h87mQDZw diff --git a/assets/themes/Binance - Dark/dex-logo-big.png b/assets/themes/Binance - Dark/dex-logo-big.png index 525a29a58e6b11feb329ea04b2230c15e1f1083c..97a45e5f45df7d11ab2d5830089ae8cf36db4e03 100644 GIT binary patch literal 10090 zcmb_>cT`hRv+p4U=^a!$NE0d2dlwOqA|SmZy-11lUInF#5K1U2pwbP5UIYY`Kqx|h z&;$jk5h(#ex$(R2y+7Yu>#cj%O0qJ0&z_mzo_%J|OzI=U2h*{Ek004*) z0EkSCaxGy~2Hj3NzN;R{O@$n7hWjsC$zo&42x9)9PlLV%$T8^gQ9+v! zGSK%r9=oxJ@E@@cSmiIw!1N&hy5v2GhzJTgx(%4ei4%zwlhY)%361{MydZ<9X&bMc!-dw##B2NpH;~DI)!0JD3xm+z0%e z!c=KLAApj03B;yCxt;Fr*CcUI{1PNET?qm?f&F%vX!;7E7erv<`{~8oO`)-xV@;3} zB@hd?T_&?(3lMG{Fm$-&B5-`y2eJ#eo$3u6n(4u*(W(!@bz$V{;KKsoR^TWr7x-Q% z3iV@fJCxrSl0ywaEnMKMcB(Y4oV_&OB;Ejk&Vu;uF6Z|~s~U@;9E$qBc}l)TZvX&V zBATnsB{h;=fE1{ge0QUBGu>Swzw(z;+MbC6(4Bg{XZ);7}V1fOvG$W}v@rWO6(89E=+<(XJny3jpCf`T&uZyprLEY=qRR!``wH zX^WBIWu<=$YN2QMZ{NjLR+|hb^6w1Of|2B-_&?gzB;$-upg&CeJMzhcBCoA3pS6ra z7FOo-aEn}bAjt-1^~?|<%GnpL`XFy z*WJ%G%i2?Ch(jzBkOf`8!RKY?A*yu)Ug99rWdalrEU@?bo7y!8EIeI?{*s$2@xvUd z)s)*gU{vqitGiB~6lNAH1uY`J*~{dHbuH{e&ZCuQ$N!97BeN>~(2chMt?>1M$6p~V z=sL4KqjH1K6PoSq#Lb|$!M(bP|gF*92xP{kwAKe(Nax3;UACOOVqgiQ+&|Tgi%V68*K8a(K_xhNTrGHFPtN{fS zq4C~Np6cli&1f!+*96Su5lUr4@A2Ij}~_`+k}I@OQ#$}N%>=oL?;6fKkuAK&!i_j26|0D9?CDQnYL zZo!_mqBO^VvuvKt3>yV70OvXl)ir>|FOMOuK?|6V}zMphc7)~N&R}K5; z3S6tdgNeRAl8S4_o2}ySyY(^mBHVhHy0eb;d$xUgvX6b1OMa+jDD;P5U3;$N7~DYh zdh@JhdH~;jXs=gWpAT<<>tbiQ@AF3(_m$Tj9A@u}(2eD9BuBU=Wx14tm8-I3-**PK zRHPj|J5*rvbhoJm1F^ZbW}*7cE_#@C7;Mm0Nq&YEr&mDwi-HB{eJp+XtBmby8p5LP zdpng45#V@-wP(%MyqV!?l($_*t-cn9=4~+4Pf3Wq`4-S%&Kgs=pYGDj99jCz3Xuav zIPG)=lS*QWA%3O2KQ~NGjNFtKpqexU zNi^=>r3ur$0+Bx6akl%0tN5`t5t~zEu6Lx~-4OUJos*{k5tswZK@SELp+N1%~ zuVCA(1`ZG(uYLwi4VX32ldB`NVulq zC|1-=3F~g(O_-KLY}#w?1M4PIfga9 z)?^Kj63J`s*N7WGWKF8E`6kT6N+eG9k6&2-++xxa?~hD+H>JZ)Wu5fppW<)WhZ)Dd z8V|RN{?H@q17H6artk3pSwel_EQR%FCv|kd+%0|Jlvf`ZCLq(x{%-3xg(H|S+VdEu z3^_IcTwaRDHGA;IGhMJS*h}QVb7dGITq{&M8RA4Ix-wdUyxTK6iizZo+ys+v&BQ5B z|1|Kvo04O2Bt{^L|8Jr=N~lT^W&BOtScg54{J(MVw%&Z4?^`LN4{5v`Su}8=O_7=) zY|>y!F!0NQd%W!v=qzco-sB6JXCb`3ngqYNo<3l#16oIR<{X*7y5jLGqeD*Vlen3(*y} zhKiSaq+i%KFc4(ND|PttWtcGdZ)dgp!%WuBUc6(fo_oO^cc0)N2F@Jg4myflE-Fj9 z;S~e)+mkNblmsT-8shMRkIRV)rhYCQ91^~@0||UC2q&KXx}RlkpqJXv-onQWMnaqC z0wXQ&tjP(O{%5s2sa3gJwz~rltm>YBZ)O;)XP9wvpVNya>0ofYuWuGC8u0N`sXh_Z zYqI|0`-TJmB3bbVX}7k3I3X5XRP-x(&e5|@Cdbe33wq}VSPdpJ5I2}fW^mgL2&RIQhFvGajiyHL=a!F+ z%^%ZM7O`E$T|QsZ@tdlJ*xhvfUb`>G50%vn9%Dd!_eR0yUziUYKf-(;&FO^q40l#f zsu?l!6)UA~WOK*K5YAk>^H{(>oNpbJL(PM$3w(ez>{xYM`Mi2iXAw4QozlXH%RVt&L+d>T0hVGmv);C^rVZI^ zpVXe7c;$JRM$%U7_Z0ceFava{3bR=0Iun6PU-%FyEYH_uUQZjjG3Q|`O$d*yvmnE@ zZRaJJN4Z#l9{i{vu>%Om7S^j3mH^h z_)AJQy0SOyuFh!mM$$n3_WQR$>|<$z-9#D8B_rgm=b5hMcRc{eIfBg!lNc9ZPns(s z!T?}dSQi{mQ$SyUJ+_{5vL&zKT+;_gn_$I4W)Hp&ipZtu(&b^2j~PZE^ZHBHfz2~% zpuI$LCzB6!--?f9u)gqL2szcABuUNucZ;Bv9xdj0?gdIx^DUC~GN^LvAOZ{}lLl%l z%}mA9t9-L`Sb$oB1^yY8+i7j?l>H{+DW_x6(}x=IhWSA3NE3&GL=caw1kHV;!l&%1 z_nJ*!f`Q);r{qF*Buv&>=8wJG(4IboNY11GV_&1nSlGQ+ZTyf!ls1YE0FozN|a!@SFqf8k%ci ztjm>POWFWH_L=F94a~k)`1V2*wO_NL9|5357m9q+(SE}l@?uE{c*~wNZ7D&4@uu4F ztB_f1MgzGpn~v{#&mRKnK85aO zvmI#tBK0O}It3Y5_UhN%L{x$NfHov)%y52l0P-DLAvtp6KUo|f<2a&iWk#fa!MARd zG~Mbc)SUfhvN%y_p+=efV)W3P>T`%*W=IO<5Z8>MNk#g)W^$^?bcZ`4baVWaU!tfntEe!IvpQy_lg0~Xzly0 zJr9pSCM=qR$$JUu0@-iwN9SV0utjY!IXBP;rh|4l_ld9_phDtpyWkj)kJUD@73C-} zT{eQ(v^)PaNXPaL8|P9X-99%EPsmWRCnTiU(#LCvv^1nh=?a89?F)asb-Z)j5u=+0 ztP)Ry%3*^mAA7r(Yt6dg%CKrQa6-0zbWkmY~0yxxpAY=Z7i4Bq7|flx_Cg@cX{f<^^&H zk&i{9oRHDtG)YIh2{}O7M{uvpZz&>|f$J~aPIZ491?ckcLh0qe}C~hPh?( zxau~EIsbPpV2+@XRKs6YW`tA)EO%Rq2Q*B821%Yy zy=yD|*C_TxpYfV_3?Zie&~FVD@NH-)?@NBEIZ2W>D3a-R`fwgFrss_PMbJk0SE2Tc zgkNn|B^)BRs_@Rzd&gfzkFTz_pI+IM(fnV_2#4h#>qq|@Jcq{|Xan3&g2isYcb>J* zi?o1NBsp&IUD7at2=)(spj9kUQB`HES?U4jpPWBB$tD_Jq+~&Hu3d^+s`P;Y;EyJh zAjqDKP)_NkbOHfDC_ym*xSL2004qu2M1(6pod5vD-uNGzd?g5_HWM9Ko|>MXe#Phi zC+t<%#&@Kmnv@*s_{wjlBU``bSp?Hw=}U)=wJ0O=PcT}vQq?kMo=(86mxC_EO^6RT z2=^P!+)DtjL=U6g!hSv74UBvQN5SQedyjuVy=u6UEq$BA5{P*xJwh4cjc)lJTGFLp zkNsAId#mN&pb{Ni>b{RzbA-|2`XSp3t-p*sTki8qtsVE+c;eJLx{t3)gOpKAv%U*D zKcnu-w!j{Gwgm88)!=?Wj<0+coY6;j3--gG@O*z2`iYbp{+)G3Zr{cJt@OxPcivfJ z%+*&Bwy(vfX((i1l@sEDZ(aoTBg{`#G@EbB^LoEM$fDkQ(;_K$I)bK%0@l~HXLzBUuOq$FZRg$5lM8xRSu&6?NX{@L$f9wj08Nq)4f!DRh=?uclCju% zZZn0rxN?rOUgqs?wj&JZ^f61{W8nh3B;qh_^hdnh^LRHM`0!qkMR$#aJYwZ$> zIm7nz#b1Vkst>=P@T|@nMldPm50syKFuyZA&xT22bzKbB-@7Tcdc8(?A~^Vk zMcyU%=zythc7{GDhskzg=PrEyvdW9(hO?g7E0CnJM=w0zA(HiiKS%r!5^P5N5SWSn z!5iK?g=kk2d|OCHTH}|2Y0I2&(!~5}n(E|J3bV=){%jSDVxYCqF5U248BwDpT*p`f zFPcw9aO-Zor;Yi+ivz8}OC0Km9Knum1$);&pM74oFlY?o9eIgkjH0y8FRC6vv1|2l zF|Y87exr(AjE93{P!?{TL$`Y2WnIStQgUJR2=nrQ{L3kXt`l$A9VA0jp3l05b1qBG zK_2T1Co)FH5fPnPE|m7);94R~y*nLWpgV2*=lO!gJKwH3dUPmvUED zC&^+79)Hg0dfdob^BABj&zUk0WnL<<}!V{wdb;8z5aO* z139gE^#(OS(s-uta-EL?Vmi_}8x6iYgs`h`^iq&ivfWQllb+iB(Lp;8TxqP=hm?}v zxQTVO-w{8!OX6-UB@tH~pUBwBr3pfW&u)}8wM+F4>!GBM6rN^I;LDV*`MBO+P((Fy z^~sEK_jSRQcg-G?BT4LM(T zU8=A4lJ2PQC9qI6{A@z<6=yh?vh=wk#`wUe9y@jvjEfmROrVc~U?a95QT6T9sqXKl z|6rc@RqdWJ??vsb=%Dv5f?4eq9AQ|Q3>acNq;+h$s8o9I5~sYcc-7@s8rE~sD8PrE z%WHHlY_V1epYU!aMm`FMr*8^_s@RQnJb~B> zsveg4eOm8vY>VV3{ZUv*2LnmlxbpN?m|aiuhv0=5g47nHQH}m+@on4cs}L^XN4cvS zn0NuLvftCPbxzgYEs{CO!XDo^v1Z=#Y%IF{*IqnydSf2LGx(ak5$3toD_>Y@-A_gL zQ;G3O!-%d7GH!SEvvxmIZUwlErTBH}iLLDKL}&%vNGZJ5$>+n^{x;hm z&U_}Y{X7dU&~Bx!_M-G}-x|-DfF|lz>ud4&Xfe2oPw8{PeaI$Wj6aQgo700UGT_I) z1%q~0f%T%_Nl5BQ2y8j2n18kw!XGW>yJ2=qA2~D>OVWy^RURZ74zc{P+PBv2^oD|^ zOe7?$W&rgn3`Ru{kb4_~a_`&XB(#h$qfRpY$E`|sE(Jv@7pU;*GlMnAEbmNcP=*&`j%JAh@ z8+zy7<%(^NX2YSG<;3TgL0^n`PKcbGRed77g`Aiq?HNDK@9X@@3S4o1-b?8mh0s19 zIJ0e}ZO!Mz@@n_uP0!DttvAy7UP&NAcmtSLtI$84?vcm`I9cw}B&LS7p~Yd@k@j!1 zLobD+qjOGEnUS4ZRA~`OColI|p1>+@FleWV(|g3gs8X(n+!i$PL}H%IA1V~^fVd!puDb;4bMJ5e_*b?hP3_KP3=dJ)J|#XtN0j6 zoaxtdO}nZnlkW4~fob}oNTp;|>du(=nvxLD!AGsvZJL8sj!~U-tgQPt!eI|nEgH@^-6_(go&^a-N7kQM z@%0UK&Xs!&G3|7#B|GqUqF0|2tmW~_rl3~heSf8|$~fs7W&jDAEb6qb|pj?ZsGEhy1zzJm6eiu_RxAmm~g7-9m1zuu=2; zaY-hwnZ=4XOk}`yeL86<>fR-E%|k_VU58)7GC#q>m}!&t8vs-@imx3Ie< z$PI*sGjFsrb;nDc1tNvVRRcITHCDTz-D8bq^~tKN4}8TEGC47jZQB>6cU2Vgl5dCl zEp8mSCTQ_Q-_a24(+W?wvM=N+=cwJUNK`4yiz>P4K?52o;fZ3kx%Y#H&Srl@Nr<_U zKCrL#xr7W85$^NLZ3YkLmaYqCy9A}%g*}aeL^k`l(@93q*hM1;+wCTp{nE8mx@Lt& zcdIWZo|Z@ZbBQW|mwfZF$n5BW9(9%Mh<3Ons+nUWnALD%O(kTjDwphgjFJyO!x1Fl znI3fq?cSny&jrt^>hC4FpV%m@A-)!V(H+97jh%Qf3Q_ZrZ>D*lJrNA^rsf??skWq~ z-Y6XU;CJtDp5N6pq{usd6^WqcjQsz zNr;wr4zhY$uvmT-&*Ej6nRmw+nge@dEu@8`VN62v?P79p*NY4sTw@{`0ZVSCcNC%S z=Txpkbw0oNjAk{g-?BgGtQ|D#;5UzRVpc&1RYmKis*^J|;yz?$7{_Xz9zNzFFAPa zQVP5`zG%-UNV*|+6Cf&&- zf~rUVGu|mU3G!}Z|ITM@9if}Wg%b!a_v$giVa9m0qSV58bf^%t zx@lYA{UI&k4NDe=_%u<{?~CC)c5BOSa({SC^`q8%X1LjaIkh#)pLY|d5rH@leDN@A zQ4wQZkh{I06X6yu^`#=~Da^MlRL~QB>h>{c@Z0-R$F(-^*{^{+Cr2n3ZePKf4>C0P z0)%3q;sIyrqWgNE@v;R9^-F1gs#fbw^nuV0A1GbQbK3rUlz+|ecIOmQpkXrjO&xTo z(C+DW8uOzb;tLCMoqj{QXQI4wJ<|yP%a74JArbZ20uzd7NW^&b_z$miOUDjWaCJXz z@o~q?@PZly>5&8`w2D|Tp7nH2b2mZBw?)I8XVr2g2vKiJNT5_wKlNa&FOY7qjV(R@ zJOrtalE~3G@n|=r>3Fa_K0#cr{)+#3;`30QpU_p!!4KzM^hn)?!ycm0`*k-$P<;q;U|WoZ~u(+9UMnT2rLr)q$RXq_KVZ4 zRLPQ0eDZk8>qcUf_9CQ55)Ms=GcoAsN`e%fZLO*n4H)An#4qA7gzay5m7+`@vHe?= z`zP%ny4`)N`~@O-ZfXIlVe`bc8K5MTnAR(|TKznFQdOg9pH}qLZKxI$=IWhopXr+o zMY-0*a{+?{&CP9z7R_Ak^kSk)l=zCD9p(RC94Pk{9j;s}&z$7A9nA;~6WT41$3Y9| z>e2+n1^)|9quroii6wh?CEkg4R=d5G`24k78(mS6ujmC*H%TN%8l$aZmiGm|W#BoH zlkAHYhml>TGB;lz;^;_4)e8Z`={wSs z3DrVEN}OklmqT{e)<=;J0F=;*hObd<5p*&U+YUG6Un??H9LmqSB#0<{J60qe^q*!9 zWZJB^MD*N1G`6e_3q zSKMD9g?Fm8qpqdeY^uFGuwHDpE;B}|{^bT@T_^X-n?nRkA{O@-P#h?H@L{o^`%=u| z_^6;NYOV*pSN?&Ny1sUs-4OE_7E^t@avOmep)sSUny zb}xB+@8fF^vGWTo2TtPE?bxpbsBHw3XH=*C-c;+p*$N}fPyMvk%>z%&Be=fTEd?3; zFKxh4ldyMo7DNkXO2(WQS8J(p6{@%sn{6{x&qW-i(*2=(v>TUWK|4EJq4VCq{eYAt z8YooBrj^s-mM0~e7Jn6xgbOfLcNdM{p7nG%5YKu>@|++=?`*UE-IQ#Avi;>0)_~*J zMAUMT;x*g*pJe?iloE-^62;@%;LSus77DfwCs!BCu)jkS%aMMHb2xYTiL}47A!NRr z-F!`x(H88pniI*%YyO9WA~qWNLvd4|iEpO3(IDqj%bPRt2ImX=A+L*rJ=JSIt?k=i z@cYz9pGuHf9$&T({XH63#udsi1I~no4Y}A+(d|sm>Ytq#b64g4>XPj}i38iqkM8t) z6GI8U{&3tZE9P#K5mSSEeWCos#Qxbp4^9m6wZkn93XjSI0gV3^X{Y!b73UDFZ2r~N zZp|Q9P!V#>q1ln!YEKF1#}a_)V!Y>##T&58=^l1@y{UfUF0{C&d`OsbaEE4-Gi{53 z%_F0~|LPeNN$g`nyO#n(^hvoL>&~*|u&RV1LI0ccn;r&)zeC5 zu^mk&zgn}-vDu7Cy#s&=hdhtqiC6=|HCA9%G5V>H+O_y@8IE76czp1}Iai%kMYZ;t zMKbzY7NObs(%;!*SM2p6dZR5yPYouONOQC3%|i>iMvYZ#fSaceocGhD_TF+vPK;X5 z5JYT7q*WlJ4iv5LklF(ye-r`&$S2%E4^4DK1c$nK7z1EivvWr!`JMYGn1?>x3Ux=V zoD!YKqz7{MN@8{vW38`8n5Chlf5y=4xCgo~VJ-F#lsIgN97%kLK5o30%sMUFEkNVv z4`jA7dKPtoy})TPziX{lpjYcF{iP6tc`CR%h z@{{7h?3Y3s6_tDMEf|NE3My&b7)Y|H2zv+lxI9oMkkLiSp@g?h4fq(|mE+$Y{}orD zMFKDo_RUk3wzDU5EOruJ`F5ujg}amSq-w^O_y0Q#!T(%I1|EnB{rMj7Zw=l1hFW!+ Hj`9BmLBHAV literal 2908 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 delta 2718 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 YAKZm0G#8R?!vFvP07*qoM6N<$g2D+I2LJ#7 diff --git a/assets/themes/Default - Dark/dex-logo-big.png b/assets/themes/Default - Dark/dex-logo-big.png new file mode 100644 index 0000000000000000000000000000000000000000..97a45e5f45df7d11ab2d5830089ae8cf36db4e03 GIT binary patch literal 10090 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 Hj`9BmLBHAV literal 0 HcmV?d00001 diff --git a/assets/themes/Default - Dark/dex-logo.png b/assets/themes/Default - Dark/dex-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..987b58bd4b6b84a5566a125ac4601e3ed3b1167a GIT binary patch literal 9449 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 literal 0 HcmV?d00001 diff --git a/assets/themes/Default - Light/dex-logo-big.png b/assets/themes/Default - Light/dex-logo-big.png index 525a29a58e6b11feb329ea04b2230c15e1f1083c..0f42e5d05c07477f86efc5f7227f89e954271703 100644 GIT binary patch literal 13422 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%0ALV#xBG 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 literal 2908 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 literal 0 HcmV?d00001 From a64d767a4c7335a6a4d953c8bcbcd4fb24626397 Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 19:39:23 +0300 Subject: [PATCH 169/251] update logos --- assets/logo/dex-logo-64.png | Bin 1232 -> 7934 bytes assets/logo/dex-logo-big.png | Bin 10090 -> 9821 bytes assets/logo/dex-logo.icns | Bin 179235 -> 544013 bytes assets/logo/dex-logo.ico | Bin 5211 -> 29769 bytes assets/logo/dex-logo.png | Bin 9449 -> 83017 bytes assets/logo/dex-tray-icon.png | Bin 5211 -> 29769 bytes assets/themes/Binance - Dark/dex-logo-big.png | Bin 10090 -> 9824 bytes assets/themes/Default - Dark/dex-logo-big.png | Bin 10090 -> 9824 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/logo/dex-logo-64.png b/assets/logo/dex-logo-64.png index 1e65c39a1a2802029314846cef116899744f40c1..c5f4335db92ff0bbb0f2c22dd648098319ba34ed 100644 GIT binary patch literal 7934 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 URV_}&-@m#_a%!?Q(xzem2O-FbS^xk5 delta 1212 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 zⅆ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 Hj`9BmLBHAV diff --git a/assets/logo/dex-logo.icns b/assets/logo/dex-logo.icns index 99830040509b3e2af26f47499888f29ce327d65b..d092976d921fde7bcbe3150ab2034b0486975ef7 100644 GIT binary patch literal 544013 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 z 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

t91osN3t?(zDIQaCx7=hR~WUzly*M?!m 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

a@e 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 literal 179235 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%0A-<7#O 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 diff --git a/assets/logo/dex-logo.ico b/assets/logo/dex-logo.ico index d525f15df905038a28945c1c7ce90e0d8cf76f2e..0624b04c0f86dbcc29181887f6c50794e2d015e6 100644 GIT binary patch literal 29769 zcmb4JV{;}<)7{v%ZQHh;O*Xd8E8N(&jVrco+qTV(pZom@?}whA>8h!jnyxyhF%im& zQV6iPu)lu&LXeRbSN%^f|0mbbkpGR;R?K4mDHum-ZI@raNVxw`KqOLG4F5BNxTs2r z{;HY5KmTt5ZXu!|^6OW99Nec7#IIj2J2K)T>YgCi-8S)Nt8RoZ)h?a)#3}hIW|i`z z3s3)~j3)}`@};wqkMpID)p>xjMur)jG(ybr@)HfV2!?5TEk9GjEOr{kSdfwWE#lMB z^eRo_FhOmqs`yxCByE)_Q$}#l1V-)qOCz$`;4mO3rZP{+-4gl0dB-WFmVZ<5vNMq9r}s-1l}C0qxY1k zLgYwJ^KW zHo7*=GD7@y8KYfQ^(-Onpl2uiQS|~)M*~3oEy1guT;^w@hP{rQ8*XY*^O5*1`o8XN zC#&9CNBA4V2H%ZHg|)NPn`2!aPx-ZmsA9Cz&a3CMMdxJ$m^b^??QvsB;h?1{`^;NR zi?XuP5{e@vuaHnDaU}#N{#c+3^(uYO^HTZ4UIGL&=t5k-g;*J9JjuyitzT4KgbNF) zpqlP2arwuQh}x-xk0CF*K{={?Z@EU3#``!W^)uI~HGY|xqS`I{R!a2t8aDFvHqUw% zE7~<5`b|DJojeZ7L*-ejA1Mwz;`*}B9oA6Z&jwU^#r_S9k_A;0Ep`!^ojEwpG{HOM zQmF!tCLcz0<8*?Z9nJbYRAV~mAiDu#_uF6>q86I(E!<3@cd%4;SZ9e*?u z5mEZOlIlHysXEe_lm${Y_;v_)R$h*J?uEg%w-vK?ztA(<|uOLQTJdDNR&Lnn79 zB*DoecA(OT$Sbn`dn40?jkDBOc&0+ZxhaTdS!#=9ZxO>P0&b`+*zsYl=T2dr8hD+L zwX4w?A1;sKYAzh%`TuL&H1i}l<*_rNo{I&E`X&fWL4aLWiKT_F^c~= zuflr0ldDzzf{;Nsn=lsB6_8U~nSa)9)@%|{DpYRj#N_3s$sJduB5c&nf7b}`m&wX> zUPZH?zUltRczA}^e29EVeNkVgi)lOcgyD`&1!-L#WDAik


HaBGX15q+wUjd#xB zIs}K>_AYK4D@daeMaJyk$`BPhcPEs{KwR?x`9u3;vxxCkM29TZ3#D z<-KQp>7*+bs~O{HR#PLxBh?HXRab5x2QUVBU)kneS7O;?*-o>pYNbrw=+(?KD(~$$ z=EX;q>OPX?edc;x8&a&Mw4#4*3VyXu^EevkjhY0rsJO{!kDv^W0s2w}7H^q_ONC{m zXf5x2!J%VQ;Nycan<$JO!Jd?l2)uw+mrHGCuN*c3wHu?-Ls_yF3?O^l0t zK~jk<>tCFa5;Tz#cpD>LUuegNh?>rN06EW!R}8aE6vgC%2g~HQaO`S0ulRYD>uCVCjQr4T`GwoF3 z8!l=F)XfzetF&f4hgk8OgnS=7}wRv0s3 zw3Vqf<`^mQICSH2?QH44YMbNtI_d{mY8j}!YZ*Egqux5@E&}&K_2`H=({?iLIO!%4as}SM^;T4 zVsg=#wDJ*!WMX|hUrBIkqrKul6uXFRur5mIgQh(VG#pf~f=V9gU8;WWNh=b+1Y{lVV6vr;L_|B}#RAh%e z_oBN@sJFR=lSvtA)Bf4bRRaO%giJ&LEx|Y=`(pkAl5lhOpqD+r?#PazklCT6d={!D z9&H8@IYUl0PDB%qWJTzJ#az}Ef�gK8vQUzniueXpVDEHx!3HKq}8Si#v(kd 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 literal 5211 zcmV-h6r}5kP)=7ki3Je$-dtx|a`@zMu~9kq%{P&}I^h$aHt5lDFec9uvX zFUYo3(KKzcvlS_Zlz6SG$^+0HOKlpZrMn>!sJwVgDx$PCyAgrf-udq7x%ZrNzdLKM zcfYmQP9-1znVE0C@BTUW{P~@8&mDm4be*o#b-H?la22U__|(`9uGmFTjuW|UNWSR^ z#*k%n<^L*ZHmdd;Y`MdDK{zyTAJMZ}wml z>54Mv?&-H$NW~~R_{ioF<5nOc+twI?za zOdQb<(a_SGY8~$(q^gN1Y=Mu&U7m(bqzy6Ww~n1TKz`5(#+D6jTw7UwglJQu6!>8& z5vE10P<}@Qr5`_EYSwIxEMw@8Eoc)oq%;Z;6Kse=5U|;5yxB$EVga*ILZk`42yy z<`K4wWv{L^d6S_@1r`NY94)OEV-j66MWGSQ0*Yxo_4&2W*Opj7miTicGOA>$Bxsro z7cUo$7Z1Ttz4X*?bS}ymDCYQ{29}iJrHZ++V^7`gb03*lYrgANt2@8?<7uAPes|ty zwlVq*OnL&wZ9=saN#A_5#*BP{P821aTxLVsJG8yOR=;~X|H&SyY;v#L9O4rF@7bAE z-M1^|n5m7#1RZBw6|eUM`v}->KlGi`-RF09F4gzCBGfY z-ZXq$V0jO}%&gYtC7E;QiABaRWk)3;^(aA(7&>z;!kEal;HY{9(Nyo@5B1a8 zJ_=Wx2*>aO2FQ8}ND3hdkueK(H80iVs?5RShPe<7g0IZ4LDp(OBw)UX_w=bO@BP-q ztqX8X$Ty<4Bt%}Rd@{%peu*?u3~I~Mmum5%%xQjoagyVtfP77z5}Z#r34|l@OVEdc zcE9rAt(%HiSEEn;$r~-qJ(HkI^-v~F3P44I^o3?G)vjB4;Wkz$mNvFC(r_Zm#Fdiq zVH<;eU&8KJ9{8ne!k9n>;(i;GBCSZ6@VAg?QPin0n{KyzX|#L+b8gsj)6D zb^ z|Jq`!a4;u$M)Cp)nWk57Zkja@$G`KyE!W7#Fk_yWZ&R-~RGqi&b@QWZB!m=z<(e zTrNk&^75~4ggLwa=B-`4>Ro0=!_>j{sT@`Bv%s**5k-~8@EY8!q*A@*X=Lf#V0n8T z#(d^8-#x&p#|b;QSpw#mbLz7cPkiav$9mzO=*qDu_Q!ZKe31V!&)9|s)fdccgfXoz z{9r$~(PM3Cs6e&2hqX`2`4jc42t;1g&g_v4Ai8^7@}!SZP?|M2vy&r`E{~z zNR0?u{{dEs@=#hvP`=`_cO6(KwcFq3m=PvX+qGtLDhhWvyt?3}_^U<|6#`9u#~H-6 z3?7QPc>24a{$LMkQ0w!j8r)bnrAcK+O4>)rQyoLoO^Xw+$_9i4k07gT#zx*Py!6+< zetMllVlBCGm)a~$=@!bGll`^UWA}b^(oiLkDP0ToI?|n zDxsw(EJcwX;3rN%4f@2h|JCNXHk@r3=q8@VWb&Cr*Hf&o*9>*W$yk=8+7FA~D$8mu zLLKt1pKXccZ%NZWmYQj};3_Q$K}~a9K>WpMv0MucJLe`XHCd@ll7d``Ax$<7Q(o0l zVl{;b(9swy3`3|z{(Mh-aYkxw#UTimj7+&KUV?87GaXLDj6v3H)$K0D*y#E`bqCy z;g>1fq8og{fShlx>2${ww9(m_CQoC(g~Q&Mjs0b)=k{j5~k-PlE8{dwn)6GSUn-T z3sJ?Aqg-jZ)<-@@9rqB|ga63~CND zA`%-?n=pB38P{C7&b2&t&T`SCSm%ABhO)A_L}z>8jo zq`FDh%?sGBnAu259<6#U64_P||4+8=7QyY<+apVhh8zO~|xQy!h1ZwKo)5P}*S0 zGfdMZs1gx60;y7sEFtet5aO`f4cUU&3IkEv)0{q43lR1m{gqjMbT4bC®{lrU8-QILJuX%5zZ_onQ>U zgI5zY_&v#>*BwVbzbDo56w>9Hh%ocUwa)kK>Pl1zQGJ= zUo48Yhy@MxV3jLRJD%?U{ZW4-bfW0T3X5uM1T6WU3YLm#{}d z(%@KtVE#{bUb|oT%3Txo?2sbifTl$A#3tybveR}H&dwKpPzxAdZMy%_`6hzz zRE7+z*b&64hSy|tJWb`#4>4!qccNkLk;}uq3X2$Ij(7w7%>|4c4`;35eMrI1Fh7pN z5K>qPpYn(VXV?(;^ENIhd*k~VxUt^bRxD!j=Bd3PmSuGQ+i(=--fs*FXCT}tvYo+g zxujSCn`Wb7fB0LBmKUJy3z)O;$*p~E@Mt`%pl%jY9WthU^9YsXTxNsg6=qP_`n~oP z4~KX+7sh4jPN_$TU(*o!PSFu{p1DXF9In<$^Thwmvk_|+rJj%h$c_fZ{HmQo(FmI{ z%m}rvWmW0@2j`m%RgZ_0H+B}(jxr_V8)^kfOIjoX=s!2}(d`#&&#l^%$Gz;wLlCdkE z@$x{`2_F8O4zh{lKz1e!Y4G^--Md!J2jN^kI zjkVo?J1V_E?b27}Y58j8C+YxXPzei>doy;!oumJA_c%6OJT~ zIjc2JmFT3!mD+y_Zzz4Xu~00Y(gc8~nVEGmrZ#f|ef00&>2T+h@x-o4P?8*~R?dfQ zLW^fCCum0E@P_Rt`N02I_ETKhv)a8 zx%+U=8`2L61U0443<_P$%_vGJ!Jk{Unxysbfd3%%PA#SClzMp*Wk0 zQAV%O;8Fj$ VLvUUBiA4Ya002ovPDHLkV1mj%6QBS9 diff --git a/assets/logo/dex-logo.png b/assets/logo/dex-logo.png index 987b58bd4b6b84a5566a125ac4601e3ed3b1167a..23b7d83a5d8cc1c0b6956ffcbf236e3fdda6175b 100644 GIT binary patch literal 83017 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 IM6N<$f*w$wS^xk5 literal 9449 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 diff --git a/assets/logo/dex-tray-icon.png b/assets/logo/dex-tray-icon.png index d525f15df905038a28945c1c7ce90e0d8cf76f2e..0624b04c0f86dbcc29181887f6c50794e2d015e6 100644 GIT binary patch literal 29769 zcmb4JV{;}<)7{v%ZQHh;O*Xd8E8N(&jVrco+qTV(pZom@?}whA>8h!jnyxyhF%im& zQV6iPu)lu&LXeRbSN%^f|0mbbkpGR;R?K4mDHum-ZI@raNVxw`KqOLG4F5BNxTs2r z{;HY5KmTt5ZXu!|^6OW99Nec7#IIj2J2K)T>YgCi-8S)Nt8RoZ)h?a)#3}hIW|i`z z3s3)~j3)}`@};wqkMpID)p>xjMur)jG(ybr@)HfV2!?5TEk9GjEOr{kSdfwWE#lMB z^eRo_FhOmqs`yxCByE)_Q$}#l1V-)qOCz$`;4mO3rZP{+-4gl0dB-WFmVZ<5vNMq9r}s-1l}C0qxY1k zLgYwJ^KW zHo7*=GD7@y8KYfQ^(-Onpl2uiQS|~)M*~3oEy1guT;^w@hP{rQ8*XY*^O5*1`o8XN zC#&9CNBA4V2H%ZHg|)NPn`2!aPx-ZmsA9Cz&a3CMMdxJ$m^b^??QvsB;h?1{`^;NR zi?XuP5{e@vuaHnDaU}#N{#c+3^(uYO^HTZ4UIGL&=t5k-g;*J9JjuyitzT4KgbNF) zpqlP2arwuQh}x-xk0CF*K{={?Z@EU3#``!W^)uI~HGY|xqS`I{R!a2t8aDFvHqUw% zE7~<5`b|DJojeZ7L*-ejA1Mwz;`*}B9oA6Z&jwU^#r_S9k_A;0Ep`!^ojEwpG{HOM zQmF!tCLcz0<8*?Z9nJbYRAV~mAiDu#_uF6>q86I(E!<3@cd%4;SZ9e*?u z5mEZOlIlHysXEe_lm${Y_;v_)R$h*J?uEg%w-vK?ztA(<|uOLQTJdDNR&Lnn79 zB*DoecA(OT$Sbn`dn40?jkDBOc&0+ZxhaTdS!#=9ZxO>P0&b`+*zsYl=T2dr8hD+L zwX4w?A1;sKYAzh%`TuL&H1i}l<*_rNo{I&E`X&fWL4aLWiKT_F^c~= zuflr0ldDzzf{;Nsn=lsB6_8U~nSa)9)@%|{DpYRj#N_3s$sJduB5c&nf7b}`m&wX> zUPZH?zUltRczA}^e29EVeNkVgi)lOcgyD`&1!-L#WDAik
HaBGX15q+wUjd#xB zIs}K>_AYK4D@daeMaJyk$`BPhcPEs{KwR?x`9u3;vxxCkM29TZ3#D z<-KQp>7*+bs~O{HR#PLxBh?HXRab5x2QUVBU)kneS7O;?*-o>pYNbrw=+(?KD(~$$ z=EX;q>OPX?edc;x8&a&Mw4#4*3VyXu^EevkjhY0rsJO{!kDv^W0s2w}7H^q_ONC{m zXf5x2!J%VQ;Nycan<$JO!Jd?l2)uw+mrHGCuN*c3wHu?-Ls_yF3?O^l0t zK~jk<>tCFa5;Tz#cpD>LUuegNh?>rN06EW!R}8aE6vgC%2g~HQaO`S0ulRYD>uCVCjQr4T`GwoF3 z8!l=F)XfzetF&f4hgk8OgnS=7}wRv0s3 zw3Vqf<`^mQICSH2?QH44YMbNtI_d{mY8j}!YZ*Egqux5@E&}&K_2`H=({?iLIO!%4as}SM^;T4 zVsg=#wDJ*!WMX|hUrBIkqrKul6uXFRur5mIgQh(VG#pf~f=V9gU8;WWNh=b+1Y{lVV6vr;L_|B}#RAh%e z_oBN@sJFR=lSvtA)Bf4bRRaO%giJ&LEx|Y=`(pkAl5lhOpqD+r?#PazklCT6d={!D z9&H8@IYUl0PDB%qWJTzJ#az}Ef�gK8vQUzniueXpVDEHx!3HKq}8Si#v(kd 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 literal 5211 zcmV-h6r}5kP)=7ki3Je$-dtx|a`@zMu~9kq%{P&}I^h$aHt5lDFec9uvX zFUYo3(KKzcvlS_Zlz6SG$^+0HOKlpZrMn>!sJwVgDx$PCyAgrf-udq7x%ZrNzdLKM zcfYmQP9-1znVE0C@BTUW{P~@8&mDm4be*o#b-H?la22U__|(`9uGmFTjuW|UNWSR^ z#*k%n<^L*ZHmdd;Y`MdDK{zyTAJMZ}wml z>54Mv?&-H$NW~~R_{ioF<5nOc+twI?za zOdQb<(a_SGY8~$(q^gN1Y=Mu&U7m(bqzy6Ww~n1TKz`5(#+D6jTw7UwglJQu6!>8& z5vE10P<}@Qr5`_EYSwIxEMw@8Eoc)oq%;Z;6Kse=5U|;5yxB$EVga*ILZk`42yy z<`K4wWv{L^d6S_@1r`NY94)OEV-j66MWGSQ0*Yxo_4&2W*Opj7miTicGOA>$Bxsro z7cUo$7Z1Ttz4X*?bS}ymDCYQ{29}iJrHZ++V^7`gb03*lYrgANt2@8?<7uAPes|ty zwlVq*OnL&wZ9=saN#A_5#*BP{P821aTxLVsJG8yOR=;~X|H&SyY;v#L9O4rF@7bAE z-M1^|n5m7#1RZBw6|eUM`v}->KlGi`-RF09F4gzCBGfY z-ZXq$V0jO}%&gYtC7E;QiABaRWk)3;^(aA(7&>z;!kEal;HY{9(Nyo@5B1a8 zJ_=Wx2*>aO2FQ8}ND3hdkueK(H80iVs?5RShPe<7g0IZ4LDp(OBw)UX_w=bO@BP-q ztqX8X$Ty<4Bt%}Rd@{%peu*?u3~I~Mmum5%%xQjoagyVtfP77z5}Z#r34|l@OVEdc zcE9rAt(%HiSEEn;$r~-qJ(HkI^-v~F3P44I^o3?G)vjB4;Wkz$mNvFC(r_Zm#Fdiq zVH<;eU&8KJ9{8ne!k9n>;(i;GBCSZ6@VAg?QPin0n{KyzX|#L+b8gsj)6D zb^ z|Jq`!a4;u$M)Cp)nWk57Zkja@$G`KyE!W7#Fk_yWZ&R-~RGqi&b@QWZB!m=z<(e zTrNk&^75~4ggLwa=B-`4>Ro0=!_>j{sT@`Bv%s**5k-~8@EY8!q*A@*X=Lf#V0n8T z#(d^8-#x&p#|b;QSpw#mbLz7cPkiav$9mzO=*qDu_Q!ZKe31V!&)9|s)fdccgfXoz z{9r$~(PM3Cs6e&2hqX`2`4jc42t;1g&g_v4Ai8^7@}!SZP?|M2vy&r`E{~z zNR0?u{{dEs@=#hvP`=`_cO6(KwcFq3m=PvX+qGtLDhhWvyt?3}_^U<|6#`9u#~H-6 z3?7QPc>24a{$LMkQ0w!j8r)bnrAcK+O4>)rQyoLoO^Xw+$_9i4k07gT#zx*Py!6+< zetMllVlBCGm)a~$=@!bGll`^UWA}b^(oiLkDP0ToI?|n zDxsw(EJcwX;3rN%4f@2h|JCNXHk@r3=q8@VWb&Cr*Hf&o*9>*W$yk=8+7FA~D$8mu zLLKt1pKXccZ%NZWmYQj};3_Q$K}~a9K>WpMv0MucJLe`XHCd@ll7d``Ax$<7Q(o0l zVl{;b(9swy3`3|z{(Mh-aYkxw#UTimj7+&KUV?87GaXLDj6v3H)$K0D*y#E`bqCy z;g>1fq8og{fShlx>2${ww9(m_CQoC(g~Q&Mjs0b)=k{j5~k-PlE8{dwn)6GSUn-T z3sJ?Aqg-jZ)<-@@9rqB|ga63~CND zA`%-?n=pB38P{C7&b2&t&T`SCSm%ABhO)A_L}z>8jo zq`FDh%?sGBnAu259<6#U64_P||4+8=7QyY<+apVhh8zO~|xQy!h1ZwKo)5P}*S0 zGfdMZs1gx60;y7sEFtet5aO`f4cUU&3IkEv)0{q43lR1m{gqjMbT4bC®{lrU8-QILJuX%5zZ_onQ>U zgI5zY_&v#>*BwVbzbDo56w>9Hh%ocUwa)kK>Pl1zQGJ= zUo48Yhy@MxV3jLRJD%?U{ZW4-bfW0T3X5uM1T6WU3YLm#{}d z(%@KtVE#{bUb|oT%3Txo?2sbifTl$A#3tybveR}H&dwKpPzxAdZMy%_`6hzz zRE7+z*b&64hSy|tJWb`#4>4!qccNkLk;}uq3X2$Ij(7w7%>|4c4`;35eMrI1Fh7pN z5K>qPpYn(VXV?(;^ENIhd*k~VxUt^bRxD!j=Bd3PmSuGQ+i(=--fs*FXCT}tvYo+g zxujSCn`Wb7fB0LBmKUJy3z)O;$*p~E@Mt`%pl%jY9WthU^9YsXTxNsg6=qP_`n~oP z4~KX+7sh4jPN_$TU(*o!PSFu{p1DXF9In<$^Thwmvk_|+rJj%h$c_fZ{HmQo(FmI{ z%m}rvWmW0@2j`m%RgZ_0H+B}(jxr_V8)^kfOIjoX=s!2}(d`#&&#l^%$Gz;wLlCdkE z@$x{`2_F8O4zh{lKz1e!Y4G^--Md!J2jN^kI zjkVo?J1V_E?b27}Y58j8C+YxXPzei>doy;!oumJA_c%6OJT~ zIjc2JmFT3!mD+y_Zzz4Xu~00Y(gc8~nVEGmrZ#f|ef00&>2T+h@x-o4P?8*~R?dfQ zLW^fCCum0E@P_Rt`N02I_ETKhv)a8 zx%+U=8`2L61U0443<_P$%_vGJ!Jk{Unxysbfd3%%PA#SClzMp*Wk0 zQAV%O;8Fj$ VLvUUBiA4Ya002ovPDHLkV1mj%6QBS9 diff --git a/assets/themes/Binance - Dark/dex-logo-big.png b/assets/themes/Binance - Dark/dex-logo-big.png index 97a45e5f45df7d11ab2d5830089ae8cf36db4e03..6daeafe8b590ccca18b38e38d748777d5d96f364 100644 GIT binary patch literal 9824 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 F{{syZWsLv; literal 10090 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 Hj`9BmLBHAV diff --git a/assets/themes/Default - Dark/dex-logo-big.png b/assets/themes/Default - Dark/dex-logo-big.png index 97a45e5f45df7d11ab2d5830089ae8cf36db4e03..6daeafe8b590ccca18b38e38d748777d5d96f364 100644 GIT binary patch literal 9824 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 F{{syZWsLv; literal 10090 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 Hj`9BmLBHAV From c81a88b1a9cc28e21cc00438b06ff8636fe69808 Mon Sep 17 00:00:00 2001 From: naezith Date: Thu, 6 Jul 2023 20:13:48 +0300 Subject: [PATCH 170/251] perfect size white tray icon --- assets/logo/dex-tray-icon.png | Bin 29769 -> 10008 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/logo/dex-tray-icon.png b/assets/logo/dex-tray-icon.png index 0624b04c0f86dbcc29181887f6c50794e2d015e6..28334a05f72593dbe02da46ea0f0ff4fce2e125d 100644 GIT binary patch literal 10008 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
HaBGX15q+wUjd#xB zIs}K>_AYK4D@daeMaJyk$`BPhcPEs{KwR?x`9u3;vxxCkM29TZ3#D z<-KQp>7*+bs~O{HR#PLxBh?HXRab5x2QUVBU)kneS7O;?*-o>pYNbrw=+(?KD(~$$ z=EX;q>OPX?edc;x8&a&Mw4#4*3VyXu^EevkjhY0rsJO{!kDv^W0s2w}7H^q_ONC{m zXf5x2!J%VQ;Nycan<$JO!Jd?l2)uw+mrHGCuN*c3wHu?-Ls_yF3?O^l0t zK~jk<>tCFa5;Tz#cpD>LUuegNh?>rN06EW!R}8aE6vgC%2g~HQaO`S0ulRYD>uCVCjQr4T`GwoF3 z8!l=F)XfzetF&f4hgk8OgnS=7}wRv0s3 zw3Vqf<`^mQICSH2?QH44YMbNtI_d{mY8j}!YZ*Egqux5@E&}&K_2`H=({?iLIO!%4as}SM^;T4 zVsg=#wDJ*!WMX|hUrBIkqrKul6uXFRur5mIgQh(VG#pf~f=V9gU8;WWNh=b+1Y{lVV6vr;L_|B}#RAh%e z_oBN@sJFR=lSvtA)Bf4bRRaO%giJ&LEx|Y=`(pkAl5lhOpqD+r?#PazklCT6d={!D z9&H8@IYUl0PDB%qWJTzJ#az}Ef�gK8vQUzniueXpVDEHx!3HKq}8Si#v(kd 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 From db6a980c414e3b00d1b09f02d7ef7f1f85de6cc8 Mon Sep 17 00:00:00 2001 From: naezith Date: Sat, 8 Jul 2023 16:41:16 +0300 Subject: [PATCH 171/251] windows ico 256x256 --- assets/logo/dex-logo.ico | Bin 29769 -> 381142 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/logo/dex-logo.ico b/assets/logo/dex-logo.ico index 0624b04c0f86dbcc29181887f6c50794e2d015e6..8058cbb0fea0e9fd88b8103477a8bfd1c982c4cb 100644 GIT binary patch literal 381142 zcmeFa2Ygj!o;QyB&Q9H(o!y<;|CV{*ad&5T#!*muhtPW`q)`%52q+4QR592)Dn&(_ zB8q~bs9@JAj)K$_QV1c0gcQ;U&6ab{|NH$t=Q;PeCl$Ft$AQo1aC4J;&v~Bb*L$m0 zSG4+mtDpU>6<)7wmHfR{t&&=`YIWt6>iuv3u~n=6_}z8axqtuPR;|weqE)M~F!%5M zTeX_pqgAUVOWgNAyQ0;-_?iEBzu$&^uhq84u4wgJyvHN(8})mHs{~Twf(I8 z#|An_9vI>rzH5Y&wRntkKyLdx4N5215nBzFuj{6U9uE?A}&Q6;Z=^UIf(cYIh#nFG`>**bBt+E$8 zIVJeM`91S9{5d5howqJSL~S_ zZ+{Xw&8d3hT8H1)f8#5^ub;2smoaaA&}aDk3;F(`2EJe4`j0=^$9ukBKjE*}$o1>z zfA+pQKf+)CUG}i7f6)H%e4A&lKeJ~_yydv>HT+UiT6urhpVP0zA>!Y`>tmd>l~Ut&N(zU+|HaES!L30of|jf7Zsbjy?tU`52t8# zZ{SWJTR;Ek(t*y=hX;cWhT4bk8IJvrv~zABZD%e5KgIJiZVh+RZ;r6jZi=$gZ<_c{ zGaeQ65!v&m&UW#$-JKKbdh+=WX_wCj|8e+yy?;JG=gyH%VE^Og`Dr&tIH@;9IR|fu zaSlwMX#4O!=y~QFKKtZm(9FiJpquWtJpbvy^RWiIaQVQ>V~-B(%kS~Nhwm6U;K*HL zPGv71V;`EYo{#-I+`oGMBxirpWZXK4_RPo1&wO^pR`C2ypm{vs+drOPwziLD@|ikc zc7MTpWY3>q2k(E9voC3ivo}7r(KS@P+ScOU&F7aq+a3I^VgA+7Ix^p6$Dqd~pKEI=L z^2N?go%t00nGL1{I6-ru@>=9?|*kxlHdV(YSru4IhEf2 zJ2iOj-~o2NLI1hne}4MUx^4VG|Fij?w6`}t&U^l@=p=`{`rP~1RGQC+%&r$dPp%Iu z4)C8r!hiBy{ukgsivKkP4;TLh{(SzYk<%+{-nrT`pI@`R!%6@8xpvBK|MSWJ{re~X z&72or?;iFi#C@jEpU>YFk!;nxeT^f}2mC9xb+Auv?byrz{9~(o{U`bV@s<68&fk1K z`G3|T@;}A@{rBK|=%-`N=YJBB?BMw}pRe)1J|0=|T<>Q+{=aO1t>sUB@TWdX`BUG0 z$dgF_q`%$KNj9HDc254P*kw?2!VphN%uPrq}GUH!&& zw%&jBD;>i0=k+V`De(N}$$$M_^A+?L&gYZ<34b~NcdoJcd`DgU!g`9C*Ur`Pv5kT~`8JyR6_BmD#aYR|lP%^4H_8=}A5WkY_To=^F&=&wHb zi~Mci`RUW*Ejj;*3C^ylBxiTz^s~-~SN_m^KKXw`d>=3vr1X!*=wHeI4^v?9`u z|GtUm=ihB}hVU2qcjZ6%vi?p(uRJIJS$#Y^{71COME{r-ORy_@@YfycAGYKoo?GvvSGf9CVG{LjSxO&B!yInDVTWkBH*{ZHjT zKG4cvItVuK5L@i;yGJ-VcZ{;~mW(UmdYf~v%b!svKtBmwx~*byd47^#<4p+v5g#fy z4*6-t>i$<9TQR6z{__6wPb?pldHk_KcEQpi^dmS&?i=Rh-#^06yJw_*^sdpFIg7{4 z&s;dR-LcyuuF6e``DshxR8!k5T@!Xq+1kEKik|B8QqhzB&L3Oe-v$lZ`HuqsD1+$> zy-)lwP7Zw1Id{Mpv4paCv_pM3XVLicnG43hl(TTclFT^~*EIFKQ2o7RUC&>XJ=^=a zqBXq=i{Lvt{zM<=*mC$!mQjC%4h8>JVEw~*{Fx4%Tne_gDb?qyF^=pFem3eET^6g=6hQ z?)tHIC;b-qWa#Uk6>X>87@d?mGqn3S`FywQ%AW7~p7I;PZ?>kFtRKER8@i+D&jrAr z{Kx8^Klzx(AFe-pG5u*{9q?1zJAbS{73)vEG1^I;i9O7m_}+mT(InrC{#U)V^Q^K> zU5Xg1D1N2~{BC;v@O{Ddth0XT;71>!4{!+lki*0es@G5auW$Vsw?HRz*Drn<_`IQ; z6lGi=JL~IiAb01le^C8O=R3c2f88OcO zQ9zw&zm|83e`Jb&2VpA|mQXHDr- z0~eG%HMr~ERY`wKo@nw#{ocXf^6nnfBkzv!3$hlDTc0_9{1-yM#2;Bd{G#xS9h?E( zFnN-_f7)c{KvL}ag9%gbybw5?-PvJQ<+k=;oP3EsyDqj~zvzv?AFiKQ$=cq#3!d(C zb@8eZKfaLr^RuaQCjBI9UU=*5c@y@f!=_=ZE$v45RekHuui?dj;_w#u!Uq=;DC)*d6#$+gQJA2lY?x`~- zm(;-@tRLrZ@0~bpquwuHt9G<*UA?nSA$Tdfo%W(vRIgV(*cAM<&uo(%5&+zhxv(8pQKA@t-l|-4hd?-7!gpAIBuM z=I41%pS{~=Ni}?(Rj;*$uce(+u@(MStRHK4Dqrrrt0_LizZX9>uovP_d#S^j`Wxba zDh_$qNW{ZNojG#n*tzg`{++qj`hFI^G(GkJ*H8W<{=vZdoqZE$EW!7#aCUb7Y0X=$ zU!t#!>(}^C`mK1m)A@>RU9PI{{`z;c)uF@9DqPt-{fG8s_HAP~KnMDjzDGl^X-ToI z_b0}Fsp(grKYg6Lqmp0R6*KdvU%cDysxxo5IbZb}Vhz9_bN%I8JFa#%cl}XA_vaaL z?a)6zH}yBI|K!4UG4;0~{b$kGKcvnX^DhnEo4?PP5&n0e-{<`6-yNN3?}?gze&3`S zSDkvlO}pwh+t~i~S8VNAdwP4v1&!UmWL=-$MXQ4JPus8m6Mu5x5es+iFRedkEg1h*)}qL6jXfhZA+9ghe=>Oe zh>=82qn~>IXYaSpq@UKme)vo?8uOJNU*D}`5&Sm=hW*9$i~qv4AE7_Pj{*9vXZ^Ha zGNFHF&YO@)9@5YrB(@PBcS!Sp@=x*cBNu01)Qrrt@3pp>lcU#9{3ri8{aT0g#_n7G zY}g0deqsDa+h2P9c@M$|Blu7J8R6*jC;oW$7yR+?N7~d`8(Keqe=s3FUGpEke&P?} zWcIoD)%q)4`W60oV?%MCng@FBan_)k?>(9J3{3i4M{+|yf#C@_iZmMnaPv&B|aXPhr z(67h;W&Ir+TtDuAMajBe=?Z`P+S>o%r(cc#Vn2d@P5YPle`qf3FU0gpumeog$>{FD9%_^+Ix^)Cqjow;7~ zXAggL0fKfs@?+XCy)0RChmr)YC{ z`2R82?ECo&pJRi^L4J98 zk^0Qd*Nhpl|GGCJ?ufa5>OUfXqo=n&^T)QoJM&JP&w}_T?Z=m)e{Su#u5?42pP2Xa z|I8c)yR7)1HaRVf+mF)4BIr-%-6ISbr1y zcXKBj_RC((f1KUQq&+OMJe`hU;!pw3nB=#cJt4-H*_JuEo-!0=Aahhg6%pV3$LqVcn`7mP1H zbn66*{^#`Bk#^?IG1kGEF;i1-oOI3pX)(XcnVtL}PUF1Qdwk7XZ8n?ypXaarCl#AJ z7oXnJwNYN=-RJ^-$XyiCC3}8&7X7!(>7)OO{^!)|C)%*zKTn$;n|d%Q_P*S>rv2&8 zpWFOP&5nTo#Pt7^J>SJX`C^w(&TZ}aZx^thke&m(Fe_Q)+Q)j~WiJW`w|Je`! z5AstEH^yW2gOFQ(a}{FsrvHTgAMsyp?B<+&q1#*Ko4WtI{(PujGj5H%p79IBF5v%! z@6h!h2K+y<&cXQjO-((|`6K*?ueJL?@;zMtmFd4Nezu!ax}nGJs*OFnH+8QI`FrM^ zN!MiD9BHTCNdL21zdnEMKY{-bv5Z%$6t8<{`K#Pi_8AV$9EdKcg^ivauG+#T0E+C&Z6-D(9hv3SqV>qtmZ+zPDm?r!Sdvtno+kz9oLA;$MYN_I2ZT1FU1q z2Ao6;@6hqb2c;ihIwURs;i0?1`*$OLly>x;&p-eUBSwL{pGhGwf*b)e~k6he#H9Eu6K=ZnQ_dleS0 z>f?ZRCI3g;Uyb^IT>R1gpF<1AZ`nI9{2wma;*AFttq;4dd_D3vo(|iB{Eg3!!G=^h zyej`e`G1B<9gEigJ^S%C=5LJ4%e`%Um~qQX{v&nGs#X2}f%!9xTO42Be^Jr$K{?<* z_VGuVKZ6*&nLl&SXz-xXx8yD!*ET<8^p%%6?K;{*OYY8qd&y2sgg#WZn zR`!%!}cKf2WuH!KmOsn>B~VJ(TxRR z|H_|s+ZZeF_HgU)Z4=fNBF~%mzUT$E&<&{bpIFm-#>w@4EZ6@W@ZU=Q9`?^1Qut6H z17!b<11LXAurDhMxwTohjZyWLjK`qHgg&9e3nDDo#4|!=UxeZ)2$RZ)aSM;ZmOi@vnMw_ZsHT(C&ra?Csx;-68)|*)P=JRQ_t?@b~XO8@iB= zhanzp3;dZAiv4r%0l!ML1KZ#CiQA?F}_f36d#Dv}?*3Ur0UMq&&?;Is#43DDzWtlgyl0ycE%QvJTL&4qS-^)uGZ;=N!O#g0P>GjIDs&gCnCr+^sO;0#_v1h=wBHo!rzdie+ znEPkWqlQ0x2k;xH{e%A@f4sL6nV;1E@3VXApCMINE3@x1A(P0C7il9bOYUH)gR>8l!Dq>!W{@t8s>D56w zQ1N_^XIm2H4ILKgI&*gP>x|7XubA>*@886K?*G#%@y@~6X*DU$(3el`xORfnhlB2Q zzBFnb>hM3to~kx=zxQH!Y(x8N&hPo`?3*X9mYPfLn}_@}_b>7BDah}goZuk7JfX4s z60c6bd96jdC*SkpZ7%=Q{GYGYFLi(Bo7}tJ2iK5(g?am7bpKi?9(oMzVrXo_xz@Q$NfSN9(rQg z;G^_^p_bM`4ui#>4#yuHX&t?HL}l(hBd2m7P2H=Zzo$=|)Inm?zWtN`asO_Pyz_B% z(hcT4_{`7VYh!u2VlMo3z6SMvUR7H=AHPt%=jV%`9C#mc=+TQz<fK{s`#R^qXJyQYE7$VR%da=~zbhuu**|f5P;Qj-an~Q6dJFlkI#&++uY9Gw zC;!R+kvCx>hT2#@o_VD5bN+hd-aOSGam@a<^zdf$rnT3Tj{oLjn)*H%PL&j^+&J+ZN$D*{xJO?wEqJ+(1!mP z{p`g58=MR6+5fQrvKNhOFb~>%uKxL8;^hC;^+}T7hyCjs0m<>h{`W^;FErpdDSv~W zJQn3%z57SLAL<>N-HU>L!O}H-ErGq>KmC91{^|ccT8IAY`hUIsqaKw0-{$0~==~E1 zP#+Nl|2^ozqiZBoFPv$z|Ejm!TvLOdK(c?gRzk~v;y-!d+1ES0uJ7H{YuUO!53qNG z_&;_0ocWIp_$Fl6$%Q?Cs?Gzv=&={hzyN!kLr{kPU~D6F$-Sj~MIxsd;&_SBNv5ySsopZ^mzU^)lU z-Tz3hmO*OCP5(c9|MY=pEr|Hvrp{mgeNRGcnDigh`cKgQnWH|<-W{2|^o!rO&Xqh} z;(vYc-_{<_KWhxY19H)i%|?D5Y7K(-Px(jOhySP9w2#`AW9T1XOYQ>v-(LNS>;L!m z-vIr4_>Wo^(!byT&zhDCp@9SOsEuO(E%JY3|D=D`DX`Av^FOp^?_JqH>oooP->KI+ zG@8e*VL&-j@hos3{y*gYsQ3ryU-CDwf0O<-{|m&w0`U*={~GZx&_8-6EC2T)?BAcG zrJwJA<$BVS5~Tl@-oMa4a_nXQ5lRM}b>Ywcy}H)N<9|}`)4r-XI7iw)u?{_-Rqed+ zKV83J#=j(o9q~WXzwAFK{-t_(NG+2=|9bzdNrCSt-oMxS-qR-9mk{@*)Yo|O->nf6 z{+BFuPT>8HhQF47=KjyT(IKzC`}=>#^M?Nq@R!~J-u~(T*YvOBe@Be??~(h^Pu3^@ z&HW4iXFmjqe}p^8Yp&ORtFs>P3G^4JkK_q+O^hClOltG9P(7SE;LQ|{8g)SfW@>DJF^_-p=W!aorI4#fZ2+mHJf z-#_Eu2K*5NimGqF{@)4y$4~vr+rRSv*sKwv{3rZBjWGG&wch?s`Crpa{)gvZQM$f& zHU0mJ{{_RJ`oG@4wtqDI>x+L0{M~vkWB+z`Gka}${7=h&**|JD_5LG8{#oZfQ1Val zzqeqiv{wFn5LG<59{9o6zx%{6sVa?&iE-qXl^3U~un)bhfe=_P+ zueUz`uysD@U)35K_Am85%745zTmNxD1Be4j-+x#CRrO;H#{a!K8aMv$){-?4|Ib|z z8DzKnao&8NqV*pw|F!*V$iKZ&GYU~>wgR?)o&9V3pXX5hO2Q5#9?T5dC{}&SfKeDj-@Q3|-J@>EeUyc7#BM9s%0^N1dN%|9}2_`agp0{|eXt#d<&5!IfJ(|I)mFQ$J(> zqf`#O>OXNY_CI^9O8j4Rpoqy$J)3_gounnkOMe9Fzkd6FU-XOTYya+s|8r0Dw4i%9AN}U5EFg4SJZLLH?)e zBkbn?U8wyp`Y&SNtV@IqkWT*2JvQ}^pW7dsa3^}um+zlEtq}Up6h9m(w>W>KKKozS zThjl1YHR1O)$fwJVe#^TzdgQeU=4aX(+_CV2Gn(!+6G`PX2HFv#k^~bm4D|rOZuTf z2k`VCsmVl5BXYn{S9FlPwyFI$_wT3Pyk>#wOAj3g`oFgSrQXYp|Cb~FQT9UTHqE`K z|8qQdt~qDvu>U&x@Q|5D9~`pk=mW!^h8&!c|KL!`72)5_D|6wvn+`7ux5Nh2`$tU} zqPu_REqu%?(ctQbKlc`t$7piuUAnk?8AS;US=d9?pe9HbF+1j=03Zr&+$Bt zESiu@8qhVZsc!y<)W)Ib@FC1oLj0>b`-Z9S?}q=kxq5>6>~rs3w_5BV+J7$plX_QU z|IB}@dAaM?q670;7y2_{e0YAuVbZ^w|KiofGWHu3|3`gV+O(JIcLvA5 z#s6PV{JY|%Zrl0!rtTTazY`D0|0VYY@K<$_F}6SdgYjSHKcT+uf^il357Vd%Q17Mu z)BI24zwQ~w-hEXsc7N(pp8@L8Cy@pe{;RrNGyjY6PaXf>JC!+Li62}D47i_jZ?*eO zcmQ-?bN`b6w|^b~-NXKZad9^F zpbLFo#jDqj;fx5%Ka>A!{3raG|0wz2$bTjz?(&`}v;j zw=HoF=;_;2u#7i+VT|H0WegnwE>Vxu`vO`V52gHBTSuk*ij{;SUa4eVdl zp0oag_1m2P$oz-$RRec%ewWK5+`J#?g473j0jK#lPd`i<)gM0aS%(&nySl#ft7-`*`cXtkFO7uZ?Gw$$1Ox%WLpI zsck3x(O)usTH~`H{P%3^Ju|Mk(o;yLks zL!S-B@0tHs^-{OpGyuR#4@L-8LS|ELrHXD>%1{z>~E@GlR=xrov= zk?}vlfA%i8;P`(a|AX<*p!mPUz{018dhMaSpWwr~UUSNyLH#TF0CE6y{FDA))Bhic z|9gE%>-c{){MpkG^)Fw0Hd83~*qnP&j#K|b{qqZDt5N&BvY*9s@b!Rjr9%DiN9pgQl^XzZiXSi-&to=H%V&LP&D+V1szD(7>t2r#3l5RDUduf3;OIXVJ}_p>;X6k>j@+dia#BVO&An~(f6J^G@_y09`P{!u z`4y6b|Aua&eF*|@zybb<|0r1AH@tA=fXB+78u(G+ih)%{D+bynD+gPJkjb!5&?A1Z z1-sn6hOkCQ`jxx6ik!Q|oMq8ja_<>oA#cgTEOuO&qjvWw^sX6e9l2|?edLbORRwpA z`{;1Wn8yw+8WYZ(O}!4{9**Q&W5;|$;AyeP3T=bVrS|6Ou>QrX`afE>dO*gBC;Qi8 zmJ|B%^s@_=52zJ?jH=6EZwghL!PxXeZheBAqe8k@b~<~tAXoDq=4+^&4Zxl`i>O_a zyhZA+qQAn1x3g~_gMPYW?4wJ@Te*wJ*5;>#XB@sQ{ISg2#`b3|H`jTYFN6jSG+##} z)9)XDy3ZiY58O};|Le&${VnlB!Uj>fI6?I|$|jSZ9Bywq7yc?gQ|acMd92|txtaoh zw_Xjfms#X)-yY7SmfTHcyU2WC+Hssqn6(J;eAMzBSvIx1Wf_UqDheeOl=P0`79eO3P{>A?}4htC`o+MzlhQ*u(#lS}7iOK&RH zWxDkVQln_VpR^AgQ2m-%uV~P|`0X$UMdq?{7UE*S-Sy$nhDRQQT+HXg%y#K#mAf#) z%2^Omlr?|Cz3I0`{5SV=84sGq11(EYYt*NFL)aUb8Sz!|TEtz@f2DAh)ZeiGPM`*3 zIeIX$50hN%LjxROKC-&J*)R(Jm@#Vbe%9wIKb_>Ny8J&t|EyUd-xv6^4<~cC8-Ty$ za-x=txh#Pz+{&64VP(&Y_$p^!)EgN$Pw1of*YrvJb$vpgOUe3PLn}A-+Fib(7k!S> zca3@1GBX)|HxKs6!Iv5&U5CI~tOotlC&!+A9{p4Hqd&gK|2Zeu>y>RF8wRoSFq2RhkjPb=V48c^tF=SRuk-;xlz{PTVr;m-W)kn@At0@ z%5`_EY&ZB7pXu4J^7&q$Ry@}ey?%SBe!qI=EBo%bwO0av&_8|9l>6Eb>!*Jc{(!sa ze$@XOhQHSTRK1qyeFpqlw{61Ti(wh?cY7JCer7KGbzeWp?Lux#`puD6_M8}ApQhd% z)9(W1Z6ZrVQq5svPf35qI{|D$FvLEt4Q*=MlKV(1UzLNc_o)7fToMzN>*=km@>g|_) zGxEF8-;MG8^x07sa~u!Np7>_k4NQTEqE|5A%5edv_@mza#J|7-dW@PFm=(fU98bc*h$ z^?&5*D&8N=|CRh#@Xvt(*Nz+Z4+jpW*J-hsY?=%4)G zPyg&g=*44MlVQRiGJx>c^*PMX4wnA`{?C3T^!u=9uPOflf2I3V{};P2SpKt?U-G$0 z|62AF{u&2n2jEZG3;b`2mKh}JH%+uMZ<=&8^@d4(DHFbHctF?}zux}G)myqfUjAZN z&bPLhV<7XP5o4EJ1Lm64NB^w5Rde4x{m(D|3z&mr>VHeolhw2T;RA5>KMjBJ{kZm@ z^yww-yY$aoeW8Ct{*(U)!QbuSs`WqSvPdn9ThFI!dh76i@P48Hn~>wi%bh>3dYwkw z=`$zV*|TCFL(a#KnF|#ZSHyqJ!UQDSsJs!h3{+n7v2vXP(6nw z=L|VFjlo~Z{{Z|4I+#ZOf|SM~?NAG!X3z2tkVoLBqM4O7nSpEhywU!rcPWIcKgzS8B9$}OFlV=HsrnO{oU zS3PFkKEu%aO#bhOKl84F>^~p;RUd|6{U5bhLHu9l(}MmRg1_*7m;Xz>t_Od&Zw36n zru}EaKa0HI2Y=~jK)YYV-_-p%_svKDn)apFA@W^S&*zDD+KkEep_x-35ghmnkq3l* z<;KoGMNQp~>X*CJBF7xHW#}so*t?h8W14y&^6Z1;ztRDu*N*so==Ve4dBgq}+1~{H z2kHNujmY`L&;g`3AAP{}+JONbK+6Ev2PpKf;m_C)?LSlhZw&q!oVDnKzwmxj{=2+i z*L$GfH+z0d-^;Y=Q)+STU*N^v%frb z{$~{YY4@4*@6M|7_&i92sfy_Zi?ly417%oKOp~2_AqD*8%>o`%jtjpFJ2M1K58GRAvbRobig}~JT&;m+y{py9C={a6kfUa4No|H z|L~hIyZo-B_l;Ox^x)_n1^16WlzaEcvz(#IOX&flEzb{d8)H9X(Ywsg|BaajF8o3N zP8u%uxA*IRod3xgjv@nezi)&7+4oc~)PEeBKK1Z{jACSHP%;G6|a-fAAkT1)g8nh2NAdiFo zBk~^}_}koNLw+FglXf-hQC#}rYl{Az%G;2?$!G9;{*Cec+&f2Hoqfm1n7q5jK9PUd zxU}3QW4=0a2YNSRrmp7)aOFSkf0OU*3i;KE;QK9~N*?)Ts?HI_m2PyTPp zf2p~n{f~=!fLu@Y!3>JNHgZ5dI=-@REa>~E8s=P2%SgAtUC9>&AMl#BV9Y9r(NYpVT^W-c3F52koo+Kh%G-1`s^}bKxg~ zKJd->iFgLo^Q*VFPem=M^pYuKKLOId0sjE~2l&6%|5#t6`9EvTO!*HR0PvPe=C7Q1 zy0?Y?v!9o(>AL|m-`0b}C4hMV`oTX59^m{2w)MlWfxe0oHzk|9kbnoB;wHKo6MIT``y5F3^0j=CyV^ zt6phuv8M!UC{6f_-VYwYegaDWbNzlE{fqq{1b=1wyEVt2FQ^x1uY8I8pVg(Sd;O=u z*Moua4Zjl}1fGzwApCc^3nE_3o)8LE{~vlF`!1BM?`fguW+CLkNOhjyez^P3p6jMuI5cO% z#KZHV$_{b1k!u6^;h#EF`+v3luV$WT{a@%Gwco+;M-PmtaW>~59he%AUa(WeSL|O$ zDBp8G6>qe=>fD>{&gfoJ?4zRXeUtx-&lmpwy7X_r-)>?`W4>9`FLRXKUOEQ9eAx&x!c|>iGZB^M*EHvhw|z`XAv>`%h?J&w)WNT=v7?7n@+E zPEC58vL}>hCw%|4HhpV$w6&#=K6{9vhj^fmSY7%j{1yEx|F1{?I{t?_tKgO4=qyCsNE4o%@T>}0l{U0Rn57z(0{tJ@-@t6T* z!k@iB(GPXs6wJb!m=G2!{~%$1a`W&0?(~~&^U+7wV(%<%@4J0en~?va12E@D@qfTy zV!((8RlLxnw(7+mE5B>}z9}3b4(yyc(ux)-pT2N7@Yk4?(Ym@y+H`GgMn{yS~&ui0@O_&$2+vwtw`eUty2`rpZy zB;F6-e}Mn1*^F`w_1{IGf}G}@$BdgM)=~!y z*ngV;EB#OF|MdUt=lm-}{!{-~@OS5-OePOVv@jR*{)?3ZT;u7t+yD0LTi1Qg*_qJ! zRsTrBAHH6pfA*0^ypQ@HV}73hPt8W?ICN*e+7F3{+|C|(K~&B)CVeF>{bi9Ul}U-WS-|=;?Euq z+%)M$Z#xqz7b>{0H1+9*%mkqFd*>wbKg-?zx_|AoZ{jM? zB6sG@9{~OzF$N?yAZOmX{(r=N#P?4fK-+(WKWSg)z_|Lq%mZ@ie>Zpl`l4H(Mkn_F zI<&?$oqPAXJ=JeqtK>dm|4MsL{wv}y``R$2OdhyVI(u<`0b zw|T!I4y4@>)B4cNDdz}(?f=vIzhC|b(Z47E0e2VvoQri}QnIx>CVBXU-~i$O+56Y- z#{4XqA40uPc)#wSZ^(ZQ|2p#D&H1H1h~D~$3w0Sw|3~vqqUAotz44s67G9K(-zI*< zHNpN*Mh$>P`j@`PuKm}T{P$!(=V1Zo@CNMnE*bITV~-B{ zx7-JZ{P&UjM*jN9-2?xxmqX&>g2It+F7`nD%(#B?s|RN&9H9QM`M>u6`}u!B{|~_b z)0jleg~MFzNz<*}Q3-vC>rGJ>b$-lD*@2lMm>sO(U$vdGAGV)C|Jwdjee~=4f0+kV z{!%BadTW>CRh!%Y!=bA2;s z#+5?`(Ed}oKN159#D7fx-=|Yx|5NwlJT!y;34hGSvGz}#v7;&Y^UP}Ay872=-@W!L znVlP$o2Xz9{g3qT_y6hmk7xgb=Tjf3ez~(%`a;JMmkRcpZjU@Vp!qwzJ)rV$ik)JKjPV4 zN<1L$9Za4)6}kVC17y-a{r}COfAW8s3mKi{?2VcJ)xL={e%%-j@chod-}=7OZ?^&O zZzDE8`G0`^1N>jnKj>cDfAsyh{vYuLVWv>^*3Ourabdb=V|3Bb-!$Bhtr#%0^ofDH zPOKbcp&l%#4p7yApaw|8JgEPNTmO3xYJczcF4O{!MDF)!EAQ^n#fR@4H7E6hyhzF{|m7nFaGP|0Ow%JEJW@96aH^&`A_=a1^DlYNw$Ck_cn&ZPR8%P zf9~BjCu-ir+&J)l#QBu`-;TJCYybJ_U&sGF{~vIG{=ie)I)72Vx%+QgTJDoh3YPWz zUCC1eJ}iD>poKbc!d`j+vH#20uKzb`z>xcITL+|S zejGpib^UkK_5bYsWYqt&1{8fjaG?j}7&|Xz+{-yjM*N&>sP8O8`8(o3`i!`3lK)FT zkP-hC9B}EMz8~fPQS=Z0pQHG{3xCW;hYnzU95roleKLUX2k(ClGgH;vWIz1r`>#j- zYx<|`mkaU$wEr1&zW>)!@aMS~JkjGHi&ypAiCkdzBDV$hdLF5-{!`Wei_G`i>1`$42V^*#m%A4thZ5-!cAJ#^N#8lK+Gf-u`>>{^`>vw@FKmv$XxE<-dl1Q2Y-% zAoaic;J+(sn!PV(#&dr7i+%Lrl|MZDUh68tUwA)eg$3wea{ZcwKYann2eN8j>Ab!r zVb7kgB~SOuEPN9EA6XBGS?sF*`{L{WRsFBq1HkS7R;T|1`hcMh)XG~j{!G?w;|FpU zrXOyhd{20x_UjG6KWGL}eef3_;3V4q0s7w^on&)1^sdMxdr#E#s*l5G{|M{zco%W( z)Z5n#`22%5)~Po!Gnq4EUHH3m;~k0n8}^?+|AVwoe?axNj&{|{o!gL~gz^k{FVcPP zvany4uj_Y&GiXu&A$5Od{ip8zS6}~!hU&j{|Az~y|7Q&->%UL~^!cHMqlfSeL%m;p zKf-@+(&Rqrn13TaK*axK2C^Cdi4BVXc<|pv`%mCM4fElrIs0R-x9~cE_tf|2xt@Lh zn#WGRbB!%_p8OXP&w4Mh|Ah8CSZ7}A^oN!>3(fOO*7VI3*rN{=`@c1- z{-3>n-1>j$0BSy~(f_02`hVU3(Ww77>VMrDaNt1rXQ=<^ZJwz<+fcpoOf#m(X8`_| zKWFm#;NMvP zpP>E^st0JG_8YyQr1zg&|E>D}pavNAe@AbhP@S`2T#L+w;~6NQ(3D#aCL!-vazK3f zUk3b5|3Bu70KC>GJKNkM9xp(Fb?|>c48)4@6`>`ajlN|1Z72eEmNR_-p%L>wlb6kD7n4 z{}W_@*Z(Qo?fac`2j&(T{aERmwXWzT#aV7g(*P(w8{)YXh zbw7mz9c8BU>Fph@%B>wELcMq1uWWsvKcE)WLJvqq`$qp4f&VfEfA;@l|F2;FuY11) z`oF6FPoVqzr1x(l^zZinS<-;~Xa7eHfAs%i57@&CCs^t8#}5qkISBm80}^9r9!vz? z`{h4!f5ZpC900@qV+@G?Kf<4|=d~*$+0_B)$4dE|FaOx)Ba!_(A^U^qU*&r<{_Btb zxHOL(K)@gMztyjF_~P{I?L+Dl;TfJ-(|g3pbuxPmy+4ED@9}@Y-|PQq@c(@D{z2>~ zxc3j}U-|qs{L%Z};QyZdr~ik2U+DKy{r}Pb5qMzef13ZZ|Bv*4Wc~Mi@PLI8S?vEG z3jSx_gYC-tDU{={}#G` zbq#fY`20=zU-fzb{>TAQKEOKipS-`lh5iqphMM;i{uR%JeM;IdLLaF5;P3W+7XI(2 zf5KmSze^8j@O|n3ujfAm;IDc=5)aVtN6UY}pZ%X)zh9vLzYqSt{%=zMpR-^B@gRZl zGT|4BpQ#6?O`DpxF9H4_ssB^{f6%_8;jieQv40i+)%367|49UFfQT8@s1^EK#{15F z(Ark;hwkUnKl6R5|9kNt%>#7&->v_E+?Sj%(ElT$VlM#c`{AR1 zv;Q~czwZC4`@a$X@BzE@AK?FP%umhzf&QoMKf+(rKl?vx_y_zy!SwIyeQy6}>Hp`> z00<`!$oViO?0cbrxp@!bR9aH}bFcwb3{d-jq5q5S=f;0`Pg3wV>0k5zPa=|?J(1Jx zkHcsDy5^nMLqGombwAPlef(d+U-N&70crRvolo*X&%BPFKU+JD52eqC_d5A(*fXdH z$J}l7fPu}&nJ=RIyYip>U(vtv`}^VV_5b&Jz@zt@$Nw4om6=cV^M8r|1o%Juzfu1) z=YNp@`{`eL|Dz9R?!rimb6`Tv18BGJONyIzFmb9|{~3t?1;L;GKZ*S-|G%mK5&qNx zcSlYiR`c#PGta#b-v3s8@HhBBb$`YH4fu-=fcK}iqwmY+cE2Xgnz;IPf94(wmv;S8 z$@<<^gul$*RdZh;0~+rC>A{~q0OG-eT|D*l?M*mmDd`lb z{lCHkT>6I`n0bb}|GR|0=>7rypY`r0n~Y(N`n)1&`!e?r`sru^UQ<$o&pGyYHgkM_TYe?a~x ziw&>~e!#E(*k%i4zXkYH_w)F_)cg40uj7BT|LE^w4OqptcGkHa9ruS4&v{=|&VQ)4|2KL-<}QE?n2WhTA>xY~cX&R~0SflT$63t(53c_L-`DwHjqrck z00&}bZu#<0ZT?jA&ean04}w2+zXsutH~`@fK0x@N-`QzfDEG*Fo!S`oCV0Qa9#Cfg zKL!85{10va2hl&`zd`gb{ojN8zS94v;ZOTdVnEFOsSp01{jYj|s@RX}|F8Q$lKy4> z1ABk62Q+$sXU?5~K2Q@Dhm!t@13aHY$%%gi|F=B{4oQ_o&Oc^{{{R1Y5$r2fARmi^Pf!kD;rS5AMsx!|3lCJ5%~}MPiENb z`A?vKCI18czjgnAz}`BtF#6R{(uRhAMpEJ?P5(;%2gUz_;{V$JZ^EDSk62*l`43tb zi|zNO*!}{4*Y=|yIAH&|{$Ef3qYQxVhyHKm1Gj|={=5(8%$Ka|^%?uYsUGlZ{*Q*g z@PH=fKhXyCegpN&TPB|H7+b|C9c;|9=`=l^KXFf9(6K=^y+*F#kb(e}VZA8FN+tUo`_J+|HUCQ5ov|5S}&s zzjy49SMeWz{*PDx;mUu~e=z)$0smxscSQ1O=>A^<{!ShKZ{&Xg?q2@4j{j)>e;T$w zY=GF1(Ldl{xW3o_i0%*gtN9;+`Ckh5TK+5kADI6EACS-gAK?Gm|D*K30Q`0A53h#& zC;t!V|9bu#c)#2K-JAdC)Bj}lhxGr}dccG);0yk{P@RwPe+B+wEg_>*ZiOIU(>(e|F87__6~hN<=fiDgi6NoJ}1_8 z|BZ&frvLi%f1Ur~>VOT~e`5cm|Gzu`Mf`s*{d@60*Z!yf&*T4Y{MYOKZutKV_|pcU zzc*O_!we|$0QP{)S}^&aL!1YXSTN#134nhC_5Wi38T?=JzdZOe21FT<>=5=E{-<^Z z{J-_-e}V(r|KrMk!XNnoA%%bOnr^=;dq(m9p#INI_wu8c|d*q-;Dnd_FDey`hUs-^8d|Ge3c^Z}XrpF97#LI1Dc|3}}i;r|ugpD|!l{;T>A&;P6Df4jDyng8MX ze_j4BeV?`ccL?@h_PogA5YxW&jX@uXJE{NenX3H%d)@eNQ2oE3|GW7g8vfA#&cXgG zf&I_eZ=?3VhCgA>m>=ao>7Vvr<<|C#Lq-4EzOCBW`{SZDJvsAT{J-A(&wBiS%>VWK zf6V+}o&RIb{Rx7aYa|5Nsh?Qi)1O!#a5Ph21lRK42a$&kVy zGN5dI@0H~L@c-2d|6uyp`Cs(==}Th2j-LJQ;sEDMVrzu*1~`2Pd(ANqgxMPHx$)t}mY z1o>Z!yl+4K2l;-ytwb@Gg_s4%s{XbCutMh+d|37m8B>vMOHIzJ#@IUfo zw|^;J-|Gv`0!7YuVE(Vc|GoSVfBv`6|D)=^l>bN5f585y4~Vp1kNkJxPye5u|EA;r zp8e;=f8qCG{Lh{Ltl^(JHykyvp^1xo@MjKCVtiq+|F_}#f6~A9|7iOkIsoE7H*7!i z-qkCp|LgcK^M91@ude@J$N#|h-QItIKjOdDuXd<$Hvf+KZXweFiBFZ!^?48QS2_Ua z{z&X!`Tv_k|Jwf-EdSjaaKry+>VJOwU&Vj5|3~Hj_~(C9|F2{J&keV-=SP${&}B8; zLh(x3kG!p)?@yTel^Or9um6Wx|8M4hQvds80_#Aguc~?X>RBrPL&g7f{+B8L1N6^$ zpX&cY{ZIRVX#VEF*M~VLj=wHQung6foUt+&r{)dkLxjw+!yhYI;gz`*?KfK?b_$l2b|ARTe z&8+|T$NvC(`{RhDTTj2!W~9ph^5uV+{@+IG|A`N0UV{%H#JS&;nZ>Kx|G0ErSZU#E z=z*LAT8I7v{@)<|-?jfq{}TT<;y;@IYyDsRf2RC5@;`m^-@V)~*8O?;Kd%4ZPyZRW zj<*s2-w<;6<6OY^ZxG*~(f`*^|8?sB-T05<|EdOH*M#J874Kei)n^|d|Bo>MH~uUB zUjzP))&J8L6g%+M4$DGm0}$6!fa}Qro?E&Wx&O2S34dIu`$X-hs`(b(&$a)w{ZIPW z_MgDtjR9-=uebi+kpHItm;B#P|K8j`mH+Qx?w90#so7sD_D>!F-|thQw*7e~=}GaM znEz|`|Dpb;{XfwEz4}kufS&w!{lD}9N)1SOQtSNnSN>3ZK*;|l{Bf!JuO{G6-mkC9 zZ5?XQz0Mq<(ANACpH6NL`#a2kDq;>e{eUX|FS$Qb|LMm6-TLo9{7=I_@8Lnn`(_S6 z^XmU|8>WBc|GW7g_0WG^`)|Ar`M;X*A})vOAMckjEg_5W*YZC&{-^SP%=&LX{Av5| zj+lOK?}(%yJGkFhe{B6J=wEU`4EgWne+26Pl>9gKKdJeLK6vWYj$fYL(eYnH&jVWh z&GDzhB2oV(JV4XGPyY*X{eNKoyQY6t|L4NLk@&CBJ!v2MU*5vVtvugQ!JhY_Tue=x zTIS||i~rw*zvKY>=wIi5u>RZS|Fr$~5tmqB2mZeb@TU#n<^M~scQgK{W5BNdr)$8Z z{|EBGPH#sXcx#7Ap@zTg89Hz2+P<%xcv^4(dO#ieH|qby|KsuhK>QbazZ?Hk^-sN4{(JsEH~&Y?{T2JaPW_KR{$uKYg#VF+QK>xR7Jz?|N&n3M0q-~K|2+O5sQ;AO zPYr*2Z`Ad|n+Pw|fJ|onr)vWS)&F|+e{TJ^*8er{XZ@Gh0jL2&?SDx9K>FOc#*%eC ze^If%Zvp&3tpAo8P;cgQJ@&uJ|C#%7!S(+^`ClsjQ(yc~^8X*N23{d_LYtus)eEeF|&9DYI+dx$b{Z|1C8@CjV#r zFF5{RxBj2>&kH_5)_-?uqhgZ>Y!0d)QUBL4~hy7s@){ge;D?f(INko_Mjw{}Ws2^k=A z0K63WK!Z!3?)xQqfaC%p_si`6BKbe?|20Jae*3Rk_5Vv6um9KaU&5dAU&jFG|35r0 za!W|z4_S!5kpBT4;JoDium^m7_5W`FpIyCa<_?`giSs7>Wxe26Csy_E zQNCtCCHw%E*aE2kq5bctf7SOBxnFMoAJ+ew@NbI#1^!| zHNrl4OLz~$&5z4p_dWeesgoxC=UJa1M0HYIa^Z-8x{vYRu zy?#F7_4$Xbx1sl^^nF)6AOQb{>i`mxNhQY z<+33^EnPKW-H9g#*vJD#|5wBW9vdL`pO^n1l>hTJ>i-e{SNT7h{#E^Fef7U0{|)%3 zWBzx>9Pog-QO8o}O!}8l^8w<)zNu3uq{Szu9-NA~UvWv+zR8I;uY*(2^LNs;&-PDD z-ooC`4Z&WY<*B#YjAQ>-<^s_E*YZE0|7rSX3`p?+1%J2qC*hCYztaD8TbGS34S&6E z;=$2neFvUcIUuKKrN{wGazV)py!!uu{okzmf5?6v15!Q!$pQ6Z0QCRs`aeVeQ@Wo4 z{|wIlCJx*ZVPgjLu8*dU{QFSifI0*AadEELGb#R>y_4go?4F!BZ}+75*}Equjm8YH zpYwU9yytiP|9FPz1@hxF?*#P#mHHp#en|em)#yy{o~6AB%}X#Zt;r2==(m<@?rtL7=SAS?BMzjuLp=DexSS93v86d z{?F(EX5}myZDps7vCsqBk~~oQfprcrM0nSsTQCd$=EzTSZizyl zoY410S8xU#T{)xQo9EQn&pgBPA6&bF{hvAeLu`Lz{zoNZ{eJ&X5d1;^ocAKVKsR^9 z?1#=D@Scr5Gt_@0zU@UV`mtq$h7~U#ytUx5L1&AXVFtib_<$bf41ggP;sNvr*{lU~ zc|oB6|2-qDy!%Gj$L*{OI zzS{=AVD|q<4v5eGBm9m0FX{cK=RcIa=+6J+{0GGYFz>BX)TQD9=H7%KfbW%}XaA9< zg9c*`$h~DNhP_$z*wDOV4-Yv@*yleqROWx=JuuA5yMOqZ!iPrY6h1iW71RODJ9^K^ zHhYuW|E)vb>AwK8?39uJp1pY7#JnZp@8sS#zBY4#)Pj38Ak_Oj_=5+e-5lwpbN2h} zNQd*kGiFEEX5Ad~`2LyUzaTH*GqC7NNJ^a1|8IsZlTf7AY>t;dV>Pgs-Y z_526U{K9+w&aT2pW1|K1xbw77#@wlrGFAm?9vk>+ldVq-^0Pr{YztBJ7KMU{&4y580^Peru z06xPRuxU3%_u>pdSu62D;ldSs4zC6m65>CQZr}qNdH!9Q0TM+20r-;#1m?eb^iLcB z?W>t@UFa85^PjeK*>tJpKx4-uIDs?PXDjq~5ws^T1B@~kh7ZfTEuz%Z0}TETxvy#8 zNxdmbuC$w??6ezs#aLOhCRv#OSd}w-%6sWEC$Gl**V{1%@FvWH4o{mN_g`Ei*Q;fF zWBa?@g$J+?z^iKZtJeP@1El_+{vT8Rd;A~t@6G>%OsL#~Szs@AZqW9; z*!6x}zE31JFmrL<}(0-Jo;2v#r{(I`oXy+iW>tzPGbrAC( zQ)f)F(`HPz4_zN;rDFa^#*C?{dy}TzNSnW11NP`terY7?)d)1$wP>1EwO%mPv^t1@11|=+AQP) zS>gw-r~Y63{|(50z#X%{yU4unlP?kvFb8l;x7^duc0w)eH?QaDeYV6a`E=^svA;aB zFtR9P4sZarKlOeS{(=Jr{6YK1{CAoEEb~9T`Hx9z_5=FATI~OsF)i`-mgEDX2fT6Z z*mG}RC$pe*|9>6-5&7@(e^dWE`4VP*YW^?q$Nb;tyV_;o2Pa>^{O3(wf1iO|@$Whg zaDVLmg#Hg=2Wb9Jy^pj{{!iYo>Hi>jfSUb1(IM^2?AK&9|C{q)W%f%V<^U%E577TT zH8H*xH2}A_Bp=`&&cAcrN5~0~TA+sXKf>Re|7GZZQ-C*Qn!t~ z_jer!$OjIi{_D`K5%Bwv2PpmDgg<1zP1u|8Kgij?f&-Hs(m&^as`+nI9GU;^&VXY5 z@802fiEl zKo`4WQ}^1c%{^9q*KvSw$-E`{SJ`tTKNmj`;7|GQ>HjwZ_M-a%{^0-K?03SR*EB`{ zdj7l2esSmjaRvzMe^L_@N)N=w{;Z{B0d>LiZ?}Eo)DGYP{6VJwPuu^r{|Nu!`R~yC zT>391{S*Grb+Z*7bOj#(4!ro?#{u$Z)PTMS_}k{XN?L*ZM#Czk)wr z0srC+-JOyR-9#RgztFw5@`WCo=zICD$^!C$L$^c>IXo{~WPrdQ_Mh+oSN^BoK)cVB z{}YA&4@|@C-)V~X8}nbm^A-G6{&$?68lP~S`2Z~ef8LX@sortjs53j;iY*{Kz!(3i zYyTm)S4i18I!^$HjFfuW3mfIQLfDXHUJ}7IFadKwbY|L-Idh{{_=OVJ`50 z1~`Dr#R``_-Dch%L2;Z|c5;%aQppp8)=~%J&QUzmZo!|EK+L>i@#~lL7k% z;4ic<^*>wi4|R{Nu<2V>7S`u*kd{J)0&NB9TJf9L?@ z`!4;LJlowaex`?gVto(6hmvQyTNTgsJXgHFd$Rar@w{&eUZH+2WkAl{=nd(J|7!Rv z->;JY!vB5pzajX;_QUKy#sBxjsrpaJ0iP1TyrpyieICStir22|cxFetFAx{B%eOVG z|HB91`hQ&8Z(~=x4*UUof&coRb}{h)_)xZ?r;XmPujH=}``4D_XL?VU;+1fL{`Z*p zf+hA7Z2za;06Yki|Iqts`v>S>&HaQ9sNt`AzYzX%*$3kj*AmZKdOys+t$CyE%+s&8 zQ#^n+AoTyb_J08WTK`kK4F6#Ht)a})T_ znedPYf1m%yPyYv}L+>--Z~A{I|MmP|RsR|1NDsic_$OML{`DCVCTDlHTYKuY_O^tMkv6ZT2b+TLBs3;t610p)VW z&5_q<%~3HxvHuMJUtRs*wf*YQKVa|jf6@Qg`wR5%%Kw{NQvPe$^Of+=-8tk3r(Wyu zG5x{f6W-#F{{-}Z@%_2{pZ1^D{{;5n`NiP>8vf|{#-9I<^nD>Npa*!#y54r_+CJNl zt?Jv3IPjOo54h&ES>as|&yBX22cmR;rT@|YC;Z=)|0?za`_G_%=>N91|NQh%J&^kU zr*Uz;FC~2t2TC@#{l%F#I^>kQ@nG%$A^l7I*Y*FC|Kk$*uk8Qsc76QcqyII%G4rRl z!*Tt=I|`oa(~o;4zvDVg-2Arw%z1EGbEAsW5C=-1rQ-ft|M%0s z_5^e^bg;k z=>LZO=jwbS_g((4=pTKbUHGg1&tYyK_%QT??qij$>BsBPu_yZ6%6Z@l7n;u52@!65 ztuy9XWzC7Y7ji)P0A2gf@BeRz{+0h9dcPt6N&A4kbs#?Rp-aX4{b$I1vG>op9i56< z`#~HK`HxtS;sKz2#Q*5`l}p)xu>BwhDF4?%?+5=E{g3_r*z+Adzk=Z(=>Nq&KF8s9qz94U1870xg@4V>eb2q=d+;@dJV*GB`+GhE zpJ~qh__^E#;lIeaHM)}df2RLO>wf|Nzw-YD>HkU4{SyuN$3yRf4+#GMQ=i7hqVGb> z_f9ThijfmU9I#7~_hHBY1%H?R;R6u(i~eW8U&EgA--AE<{-EziaQ`PY z14z#TDOl0pI`L$Gn>8RMPYgU-ykgMv`OErGKlbS0u7yhn{gVerLuQa(f-b_E^2CKP zVZ9%Dfyn>vnSIB|n+on3^HTmjV{?w&F{UE#j&UW&?h60p@a<#o%)M>&f6M)w!Fzdc z1;9o zlevJ@|BIiM7yy0$b?9GUFZ!R7|FHdJ_NV6mod4see+B0iDL^1dm&ArA0@9JrzS<*uKfME)oB0XGH^r2hrczw7_;^gl!Xv-g+G{xbN# zJNrfYKU`S-zn=e%SN4DB#s1&A|C>4gqdE2eY7UT$?} zQWga4KiBWyko<21{vQ8dhPh8}|A%j+{-6CHS^tmPpCh+Tz|7C^uhaiRY!AZ5vqO|k zr+?q1T)C8Ry^v=S$Me@;_p|CP-PTpS2w#Bf4^TRwfqpecAs-&wo?>AL^_BHs?RF_FvEc z_UnJT{|EKHp!q-G0aJ;rtKX|HbS7F7z)wfH41~0r>mpKe_$i{QaNA<}>=g zNbd*EfMWk2z&?8c=YWrE(b|lbfXk)4Cvkvz#V4NY(ysD_?tiF!zK6y9AF&6i2blK1 z!T*mx84Q1a|35$cz5Xvk|GNK|Yxnu)zv%f7UjI*-{{&x;*#4^bM_~S^>i<%g{vrPt zLH^Gl7j>Ebo5m>O0MF^fGu=m4KHoC~`Cr5VOW6aA`7z!T@c%VD|4r$C;`eds-#`DG z{l8TICk_9A{(r=r|KaNY$hTFSS;AFt2$FX>hI0nQGypNCdH7xo@zfB_FAA4Kv2 zs0R=S#0SKFZ}9nR|4-2T2Y3FD$^V1qf4KAi^!%r$=YQ$`zh3`ucm4-_z?}UG-w$K~ zZNKw53&#ESGVNa+)(Jl#9z5Os>XYlk9>olhlPA~pv5Hp790*(4g6<4R#(oU{uh2hb z0B3*TqWx#~f7bn9IsZw)U;BPs|Bvqf8PxyT_5Cl#3^3BZOaCJO(FcsMhwm47as@zZ@yGylW&1zX||WIRCn05kSu=>JPG1JH#( zae)2b+4sla|I<(Z-u#a{mHtQj&y)X{0l^vIt}MVDm@#(V?c>iKS}-Q=GVEIhH?-fA z=UcjA;7>sRLrb3S|76+I{SOyE)!!;vH9+V*e`#TgR6n_UnuPA|6P5kp6Gl7oc@P*Z~%N zK)h-h|K%*0yn9C3$B+YX&P<@cfAbv zO9S7_Pq};omrvmG30yvb%O`O81TLSz&P;+JZq7683eeptA4_ zbeQz%D&HFXYupq3x($8y^6xL7z+dADILMXKG{QWI`pzKd;jo|QJ=U)y;^EPVgD*iX z)F!;{!c~Cl9A@D-Wh;j|6;BLzs-7I~R6a4nDPK9@CthpXW59V0)(~eRvjiu=|kzT2-`Spi{YOh*Q0K zC|-v;Wls!oik1(?Ohn|vEahy>L0=&+hS!(85D)zdIWp>c2(z&sluKq~F;~K*|6J5c zO3uvvZmlfhrHGlXN4hI@N0iJ5~Qbd+z~dS9N8JcE2(D zcX*?p-|uWccfSsP-M@{9lE?}ufe;cXlu{{&QUDpSkw7F7jL11kNCXp%F^HVomfdbJ zK?sFX&N-n-teeiCbA^5OIdw&NV7nxj#yEXTp>fr%ntRSQ*IaAgdrGqHo|6;oJm3rj z?mg^WLv+8p_iXlDF{RhH^X~`WBkG}MZIFLwnty*Fy#s=Ia(qtX?wZ!=8^C$z zb$6b0E%MH9t-GVc$2(_qN%r1w}L#kbuK{*U>6Ezpu!Fe%thcX zWS@y7{v{7*xmeG}VmE^3p@4nK#6a`A-Y4gy-q&Ypw?yXUr(##a)NU2eO@jX`Hal(E zx$bg*s^gzox{#?vu9kCkvR8q-6_BR`_m_~bEMl)p0hliX@5#C=YLd-Y^-I>{6?xl_ za1Ok+^rBwZF1ff*msRK2d?WrIOBRRcX6`+V|4sA9&F?@{c?Vp}a+hxWIc=KO=^rrf zG!psNCpX;HVcU)woszu|bV+v1=$vf0t7C$hmm+2#3pf`_(EO5lW$szB&ys^r_h4`j ziew+j`8Q%04sx*REVRzU$~=^1q9qF%;hy*>?#cDe_vCucO0D3$6u4e-557lco)36F zS%%E4XJv&`lwnW2?gI?mJK3HZkufEqyVSI0RZGgin~^M2(Lo&ugC_ADi9FGJ06 zW&dQ&l)lK@_ujtv!alQb=jzD%^K1Sgeh;}@M|_fI4>5jQnm=v=?|^I8_*2<>Z`*&` za8HK`*me4I%r||q_rcD|o(DQ7o2LQqcXcRX-l?$uPQ2cU*;mXtaPDob?mr6iZ>ar^ z^D+An=AU&2M);l?_#0FFyVfV~rOLevaUZBob;#FoVFlPbmW6lb*7JM%3Ra$&e?*d=3 zZ!1}US^s3i<^3^p-TUK3=lA|O?p&R);DTQN9KW}64&Xe9|E&4r=6B$?`3{JW4SgT~ zZ_>NlG`;PJ4b$4avSIp34f`JIoa}m_Q?hXycAMUPQjrg^U-o%-nRmQX=iRX96#GtW z?lIQ-z&-SRBm8@<&pl|)|Biq3{n9xI?nQ|BUuPnSf7Jkred>S3zVknKX7C9b!1&+w zzU@%Ua=-3Vt8kuLW~zyKpQ}q>IcvxHDmeq7{}Xwzb7RScz026UP+UB@PhrXAKFQik z`zISO8^|3D4LAp0U35X;5xj#ne$VNvGiKNA5V{p7R2@zr?v#-*3DgyN(?HsQt0u)Ns!lpSwwd>S>weBj#rXFcK=gmKN5M4! z_Gw~=s%w4lzjMB0AAC=&%X~d|>_m_L8Ro4qcP+bDuyYCLKoQt4EWV&7S$oNVWc{TB z6YSvHy=Y>ehZarh(=q-YP!q65i2tnlv{*|=PRn~*G_Bm%?&f!P1VRgls0Nfk)8{uC)f7Sw`0aER6z8`%6@%_~A=NZ8IALoGRfARdh{?FI` z!2dGnew+b@ebf9I{FC>4QTNNk9SdRClI~g*{B!3TcQ46vexC~Xzqsi9ngZ@$Pu5>D zFu@(%$)brh^$REVJ#X*Jk&n`gFfwP8lvnb>Fe z!G}NYki7pO?lQTzT?spFiyNo6E$e<$z2ii79AUo=biV92MZFLFbGI=#Umo9c=lDYrn6t|9744#PdF1%>DRSu%Gw;s@DICd-MM?9-#VvK0hyBAG|;1 zf2sci_j|q1Gr($o*Za!<5&p4nbCK`dJU@f~1o%(D`8Wq^%8Mq|6zV6|lvYfJCb(o! zQh#3G4;KEQ@63gh`nU4$wPz3U`{vA{zbVbHU-%tJW@kBsyNj^P^0jRbv`sz$?zh~B zefBfj7BwK&A&F4dZPwzJ{{^!1X*>_u|{x=;Uy?*C@ zIRm%@(I4o4^8m#EqX(Gx|1N}9fJ?=3YfW3utcR$iT+52dF-e-aR zb#02gzfSkqrS}?fuc_4evd=!M^Xc*7A^+3o_Z@e6{jc~JAAnwfdjFCCr?tOwzn=lX zyW-z!f8sye_fLEO+>hk^FTMY?_NNcP%#Zc}ZD*?V{tf@ju3!z2_WOAbgguJh`vd>W zJ|)xtdJcg1BmEz1|ET6~gnym^#6I|*HNQNLdt%=o;6GV-Uf;^X^ZFHl{mSaewaMxW zY7^Ya{C54h{rbn=U~^qi^+&$>5AhE0XCuzzZo0osf81j;|AWWcC%YeM$6eMXV84i0 z++~*DX&UY`;C&`}pO3mf+-;!TFMYmP|5F2a{ZH=?9w2i*`@_F@fZF#9d+=iKPxzm_ z&;CC=0PX#0-Z$I-OT9nK`)TiwJ-{6PJ@4cFKh*%z>ks@-?awFOrhr4`uFjlc=igK z`vv}P{QkX?2j)y``A7bhZ+qy3&e&D|>kl7qm+XENxPRcpBJM9O={=^r%UbTUlY2}e z&etCrB{$JexuU7wy_P2YJod09}&ojVtf0Fs5_h)zMIsP>VfQ(N@|HnN*?pMz8KhFR; z2NeIP0aE@)y-&}-vIu$~o?p-a;Ct}CK7xOK{QZ6v;Gg_o!c$m|b70k^!O8q{2E4W4 zoPnME`#z_x?vG;K=YQV(dhosjG49v@==c`6xAxgRkF`nmK1ST1Pz3f%a%Y9zW2~AV zcNhEpHMqk@xS#yb9rnim)c^iSpFgMnz5ZA1Qv+nQzxMvk19bj3-%s*CUjGN~kMjOr z18DsZz3*p$=YM?OH}e18191MQ_m}#A=>1#%kN9W(pXvWc_?O%-^}pPq8u$ND`=cjr<)%=2g;+?p6?91!9{doo?r~yiN ziYv|=l&m-p=fK$mpPP5?fJ6MJoacal-28fQz5_C2YBTn$rnUSA?kv8A_ZEKm)3(W$ z2Tv&B0rq)+d3uLA@2}Fki^b=w!0VSg3u651U8Z^dm-`Gd^?$&B=m7%%*)st3e^&oH z{ypML<_5W-Rz-)=o{mA>z;9vE>c>jj~*!#{`pAm&+`AF{*Uy(`~Ql2>-{yV|E>Q=|DQepx!?GIY1I2q zvp>uLR?+`y|1aqO82{w|a0ZCy*BJi`&+V^gfMTAw=Tlj5cK?dp&wjR?1IgM+!*~X4 zT`*zbF#pMynxHv1;BUtP{Tk2QZ~oD-|BkyUfBrFWk2?x^XK?`!?yBV7)p+II_4nbv zLc>1$ds+PB?#e3sPw!72)Bo=ON$#hL|L1c)p8ci&XS05K$Hjj7|E&L+|8xDX{r@!o zNBlDb$o}7IdjB#0IRjw*KjL3z|1AG2`XBj!;r_h;#|*IOf1Uq}`~U9$dHwJD-|PSC z_>b;bll-q~f8MwBIr^XVKOfis=^2pXUuppGe-{4(SoeePiT?re$Qkgx0Tp1su;`pY z$?EflCG*Z2FnjKV+VA=geA1jJ_P64Idu_z|j~qK?>%+%YK78Utaz1c>Tp5^8Hsew3 zi@&GXkMN)N_<472dS_Xz|A~F^0IdJFKm6187Yz{W|J3`#U8mv)gnMq>|BGjSsR4-p zM*I&Q;QUYQBl{;kK+peh{!g+$^#5%JIA8yZ_aEcm>i=~97iU4p|LDB0&-~K+BmRkf z&HyyZ|B3exJzzCJ+5<@WU$cLj`!f$f_&?@;dI0qL1NMUlkk+jip^_uSy?T>p(75n@5|5E+m82`k+WdEx6|5N`z zgMZKdao-Q>fAW7i|F8N#=6~pc4E`nmXZR2EKUV)M_uK4$RR1&km*;)B-}V1e!+)&*i<*&1pP1f zm|G9f^}lg{p8u);&HKybe~5j(>$($a0G$Df`+tso(f;%R0`If-m-9gDetQ4n0myx* zVb>q(e%brw{2%Lo@&1qlUVfGA0MRqR^MCOEQ~c`;pwIuu_}Bd(Vg4t|0IC1y{GXZm z53|401Hh~=bw6r>bmmX<|CaqF{+<69o(B(ry5F>a2LICc*Pb6e0OFtCpVt3Y`{(d) z+%IQ=o&mM+0&0u%&aADh`2n=RnYC{$oG|oX_*1Vr(WJQ^XhKIooafyB=&?h${rK2V zKb!^5f8^K#9%3FJJN6@wKf-^k|LOlB>x;Y}xL@um7w(t(KluNq|3mMO8Gw5l^MBy} zSpOsc%Nf9RcOdIy^*_&m(EAG+VDbEg|A~FYf9n779LVqg5d4GtrT&-RzkDp(Kj7bY z|9po2m;E2c|62d2Gr-FKs{e)ief}@z|IgF^VGls+|Hbt``Cn%Ml>glWP!F(r|3B{i zhyEY1FK0mP{Z+v~>wc~M1^dK5xWATOK*RELh9&QvIjG^iakWGJ$9{JE?0lI2dGqUU z_Z@J(&zc{&f8dj6PDr*tc5Jfs(PN9iKF@#z{4bo({$A+uJpj(n;UAbM?#%;K@8A7D z)&K$f?EiWFZ~QMcfb+lS|6=c-b%4(OrQC15f9HR%{e1=iJ%7Qz>;KQffAIdu|AzlG z|F65hV*g*fza0J>>3`e*qx1i{{a=y(5BVQv0El~ktp7*;=fez;_%7#JxXf@(dUR?AI3OpE)>LdCrLB zz43$Z_r5@LJ@DJbdi=i@`};c{KjGiDJ$B5ZhUZR5a0V2i{mZ~Vw7+rxL+tTse?P`Q z`~0r|rT&lc5A845=j*-pNZ+5m{}lhu|DT6{>Hx<-Ut|BzYJc(ntLcB>-uC`*|3|h5 z==`6@zx4j-0m$w@^a8E^rv}LP|K0z~&3`1uTJE=+|EDuQ>H&uApX&ce1HkkD68H!1fqC-3XaI13 zGH?8#@_XY46<41-GI?*@;6-!l2FMj#%~^pMmA{>jxm%n2_xQiI{jsBKw*UB;!UwaC z1NM(;0Ora4`at(ft#AE(-QT=Z-ey;z`|5xls_!rz;|If4k zk^$ljF!KMg{*Upm`d|0|#P~8$_WvUM2MwUTe`bI(`rl@MQ3H7Y zFUG&m|B3cT?JwFN{r`2${#gAlbHLp5PyS~QK)65UfA#_x@x5-+cd^?ym*zfp?w(;|Epv2>!NQo&WKQ zOps;&to|qd)A~QczTh8TKWcwI?*E7EpYXr%zU=;%?B9O*Uvj{<{~LZF=6}ik-v5jD ze^lfDFau=#ulYaaf3N>#_Ye2|Py<;1Z_&hf_D}nN#J|t~IQ}F5Uvj?z|6ic~7tUAR zFSwsKPVq0V<9G%PE<*#9R-ZE}d2j5Hr)N)@B0C40J%Qg0_TA^(@np+yZh!ok1%(%m z2i}h^Km$}z`={8K{ywrjp7D{|AH9Cm|MCF)dJd%gFSS26sV{tvspD;qvT|C9f59*F-RYk(O4tO5LTAM1bd0c{Vc z=K$RYkX<0eKkxqKy?@*VB(p%a2i$sq+5Au1`$rwX8~`57{ki|I{$JStExmtufW*G< z{Eq#|*9-yHA z$^XIom;N7jfvfj#I{m08X$RZ%#enqXR#I-^8UQB zLyl}d1HL}|yXN2ilUAp0f4p^h?^DMR`{ezAeeLt1$H$uA`QP)s#{W|LQv;axhwrc6 zKhFWl|A6l!{g1OC^#4`+^BgemU;IDJ0|5Jc;`u-K06G6JyT76ypkv>6fRXHUS; zAG}Ze%NYR73+_z=0Qbaxp?*Ak!MdU4xub`4Z9W6O+8Mz9p6}v(|B0iA?tS{0Wakq{ zC#d_2hW%t4_@6yK;$HGSmhoZ6Pc#6qk2*kle~t9Nd;gaIV-1kk|Kxu6|Fs90;@`Bt zoB`eg2(!Q5|Ih3HJ4N$*A5iZAuzUWP{}b+yy+7)I&I7wA82ufy0jvq22g-O#a{u>D zC(GU6&;_^${FD;#4=vC&S$ET^$%dP{C7W(OE!lj_X~~vbx+hz2=^@XSn|maDHs91E z*>q!%WWx}y#u_5-2aU;pokn`30gqz|D+BOEnxS5`Z*w8 z0Q!Kg|AG6^|MwYSa)0dq3IC@W0ChjHuO48)zs~Luw>!b;mLb-LnJF?*|g@o;FmZKnB{e! zADn;o$IpTDf7%+@Z(V}^C+`RBOOO8%nd?bn{?FpyX8Z#GYxdXkKU)8%{2%B4{15rxc72Qgr`q3p0IdII{}*$A%>GpE|Lgw0p#P&;z@Q8C&-5I)wM!X2ff63v z0p6uZ?614!hU6bv1bxU^MeVRPm?*P_sJ(cr-WoZ8o;0bJ7eO=d8;Qj@8-d=g_ zDX*`*rt9pL*PZ$^aR1L%UVZ8>!2S5MZttK5s0a72UUBtlJAnI-@FW|qJ3ZNQL(gRU zjlGhsH}pz2UDq>Nd-WN~iYsLwcxl-crx$qtH+%rx18)5Q`T~(3;ClcTUu?u z0LkWm;r*i?Fb}}-@7Z7a|55gryML7bvGYT`zbOBk;eX5m#QuMp{WlHZ{BNGWXaM?u z#{YtS(f!2!5XU|>K=N+gkPSkUKID9u@r(68{6F#jgZ`%n5as`J^}lF;)BkDxkGwxMfb{;L z|D*g5v7gcYto<|fznljt_F4bmC3`=T^|Jd<{XeMz@cVc!kbfq9f!jKlp$m%e2nx^u zr46@tNw(j8O0sMEsmac1rzRV3$IS1|T|R*JU%cw3E-$XSq061P6ZkxEf6ek6y0l$) zL)Y)Fz4_#CF1@zLpRc&B>mPrSA1c28{I{#F>GX{i*LMB((yMwLw(_cOC#|@u$Dn0b zo;G>el|80|_kXthita0*0X|+gwP&*Ry57l_>u`7H)LzMoD{$v8&ww+v-}--6|4R?h_x~CG=>a(Y^Zh^Z0KOmgerC@A%l~`-UwQzh|L0)_$m{=k znEUhIKXX5l|FQaCdVf{;AKsr}-_HPft%D9=4S;9GS#`VA93|E&K5_Z$B^&UqI|-W$}v>x4VNaToaQor)Xo=$!1Bc1p5) zM%QHPUGVj8?Yw*KtzBMUeM^@+*WTQD)XE#X9KRU&_AJ!rzr)O`{J|e`Cq923x%*h} zGo13@_-9{+qY~^(U-`q+|9-`lXS7Ez;4J9>nZW&A@c)PFr{X-grY2c`RqtfEdV)oG z0Y%`yY_&jo2QcmdlRh9lz-azQynoC9JO9TXV2uCZ|JmMOp8;_HPiKFk?4NM|=hpw4 z`HA}f>H%i!fAjv7|LdRwfPL^ko}qFEygPbmX~mg!$-AS5P2u;Z`3%_qPiTz&oy7jj z)cmbV?;G}sf5HBbkEwXRPq1(J7w!-Iuem?T{ssJ}8DM&V*!9buzS;br&;RRdBmd9+ zf9ikb|5O7w_qzuW<3EFQcmnu+*b69scW1{EIKM#N-#V>JvS;Qg$&TqKBMa1NC%FGL zJQuIM_2iQ_PwSq!`!;?zSue?K8gMDE_&qaeJR9V_{o?xb4|xvgIf4IQo(uW^HvTOB z-;O_CI;F?AmQ6YR)Fo3+zk1n}Gk&$?($hcOcvVfZd1~Ke)#bg}4=63UxK{z5U|BQ( z?*jCFpyYqo06PEQsQ!=rf5*Pp0P6j5=Pw`207dz~Far$!kLUjL`9IA2Rb=+ZazAk+9An&(I zPzO}DvF4BRea!i2?a%oh&H2ar-}`?t|9k&mdH@;zx7y$Rf5Shue@6dD{y*^#&i6SW z>HUS;Uvq%U|G>L?0eT0pW`l(L%kTsW;QaEo>7A3k_n(q%x*NT~J3202cSq-2f%$G5 z@96lK`FBh3%)3hX;5{?$|E<@S{GN$skaNb)oGNF`vWrgpUrR6TS%c?3cmQkHT;3)fDvoF2Y%G5zc~(dX>{GkmUiH1>hOr-e08uegB{0Uh_Y;|0DSSG5=EogzQhu z|335I*#8&&$N4|@{X_qcwZHj)tofrepd#E4>t_Np<;@{2yt^EW4qxNV2pS8dC0khga zWPh0l*1cbG{qOs}#rx+OfcYQK|B3gfb%56Y*8g+S*N4H)Mv z0JMSlgPIMbJ}B^9*mZyBWH%n@{*BlLa_gGA+8-NZgdaP%9|(BQfA0C;^9*1;!YBSa zX5^M%+Ospb|Ng}n_1?AdivG!(DSbH$SVj#{4EX0`-%Ozz&`4KdH|IbDc-;3Y(oM19X z@85ZUR?DHEzH~J3-m=UmU>|;;Wc!fs741(AVD*0%|FYX7^#6!|*8Z0Lm;IiN@;_et zNBw`tKl$JBAM1aw|M}|me{}zs{F(oqo(m_Hkqa(tn${uN_oL3q#(SXq@9yyG#=B4I zi(3BAVmvVGKrb%-vxDtpuk(1m#b4W!$vyuPy?{DsfVWm%(l^;~S%30Bvp@y(0?M8T z)On!3<$!1qo_5YCfA@L9CyEfd_@v!*k{`Ud%@z)!F>}Nq<7c83Grwuf~ zW59oD<7ESo4VFA`L27{bE+E_i>ivKB|H2F){6FdcNBW=pzdZlL{2#M_)c-R3#~EPV z`xo-R?*9e+NA-U-{||W|VBfrd!#}YP-JkHG1_1vj#6N0)WWnfB$veY_$vx%2Z)bpO z{yk5&JnH>fN0oO!P5h(gf3jtQ`5y866!)6(4Yj}cf9ZTbu`l?C?g!^f2GC~!4EO1N z@BI8v#{Vua^Ju{9lTF#e19$*f_my8T?<^O58szxZeWJf9aY#+y9;a?33g9 zGk-8>d;glg>MP$1YJ&JZnK!xTzv2wI1wFx!HeNOmdI0tR`85Uf0podKI|I`FzfuF_ z{D02>#`t&dzgqs6`Ttb^YyMyPUweP>07d`H84&sZ#6NxiYW(kK0P$~6>AjI7k~t%W zm*xx~eiYxo-xgWKE(fFS|Kh5_=`TlgikKE5%0Jz8F`@O*X zf`9k_^Ywq8|HJ%W#Q(nkQ?ft02Pn+{EA}=2BOK3tK+FYUM!^2Ag1Z61_wADp9_hro ze=F_>I)BH^6aL(>Aza^lpM<|1`+enZE&mzeKUy)V*SCTF>rexHv~fx;&j8K?72FGy zT7bQO-Txi*zk2}U{fiDr`M)auqxnC_zx)5v`Ol)Tlv9R;$mJ2_93D}?2vLM(O{SU97xQE{_ zoFqu7vGOP0Q3GF z|EmA}3>Z%SFD$OB!x=DQq4Ph#ZvUDOrdO%=tbeuZnIoSrz1AAMe^kT!PoeGy_Nn_N z-}@6}eEkgY*Bh;y%{1{^!lFU+x`X|6opCdQW@(1vTG6Ch*Y}llv#D zFC4%*zyk7s<#ZRAo&jLXgW5@Cgc!uu`zutTg_{+UxP4i!S&Hw&WM@~(Cc674qX=48< z_x%+6$o5OWkNtkr|Kxwn`Ah#_&H&N>*z@DHzwG$U>VJ9w*cys;5 zgOVka!1w3%E9f3T%muR+&^rLjrvEefAJzZx0JZ-wGXQb_PrN_$0J8WG^?%_1xnpJK zPv(AreboT&{pIlg?nv@JF%J)L#PEvXfB5jqJ2(e`{lfCG<9HUxE-`3;On>C-eJ6kW z|26mecRqVm-@>cV{7)ZM!c*ZR+>dOp&-MiFXAK~`edqylua{{6$A47++Z`X#{Ey8x-R8apD_jnyqT3k0Kd3WfD zzWmy}9`LX8Kz(&D=lv&I{(n24KC-a;*`uKQk1Uh>iGTL`1NMdgS^Hbw*J}TOeLVws z7Kr~R+TZv;TmLKWo&Ul2nf+g$|MmG_-~SQz|FXX4J}~G5d9*Gl?0TqOvK_pSyMb
<@c@&;aj_;3NEBQQVXNc?OIq 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

44zzzT8|3?0w&Hp(5 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


HaBGX15q+wUjd#xB zIs}K>_AYK4D@daeMaJyk$`BPhcPEs{KwR?x`9u3;vxxCkM29TZ3#D z<-KQp>7*+bs~O{HR#PLxBh?HXRab5x2QUVBU)kneS7O;?*-o>pYNbrw=+(?KD(~$$ z=EX;q>OPX?edc;x8&a&Mw4#4*3VyXu^EevkjhY0rsJO{!kDv^W0s2w}7H^q_ONC{m zXf5x2!J%VQ;Nycan<$JO!Jd?l2)uw+mrHGCuN*c3wHu?-Ls_yF3?O^l0t zK~jk<>tCFa5;Tz#cpD>LUuegNh?>rN06EW!R}8aE6vgC%2g~HQaO`S0ulRYD>uCVCjQr4T`GwoF3 z8!l=F)XfzetF&f4hgk8OgnS=7}wRv0s3 zw3Vqf<`^mQICSH2?QH44YMbNtI_d{mY8j}!YZ*Egqux5@E&}&K_2`H=({?iLIO!%4as}SM^;T4 zVsg=#wDJ*!WMX|hUrBIkqrKul6uXFRur5mIgQh(VG#pf~f=V9gU8;WWNh=b+1Y{lVV6vr;L_|B}#RAh%e z_oBN@sJFR=lSvtA)Bf4bRRaO%giJ&LEx|Y=`(pkAl5lhOpqD+r?#PazklCT6d={!D z9&H8@IYUl0PDB%qWJTzJ#az}Ef�gK8vQUzniueXpVDEHx!3HKq}8Si#v(kd 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 From 3269b84f9cac266b6726c64a2a7ca4714e698fc3 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Jul 2023 17:08:05 +0800 Subject: [PATCH 172/251] dont use bad gas station --- src/core/atomicdex/api/mm2/rpc.enable.cpp | 7 +++++-- src/core/atomicdex/api/mm2/rpc.enable.hpp | 2 +- src/core/atomicdex/config/coins.cfg.hpp | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/core/atomicdex/api/mm2/rpc.enable.cpp b/src/core/atomicdex/api/mm2/rpc.enable.cpp index a553a8c85b..845694e8de 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.cpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.cpp @@ -32,7 +32,10 @@ namespace atomic_dex::mm2 { case CoinType::ERC20: { - j["gas_station_url"] = cfg.gas_station_url; + if (cfg.gas_station_url.has_value()) + { + j["gas_station_url"] = cfg.gas_station_url.value(); + } } case CoinType::Matic: { @@ -40,7 +43,7 @@ namespace atomic_dex::mm2 { if (cfg.testnet_matic_gas_station_url.has_value()) { - j["gas_station_url"] = cfg.testnet_matic_gas_station_url.value(); + j["gas_station_url"] = cfg.testnet_matic_gas_station_url.value(); } } else diff --git a/src/core/atomicdex/api/mm2/rpc.enable.hpp b/src/core/atomicdex/api/mm2/rpc.enable.hpp index 9d5a14486d..69170a0341 100644 --- a/src/core/atomicdex/api/mm2/rpc.enable.hpp +++ b/src/core/atomicdex/api/mm2/rpc.enable.hpp @@ -35,7 +35,7 @@ namespace atomic_dex::mm2 const std::string swap_contract_address; std::optional fallback_swap_contract_address{std::nullopt}; std::optional matic_gas_station_decimals{9}; - std::string gas_station_url{"https://ethgasstation.info/json/ethgasAPI.json"}; + std::optional gas_station_url{std::nullopt}; std::optional matic_gas_station_url{std::nullopt}; std::optional testnet_matic_gas_station_url{std::nullopt}; std::optional type; ///< QRC-20 ? diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index e1e2f7c348..dc00fa5c5f 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -32,7 +32,7 @@ namespace atomic_dex { struct coin_config { - static constexpr const char* erc_gas_stations = "https://ethgasstation.info/json/ethgasAPI.json"; + std::optional erc_gas_stations{std::nullopt}; std::optional matic_gas_stations{std::nullopt}; using electrum_servers = std::vector; using nodes = std::vector; From b88aa63094adb77a92714dfad331964803577f0e Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Jul 2023 17:08:08 +0800 Subject: [PATCH 173/251] dont use bad gas station --- .../assets/languages/atomic_defi_de.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_en.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_es.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_fr.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_ru.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_tr.ts | 64 +++++++++---------- 6 files changed, 192 insertions(+), 192 deletions(-) diff --git a/atomic_defi_design/assets/languages/atomic_defi_de.ts b/atomic_defi_design/assets/languages/atomic_defi_de.ts index a4493b0f88..dbf66353bb 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_de.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_de.ts @@ -1403,7 +1403,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 General - + %n day(s) %n Tag @@ -1411,7 +1411,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nd day @@ -1420,7 +1420,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nh hours @@ -1429,7 +1429,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nm minutes @@ -1438,7 +1438,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %ns seconds @@ -1447,7 +1447,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nms milliseconds @@ -1456,117 +1456,117 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + - - - + <b>Taker tx fee:</b> <b>Taker tx Gebühren:</b> - + <b>Dex tx fee:</b> <b>Dex tx Gebühren:</b> - + <b>Dex fee:</b> <b>Dex Gebühren:</b> - + <b>Maker tx fee:</b> <b>Maker tx Gebühren:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 Minimum: %1 - + Enter an amount Betrag eingeben - + Trading Fee Handelsgebühr - + Minimum Trading Amount Mindesthandelsbetrag - + Wallet %1 already exists WALLETNAME Brieftasche %1 existiert bereits - + %1 balance is lower than the fees amount: %2 %3 Das %1 Guthaben ist niedriger als der Gebührenbetrag: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Handelbares %1 Guthaben (nach Gebühren) ist niedriger als der Mindesthandelsbetrag - + Please fill the price field Bitte füllen Sie das Preisfeld aus - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount %1 Volumen ist niedriger als der minimale Handelsbetrag - - + + %1 needs to be enabled in order to use %2 %1 muss aktiviert werden, um %2 verwenden zu können - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Das %1 Guthaben muss finanziert werden, ein Guthaben größer Null ist erforderlich, um das Benzin von %2 Transaktionen zu bezahlen - + Unknown Error Unbekannter Fehler diff --git a/atomic_defi_design/assets/languages/atomic_defi_en.ts b/atomic_defi_design/assets/languages/atomic_defi_en.ts index 6899dad1c9..07a60d72c5 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_en.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_en.ts @@ -1402,7 +1402,7 @@ General - + %n day(s) @@ -1410,7 +1410,7 @@ - + %nd day @@ -1419,7 +1419,7 @@ - + %nh hours @@ -1428,7 +1428,7 @@ - + %nm minutes @@ -1437,7 +1437,7 @@ - + %ns seconds @@ -1446,7 +1446,7 @@ - + %nms milliseconds @@ -1455,117 +1455,117 @@ - + - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 - + Enter an amount - + Trading Fee - + Minimum Trading Amount - + Wallet %1 already exists WALLETNAME - + %1 balance is lower than the fees amount: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount - + Please fill the price field - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error diff --git a/atomic_defi_design/assets/languages/atomic_defi_es.ts b/atomic_defi_design/assets/languages/atomic_defi_es.ts index 08582df328..f221b0af03 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_es.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_es.ts @@ -1402,7 +1402,7 @@ General - + %n day(s) %n día @@ -1410,7 +1410,7 @@ - + %nd day @@ -1419,7 +1419,7 @@ - + %nh hours @@ -1428,7 +1428,7 @@ - + %nm minutes @@ -1437,7 +1437,7 @@ - + %ns seconds @@ -1446,7 +1446,7 @@ - + %nms milliseconds @@ -1455,117 +1455,117 @@ - + - - - + <b>Taker tx fee:</b> <b>Cuota de tx del taker:</b> - + <b>Dex tx fee:</b> <b>Cuota de tx del Dex:</b> - + <b>Dex fee:</b> <b>Cuota Dex:</b> - + <b>Maker tx fee:</b> <b>Cuota tx del maker:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 Mín.: %1 - + Enter an amount Ingrese una cantidad - + Trading Fee Tarifa de Intercambio - + Minimum Trading Amount Cantidad Mínima de Intercambio - + Wallet %1 already exists WALLETNAME Monedero %1 ya existe - + %1 balance is lower than the fees amount: %2 %3 El saldo de %1 es inferior al monto de las tarifas: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount El saldo de %1 (después de las tarifas) es inferior al monto mínimo de intercambio - + Please fill the price field Por favor complete el campo de precio - + Please fill the volume field Complete el campo de volumen - - + + Please wait for %1 to fully activate Espere a que %1 se active por completo - - + + %1 volume is lower than minimum trade amount El volumen de %1 es inferior al monto mínimo de intercambio - - + + %1 needs to be enabled in order to use %2 %1 debe habilitarse para usar %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions se debe rellenar el saldo de %1, se requiere un saldo distinto de cero para pagar el gas de %2 transacciones - + Unknown Error Error Desconocido diff --git a/atomic_defi_design/assets/languages/atomic_defi_fr.ts b/atomic_defi_design/assets/languages/atomic_defi_fr.ts index 0281cd7df4..764afef0bc 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_fr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_fr.ts @@ -1402,7 +1402,7 @@ General - + %n day(s) %n jour(s) @@ -1410,7 +1410,7 @@ - + %nd day @@ -1419,7 +1419,7 @@ - + %nh hours @@ -1428,7 +1428,7 @@ - + %nm minutes @@ -1437,7 +1437,7 @@ - + %ns seconds @@ -1446,7 +1446,7 @@ - + %nms milliseconds @@ -1455,117 +1455,117 @@ - + - - - + <b>Taker tx fee:</b> Taxes de transaction du preneur: - + <b>Dex tx fee:</b> Taxes de transaction de DEX: - + <b>Dex fee:</b> Taxes de DEX: - + <b>Maker tx fee:</b> Taxes de transaction du créateur - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 - + Enter an amount Entrez un montant - + Trading Fee Frais d'échanges - + Minimum Trading Amount Frais d'échange minimum - + Wallet %1 already exists WALLETNAME Le portefeuille %1 existe déjà - + %1 balance is lower than the fees amount: %2 %3 La %1 balance est inférieur aux frais: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Le solde négociable (après frais) %1 est inférieur au montant minimum de la transaction - + Please fill the price field Veuillez remplir le champ de prix - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount Le volume de %1 est inférieur au montant minimum de la transaction - - + + %1 needs to be enabled in order to use %2 %1 doit être activé pour utiliser %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Le solde %1 doit être financé, un solde différent de zéro est requis pour payer les frais de transactions de %2 - + Unknown Error Erreur inconnue diff --git a/atomic_defi_design/assets/languages/atomic_defi_ru.ts b/atomic_defi_design/assets/languages/atomic_defi_ru.ts index b76edaa350..0f6bd5fc2f 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_ru.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_ru.ts @@ -1402,7 +1402,7 @@ General - + %n day(s) %n день @@ -1411,7 +1411,7 @@ - + %nd day @@ -1421,7 +1421,7 @@ - + %nh hours @@ -1431,7 +1431,7 @@ - + %nm minutes @@ -1441,7 +1441,7 @@ - + %ns seconds @@ -1451,7 +1451,7 @@ - + %nms milliseconds @@ -1461,117 +1461,117 @@ - + - - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 Мин: %1 - + Enter an amount Введите количество - + Trading Fee Торговая комиссия - + Minimum Trading Amount Минимальный объем сделки - + Wallet %1 already exists WALLETNAME Кошелек %1 уже существует - + %1 balance is lower than the fees amount: %2 %3 %1 баланс менее чем размер комиссий: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Торгуемый (после комиссий) баланс %1 - меньше минимальной суммы сделки - + Please fill the price field Пожалуйста, укажите цену - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount Сумма %1 меньше минимальной суммы сделки - - + + %1 needs to be enabled in order to use %2 %1 должен быть активным для использования %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions нужно пополнить баланс %1 для оплаты газа %2 транзакций - + Unknown Error Неизвестная ошибка diff --git a/atomic_defi_design/assets/languages/atomic_defi_tr.ts b/atomic_defi_design/assets/languages/atomic_defi_tr.ts index cd9be8da99..388a76a257 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_tr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_tr.ts @@ -1402,14 +1402,14 @@ General - + %n day(s) %n gün - + %nd day @@ -1417,7 +1417,7 @@ - + %nh hours @@ -1425,7 +1425,7 @@ - + %nm minutes @@ -1433,7 +1433,7 @@ - + %ns seconds @@ -1441,7 +1441,7 @@ - + %nms milliseconds @@ -1449,117 +1449,117 @@ - + - - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 - + Enter an amount Bir miktar gir - + Trading Fee Takas Ücreti - + Minimum Trading Amount Minimum Takas Hacmi - + Wallet %1 already exists WALLETNAME %1 cüzdanı zaten mevcut - + %1 balance is lower than the fees amount: %2 %3 %1 bakiye ücret tutarının altında: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Takas edilebilir (ücretlerden sonra)%1 bakiyesi minimum işlem ücretinden düşük - + Please fill the price field Lütfen fiyat alanını doldurun - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount %1 hacmi, minimum işlem ücretinden düşük - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error Bilinmeyen Hata From 4b952abd94cd1b07d2159b0ec2d0b6169844bace Mon Sep 17 00:00:00 2001 From: Anton TonyL Lysakov Date: Mon, 10 Jul 2023 11:09:58 +0200 Subject: [PATCH 174/251] updated readme --- README.md | 58 +++++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 8c2015d765..529035c822 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,41 @@

- - + + - - downloads + + downloads - - last commit + + last commit - - + +
- - issues + + issues - - issues closed + + issues closed - - pulls + + pulls - - pulls closed + + pulls closed
- - build status + + build status - - release version + + release version chat on Discord @@ -61,10 +61,10 @@ Komodo Wallet has been tested on the following platforms: ## Get Started -You can [download](https://github.com/KomodoPlatform/atomicDEX-Desktop/releases) the pre-built beta binaries on -our [GitHub release page](https://github.com/KomodoPlatform/atomicDEX-Desktop/releases). +You can [download](https://github.com/KomodoPlatform/komodo-wallet-desktop/releases) the pre-built beta binaries on +our [GitHub release page](https://github.com/KomodoPlatform/komodo-wallet-desktop/releases). -Build instructions can be found [here](https://github.com/KomodoPlatform/atomicDEX-Desktop/wiki/Build-Instructions) +Build instructions can be found [here](https://github.com/KomodoPlatform/komodo-wallet-desktop/wiki/Build-Instructions) Please join our [Discord Server](https://komodoplatform.com/discord) for support, discussions and general UI/UX feedback. @@ -75,13 +75,13 @@ feedback. - :book: [Komodo Wallet Documentation](https://developers.komodoplatform.com/basic-docs/atomicdex/atomicdex-tutorials/introduction-to-atomicdex.html) - :link: [Komodo Wallet Website](https://atomicdex.io/) - :speech_balloon: [Komodo Wallet Discord](https://discord.gg/tvp96Gf) -- :hammer_and_wrench: [Komodo Wallet Development Boards](https://github.com/KomodoPlatform/atomicDEX-Desktop/projects) -- :notebook_with_decorative_cover: [Komodo Wallet Wiki](https://github.com/KomodoPlatform/atomicDEX-Desktop/wiki/) +- :hammer_and_wrench: [Komodo Wallet Development Boards](https://github.com/KomodoPlatform/komodo-wallet-desktop/projects) +- :notebook_with_decorative_cover: [Komodo Wallet Wiki](https://github.com/KomodoPlatform/komodo-wallet-desktop/wiki/) ## Komodo Wallet mobile -Check out Komodo Wallet mobile, available for [Android and iOS](https://atomicdex.io) +Check out Komodo Wallet mobile, available for [Android and iOS](https://atomicdex.io) ## Self-Hosted Dependencies @@ -103,7 +103,7 @@ Check out Komodo Wallet mobile, available for [Android and iOS](https://atomicde ## Contributors / Thanks - +

- + ## License For details please refer to our [license](https://github.com/KomodoPlatform/atomicDEX-Desktop/blob/master/LICENSE). From 24af2bac7ae4f22212b56a0953f0f258799a628e Mon Sep 17 00:00:00 2001 From: Anton TonyL Lysakov Date: Mon, 10 Jul 2023 11:11:32 +0200 Subject: [PATCH 175/251] updated twitter --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 529035c822..e924fe67f5 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ chat on Discord - - + follow on Twitter

From 867f47a28e1e73bd0d91e1ad6d021704d8ce61ca Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 10 Jul 2023 19:42:55 +0800 Subject: [PATCH 176/251] update test coins --- .../api/mm2/mm2.rpc.trade.preimage.tests.cpp | 50 +++++++++---------- src/tests/atomic.dex.tests.hpp | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/tests/api/mm2/mm2.rpc.trade.preimage.tests.cpp b/src/tests/api/mm2/mm2.rpc.trade.preimage.tests.cpp index 1dce6caf12..5b088505ae 100644 --- a/src/tests/api/mm2/mm2.rpc.trade.preimage.tests.cpp +++ b/src/tests/api/mm2/mm2.rpc.trade.preimage.tests.cpp @@ -58,7 +58,7 @@ namespace "numer":"1" }, "amount_rat":[[1,[1]],[1,[10000]]], - "coin":"RICK" + "coin":"DOC" }, "taker_fee": { "coin": "MYCOIN1", @@ -72,7 +72,7 @@ namespace "numer":"1" }, "amount_rat":[[1,[1]],[1,[10000]]], - "coin":"RICK" + "coin":"DOC" } } )"_json; @@ -95,7 +95,7 @@ namespace "numer":"0" }, "amount_rat":[[0,[]],[1,[1]]], - "coin":"RICK" + "coin":"DOC" } } } @@ -119,7 +119,7 @@ namespace "numer":"1" }, "amount_rat":[[1,[1]],[1,[10000]]], - "coin":"RICK" + "coin":"DOC" }, "taker_fee": { "amount":"0.0001", @@ -128,7 +128,7 @@ namespace "numer":"1" }, "amount_rat":[[1,[1]],[1,[10000]]], - "coin":"RICK" + "coin":"DOC" }, "fee_to_send_taker_fee":{ @@ -138,7 +138,7 @@ namespace "numer":"1" }, "amount_rat":[[1,[1]],[1,[10000]]], - "coin":"RICK" + "coin":"DOC" } } } @@ -162,7 +162,7 @@ namespace "numer":"0" }, "amount_rat":[[0,[]],[1,[1]]], - "coin":"RICK" + "coin":"DOC" }, "volume":"2.21363478", "volume_fraction":{ @@ -176,7 +176,7 @@ namespace "numer":"0" }, "amount_rat":[[0,[]],[1,[1]]], - "coin":"RICK" + "coin":"DOC" }, "fee_to_send_taker_fee":{ "amount":"0.00033219", @@ -209,23 +209,23 @@ namespace "numer":"0" }, "amount_rat":[[0,[]],[1,[1]]], - "coin":"RICK" + "coin":"DOC" } } })"_json; - const nlohmann::json g_preimage_request_buy_rick_morty_real = R"( + const nlohmann::json g_preimage_request_buy_DOC_MARTY_real = R"( { - "base": "RICK", + "base": "DOC", "method": "trade_preimage", - "rel": "MORTY", + "rel": "MARTY", "swap_method": "buy", "userpass": "", "volume": "1", "price": "1" })"_json; - const nlohmann::json g_preimage_request_buy_rick_nonexistent_real = R"( + const nlohmann::json g_preimage_request_buy_DOC_nonexistent_real = R"( { - "base": "RICK", + "base": "DOC", "method": "trade_preimage", "rel": "NONEXISTENT", "swap_method": "buy", @@ -261,7 +261,7 @@ TEST_CASE("atomic_dex::mm2::preimage_answer_success deserialization from buy") TEST_SUITE("atomic_dex::mm2::preimage_answer deserialization test suites") { - TEST_CASE("setprice BTC/RICK") + TEST_CASE("setprice BTC/DOC") { atomic_dex::t_trade_preimage_answer answer; atomic_dex::mm2::from_json(g_preimage_answer_setprice, answer); @@ -270,7 +270,7 @@ TEST_SUITE("atomic_dex::mm2::preimage_answer deserialization test suites") CHECK_FALSE(answer.result.value().fee_to_send_taker_fee.has_value()); } - TEST_CASE("buy BTC/RICK") + TEST_CASE("buy BTC/DOC") { atomic_dex::t_trade_preimage_answer answer; atomic_dex::mm2::from_json(g_preimage_answer_buy, answer); @@ -279,7 +279,7 @@ TEST_SUITE("atomic_dex::mm2::preimage_answer deserialization test suites") CHECK(answer.result.value().fee_to_send_taker_fee.has_value()); } - TEST_CASE("sell max BTC/RICK") + TEST_CASE("sell max BTC/DOC") { atomic_dex::t_trade_preimage_answer answer; atomic_dex::mm2::from_json(g_preimage_answer_sell_max, answer); @@ -288,7 +288,7 @@ TEST_SUITE("atomic_dex::mm2::preimage_answer deserialization test suites") CHECK(answer.result.value().fee_to_send_taker_fee.has_value()); } - TEST_CASE("setprice ERC20 BAT/RICK") + TEST_CASE("setprice ERC20 BAT/DOC") { atomic_dex::t_trade_preimage_answer answer; atomic_dex::mm2::from_json(g_preimage_answer_setprice_erc, answer); @@ -371,11 +371,11 @@ SCENARIO("atomic_dex::mm2::preimage scenario") return atomic_dex::mm2::rpc_process_answer_batch(answers[0], "trade_preimage"); }; - //! A test with RICK/MORTY - GIVEN("Preparing a simple buy request RICK/MORTY") + //! A test with DOC/MARTY + GIVEN("Preparing a simple buy request DOC/MARTY") { //! Request values - atomic_dex::t_trade_preimage_request request{.base_coin = "RICK", .rel_coin = "MORTY", .swap_method = "buy", .volume = "1", .price = "1"}; + atomic_dex::t_trade_preimage_request request{.base_coin = "DOC", .rel_coin = "MARTY", .swap_method = "buy", .volume = "1", .price = "1"}; //! Transform request into json atomic_dex::mm2::to_json(request_json, request); @@ -386,7 +386,7 @@ SCENARIO("atomic_dex::mm2::preimage scenario") //! Check request without userpass against a constants at the top of the file auto copy_request = request_json; copy_request["userpass"] = ""; - CHECK_EQ(copy_request, g_preimage_request_buy_rick_morty_real); + CHECK_EQ(copy_request, g_preimage_request_buy_DOC_MARTY_real); //! A Test Case WHEN("I execute the request") @@ -403,14 +403,14 @@ SCENARIO("atomic_dex::mm2::preimage scenario") } //! See above - GIVEN("Preparing a wrong request RICK/NONEXISTENT coin") + GIVEN("Preparing a wrong request DOC/NONEXISTENT coin") { - atomic_dex::t_trade_preimage_request request{.base_coin = "RICK", .rel_coin = "NONEXISTENT", .swap_method = "buy", .volume = "1"}; + atomic_dex::t_trade_preimage_request request{.base_coin = "DOC", .rel_coin = "NONEXISTENT", .swap_method = "buy", .volume = "1"}; atomic_dex::mm2::to_json(request_json, request); batch.push_back(request_json); auto copy_request = request_json; copy_request["userpass"] = ""; - CHECK_EQ(copy_request, g_preimage_request_buy_rick_nonexistent_real); + CHECK_EQ(copy_request, g_preimage_request_buy_DOC_nonexistent_real); WHEN("I execute the request") { const atomic_dex::t_trade_preimage_answer answer = generic_resp_process(); diff --git a/src/tests/atomic.dex.tests.hpp b/src/tests/atomic.dex.tests.hpp index 205dcbf8cd..55f4ea8cd7 100644 --- a/src/tests/atomic.dex.tests.hpp +++ b/src/tests/atomic.dex.tests.hpp @@ -30,7 +30,7 @@ struct tests_context : public antara::gaming::world::app private: std::atomic_bool m_test_context_ready{false}; std::atomic_bool m_extra_coins_ready{false}; - std::vector m_extra_coins{"RICK", "MORTY"}; + std::vector m_extra_coins{"DOC", "MARTY"}; public: void From febbd4d45889287870a2442d2ab8302dc403ad3f Mon Sep 17 00:00:00 2001 From: "Anton \"TonyL\" Lysakov" Date: Mon, 10 Jul 2023 18:50:25 +0200 Subject: [PATCH 177/251] update logo to visible in light theme (#2327) * update logo to visible in light theme * fix syntax --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e924fe67f5..bbdcfd0837 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- + komodo-wallet-logo_dark-theme

From d223f5f74098e3cd7d758f71a16c2863d974f01a Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 14 Jul 2023 17:38:41 +0800 Subject: [PATCH 178/251] fix zhtlc download modal display on error --- src/core/atomicdex/services/mm2/mm2.service.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 1fb12cd84b..63ab6cca1c 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1483,7 +1483,7 @@ namespace atomic_dex std::string status = z_answers[0].at("result").at("status").get(); SPDLOG_DEBUG("{} status : {}", tickers[idx], status); - SPDLOG_DEBUG("{} activation status response [{}]", tickers[idx], z_answers[0].dump()); + SPDLOG_DEBUG(" Activation Status: {}", z_answers[0].dump()); if (status == "Ok") { @@ -1510,6 +1510,11 @@ namespace atomic_dex this->m_nb_update_required += 1; break; } + else if (status == "Error") + { + event = z_answers[0].at("result").at("details").at("error_data").at("error").get(); + break; + } else { // todo(syl): many unused variables. @@ -1553,8 +1558,7 @@ namespace atomic_dex try { if (z_error[0].at("result").at("details").contains("error")) { - std::string zhtlc_error = z_error[0].at("result").at("details").at("error").get(); - SPDLOG_DEBUG("Error enabling {}: {} ", tickers[idx], zhtlc_error); + SPDLOG_DEBUG("Error enabling {}: {} ", tickers[idx], event); SPDLOG_DEBUG( "Removing zhtlc from enabling, idx: {}, tickers size: {}, answers size: {}", tickers[idx], idx, tickers.size(), answers.size() From e92312ba5c77aab19112d79213979d99a78f9675 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 14 Jul 2023 17:44:36 +0800 Subject: [PATCH 179/251] show ticker in activation status log --- .../assets/languages/atomic_defi_de.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_en.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_es.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_fr.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_ru.ts | 64 +++++++++---------- .../assets/languages/atomic_defi_tr.ts | 64 +++++++++---------- .../atomicdex/services/mm2/mm2.service.cpp | 2 +- 7 files changed, 193 insertions(+), 193 deletions(-) diff --git a/atomic_defi_design/assets/languages/atomic_defi_de.ts b/atomic_defi_design/assets/languages/atomic_defi_de.ts index a4493b0f88..dbf66353bb 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_de.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_de.ts @@ -1403,7 +1403,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 General - + %n day(s) %n Tag @@ -1411,7 +1411,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nd day @@ -1420,7 +1420,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nh hours @@ -1429,7 +1429,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nm minutes @@ -1438,7 +1438,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %ns seconds @@ -1447,7 +1447,7 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + %nms milliseconds @@ -1456,117 +1456,117 @@ Beispiel: Kennwort = 1234 Suffix=56 Eingabe beim Login=123456 - + - - - + <b>Taker tx fee:</b> <b>Taker tx Gebühren:</b> - + <b>Dex tx fee:</b> <b>Dex tx Gebühren:</b> - + <b>Dex fee:</b> <b>Dex Gebühren:</b> - + <b>Maker tx fee:</b> <b>Maker tx Gebühren:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 Minimum: %1 - + Enter an amount Betrag eingeben - + Trading Fee Handelsgebühr - + Minimum Trading Amount Mindesthandelsbetrag - + Wallet %1 already exists WALLETNAME Brieftasche %1 existiert bereits - + %1 balance is lower than the fees amount: %2 %3 Das %1 Guthaben ist niedriger als der Gebührenbetrag: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Handelbares %1 Guthaben (nach Gebühren) ist niedriger als der Mindesthandelsbetrag - + Please fill the price field Bitte füllen Sie das Preisfeld aus - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount %1 Volumen ist niedriger als der minimale Handelsbetrag - - + + %1 needs to be enabled in order to use %2 %1 muss aktiviert werden, um %2 verwenden zu können - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Das %1 Guthaben muss finanziert werden, ein Guthaben größer Null ist erforderlich, um das Benzin von %2 Transaktionen zu bezahlen - + Unknown Error Unbekannter Fehler diff --git a/atomic_defi_design/assets/languages/atomic_defi_en.ts b/atomic_defi_design/assets/languages/atomic_defi_en.ts index 6899dad1c9..07a60d72c5 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_en.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_en.ts @@ -1402,7 +1402,7 @@ General - + %n day(s) @@ -1410,7 +1410,7 @@ - + %nd day @@ -1419,7 +1419,7 @@ - + %nh hours @@ -1428,7 +1428,7 @@ - + %nm minutes @@ -1437,7 +1437,7 @@ - + %ns seconds @@ -1446,7 +1446,7 @@ - + %nms milliseconds @@ -1455,117 +1455,117 @@ - + - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 - + Enter an amount - + Trading Fee - + Minimum Trading Amount - + Wallet %1 already exists WALLETNAME - + %1 balance is lower than the fees amount: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount - + Please fill the price field - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error diff --git a/atomic_defi_design/assets/languages/atomic_defi_es.ts b/atomic_defi_design/assets/languages/atomic_defi_es.ts index 08582df328..f221b0af03 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_es.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_es.ts @@ -1402,7 +1402,7 @@ General - + %n day(s) %n día @@ -1410,7 +1410,7 @@ - + %nd day @@ -1419,7 +1419,7 @@ - + %nh hours @@ -1428,7 +1428,7 @@ - + %nm minutes @@ -1437,7 +1437,7 @@ - + %ns seconds @@ -1446,7 +1446,7 @@ - + %nms milliseconds @@ -1455,117 +1455,117 @@ - + - - - + <b>Taker tx fee:</b> <b>Cuota de tx del taker:</b> - + <b>Dex tx fee:</b> <b>Cuota de tx del Dex:</b> - + <b>Dex fee:</b> <b>Cuota Dex:</b> - + <b>Maker tx fee:</b> <b>Cuota tx del maker:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 Mín.: %1 - + Enter an amount Ingrese una cantidad - + Trading Fee Tarifa de Intercambio - + Minimum Trading Amount Cantidad Mínima de Intercambio - + Wallet %1 already exists WALLETNAME Monedero %1 ya existe - + %1 balance is lower than the fees amount: %2 %3 El saldo de %1 es inferior al monto de las tarifas: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount El saldo de %1 (después de las tarifas) es inferior al monto mínimo de intercambio - + Please fill the price field Por favor complete el campo de precio - + Please fill the volume field Complete el campo de volumen - - + + Please wait for %1 to fully activate Espere a que %1 se active por completo - - + + %1 volume is lower than minimum trade amount El volumen de %1 es inferior al monto mínimo de intercambio - - + + %1 needs to be enabled in order to use %2 %1 debe habilitarse para usar %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions se debe rellenar el saldo de %1, se requiere un saldo distinto de cero para pagar el gas de %2 transacciones - + Unknown Error Error Desconocido diff --git a/atomic_defi_design/assets/languages/atomic_defi_fr.ts b/atomic_defi_design/assets/languages/atomic_defi_fr.ts index 0281cd7df4..764afef0bc 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_fr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_fr.ts @@ -1402,7 +1402,7 @@ General - + %n day(s) %n jour(s) @@ -1410,7 +1410,7 @@ - + %nd day @@ -1419,7 +1419,7 @@ - + %nh hours @@ -1428,7 +1428,7 @@ - + %nm minutes @@ -1437,7 +1437,7 @@ - + %ns seconds @@ -1446,7 +1446,7 @@ - + %nms milliseconds @@ -1455,117 +1455,117 @@ - + - - - + <b>Taker tx fee:</b> Taxes de transaction du preneur: - + <b>Dex tx fee:</b> Taxes de transaction de DEX: - + <b>Dex fee:</b> Taxes de DEX: - + <b>Maker tx fee:</b> Taxes de transaction du créateur - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 - + Enter an amount Entrez un montant - + Trading Fee Frais d'échanges - + Minimum Trading Amount Frais d'échange minimum - + Wallet %1 already exists WALLETNAME Le portefeuille %1 existe déjà - + %1 balance is lower than the fees amount: %2 %3 La %1 balance est inférieur aux frais: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Le solde négociable (après frais) %1 est inférieur au montant minimum de la transaction - + Please fill the price field Veuillez remplir le champ de prix - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount Le volume de %1 est inférieur au montant minimum de la transaction - - + + %1 needs to be enabled in order to use %2 %1 doit être activé pour utiliser %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Le solde %1 doit être financé, un solde différent de zéro est requis pour payer les frais de transactions de %2 - + Unknown Error Erreur inconnue diff --git a/atomic_defi_design/assets/languages/atomic_defi_ru.ts b/atomic_defi_design/assets/languages/atomic_defi_ru.ts index b76edaa350..0f6bd5fc2f 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_ru.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_ru.ts @@ -1402,7 +1402,7 @@ General - + %n day(s) %n день @@ -1411,7 +1411,7 @@ - + %nd day @@ -1421,7 +1421,7 @@ - + %nh hours @@ -1431,7 +1431,7 @@ - + %nm minutes @@ -1441,7 +1441,7 @@ - + %ns seconds @@ -1451,7 +1451,7 @@ - + %nms milliseconds @@ -1461,117 +1461,117 @@ - + - - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 Мин: %1 - + Enter an amount Введите количество - + Trading Fee Торговая комиссия - + Minimum Trading Amount Минимальный объем сделки - + Wallet %1 already exists WALLETNAME Кошелек %1 уже существует - + %1 balance is lower than the fees amount: %2 %3 %1 баланс менее чем размер комиссий: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Торгуемый (после комиссий) баланс %1 - меньше минимальной суммы сделки - + Please fill the price field Пожалуйста, укажите цену - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount Сумма %1 меньше минимальной суммы сделки - - + + %1 needs to be enabled in order to use %2 %1 должен быть активным для использования %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions нужно пополнить баланс %1 для оплаты газа %2 транзакций - + Unknown Error Неизвестная ошибка diff --git a/atomic_defi_design/assets/languages/atomic_defi_tr.ts b/atomic_defi_design/assets/languages/atomic_defi_tr.ts index cd9be8da99..388a76a257 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_tr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_tr.ts @@ -1402,14 +1402,14 @@ General - + %n day(s) %n gün - + %nd day @@ -1417,7 +1417,7 @@ - + %nh hours @@ -1425,7 +1425,7 @@ - + %nm minutes @@ -1433,7 +1433,7 @@ - + %ns seconds @@ -1441,7 +1441,7 @@ - + %nms milliseconds @@ -1449,117 +1449,117 @@ - + - - - + <b>Taker tx fee:</b> - + <b>Dex tx fee:</b> - + <b>Dex fee:</b> - + <b>Maker tx fee:</b> - + %1 balance is zero - + Activating %1 (%2%) - + Loading wallet... - + Min: %1 - + Enter an amount Bir miktar gir - + Trading Fee Takas Ücreti - + Minimum Trading Amount Minimum Takas Hacmi - + Wallet %1 already exists WALLETNAME %1 cüzdanı zaten mevcut - + %1 balance is lower than the fees amount: %2 %3 %1 bakiye ücret tutarının altında: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Takas edilebilir (ücretlerden sonra)%1 bakiyesi minimum işlem ücretinden düşük - + Please fill the price field Lütfen fiyat alanını doldurun - + Please fill the volume field - - + + Please wait for %1 to fully activate - - + + %1 volume is lower than minimum trade amount %1 hacmi, minimum işlem ücretinden düşük - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error Bilinmeyen Hata diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 63ab6cca1c..08167dc525 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1483,7 +1483,7 @@ namespace atomic_dex std::string status = z_answers[0].at("result").at("status").get(); SPDLOG_DEBUG("{} status : {}", tickers[idx], status); - SPDLOG_DEBUG(" Activation Status: {}", z_answers[0].dump()); + SPDLOG_DEBUG("{} Activation Status: {}", tickers[idx], z_answers[0].dump()); if (status == "Ok") { From 06553952d197c818981bdde5fa8a508bd66cd039 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 26 Jul 2023 02:56:15 +0200 Subject: [PATCH 180/251] add missed optional header --- src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp index 1f8845ed1f..a41920ad3d 100644 --- a/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.enable_tendermint_token.hpp @@ -16,6 +16,7 @@ #pragma once +#include #include #include //> nlohmann::json From 50874ca19d00bae159d4916a246219f82eab31f4 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 26 Jul 2023 04:48:06 +0200 Subject: [PATCH 181/251] sidebar is always expanded, regardless of mouse position --- atomic_defi_design/Dex/Sidebar/Main.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index 212e949395..0f1a8b8091 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -17,7 +17,7 @@ Item Support } - property bool isExpanded: containsMouse + property bool isExpanded: true property real lineHeight: 44 property var currentLineType: Main.LineType.Portfolio property alias _selectionCursor: _selectionCursor From a7a741c5ba200de9901cee93395c71da2e31423b Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 2 Aug 2023 20:22:59 +0800 Subject: [PATCH 182/251] update prices url --- src/core/atomicdex/api/komodo_prices/komodo.prices.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp index 02bd2b109a..f0616ad4d6 100644 --- a/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp +++ b/src/core/atomicdex/api/komodo_prices/komodo.prices.cpp @@ -10,7 +10,7 @@ namespace { - constexpr const char* g_komodo_prices_endpoint = "https://prices.komodo.earth:1313"; + constexpr const char* g_komodo_prices_endpoint = "https://prices.komodo.earth"; constexpr const char* g_komodo_prices_endpoint_fallback = "https://prices.cipig.net:1717"; web::http::client::http_client_config g_komodo_prices_cfg{[]() From 498310075d5f210b65f11a6485dbcdbe161a9e54 Mon Sep 17 00:00:00 2001 From: cipig Date: Wed, 2 Aug 2023 16:32:38 +0000 Subject: [PATCH 183/251] fix GLIBC error --- ci_tools_atomic_dex/ci_scripts/linux_script.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci_tools_atomic_dex/ci_scripts/linux_script.sh b/ci_tools_atomic_dex/ci_scripts/linux_script.sh index c6d84279ab..6d67c27393 100755 --- a/ci_tools_atomic_dex/ci_scripts/linux_script.sh +++ b/ci_tools_atomic_dex/ci_scripts/linux_script.sh @@ -2,8 +2,8 @@ sudo apt-get update # prevents repo404 errors on apt-remove below sudo apt-get remove php* msodbcsql17 mysql* -sudo apt-get update -sudo ACCEPT_EULA=Y apt-get upgrade -y +#sudo apt-get update +#sudo ACCEPT_EULA=Y apt-get upgrade -y # base deps sudo apt-get install build-essential \ libgl1-mesa-dev \ From 537ec9865bbe963b13ae3651e23506b08b6b96b5 Mon Sep 17 00:00:00 2001 From: cipig Date: Thu, 10 Aug 2023 18:03:10 +0000 Subject: [PATCH 184/251] fix wally compile --- ci_tools_atomic_dex/ci_scripts/linux_script.sh | 2 +- ci_tools_atomic_dex/ci_scripts/osx_script.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci_tools_atomic_dex/ci_scripts/linux_script.sh b/ci_tools_atomic_dex/ci_scripts/linux_script.sh index 6d67c27393..95d20d4f4a 100755 --- a/ci_tools_atomic_dex/ci_scripts/linux_script.sh +++ b/ci_tools_atomic_dex/ci_scripts/linux_script.sh @@ -54,7 +54,7 @@ sudo cp -r * /usr/local/ cmake --version # get libwally -git clone https://github.com/KomodoPlatform/libwally-core.git +git clone https://github.com/KomodoPlatform/libwally-core.git --recurse-submodules cd libwally-core ./tools/autogen.sh ./configure --disable-shared diff --git a/ci_tools_atomic_dex/ci_scripts/osx_script.sh b/ci_tools_atomic_dex/ci_scripts/osx_script.sh index 949442963e..f47910cab6 100755 --- a/ci_tools_atomic_dex/ci_scripts/osx_script.sh +++ b/ci_tools_atomic_dex/ci_scripts/osx_script.sh @@ -31,7 +31,7 @@ export MACOSX_DEPLOYMENT_TARGET=10.15 #make -j3 install #cd ../ -git clone https://github.com/KomodoPlatform/libwally-core.git +git clone https://github.com/KomodoPlatform/libwally-core.git --recurse-submodules cd libwally-core ./tools/autogen.sh ./configure --disable-shared From 8024213242bc760759499c3ef3dc6b7f8b90b4e9 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 16 Aug 2023 16:57:22 +0800 Subject: [PATCH 185/251] update install qt action --- .github/workflows/atomicdex-desktop-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 57a1ad1125..a2f4da7a13 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -115,7 +115,7 @@ jobs: - name: Install QT (macOS) if: runner.os == 'macOS' - uses: jurplel/install-qt-action@v3.0.0 + uses: jurplel/install-qt-action@v3.3.0 with: version: ${{ matrix.qt }} host: ${{ matrix.host }} @@ -128,7 +128,7 @@ jobs: - name: Install QT (Linux) if: runner.os == 'Linux' - uses: jurplel/install-qt-action@v3.0.0 + uses: jurplel/install-qt-action@v3.3.0 with: version: ${{ matrix.qt }} host: ${{ matrix.host }} @@ -140,7 +140,7 @@ jobs: - name: Install QT (Windows) if: runner.os == 'Windows' - uses: jurplel/install-qt-action@v3.0.0 + uses: jurplel/install-qt-action@v3.3.0 with: version: ${{ matrix.qt }} host: ${{ matrix.host }} From 8959a7246f4d1e595e5fc1c0e3064feb54874caa Mon Sep 17 00:00:00 2001 From: Weblet <20154559+Weblet-dex@users.noreply.github.com> Date: Sun, 20 Aug 2023 00:33:25 +0800 Subject: [PATCH 186/251] Added nim install Nim is required for the runner to build MacOS version --- .github/workflows/atomicdex-desktop-ci.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 57a1ad1125..3de479ac24 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -164,6 +164,17 @@ jobs: export PATH=/home/runner/.nimble/bin:$PATH chmod +x /home/runner/.choosenim/toolchains/nim-1.6.10/bin/* + - name: Install nim (MacOS) + if: runner.os == 'macOS' + run: | + echo "CHOOSENIM_CHOOSE_VERSION=1.6.10" >> $GITHUB_ENV + export CHOOSENIM_CHOOSE_VERSION=1.6.10 + curl https://nim-lang.org/choosenim/init.sh > choosenim.sh + chmod +x choosenim.sh + ./choosenim.sh -y + export PATH=/Users/runner/.nimble/bin:$PATH + chmod +x /Users/runner/.choosenim/toolchains/nim-1.6.10/bin/* + - name: Install deps (Linux) if: runner.os == 'Linux' run: | @@ -230,6 +241,7 @@ jobs: export ASC_PUBLIC_ID="${{ secrets.ASC_PUBLIC_ID }}" export QT_INSTALL_CMAKE_PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/clang_64/lib/cmake export QT_ROOT=${{ github.workspace }}/Qt/${{ matrix.qt }} + export PATH=/Users/runner/.nimble/bin:$PATH export MACOSX_DEPLOYMENT_TARGET=10.15 export CC=clang export CXX=clang++ @@ -383,6 +395,7 @@ jobs: export ATOMICDEX_PASSWORD=${{ secrets.ATOMICDEX_PASSWORD }} export QT_INSTALL_CMAKE_PATH=${{ github.workspace }}/Qt/${{ matrix.qt }}/clang_64/lib/cmake export QT_ROOT=${{ github.workspace }}/Qt/${{ matrix.qt }} + export PATH=/Users/runner/.nimble/bin:$PATH export CC=clang export CXX=clang++ #echo "Running tests" From 89ddb96159a2847dccb49dfc4996eaef32117214 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 27 Aug 2023 00:52:03 +0800 Subject: [PATCH 187/251] update rebrand paths --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/support.md | 2 +- .github/workflows/atomicdex-desktop-cd.yml | 2 +- .github/workflows/atomicdex-desktop-ci.yml | 16 +++++----- .../atomicdex-desktop-release-vt.yml | 2 +- CMakeLists.txt | 8 ++--- CMakeLists.txt.user | 6 ++-- README.md | 30 +++++++++---------- .../Dex/Support/SupportModal.qml | 2 +- .../ci_scripts/GLEECDEXinstaller_script.iss | 2 +- ci_tools_atomic_dex/util/compare_themes.py | 2 +- cmake/cfg_hash.cmake | 2 +- cmake/project.metadata.cmake | 2 +- src/core/atomicdex/pages/qt.wallet.page.hpp | 4 +-- 14 files changed, 41 insertions(+), 41 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 4622a86c29..20351d9ac3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -32,4 +32,4 @@ Please describe what you expected to happen. **Additional context** - Add any related context about the problem here (e.g. screen resolution, mining activity on address) - - Attach [log files](https://forum.komodoplatform.com/t/accessing-atomicdex-desktop-log-files/540) + - Attach [log files](https://forum.komodoplatform.com/t/accessing-komodo-wallet-desktop-log-files/540) diff --git a/.github/ISSUE_TEMPLATE/support.md b/.github/ISSUE_TEMPLATE/support.md index c3b49f6c2a..edf217c51b 100644 --- a/.github/ISSUE_TEMPLATE/support.md +++ b/.github/ISSUE_TEMPLATE/support.md @@ -8,5 +8,5 @@ assignees: '' --- [Komodo Platform Discord Support Channel](https://discord.gg/RRZ8hzc) -[Komodo Platform Forum](https://forum.komodoplatform.com/t/atomicdex-desktop-collection/541) +[Komodo Platform Forum](https://forum.komodoplatform.com/t/komodo-wallet-desktop-collection/541) [Develper Documentation](https://developers.komodoplatform.com/) \ No newline at end of file diff --git a/.github/workflows/atomicdex-desktop-cd.yml b/.github/workflows/atomicdex-desktop-cd.yml index f955fa601f..cb8be38de8 100644 --- a/.github/workflows/atomicdex-desktop-cd.yml +++ b/.github/workflows/atomicdex-desktop-cd.yml @@ -1,4 +1,4 @@ -name: AtomicDex-Desktop CD releases +name: komodo-wallet-desktop CD releases on: push: diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 57a1ad1125..e2973a5037 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -1,4 +1,4 @@ -name: AtomicDex-Desktop CI +name: komodo-wallet-desktop CI on: pull_request: @@ -20,8 +20,8 @@ env: DEX_WEBSITE: "https://atomicdex.io/" VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/b/vcpkg_cache VCPKG_BINARY_SOURCES: clear;x-gha,readwrite - RUNVCPKG_VCPKG_ROOT: ${{ github.workspace }}\atomicDEX-Desktop\ci_tools_atomic_dex\vcpkg-repo - VCPKG_ROOT: ${{ github.workspace }}\atomicDEX-Desktop\ci_tools_atomic_dex\vcpkg-repo + RUNVCPKG_VCPKG_ROOT: ${{ github.workspace }}\komodo-wallet-desktop\ci_tools_atomic_dex\vcpkg-repo + VCPKG_ROOT: ${{ github.workspace }}\komodo-wallet-desktop\ci_tools_atomic_dex\vcpkg-repo jobs: @@ -195,7 +195,7 @@ jobs: vcpkgJsonGlob: 'vcpkg.json' - name: import code signing certificates (macos) - if: runner.os == 'macOS' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository + if: runner.os == 'macOS' && 'KomodoPlatform/komodo-wallet-desktop' == github.repository uses: Apple-Actions/import-codesign-certs@v1 with: keychain: ${{ github.run_id }} @@ -204,7 +204,7 @@ jobs: p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} - name: import installer code signing certificates (macos) - if: runner.os == 'macOS' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository + if: runner.os == 'macOS' && 'KomodoPlatform/komodo-wallet-desktop' == github.repository uses: apple-actions/import-codesign-certs@v1 with: keychain: ${{ github.run_id }} @@ -351,7 +351,7 @@ jobs: - name: Running Tests (Linux) working-directory: ci_tools_atomic_dex continue-on-error: true - if: runner.os == 'Linux' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository + if: runner.os == 'Linux' && 'KomodoPlatform/komodo-wallet-desktop' == github.repository run: | export REPORT_CI_TOKEN=${{ secrets.REPORT_CI_TOKEN_SECRET }} export ATOMICDEX_TEST_SEED=${{ secrets.ATOMICDEX_TEST_SEED }} @@ -370,7 +370,7 @@ jobs: - name: Running Tests (MacOS) working-directory: ci_tools_atomic_dex continue-on-error: true - if: runner.os == 'macOS' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository + if: runner.os == 'macOS' && 'KomodoPlatform/komodo-wallet-desktop' == github.repository run: | export MAC_SIGN_IDENTITY="${{ secrets.MAC_SIGN_IDENTITY }}" export INSTALLER_MAC_SIGN_IDENTITY="${{ secrets.INSTALLER_MAC_SIGN_IDENTITY }}" @@ -394,7 +394,7 @@ jobs: - name: Running Tests (Windows) shell: powershell continue-on-error: true - if: runner.os == 'Windows' && 'KomodoPlatform/atomicDEX-Desktop' == github.repository + if: runner.os == 'Windows' && 'KomodoPlatform/komodo-wallet-desktop' == github.repository run: | #echo "Running tests" $Env:REPORT_CI_TOKEN = "${{ secrets.REPORT_CI_TOKEN_SECRET }}" diff --git a/.github/workflows/atomicdex-desktop-release-vt.yml b/.github/workflows/atomicdex-desktop-release-vt.yml index dd678373a9..c42a6507ac 100644 --- a/.github/workflows/atomicdex-desktop-release-vt.yml +++ b/.github/workflows/atomicdex-desktop-release-vt.yml @@ -1,4 +1,4 @@ -name: AtomicDex-Desktop VirustTotal Release +name: komodo-wallet-desktop VirustTotal Release on: release: diff --git a/CMakeLists.txt b/CMakeLists.txt index 50aa3bcd64..5d1ff8db01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,13 +60,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.5-beta/mm2-1d8bebd15-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.5-beta/mm2-1d8bebd15-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.5-beta/mm2-1d8bebd15-Linux-Release.zip) + URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.5-beta/mm2-1d8bebd15-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/v1.0.5-beta/mm2-1d8bebd15-Win64.zip) + URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.5-beta/mm2-1d8bebd15-Win64.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) @@ -81,7 +81,7 @@ FetchContent_Declare(jl777-coins URL https://github.com/KomodoPlatform/coins/archive/master.zip) #FetchContent_Declare(adex-generics-coins -# URL https://github.com/KomodoPlatform/atomicdex-desktop-generics/archive/main.zip) +# URL https://github.com/KomodoPlatform/komodo-wallet-desktop/archive/main.zip) FetchContent_MakeAvailable(mm2 jl777-coins qmaterial) diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index 3640a29bef..2cc2bc9e98 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -104,7 +104,7 @@ -DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} -DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} -DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - C:\Users\MSI\atomicDEX-Desktop\build + C:\Users\MSI\komodo-wallet-desktop\build @@ -223,7 +223,7 @@ true false true - C:/Users/MSI/atomicDEX-Desktop/build/bin + C:/Users/MSI/komodo-wallet-desktop/build/bin dwarf @@ -294,7 +294,7 @@ true false true - C:/Users/MSI/atomicDEX-Desktop/build/bin + C:/Users/MSI/komodo-wallet-desktop/build/bin 2 diff --git a/README.md b/README.md index bbdcfd0837..def816bccf 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,8 @@ pulls closed
- - build status + + build status release version @@ -108,44 +108,44 @@ Check out Komodo Wallet mobile, available for [Android and iOS](https://atomicde
- Milerius
Milerius

✍️💻 + Milerius
Milerius

✍️💻
- syl
syl

✍️💻 + syl
syl

✍️💻
- naezith
naezith

✍️💻 + naezith
naezith

✍️💻
- ssakone
ssakone

✍️💻 + ssakone
ssakone

✍️💻
- Anton TonyL Lysakov
Anton "TonyL" Lysakov

🛠💻 + Anton TonyL Lysakov
Anton "TonyL" Lysakov

🛠💻
- ca333
ca333

:penguin: :guardsman: + ca333
ca333

:penguin: :guardsman:
- smk762
smk762

🛠:wolf: + smk762
smk762

🛠:wolf:
- cipig
cipig

✍️💻 + cipig
cipig

✍️💻
- SirSevenG
SirSevenG

🛠💻 + SirSevenG
SirSevenG

🛠💻
- dathbezumniy
dathbezumniy

🛠💻 + dathbezumniy
dathbezumniy

🛠💻
- BloodyNora
BloodyNora

🛠💻 + BloodyNora
BloodyNora

🛠💻
- zatJUM
zatJUM

:heart:💻 + zatJUM
zatJUM

:heart:💻
@@ -154,7 +154,7 @@ Check out Komodo Wallet mobile, available for [Android and iOS](https://atomicde ## License -For details please refer to our [license](https://github.com/KomodoPlatform/atomicDEX-Desktop/blob/master/LICENSE). +For details please refer to our [license](https://github.com/KomodoPlatform/komodo-wallet-desktop/blob/master/LICENSE). This is experimental alpha software - use at your own risk! diff --git a/atomic_defi_design/Dex/Support/SupportModal.qml b/atomic_defi_design/Dex/Support/SupportModal.qml index 01d756dcbc..0ea8c92c52 100644 --- a/atomic_defi_design/Dex/Support/SupportModal.qml +++ b/atomic_defi_design/Dex/Support/SupportModal.qml @@ -208,7 +208,7 @@ There is a toggle in settings where you can turn on/off the display of these tra Layout.preferredHeight: column_layout.height hoverEnabled: true - onClicked: Qt.openUrlExternally("https://github.com/KomodoPlatform/atomicDEX-Desktop/pull/2296") + onClicked: Qt.openUrlExternally("https://github.com/KomodoPlatform/komodo-wallet-desktop/pull/2296") ColumnLayout { diff --git a/ci_tools_atomic_dex/ci_scripts/GLEECDEXinstaller_script.iss b/ci_tools_atomic_dex/ci_scripts/GLEECDEXinstaller_script.iss index 9620861cdb..a2db7159fe 100644 --- a/ci_tools_atomic_dex/ci_scripts/GLEECDEXinstaller_script.iss +++ b/ci_tools_atomic_dex/ci_scripts/GLEECDEXinstaller_script.iss @@ -4,7 +4,7 @@ #define MyAppName "GleecDEX-Desktop" #define MyAppVersion "0.5.0" #define MyAppPublisher "Komodo Platform" -#define MyAppURL "https://github.com/KomodoPlatform/atomicDEX-Desktop" +#define MyAppURL "https://github.com/KomodoPlatform/komodo-wallet-desktop" #define MyAppExeName "GleecDEX.exe" #define MyUserName "smk" #define CommitHash "cc57ab3" diff --git a/ci_tools_atomic_dex/util/compare_themes.py b/ci_tools_atomic_dex/util/compare_themes.py index 40b5f097cd..714b833282 100755 --- a/ci_tools_atomic_dex/util/compare_themes.py +++ b/ci_tools_atomic_dex/util/compare_themes.py @@ -10,7 +10,7 @@ Usage: `./compare_themes.py` ''' -REPO_URL = "https://raw.githubusercontent.com/KomodoPlatform/atomicDEX-Desktop" +REPO_URL = "https://raw.githubusercontent.com/KomodoPlatform/komodo-wallet-desktop" BRANCHES = ['smartdex', 'GleecDEX', 'shibadex'] diff --git a/cmake/cfg_hash.cmake b/cmake/cfg_hash.cmake index 7179dc15d9..3c1c7af15c 100644 --- a/cmake/cfg_hash.cmake +++ b/cmake/cfg_hash.cmake @@ -1,5 +1,5 @@ #if (UNIX) -# execute_process(COMMAND bash -c "git ls-remote https://github.com/KomodoPlatform/atomicdex-desktop-generics refs/heads/main | cut -f 1 | tr -d '\n'" +# execute_process(COMMAND bash -c "git ls-remote https://github.com/KomodoPlatform/komodo-wallet-desktop-generics refs/heads/main | cut -f 1 | tr -d '\n'" # OUTPUT_VARIABLE GENERICS_VERSION_ID # ) # if (NOT EXISTS ${GENERICS_VERSION_ID}.cfg_hash) diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index e6b9adf429..664dbdfc7e 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -15,7 +15,7 @@ set(DEX_PRIMARY_COIN "LTC") set(DEX_SECOND_PRIMARY_COIN "KMD") ## Second main coin of the DEX, will be enabled by default and will be the default right ticker for trading option(DISABLE_GEOBLOCKING "Enable to disable geoblocking (for dev purpose)" OFF) set(DEX_REPOSITORY_OWNER ${DEX_COMPANY}) -set(DEX_REPOSITORY_NAME "atomicDEX-Desktop") +set(DEX_REPOSITORY_NAME "komodo-wallet-desktop") set(DEX_CHECKSUM_API_URL "https://komodo.earth/static/checksum.json") if (APPLE) set(DEX_APPDATA_FOLDER "Komodo Wallet") diff --git a/src/core/atomicdex/pages/qt.wallet.page.hpp b/src/core/atomicdex/pages/qt.wallet.page.hpp index 8e52e47568..97b90f739f 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.hpp +++ b/src/core/atomicdex/pages/qt.wallet.page.hpp @@ -79,8 +79,8 @@ namespace atomic_dex // QML API Q_INVOKABLE void validate_address(QString address); Q_INVOKABLE void validate_address(QString address, QString ticker); - Q_INVOKABLE void convert_address(QString from, QVariant to_address_format); // https://developers.atomicdex.io/basic-docs/atomicdex/atomicdex-api.html#convertaddress - Q_INVOKABLE void convert_address(QString from, QString ticker, QVariant to_address_format); // https://developers.atomicdex.io/basic-docs/atomicdex/atomicdex-api.html#convertaddress + Q_INVOKABLE void convert_address(QString from, QVariant to_address_format); // https://developers.atomicdex.io/basic-docs/atomicdex/komodo-defi-framework.html#convertaddress + Q_INVOKABLE void convert_address(QString from, QString ticker, QVariant to_address_format); // https://developers.atomicdex.io/basic-docs/atomicdex/komodo-defi-framework.html#convertaddress Q_INVOKABLE void claim_rewards(); Q_INVOKABLE void claim_faucet(); Q_INVOKABLE void broadcast(const QString& tx_hex, bool is_claiming, bool is_max, const QString& amount); From a9d95597da785fda7d906ccf0f717b08e939669a Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 28 Aug 2023 20:40:09 +0800 Subject: [PATCH 188/251] update ifw path to v4.6 --- cmake/install/macos/osx_post_install.cmake | 6 ++++-- cmake/install/windows/windows_post_install.cmake | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cmake/install/macos/osx_post_install.cmake b/cmake/install/macos/osx_post_install.cmake index bd42ae336c..fce9596824 100644 --- a/cmake/install/macos/osx_post_install.cmake +++ b/cmake/install/macos/osx_post_install.cmake @@ -99,7 +99,9 @@ endif () file(COPY ${CMAKE_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.dmg DESTINATION ${TARGET_APP_PATH}) get_filename_component(QT_ROOT_DIR $ENV{QT_ROOT} DIRECTORY) -set(IFW_BINDIR ${QT_ROOT_DIR}/Tools/QtInstallerFramework/4.5/bin) + +execute_process(COMMAND ls ${QT_ROOT_DIR}/Tools/QtInstallerFramework ) +set(IFW_BINDIR ${QT_ROOT_DIR}/Tools/QtInstallerFramework/4.6/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) message(STATUS "command is: [${IFW_BINDIR}/archivegen ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin]") @@ -111,7 +113,7 @@ if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) else() message(STATUS "${DEX_PROJECT_NAME}.7z already created - skipping") endif() - +execute_process(COMMAND ls ${CMAKE_CURRENT_SOURCE_DIR}/bin && ls ) message(STATUS "Copying ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z TO ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/data") file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z DESTINATION ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/data) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index 182391f249..e4bb1d6f9e 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -71,7 +71,7 @@ execute_process(COMMAND powershell.exe -File ${PROJECT_ROOT_DIR}/ci_tools_atomic message(STATUS "manifest output: ${MANIFEST_RESULT} ${MANIFEST_OUTPUT} ${MANIFEST_ERROR}") message(STATUS "Creating Installer") -set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.5/bin) +set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.6/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DEX_PROJECT_NAME}.7z) message(STATUS "Contents of folder: ls ${CMAKE_CURRENT_SOURCE_DIR}") From 28b9e2c9399e58f8670ef68586fcfd2fb025bc8e Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 28 Aug 2023 21:54:28 +0800 Subject: [PATCH 189/251] log paths --- cmake/install/macos/osx_post_install.cmake | 13 ++++++++++++- cmake/install/windows/windows_post_install.cmake | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/cmake/install/macos/osx_post_install.cmake b/cmake/install/macos/osx_post_install.cmake index fce9596824..b920eabaa1 100644 --- a/cmake/install/macos/osx_post_install.cmake +++ b/cmake/install/macos/osx_post_install.cmake @@ -100,9 +100,20 @@ file(COPY ${CMAKE_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.dmg DESTINATION ${TARGET_A get_filename_component(QT_ROOT_DIR $ENV{QT_ROOT} DIRECTORY) -execute_process(COMMAND ls ${QT_ROOT_DIR}/Tools/QtInstallerFramework ) +execute_process(COMMAND ls "${IFW_BINDIR}") set(IFW_BINDIR ${QT_ROOT_DIR}/Tools/QtInstallerFramework/4.6/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") +execute_process(COMMAND ls "${IFW_BINDIR}") +message(STATUS "IFW_BIN PATH IS ${PROJECT_APP_PATH}") +execute_process(COMMAND ls "${PROJECT_APP_PATH}") +message(STATUS "IFW_BIN PATH IS ${CMAKE_SOURCE_DIR}") +execute_process(COMMAND ls "${CMAKE_SOURCE_DIR}") +message(STATUS "IFW_BIN PATH IS ${TARGET_APP_PATH}") +execute_process(COMMAND ls "${TARGET_APP_PATH}") +message(STATUS "IFW_BIN PATH IS ${CMAKE_CURRENT_SOURCE_DIR}") +execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}") +message(STATUS "IFW_BIN PATH IS ${CMAKE_CURRENT_SOURCE_DIR}/bin") +execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}/bin") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) message(STATUS "command is: [${IFW_BINDIR}/archivegen ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin]") execute_process(COMMAND diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index e4bb1d6f9e..440b44e714 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -73,13 +73,14 @@ message(STATUS "manifest output: ${MANIFEST_RESULT} ${MANIFEST_OUTPUT} ${MANIFES message(STATUS "Creating Installer") set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.6/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") +execute_process(COMMAND ls "${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DEX_PROJECT_NAME}.7z) message(STATUS "Contents of folder: ls ${CMAKE_CURRENT_SOURCE_DIR}") execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}") message(STATUS "Contents of folder: ls ${CMAKE_CURRENT_SOURCE_DIR}/bin") execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}/bin") message(STATUS "Contents of folder: ls ${CMAKE_CURRENT_SOURCE_DIR}/bundled") - execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}/bundled") + execute_process(COMMAND ls "${PROJECT_ROOT_DIR}/bundled") message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${PROJECT_ROOT_DIR}/bundled]") execute_process(COMMAND ${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} From 8ef2319fbd1f8de67c10c381d746a1085fdfaab3 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 29 Aug 2023 01:39:40 +0800 Subject: [PATCH 190/251] log ifw path --- cmake/install/windows/windows_post_install.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index 440b44e714..17292a4d79 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -71,7 +71,8 @@ execute_process(COMMAND powershell.exe -File ${PROJECT_ROOT_DIR}/ci_tools_atomic message(STATUS "manifest output: ${MANIFEST_RESULT} ${MANIFEST_OUTPUT} ${MANIFEST_ERROR}") message(STATUS "Creating Installer") -set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.6/bin) +message(STATUS "$ENV{QT_ROOT}/Tools/QtInstallerFramework") +set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.5/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") execute_process(COMMAND ls "${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DEX_PROJECT_NAME}.7z) From 62a471e57632d080d0e182761f201b92a5862ae6 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 29 Aug 2023 02:01:57 +0800 Subject: [PATCH 191/251] autodetect ifw version --- cmake/install/macos/osx_post_install.cmake | 26 +++++++++++++++++-- .../windows/windows_post_install.cmake | 23 +++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/cmake/install/macos/osx_post_install.cmake b/cmake/install/macos/osx_post_install.cmake index b920eabaa1..3e536b86f1 100644 --- a/cmake/install/macos/osx_post_install.cmake +++ b/cmake/install/macos/osx_post_install.cmake @@ -100,8 +100,30 @@ file(COPY ${CMAKE_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.dmg DESTINATION ${TARGET_A get_filename_component(QT_ROOT_DIR $ENV{QT_ROOT} DIRECTORY) -execute_process(COMMAND ls "${IFW_BINDIR}") -set(IFW_BINDIR ${QT_ROOT_DIR}/Tools/QtInstallerFramework/4.6/bin) + +# Set the path to the ifw root directory +set(IFW_ROOT "$ENV{QT_ROOT}/Tools/QtInstallerFramework") +execute_process(COMMAND ls "${IFW_ROOT}") +# Find all subdirectories +file(GLOB subdirs "${IFW_ROOT}/*") +# Initialize variables to track the highest version and folder +set(IFW_VERSION "") +# Loop through the subdirectories +foreach(subdir ${subdirs}) + get_filename_component(folder_name ${subdir} NAME) + # Use string manipulation to extract version from folder name + string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" version ${folder_name}) + # Check if the extracted version is higher than the current highest + if(version STREQUAL "") + continue() + elseif(version STRGREATER IFW_VERSION) + set(IFW_VERSION ${version}) + endif() +endforeach() +message("Using highest IFW version in ${IFW_ROOT}: ${IFW_VERSION}") + + +set(IFW_BINDIR ${IFW_ROOT}/${IFW_VERSION}/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") execute_process(COMMAND ls "${IFW_BINDIR}") message(STATUS "IFW_BIN PATH IS ${PROJECT_APP_PATH}") diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index 17292a4d79..5f5df9d923 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -70,9 +70,30 @@ execute_process(COMMAND powershell.exe -File ${PROJECT_ROOT_DIR}/ci_tools_atomic ERROR_VARIABLE MANIFEST_ERROR) message(STATUS "manifest output: ${MANIFEST_RESULT} ${MANIFEST_OUTPUT} ${MANIFEST_ERROR}") +# Set the path to the ifw root directory +set(IFW_ROOT "$ENV{QT_ROOT}/Tools/QtInstallerFramework") +execute_process(COMMAND ls "${IFW_ROOT}") +# Find all subdirectories +file(GLOB subdirs "${IFW_ROOT}/*") +# Initialize variables to track the highest version and folder +set(IFW_VERSION "") +# Loop through the subdirectories +foreach(subdir ${subdirs}) + get_filename_component(folder_name ${subdir} NAME) + # Use string manipulation to extract version from folder name + string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" version ${folder_name}) + # Check if the extracted version is higher than the current highest + if(version STREQUAL "") + continue() + elseif(version STRGREATER IFW_VERSION) + set(IFW_VERSION ${version}) + endif() +endforeach() +message("Using highest IFW version in ${IFW_ROOT}: ${IFW_VERSION}") + message(STATUS "Creating Installer") message(STATUS "$ENV{QT_ROOT}/Tools/QtInstallerFramework") -set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.5/bin) +set(IFW_BINDIR ${IFW_ROOT}/${IFW_VERSION}/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") execute_process(COMMAND ls "${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DEX_PROJECT_NAME}.7z) From ccb7c101ac01cc9e26d4255ab60cf057d2bd3a61 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 29 Aug 2023 02:38:02 +0800 Subject: [PATCH 192/251] retry windows ifw path --- cmake/install/windows/windows_post_install.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index 5f5df9d923..803ebb4f9b 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -92,7 +92,6 @@ endforeach() message("Using highest IFW version in ${IFW_ROOT}: ${IFW_VERSION}") message(STATUS "Creating Installer") -message(STATUS "$ENV{QT_ROOT}/Tools/QtInstallerFramework") set(IFW_BINDIR ${IFW_ROOT}/${IFW_VERSION}/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") execute_process(COMMAND ls "${IFW_BINDIR}") From bb24e71cce438c31841ecc21b03ce708eb86b36d Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 29 Aug 2023 19:00:10 +0800 Subject: [PATCH 193/251] debug cmake vars --- cmake/install/windows/windows_post_install.cmake | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index 803ebb4f9b..2493c69fd9 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -81,12 +81,15 @@ set(IFW_VERSION "") foreach(subdir ${subdirs}) get_filename_component(folder_name ${subdir} NAME) # Use string manipulation to extract version from folder name - string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" version ${folder_name}) + string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" version "${folder_name}") # Check if the extracted version is higher than the current highest if(version STREQUAL "") continue() elseif(version STRGREATER IFW_VERSION) - set(IFW_VERSION ${version}) + set(IFW_VERSION "${version}") + message(STATUS "Updating best version: ${IFW_VERSION} from ${folder_name}") + else() + endif() endforeach() message("Using highest IFW version in ${IFW_ROOT}: ${IFW_VERSION}") From 627cbc6c60341e4b355baf3a3a2aae05c21f4b32 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 29 Aug 2023 21:43:41 +0800 Subject: [PATCH 194/251] more debug --- cmake/install/windows/windows_post_install.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index 2493c69fd9..9492d1d9ec 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -72,6 +72,7 @@ message(STATUS "manifest output: ${MANIFEST_RESULT} ${MANIFEST_OUTPUT} ${MANIFES # Set the path to the ifw root directory set(IFW_ROOT "$ENV{QT_ROOT}/Tools/QtInstallerFramework") +message(STATUS "IFW_ROOT PATH IS ${IFW_ROOT}") execute_process(COMMAND ls "${IFW_ROOT}") # Find all subdirectories file(GLOB subdirs "${IFW_ROOT}/*") @@ -80,16 +81,19 @@ set(IFW_VERSION "") # Loop through the subdirectories foreach(subdir ${subdirs}) get_filename_component(folder_name ${subdir} NAME) + message(STATUS "scanning: ${subdir} [${folder_name}]") # Use string manipulation to extract version from folder name string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" version "${folder_name}") # Check if the extracted version is higher than the current highest + message(STATUS "version: ${version}") if(version STREQUAL "") + message(STATUS "No version: ${version}, skipping") continue() elseif(version STRGREATER IFW_VERSION) set(IFW_VERSION "${version}") message(STATUS "Updating best version: ${IFW_VERSION} from ${folder_name}") else() - + message(STATUS "${version}: < ${IFW_VERSION}, skipping") endif() endforeach() message("Using highest IFW version in ${IFW_ROOT}: ${IFW_VERSION}") From 63aeed595c67adc83c7951305bea19eccf6dbbf8 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 31 Aug 2023 13:54:03 +0800 Subject: [PATCH 195/251] why var no pop? --- cmake/install/windows/windows_post_install.cmake | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index 9492d1d9ec..cfc3417ce0 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -83,21 +83,22 @@ foreach(subdir ${subdirs}) get_filename_component(folder_name ${subdir} NAME) message(STATUS "scanning: ${subdir} [${folder_name}]") # Use string manipulation to extract version from folder name - string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" version "${folder_name}") + string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" version ${folder_name}) # Check if the extracted version is higher than the current highest message(STATUS "version: ${version}") if(version STREQUAL "") message(STATUS "No version: ${version}, skipping") continue() elseif(version STRGREATER IFW_VERSION) - set(IFW_VERSION "${version}") - message(STATUS "Updating best version: ${IFW_VERSION} from ${folder_name}") - else() - message(STATUS "${version}: < ${IFW_VERSION}, skipping") + set(IFW_VERSION ${version}) endif() endforeach() message("Using highest IFW version in ${IFW_ROOT}: ${IFW_VERSION}") +if(version STREQUAL "") + set(IFW_VERSION ${folder_name}) +endif() + message(STATUS "Creating Installer") set(IFW_BINDIR ${IFW_ROOT}/${IFW_VERSION}/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") From 803da1421997000e722afcbe2c2790216fc98522 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 31 Aug 2023 15:31:33 +0800 Subject: [PATCH 196/251] fallback to last scanned folder --- cmake/install/macos/osx_post_install.cmake | 33 +++++++++++-------- .../windows/windows_post_install.cmake | 21 +++++++++--- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/cmake/install/macos/osx_post_install.cmake b/cmake/install/macos/osx_post_install.cmake index 3e536b86f1..51f1c6cc4d 100644 --- a/cmake/install/macos/osx_post_install.cmake +++ b/cmake/install/macos/osx_post_install.cmake @@ -99,11 +99,10 @@ endif () file(COPY ${CMAKE_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.dmg DESTINATION ${TARGET_APP_PATH}) get_filename_component(QT_ROOT_DIR $ENV{QT_ROOT} DIRECTORY) +set(IFW_ROOT ${QT_ROOT_DIR}/Tools/QtInstallerFramework) +message(STATUS "IFW_ROOT PATH IS ${IFW_ROOT}") +execute_process(COMMAND ls ${IFW_ROOT}) - -# Set the path to the ifw root directory -set(IFW_ROOT "$ENV{QT_ROOT}/Tools/QtInstallerFramework") -execute_process(COMMAND ls "${IFW_ROOT}") # Find all subdirectories file(GLOB subdirs "${IFW_ROOT}/*") # Initialize variables to track the highest version and folder @@ -111,31 +110,38 @@ set(IFW_VERSION "") # Loop through the subdirectories foreach(subdir ${subdirs}) get_filename_component(folder_name ${subdir} NAME) + message(STATUS "scanning: ${subdir} [${folder_name}]") # Use string manipulation to extract version from folder name string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" version ${folder_name}) # Check if the extracted version is higher than the current highest + # TODO: For some reason this var fails to populate in windows if(version STREQUAL "") continue() elseif(version STRGREATER IFW_VERSION) set(IFW_VERSION ${version}) endif() endforeach() -message("Using highest IFW version in ${IFW_ROOT}: ${IFW_VERSION}") - +# Fallback to last scanned subfolder if variable empty. Usually there is only one folder. +if(version STREQUAL "") + set(IFW_VERSION ${folder_name}) +endif() +message(STATUS "===========================================") +message(STATUS "Creating Installer") set(IFW_BINDIR ${IFW_ROOT}/${IFW_VERSION}/bin) -message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") +message(STATUS ">>>> IFW_BIN PATH IS ${IFW_BINDIR}") execute_process(COMMAND ls "${IFW_BINDIR}") -message(STATUS "IFW_BIN PATH IS ${PROJECT_APP_PATH}") +message(STATUS ">>>> IFW_BIN PATH IS ${PROJECT_APP_PATH}") execute_process(COMMAND ls "${PROJECT_APP_PATH}") -message(STATUS "IFW_BIN PATH IS ${CMAKE_SOURCE_DIR}") +message(STATUS ">>>> IFW_BIN PATH IS ${CMAKE_SOURCE_DIR}") execute_process(COMMAND ls "${CMAKE_SOURCE_DIR}") -message(STATUS "IFW_BIN PATH IS ${TARGET_APP_PATH}") +message(STATUS ">>>> IFW_BIN PATH IS ${TARGET_APP_PATH}") execute_process(COMMAND ls "${TARGET_APP_PATH}") -message(STATUS "IFW_BIN PATH IS ${CMAKE_CURRENT_SOURCE_DIR}") +message(STATUS ">>>> IFW_BIN PATH IS ${CMAKE_CURRENT_SOURCE_DIR}") execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}") -message(STATUS "IFW_BIN PATH IS ${CMAKE_CURRENT_SOURCE_DIR}/bin") +message(STATUS ">>>> IFW_BIN PATH IS ${CMAKE_CURRENT_SOURCE_DIR}/bin") execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}/bin") +message(STATUS "===========================================") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) message(STATUS "command is: [${IFW_BINDIR}/archivegen ${DEX_PROJECT_NAME}.7z ${PROJECT_APP_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin]") execute_process(COMMAND @@ -146,7 +152,8 @@ if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) else() message(STATUS "${DEX_PROJECT_NAME}.7z already created - skipping") endif() -execute_process(COMMAND ls ${CMAKE_CURRENT_SOURCE_DIR}/bin && ls ) +message(STATUS "===========================================") +execute_process(COMMAND ls ${CMAKE_CURRENT_SOURCE_DIR}/bin ) message(STATUS "Copying ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z TO ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/data") file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z DESTINATION ${PROJECT_ROOT_DIR}/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/data) diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index cfc3417ce0..a8c5731415 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -85,22 +85,35 @@ foreach(subdir ${subdirs}) # Use string manipulation to extract version from folder name string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" version ${folder_name}) # Check if the extracted version is higher than the current highest - message(STATUS "version: ${version}") + # TODO: For some reason this var fails to populate in windows if(version STREQUAL "") - message(STATUS "No version: ${version}, skipping") continue() elseif(version STRGREATER IFW_VERSION) set(IFW_VERSION ${version}) endif() endforeach() -message("Using highest IFW version in ${IFW_ROOT}: ${IFW_VERSION}") - +# Fallback to last scanned subfolder if variable empty. Usually there is only one folder. if(version STREQUAL "") set(IFW_VERSION ${folder_name}) endif() +message(STATUS "===========================================") message(STATUS "Creating Installer") set(IFW_BINDIR ${IFW_ROOT}/${IFW_VERSION}/bin) +message(STATUS ">>>> IFW_BIN PATH IS ${IFW_BINDIR}") +execute_process(COMMAND ls "${IFW_BINDIR}") +message(STATUS ">>>> IFW_BIN PATH IS ${PROJECT_APP_PATH}") +execute_process(COMMAND ls "${PROJECT_APP_PATH}") +message(STATUS ">>>> IFW_BIN PATH IS ${CMAKE_SOURCE_DIR}") +execute_process(COMMAND ls "${CMAKE_SOURCE_DIR}") +message(STATUS ">>>> IFW_BIN PATH IS ${TARGET_APP_PATH}") +execute_process(COMMAND ls "${TARGET_APP_PATH}") +message(STATUS ">>>> IFW_BIN PATH IS ${CMAKE_CURRENT_SOURCE_DIR}") +execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}") +message(STATUS ">>>> IFW_BIN PATH IS ${CMAKE_CURRENT_SOURCE_DIR}/bin") +execute_process(COMMAND ls "${CMAKE_CURRENT_SOURCE_DIR}/bin") +message(STATUS "===========================================") +set(IFW_BINDIR ${IFW_ROOT}/${IFW_VERSION}/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") execute_process(COMMAND ls "${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DEX_PROJECT_NAME}.7z) From 25f1a9fb90d0d960f4bd3b3a0caeae64d6849f37 Mon Sep 17 00:00:00 2001 From: omahs <73983677+omahs@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:35:11 +0200 Subject: [PATCH 197/251] fix typo --- ci_tools_atomic_dex/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_tools_atomic_dex/README.md b/ci_tools_atomic_dex/README.md index 81ea9c9f98..366d249015 100644 --- a/ci_tools_atomic_dex/README.md +++ b/ci_tools_atomic_dex/README.md @@ -68,7 +68,7 @@ git checkout curl-7_70_0 make install ``` -Installling libbitcoin: +Installing libbitcoin: ``` git clone --depth 1 --branch version5 --single-branch "https://github.com/KomodoPlatform/secp256k1" From c7a50450769be9b9f81e19fe1113a21f8f60b92c Mon Sep 17 00:00:00 2001 From: omahs <73983677+omahs@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:35:59 +0200 Subject: [PATCH 198/251] fix typo --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 20351d9ac3..959e7716c5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,6 @@ --- name: Bug report -about: Something looks wierd or doesn't work as expected? Let us know the details so we can fix it! +about: Something looks weird or doesn't work as expected? Let us know the details so we can fix it! title: "[BUG]: " labels: bug assignees: '' From 56ffff7e13e05c444a4f792ebc5e2091ce52bbf2 Mon Sep 17 00:00:00 2001 From: omahs <73983677+omahs@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:36:32 +0200 Subject: [PATCH 199/251] fix typos --- .github/ISSUE_TEMPLATE/feature_request.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 11f973fa6c..6a2d2d5040 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -16,9 +16,9 @@ A clear and concise description of how your solution could be implemented. **Describe alternatives you've considered** -Have you considered any alternative approaches to solving to the problem? +Have you considered any alternative approaches to solving the problem? **Additional context** For visual features, screenshots are great to include. -If your request is similar to a feature frm a different app, please include a link. +If your request is similar to a feature from a different app, please include a link. From f7ae40e5ee6c877a61db3a9c69f7beb5cc63056e Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 12:19:05 +0800 Subject: [PATCH 200/251] comment out unused event function --- .../Dex/Exchange/ProView/Chart.qml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml index 1e1f9ebd64..ab58d20aa5 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml @@ -137,14 +137,16 @@ Item catch (e) { console.error(e) } } - onWidthChanged: { - try - { - loadChart(left_ticker?? atomic_app_primary_coin, - right_ticker?? atomic_app_secondary_coin) - } - catch (e) { console.error(e) } - } +// Currently chart should not resize, but in future it might be needed + +// onWidthChanged: { +// try +// { +// loadChart(left_ticker?? atomic_app_primary_coin, +// right_ticker?? atomic_app_secondary_coin) +// } +// catch (e) { console.error(e) } +// } RowLayout { From d83ef56e07efd53efd8c39602be71d3b8b35ea7c Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 12:20:46 +0800 Subject: [PATCH 201/251] set min width for max compatibility --- atomic_defi_design/Dex/Constants/General.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index cdee60c2bc..680b4c4c48 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -4,10 +4,10 @@ import AtomicDEX.TradingError 1.0 import AtomicDEX.MarketMode 1.0 QtObject { - readonly property int width: 1280 - readonly property int height: 800 + readonly property int width: 1280 // Set for maximum user compatibility + readonly property int height: 720 // See https://gs.statcounter.com/screen-resolution-stats/desktop/worldwide readonly property int minimumWidth: 1280 - readonly property int minimumHeight: 800 + readonly property int minimumHeight: 720 readonly property int max_camo_pw_length: 256 readonly property int max_std_pw_length: 256 readonly property int max_pw_length: max_std_pw_length + max_camo_pw_length From a1b85904b6c6e6db4c86900eca10ddae2302e466 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 12:21:24 +0800 Subject: [PATCH 202/251] tighten ticker combos --- atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml b/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml index c7a8b395fa..6c52fed103 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml @@ -22,7 +22,7 @@ Row { id: selectorLeft - width: 230 + width: 210 height: parent.height left_side: true @@ -40,7 +40,7 @@ Row SwapIcon { - width: 30 + width: 25 anchors.verticalCenter: parent.verticalCenter top_arrow_ticker: selectorLeft.ticker bottom_arrow_ticker: selectorRight.ticker @@ -63,7 +63,7 @@ Row { id: selectorRight - width: 230 + width: 210 height: parent.height left_side: false From 716c6dda11d090d2b3951b418a8cbdb8a74663b5 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 13:41:29 +0800 Subject: [PATCH 203/251] fix binding loop on popups --- atomic_defi_design/Dex/Components/PopupManager.qml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Components/PopupManager.qml b/atomic_defi_design/Dex/Components/PopupManager.qml index 0d24426e75..2093bacb80 100644 --- a/atomic_defi_design/Dex/Components/PopupManager.qml +++ b/atomic_defi_design/Dex/Components/PopupManager.qml @@ -12,7 +12,8 @@ Popup id: dialog width: 420 - height: _insideColumn.height > dialog.height ? _insideColumn.height + 82 : dialog.height + // There is a binding loop issue if this line is active + // height: _insideColumn.height > dialog.height ? _insideColumn.height + 82 : dialog.height dim: true modal: true anchors.centerIn: Overlay.overlay @@ -80,7 +81,8 @@ Popup contentItem: Qaterial.ClipRRect { width: dialog.width - height: _insideColumn.height > dialog.height ? _insideColumn.height + 92 : dialog.height + // There is a binding loop issue if this line is active + // height: _insideColumn.height > dialog.height ? _insideColumn.height + 92 : dialog.height radius: 18 focus: true Column From 97d23defb30dadf77a2c2c4d596e431854cbf92c Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 13:42:00 +0800 Subject: [PATCH 204/251] Tighten sidebar --- atomic_defi_design/Dex/Sidebar/Bottom.qml | 13 ++--- atomic_defi_design/Dex/Sidebar/Center.qml | 10 ++-- .../Dex/Sidebar/FigurativeLine.qml | 2 +- atomic_defi_design/Dex/Sidebar/Line.qml | 2 +- atomic_defi_design/Dex/Sidebar/Main.qml | 20 +++---- atomic_defi_design/Dex/Sidebar/Top.qml | 52 +++++++++---------- 6 files changed, 50 insertions(+), 49 deletions(-) diff --git a/atomic_defi_design/Dex/Sidebar/Bottom.qml b/atomic_defi_design/Dex/Sidebar/Bottom.qml index 70e911b958..5ea397d7b0 100644 --- a/atomic_defi_design/Dex/Sidebar/Bottom.qml +++ b/atomic_defi_design/Dex/Sidebar/Bottom.qml @@ -65,7 +65,7 @@ MouseArea id: addCryptoLine Layout.fillWidth: true - label.text: isExpanded ? qsTr("Add Crypto") : "" + label.text: qsTr("Add Crypto") // isExpanded ? qsTr("Add Crypto") : "" icon.source: General.image_path + "bank-plus.svg" onClicked: addCryptoClicked() } @@ -74,7 +74,7 @@ MouseArea id: settingsLine Layout.fillWidth: true - label.text: isExpanded ? qsTr("Settings") : "" + label.text: qsTr("Settings") // isExpanded ? qsTr("Settings") : "" icon.source: General.image_path + "menu-settings-white.svg" onClicked: settingsClicked() } @@ -83,7 +83,7 @@ MouseArea id: supportLine Layout.fillWidth: true - label.text: isExpanded ? qsTr("Support") : "" + label.text: qsTr("Support") // isExpanded ? qsTr("Support") : "" icon.source: General.image_path + "menu-support-white.png" onClicked: supportClicked(type) } @@ -95,6 +95,7 @@ MouseArea Layout.fillWidth: true label.text: qsTr("Privacy") label.visible: isExpanded + anchors.leftMargin: 60 onClicked: { @@ -157,10 +158,10 @@ MouseArea { id: privacySwitch - anchors.left: parent.left - anchors.leftMargin: 10 + anchors.left: parent.left - 8 + anchors.leftMargin: 0 anchors.verticalCenter: parent.verticalCenter - scale: 0.75 + scale: 0.5 mouseArea.hoverEnabled: true onClicked: parent.clicked() } diff --git a/atomic_defi_design/Dex/Sidebar/Center.qml b/atomic_defi_design/Dex/Sidebar/Center.qml index 9e203908ac..89ab94df97 100644 --- a/atomic_defi_design/Dex/Sidebar/Center.qml +++ b/atomic_defi_design/Dex/Sidebar/Center.qml @@ -65,7 +65,7 @@ MouseArea Layout.fillWidth: true type: Main.LineType.Portfolio - label.text: isExpanded ? qsTr("Portfolio") : "" + label.text: qsTr("Portfolio") // isExpanded ? qsTr("Portfolio") : "" icon.source: General.image_path + "menu-assets-portfolio.svg" onClicked: lineSelected(type) } @@ -76,7 +76,7 @@ MouseArea Layout.fillWidth: true type: Main.LineType.Wallet - label.text: isExpanded ? qsTr("Wallet") : "" + label.text: qsTr("Wallet") // isExpanded ? qsTr("Wallet") : "" icon.source: General.image_path + "menu-assets-white.svg" onClicked: lineSelected(type) } @@ -87,7 +87,7 @@ MouseArea Layout.fillWidth: true type: Main.LineType.DEX - label.text: isExpanded ? qsTr("DEX") : "" + label.text: qsTr("DEX") // isExpanded ? qsTr("DEX") : "" icon.source: General.image_path + "menu-exchange-white.svg" onClicked: lineSelected(type) } @@ -98,7 +98,7 @@ MouseArea Layout.fillWidth: true type: Main.LineType.Addressbook - label.text: isExpanded ? qsTr("Address Book") : "" + label.text: qsTr("Address Book") // isExpanded ? qsTr("Address Book") : "" icon.source: General.image_path + "menu-news-white.svg" onClicked: lineSelected(type) } @@ -110,7 +110,7 @@ MouseArea label.enabled: false icon.enabled: false Layout.fillWidth: true - label.text: isExpanded ? qsTr("Fiat") : "" + label.text: qsTr("Fiat") // isExpanded ? qsTr("Fiat") : "" icon.source: General.image_path + "bill.svg" } } diff --git a/atomic_defi_design/Dex/Sidebar/FigurativeLine.qml b/atomic_defi_design/Dex/Sidebar/FigurativeLine.qml index 3010810c46..540ca6e11b 100644 --- a/atomic_defi_design/Dex/Sidebar/FigurativeLine.qml +++ b/atomic_defi_design/Dex/Sidebar/FigurativeLine.qml @@ -13,7 +13,7 @@ Line id: _icon anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left - anchors.leftMargin: 30 + anchors.leftMargin: 18 height: 16 } diff --git a/atomic_defi_design/Dex/Sidebar/Line.qml b/atomic_defi_design/Dex/Sidebar/Line.qml index 4c50cdc75a..c8a24b5949 100644 --- a/atomic_defi_design/Dex/Sidebar/Line.qml +++ b/atomic_defi_design/Dex/Sidebar/Line.qml @@ -24,7 +24,7 @@ Item id: _label anchors.left: parent.left - anchors.leftMargin: 70 + anchors.leftMargin: 45 anchors.verticalCenter: parent.verticalCenter font: Qt.font diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index 0f1a8b8091..abbc8c2c23 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -18,7 +18,7 @@ Item } property bool isExpanded: true - property real lineHeight: 44 + property real lineHeight: 36 property var currentLineType: Main.LineType.Portfolio property alias _selectionCursor: _selectionCursor property bool containsMouse: mouseArea.containsMouse @@ -31,7 +31,7 @@ Item signal expanded(var isExpanded) signal expandStarted(var isExpanding) - width: isExpanded ? 200 : 80 + width: 160 height: parent.height // Background Rectangle @@ -48,10 +48,10 @@ Item } // Animation when changing width. - Behavior on width - { - NumberAnimation { duration: 300; targets: [width, _selectionCursor.width]; properties: "width"; onRunningChanged: { if (!running) expanded(isExpanded); else expandStarted(isExpanded); } } - } + // Behavior on width + // { + // NumberAnimation { duration: 300; targets: [width, _selectionCursor.width]; properties: "width"; onRunningChanged: { if (!running) expanded(isExpanded); else expandStarted(isExpanded); } } + // } // Selection Cursor AnimatedRectangle @@ -66,8 +66,8 @@ Item anchors.left: parent.left anchors.leftMargin: 12 - radius: 18 - width: parent.width - 14 + radius: 12 + width: parent.width - 20 height: lineHeight opacity: .7 @@ -105,7 +105,7 @@ Item id: center width: parent.width anchors.top: top.bottom - anchors.topMargin: 69.5 + anchors.topMargin: 70 onLineSelected: { if (currentLineType === lineType) @@ -120,7 +120,7 @@ Item id: bottom width: parent.width anchors.bottom: parent.bottom - anchors.bottomMargin: 62 + anchors.bottomMargin: 60 onAddCryptoClicked: root.addCryptoClicked() onSettingsClicked: root.settingsClicked() diff --git a/atomic_defi_design/Dex/Sidebar/Top.qml b/atomic_defi_design/Dex/Sidebar/Top.qml index d6c2e1b697..b73aebbc77 100644 --- a/atomic_defi_design/Dex/Sidebar/Top.qml +++ b/atomic_defi_design/Dex/Sidebar/Top.qml @@ -15,28 +15,28 @@ MouseArea { target: parent.parent - function onExpanded(isExpanded) - { - if (isExpanded) - { - fadeInTextVerAnimation.start(); - dexLogo.scale = .8; - dexLogo.source = Dex.CurrentTheme.bigLogoPath; - dexLogo.sourceSize.width = 200; - } - } + // function onExpanded(isExpanded) + // { + // if (isExpanded) + // { + // fadeInTextVerAnimation.start(); + // dexLogo.scale = .8; + // dexLogo.source = Dex.CurrentTheme.bigLogoPath; + // dexLogo.sourceSize.width = 200; + // } + // } - function onExpandStarted(isExpanding) - { - if (!isExpanding) - { - versionLabel.opacity = 0; - dexLogo.scale = .5; - dexLogo.source = Dex.CurrentTheme.logoPath; - dexLogo.sourceSize.width = 80; - versionLabel.opacity = 0; - } - } + // function onExpandStarted(isExpanding) + // { + // if (!isExpanding) + // { + // versionLabel.opacity = 0; + // dexLogo.scale = .5; + // dexLogo.source = Dex.CurrentTheme.logoPath; + // dexLogo.sourceSize.width = 80; + // versionLabel.opacity = 0; + // } + // } } NumberAnimation @@ -56,8 +56,8 @@ MouseArea Component.onCompleted: { sourceSize.width = parent.width - source = isExpanded ? Dex.CurrentTheme.bigLogoPath : Dex.CurrentTheme.logoPath; - scale = isExpanded ? .8 : .5 + source = Dex.CurrentTheme.bigLogoPath // isExpanded ? Dex.CurrentTheme.bigLogoPath : Dex.CurrentTheme.logoPath; + scale = 1 // isExpanded ? .8 : .5 } Connections @@ -65,7 +65,7 @@ MouseArea target: Dex.CurrentTheme function onThemeChanged() { - dexLogo.source = isExpanded ? Dex.CurrentTheme.bigLogoPath : Dex.CurrentTheme.logoPath + dexLogo.source = Dex.CurrentTheme.bigLogoPath // isExpanded ? Dex.CurrentTheme.bigLogoPath : Dex.CurrentTheme.logoPath } } } @@ -80,8 +80,8 @@ MouseArea text_value: General.version_string font: DexTypo.caption color: Dex.CurrentTheme.sidebarVersionTextColor - visible: root.width > 120 + visible: true // root.width > 120 - Component.onCompleted: opacity = isExpanded ? 1 : 0 + Component.onCompleted: opacity = 1 // isExpanded ? 1 : 0 } } From c7cb275699fa975f300bb44d64ea3119142fc7eb Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:12:01 +0800 Subject: [PATCH 205/251] reduce orderbook margins --- atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml index 9c5e4c9d74..0cbee94e75 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml @@ -13,8 +13,8 @@ Widget { title: qsTr("Order Book") - margins: 20 - spacing: 20 + margins: 10 + spacing: 10 Header { From e359b84708b6b278cd3ee713a93833891ba66582 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:21:49 +0800 Subject: [PATCH 206/251] fix conditional for date --- atomic_defi_design/Dex/Components/DefaultCalendar.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Components/DefaultCalendar.qml b/atomic_defi_design/Dex/Components/DefaultCalendar.qml index c366cf1c8c..c380829f70 100644 --- a/atomic_defi_design/Dex/Components/DefaultCalendar.qml +++ b/atomic_defi_design/Dex/Components/DefaultCalendar.qml @@ -104,7 +104,7 @@ Calendar dayDelegate: DefaultRectangle { anchors.fill: parent - color: styleData.date !== undefined && styleData.selected ? selectedDateColor : styleData.hovered ? hoveredDateColor : "transparent" + color: styleData.hasOwnProperty(date) && styleData.selected ? selectedDateColor : styleData.hovered ? hoveredDateColor : "transparent" readonly property bool addExtraMargin: control.frameVisible && styleData.selected readonly property color sameMonthDateTextColor: Dex.CurrentTheme.foregroundColor @@ -116,7 +116,7 @@ Calendar DefaultText { id: dayDelegateText - text: styleData.date.getDate() + text: styleData.hasOwnProperty(date) ? styleData.date.getDate() : "" anchors.centerIn: parent horizontalAlignment: Text.AlignRight font.pixelSize: Math.min(parent.height/3, parent.width/3) From 71d7d15c63aed2da9dad9bf04b79eec275de249d Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:29:40 +0800 Subject: [PATCH 207/251] fix syntax --- atomic_defi_design/Dex/Components/DefaultCalendar.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Components/DefaultCalendar.qml b/atomic_defi_design/Dex/Components/DefaultCalendar.qml index c380829f70..54c708c022 100644 --- a/atomic_defi_design/Dex/Components/DefaultCalendar.qml +++ b/atomic_defi_design/Dex/Components/DefaultCalendar.qml @@ -104,7 +104,7 @@ Calendar dayDelegate: DefaultRectangle { anchors.fill: parent - color: styleData.hasOwnProperty(date) && styleData.selected ? selectedDateColor : styleData.hovered ? hoveredDateColor : "transparent" + color: styleData.hasOwnProperty('date') && styleData.selected ? selectedDateColor : styleData.hovered ? hoveredDateColor : "transparent" readonly property bool addExtraMargin: control.frameVisible && styleData.selected readonly property color sameMonthDateTextColor: Dex.CurrentTheme.foregroundColor @@ -116,7 +116,7 @@ Calendar DefaultText { id: dayDelegateText - text: styleData.hasOwnProperty(date) ? styleData.date.getDate() : "" + text: styleData.hasOwnProperty('date') ? styleData.date.getDate() : "" anchors.centerIn: parent horizontalAlignment: Text.AlignRight font.pixelSize: Math.min(parent.height/3, parent.width/3) From 60c7b6b1fd211c18de37b1415fef9eb4eb6bf4db Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:30:10 +0800 Subject: [PATCH 208/251] reduce sidebar --- atomic_defi_design/Dex/Sidebar/Bottom.qml | 4 ++-- atomic_defi_design/Dex/Sidebar/Main.qml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Sidebar/Bottom.qml b/atomic_defi_design/Dex/Sidebar/Bottom.qml index 5ea397d7b0..af9829b03a 100644 --- a/atomic_defi_design/Dex/Sidebar/Bottom.qml +++ b/atomic_defi_design/Dex/Sidebar/Bottom.qml @@ -158,8 +158,8 @@ MouseArea { id: privacySwitch - anchors.left: parent.left - 8 - anchors.leftMargin: 0 + anchors.left: parent.left + anchors.leftMargin: -5 anchors.verticalCenter: parent.verticalCenter scale: 0.5 mouseArea.hoverEnabled: true diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index abbc8c2c23..c36fb5b895 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -31,7 +31,7 @@ Item signal expanded(var isExpanded) signal expandStarted(var isExpanding) - width: 160 + width: 150 height: parent.height // Background Rectangle From 5e25bddf933670e194d73daec3000d4476858ab3 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:30:32 +0800 Subject: [PATCH 209/251] tighten bestorder margins --- atomic_defi_design/Dex/Exchange/Trade/BestOrder/List.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/List.qml b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/List.qml index 695385521e..85a7be4ebe 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/List.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/List.qml @@ -15,8 +15,8 @@ Widget { id: _control title: qsTr("Best Orders") - margins: 20 - spacing: 20 + margins: 10 + spacing: 10 Header { From 639cd23cabaf263910fd82131d79f4dbecc92cb0 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:31:22 +0800 Subject: [PATCH 210/251] tweak pro view columns --- atomic_defi_design/Dex/Exchange/Trade/ProView.qml | 10 +++++----- atomic_defi_design/Dex/Exchange/Trade/Trade.qml | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml index c05efbebfa..aad3a1036c 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml @@ -113,8 +113,8 @@ RowLayout { Layout.alignment: Qt.AlignTop - Layout.minimumWidth: selectors.visible || tradingInfo.visible ? 495 : -1 - Layout.maximumWidth: (!orderBook.visible && !bestOrders.visible) || (!placeOrderForm.visible) ? -1 : 495 + Layout.minimumWidth: selectors.visible || tradingInfo.visible ? 450 : -1 + Layout.maximumWidth: (!orderBook.visible && !bestOrders.visible) || (!placeOrderForm.visible) ? -1 : 450 Layout.fillWidth: true Layout.fillHeight: true @@ -147,7 +147,7 @@ RowLayout property real _orderBookHeightRatio: 0.65 property real _bestOrdersHeightRatio: 0.35 - Layout.minimumWidth: orderBook.visible || bestOrders.visible ? 353 : -1 + Layout.minimumWidth: orderBook.visible || bestOrders.visible ? 350 : -1 Layout.fillWidth: true Layout.fillHeight: true Layout.alignment: Qt.AlignTop @@ -182,8 +182,8 @@ RowLayout { id: placeOrderForm - Layout.minimumWidth: visible ? 302 : -1 - Layout.maximumWidth: 350 + Layout.minimumWidth: visible ? 305 : -1 + Layout.maximumWidth: 305 Layout.fillWidth: true Layout.fillHeight: true diff --git a/atomic_defi_design/Dex/Exchange/Trade/Trade.qml b/atomic_defi_design/Dex/Exchange/Trade/Trade.qml index 9b334ac34f..1217a4ba3d 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/Trade.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/Trade.qml @@ -158,9 +158,9 @@ Item Column { anchors.fill: parent - spacing: 15 - anchors.leftMargin: 20 - anchors.rightMargin: 20 + spacing: 8 + anchors.leftMargin: 8 + anchors.rightMargin: 8 TradeViewHeader { @@ -179,7 +179,7 @@ Item { id: proView width: parent.width - height: parent.height * 0.90 + height: parent.height * 0.91 visible: API.app.trading_pg.current_trading_mode == TradingMode.Pro enabled: visible } From 45cda85385201a8404b4bd22ef83f4d77e6df906 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:32:20 +0800 Subject: [PATCH 211/251] reduce trading info width --- .../Dex/Exchange/ProView/TradingInfo/Main.qml | 20 +++++++++---------- .../ProView/TradingInfo/OrderList.qml | 2 +- .../ProView/TradingInfo/OrdersPage.qml | 6 +++--- .../ProView/TradingInfo/PriceLine.qml | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml index c08bf4b3ee..0c520adfcf 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml @@ -12,7 +12,7 @@ import "../../ProView" Widget { - width: 495 + width: 450 property alias currentIndex: tabView.currentIndex title: qsTr("Trading Information") @@ -67,7 +67,7 @@ Widget Layout.fillHeight: true color: Dex.CurrentTheme.floatingBackgroundColor radius: 10 - Layout.preferredWidth: 495 + Layout.preferredWidth: 450 Qaterial.SwipeView { @@ -86,20 +86,20 @@ Widget Chart { id: chart - Layout.topMargin: 20 - Layout.leftMargin: 10 - Layout.rightMargin: 10 + Layout.topMargin: 8 + Layout.leftMargin: 5 + Layout.rightMargin: 5 Layout.fillHeight: true - Layout.minimumWidth: 470 - Layout.minimumHeight: 200 + width: 435 + height: 240 } PriceLineSimplified { id: price_line - Layout.bottomMargin: 20 - Layout.leftMargin: 20 - Layout.rightMargin: 20 + Layout.bottomMargin: 12 + Layout.leftMargin: 5 + Layout.rightMargin: 5 Layout.fillWidth: true Layout.fillHeight: true } diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderList.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderList.qml index 7a5a4aa007..7aff067cf9 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderList.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderList.qml @@ -24,7 +24,7 @@ Item HorizontalLine { Layout.fillWidth: true - Layout.maximumWidth: 511 + Layout.maximumWidth: 450 } DefaultListView diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml index 8be325adbb..3629b41dae 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml @@ -84,13 +84,13 @@ Item { { anchors.horizontalCenter: parent.horizontalCenter anchors.fill: parent - anchors.margins: 28 + anchors.margins: 20 anchors.bottomMargin: is_history ? 0 : 10 - spacing: 15 + spacing: 8 RowLayout { - spacing: 10 + spacing: 8 DefaultButton { Layout.preferredHeight: 29 diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml index aa54e2761b..bf5d0d2286 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml @@ -20,7 +20,7 @@ ColumnLayout readonly property int fontSizeBigger: Style.textSizeSmall2 readonly property int lineScale: General.getComparisonScale(cexPriceDiff) - spacing: 20 + spacing: 10 DefaultText { From 65354d3efb3a135cef75324d6cb0bac132b779e0 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:32:49 +0800 Subject: [PATCH 212/251] reduce pro orderform width --- .../Exchange/ProView/PlaceOrderForm/Main.qml | 24 +++++++++---------- .../ProView/PlaceOrderForm/OrderForm.qml | 12 +++++----- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml index 2f5d00b066..4a1b5d710d 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml @@ -23,7 +23,7 @@ Widget 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 + margins: 10 collapsable: false Connections { @@ -75,13 +75,13 @@ Widget Layout.bottomMargin: 2 Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: parent.width - height: 40 + height: 32 MarketModeSelector { Layout.alignment: Qt.AlignLeft Layout.preferredWidth: (parent.width / 100) * 46 - Layout.preferredHeight: 40 + Layout.preferredHeight: 32 marketMode: MarketMode.Buy ticker: atomic_qt_utilities.retrieve_main_ticker(left_ticker) } @@ -92,7 +92,7 @@ Widget { Layout.alignment: Qt.AlignRight Layout.preferredWidth: (parent.width / 100) * 46 - Layout.preferredHeight: 40 + Layout.preferredHeight: 32 ticker: atomic_qt_utilities.retrieve_main_ticker(left_ticker) } } @@ -100,7 +100,7 @@ Widget // Protocol text for platform tokens Item { - height: 40 + height: 32 Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: parent.width visible: protocolIcon != "" @@ -151,7 +151,7 @@ Widget { Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: parent.width - height: 40 + height: 32 RowLayout { @@ -204,7 +204,7 @@ Widget { id: formBase width: parent.width - height: 340 + height: 330 Layout.alignment: Qt.AlignHCenter } @@ -213,7 +213,7 @@ Widget // Error messages Item { - height: 60 + height: 55 Layout.preferredWidth: parent.width // Show errors @@ -237,7 +237,7 @@ Widget TotalView { - height: 80 + height: 70 Layout.preferredWidth: parent.width Layout.alignment: Qt.AlignHCenter } @@ -245,11 +245,11 @@ Widget DexGradientAppButton { id: swap_btn - height: 40 - Layout.preferredWidth: parent.width - 20 + height: 32 + Layout.preferredWidth: parent.width - 30 Layout.alignment: Qt.AlignHCenter - radius: 18 + radius: 16 text: qsTr("START SWAP") font.weight: Font.Medium enabled: can_submit_trade && !show_waiting_for_trade_preimage && errors.text_value == "" diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml index 9c5fe529d2..ddbf9c89b4 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml @@ -18,7 +18,7 @@ ColumnLayout } readonly property string total_amount: API.app.trading_pg.total_amount - readonly property int input_height: 70 + readonly property int input_height: 65 readonly property int subfield_margin: 5 @@ -68,7 +68,7 @@ ColumnLayout color: enabled ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.foregroundColor2 text: backend_price ? backend_price : General.formatDouble(API.app.trading_pg.cex_price) width: parent.width - height: 41 + height: 36 radius: 18 onTextChanged: setPrice(text) @@ -118,7 +118,7 @@ ColumnLayout { id: input_volume width: parent.width - height: 41 + height: 36 radius: 18 left_text: sell_mode ? qsTr("Send") : qsTr("Receive") right_text: left_ticker @@ -168,7 +168,7 @@ ColumnLayout { id: input_minvolume width: parent.width - height: 41 + height: 36 radius: 18 left_text: qsTr("Min Volume") right_text: left_ticker @@ -211,7 +211,7 @@ ColumnLayout Item { Layout.preferredWidth: parent.width - Layout.preferredHeight: 30 + Layout.preferredHeight: 24 visible: !_useCustomMinTradeAmountCheckbox.checked DefaultText @@ -228,7 +228,7 @@ ColumnLayout Layout.rightMargin: 2 Layout.leftMargin: 2 Layout.preferredWidth: parent.width - Layout.preferredHeight: 30 + Layout.preferredHeight: 28 spacing: 5 DefaultCheckBox From 0e9ee592c01d21edbbc94dbbc71f42121d652c2f Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:33:25 +0800 Subject: [PATCH 213/251] fix chart position --- atomic_defi_design/Dex/Exchange/Exchange.qml | 2 +- atomic_defi_design/Dex/Exchange/ProView/Chart.qml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Exchange/Exchange.qml b/atomic_defi_design/Dex/Exchange/Exchange.qml index f1e5b99bae..8751d0baa4 100644 --- a/atomic_defi_design/Dex/Exchange/Exchange.qml +++ b/atomic_defi_design/Dex/Exchange/Exchange.qml @@ -10,7 +10,7 @@ Item { id: exchange readonly property int layout_margin: 12 - width: 495 + width: 450 property int current_page: idx_exchange_trade diff --git a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml index ab58d20aa5..80766a3d06 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml @@ -25,7 +25,7 @@ Item let chart_html = "" let symbol = "" - let widget_x = 390 + let widget_x = 385 let widget_y = 150 let scale_x = root.width / widget_x let scale_y = root.height / widget_y @@ -189,6 +189,7 @@ Item { id: webEngineViewPlaceHolder anchors.fill: parent + anchors.centerIn: parent visible: false Component.onCompleted: From 9631e8d2f4610547e788b79fdaf2a5e40b116393 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:34:36 +0800 Subject: [PATCH 214/251] use pre-release binary --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d1ff8db01..9956a24d5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,13 +60,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.5-beta/mm2-1d8bebd15-Darwin-Release.zip) + URL https://sdk.devbuilds.komodo.earth/main/mm2_79f6205-mac-x86-64.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.5-beta/mm2-1d8bebd15-Linux-Release.zip) + URL https://sdk.devbuilds.komodo.earth/main/mm2_79f6205-linux-x86-64.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.5-beta/mm2-1d8bebd15-Win64.zip) + URL https://sdk.devbuilds.komodo.earth/main/mm2_79f6205-win-x86-64.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From d7ffae29d369081e12c889f20b1ce97f5eb3fb11 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 16:59:51 +0800 Subject: [PATCH 215/251] remove "add crypto" button --- atomic_defi_design/Dex/Wallet/Sidebar.qml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/atomic_defi_design/Dex/Wallet/Sidebar.qml b/atomic_defi_design/Dex/Wallet/Sidebar.qml index 0506a7ec01..a7a4ca1a2f 100644 --- a/atomic_defi_design/Dex/Wallet/Sidebar.qml +++ b/atomic_defi_design/Dex/Wallet/Sidebar.qml @@ -125,25 +125,6 @@ Item } } } - - DexAppButton { - id: add_coin_button - onClicked: enable_coin_modal.open() - Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: 140 - radius: 18 - spacing: 2 - label.font: DexTypo.overLine - text: qsTr("ADD CRYPTO") - iconSource: Qaterial.Icons.plus - leftPadding: 3 - rightPadding: 3 - btnPressedColor: Dex.CurrentTheme.buttonSecondaryColorPressed - btnHoveredColor: Dex.CurrentTheme.buttonSecondaryColorHovered - btnEnabledColor: Dex.CurrentTheme.buttonSecondaryColorEnabled - btnDisabledColor: Dex.CurrentTheme.buttonSecondaryColorDisabled - - } } } } From da0ad8bb9b69f2bb462e15f3d0c45a528f09dbe1 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 17:35:01 +0800 Subject: [PATCH 216/251] remove title row from portfolio page --- .../Dex/Portfolio/Portfolio.qml | 57 +------------------ 1 file changed, 2 insertions(+), 55 deletions(-) diff --git a/atomic_defi_design/Dex/Portfolio/Portfolio.qml b/atomic_defi_design/Dex/Portfolio/Portfolio.qml index bc90347c15..01af593f48 100644 --- a/atomic_defi_design/Dex/Portfolio/Portfolio.qml +++ b/atomic_defi_design/Dex/Portfolio/Portfolio.qml @@ -21,8 +21,7 @@ Item { id: portfolio Layout.fillWidth: true Layout.fillHeight: true - Layout.bottomMargin: 40 - Layout.margins: 40 + Layout.margins: 20 readonly property int sort_by_name: 0 readonly property int sort_by_value: 1 @@ -104,62 +103,10 @@ Item { chart.axes[i].visible = false } - Item - { - width: parent.width - height: 80 - visible: true - - RowLayout - { - anchors.fill: parent - anchors.leftMargin: 40 - anchors.rightMargin: 40 - anchors.topMargin: 30 - - Item - { - Layout.fillWidth: true - Layout.fillHeight: true - - DefaultText - { - font: DexTypo.head6 - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Portfolio") - } - } - - Item - { - width: 120 - Layout.alignment: Qt.AlignVCenter - Layout.preferredWidth: 200 - - Row - { - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - - DexGradientAppButton - { - height: 40 - iconSource: Qaterial.Icons.plus - radius: 15 - padding: 25 - font: DexTypo.body2 - text: qsTr("ADD CRYPTO") - onClicked: enable_coin_modal.open() - } - } - } - } - } - Flickable { id: flick anchors.fill: parent - anchors.topMargin: 80 + anchors.topMargin: 20 contentHeight: _column.height clip: true From 1d62796e986a4a27535fd6ec732619c62c1d86c0 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 17:35:37 +0800 Subject: [PATCH 217/251] remove add crypto button and arrow overlays --- atomic_defi_design/Dex/Wallet/Sidebar.qml | 45 +++-------------------- 1 file changed, 6 insertions(+), 39 deletions(-) diff --git a/atomic_defi_design/Dex/Wallet/Sidebar.qml b/atomic_defi_design/Dex/Wallet/Sidebar.qml index a7a4ca1a2f..0539e74499 100644 --- a/atomic_defi_design/Dex/Wallet/Sidebar.qml +++ b/atomic_defi_design/Dex/Wallet/Sidebar.qml @@ -50,11 +50,11 @@ Item ColumnLayout { anchors.fill: parent - anchors.topMargin: 30 - anchors.bottomMargin: 30 + anchors.topMargin: 20 + anchors.bottomMargin: 10 anchors.leftMargin: 10 - anchors.rightMargin: 20 - spacing: 20 + anchors.rightMargin: 10 + spacing: 10 // Searchbar SearchField @@ -63,7 +63,8 @@ Item Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: 150 - Layout.preferredHeight: 38 + Layout.fillWidth: true + Layout.preferredHeight: 36 textField.placeholderText: qsTr("Search") forceFocus: true @@ -83,46 +84,12 @@ Item id: list height: list_bg.height model: portfolio_coins - topMargin: 5 - bottomMargin: 5 scrollbar_visible: false reuseItems: true delegate: SidebarItemDelegate { } - Dex.Rectangle - { - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width + 4 - height: 30 - radius: 8 - opacity: .5 - visible: list.position < (.98 - list.scrollVert.visualSize) ? true : false - Qaterial.Icon - { - anchors.centerIn: parent - color: Dex.CurrentTheme.foregroundColor - icon: Qaterial.Icons.arrowDownCircleOutline - } - } - - Dex.Rectangle - { - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width + 4 - height: 30 - radius: 8 - opacity: .5 - visible: list.position > 0 ? true : false - Qaterial.Icon - { - anchors.centerIn: parent - color: Dex.CurrentTheme.foregroundColor - icon: Qaterial.Icons.arrowUpCircleOutline - } - } } } } From a3abffac5e2c1436141ecaed9deb01754ac6b62d Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 17:55:09 +0800 Subject: [PATCH 218/251] dont close notifications when marking all as read --- atomic_defi_design/Dex/Dashboard/NotificationsModal.qml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml index 46bd8e7b57..2d2cb5e9c9 100644 --- a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml +++ b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml @@ -32,10 +32,11 @@ DexPopup readonly property string check_internet_connection_text: qsTr("Please check your internet connection (e.g. VPN service or firewall might block it).") - function reset() + function reset(close_after_reset = false) { notifications_list = [] - root.close() + if (close_after_reset) + root.close() } enum NotificationKind @@ -619,7 +620,7 @@ DexPopup height: 40 width: 260 Layout.alignment: Qt.AlignHCenter - onClicked: root.reset() + onClicked: notifications_list.length !== 0 ? root.reset(false) : root.reset(true) } } } From 89a4a3b24d9c5f2241603ec80a55f6c4cc4a9dc9 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 19:32:46 +0800 Subject: [PATCH 219/251] increment version --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/workflows/atomicdex-desktop-cd.yml | 2 +- .github/workflows/atomicdex-desktop-ci.yml | 2 +- CMakeLists.txt | 2 +- cmake/project.metadata.cmake | 2 +- src/core/atomicdex/version/version.hpp | 8 ++++---- vcpkg.json | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 959e7716c5..2d72a9c0b0 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,7 +26,7 @@ Please describe what you expected to happen. **Operating Environment(s):** - OS: [e.g. Windows/OSX/Linux. If Linux, include distro. ] - OS version: [e.g. 7/10/11, 10.13/10.15, 18.04/20.04 ] - - Komodo Wallet Version: [e.g. 0.6.0] + - Komodo Wallet Version: [e.g. 0.6.1] - Build branch: [e.g. master/dev] diff --git a/.github/workflows/atomicdex-desktop-cd.yml b/.github/workflows/atomicdex-desktop-cd.yml index cb8be38de8..0ee68a3f46 100644 --- a/.github/workflows/atomicdex-desktop-cd.yml +++ b/.github/workflows/atomicdex-desktop-cd.yml @@ -9,7 +9,7 @@ env: DEX_PROJECT_NAME: "komodo-wallet" DEX_DISPLAY_NAME: "Komodo Wallet" DEX_COMPANY: "KomodoPlatform" - DEX_VERSION: "0.6.0" + DEX_VERSION: "0.6.1" DEX_WEBSITE: "https://atomicdex.io/" jobs: diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 4facbe18ba..b03ca4d6c0 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -16,7 +16,7 @@ env: DEX_PROJECT_NAME: "komodo-wallet" DEX_DISPLAY_NAME: "Komodo Wallet" DEX_COMPANY: "KomodoPlatform" - DEX_VERSION: "0.6.0" + DEX_VERSION: "0.6.1" DEX_WEBSITE: "https://atomicdex.io/" VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/b/vcpkg_cache VCPKG_BINARY_SOURCES: clear;x-gha,readwrite diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d1ff8db01..c953c6b0a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ include(vcpkg_prerequisites) include(qt_prerequisites) include(cfg_hash) -project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.6.0) +project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.6.1) message(STATUS "${PROJECT_NAME} is version ${PROJECT_VERSION}") include(cmake_default_options) diff --git a/cmake/project.metadata.cmake b/cmake/project.metadata.cmake index 664dbdfc7e..c91418487b 100644 --- a/cmake/project.metadata.cmake +++ b/cmake/project.metadata.cmake @@ -7,7 +7,7 @@ set(DEX_DISPLAY_NAME "Komodo Wallet") set(DEX_MAINTENANCE_TOOL_NAME "Komodo Wallet Maintenance Tool") set(DEX_COMPANY "KomodoPlatform") set(DEX_WEBSITE "https://atomicdex.io/") -set(DEX_VERSION "0.6.0") +set(DEX_VERSION "0.6.1") set(DEX_SUPPORT_PAGE "https://support.komodoplatform.com/support/home") set(DEX_DISCORD "https://komodoplatform.com/discord") set(DEX_TWITTER "https://twitter.com/AtomicDEX") diff --git a/src/core/atomicdex/version/version.hpp b/src/core/atomicdex/version/version.hpp index 714e1c61de..ad9708d4dc 100644 --- a/src/core/atomicdex/version/version.hpp +++ b/src/core/atomicdex/version/version.hpp @@ -21,24 +21,24 @@ namespace atomic_dex constexpr const char* get_version() { - return "0.6.0-beta"; + return "0.6.1-beta"; } constexpr int get_num_version() noexcept { - return 57; + return 61; } constexpr const char* get_raw_version() { - return "0.6.0"; + return "0.6.1"; } constexpr const char* get_precedent_raw_version() { - return "0.5.7.2"; + return "0.6.0"; } } // namespace atomic_dex diff --git a/vcpkg.json b/vcpkg.json index 3406a644b2..92c79bfea4 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "komodo-wallet", - "version-string": "0.6.0", + "version-string": "0.6.1", "dependencies": [ "entt", "boost-multiprecision", From 9d2bdf41ee7cdeea75393df9cd823a7a66eba2e5 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 19:33:16 +0800 Subject: [PATCH 220/251] add recommended_fiat to cfg.json --- assets/config/cfg.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/assets/config/cfg.json b/assets/config/cfg.json index 46d1b624b8..8ac884ef9d 100644 --- a/assets/config/cfg.json +++ b/assets/config/cfg.json @@ -79,6 +79,14 @@ "HUF", "SEK" ], + "recommended_fiat": [ + "USD", + "EUR", + "GBP", + "HKD", + "IDR", + "ILS" + ], "possible_currencies": [ "USD", "BTC", From b90850b3d111f4a2b1353c5b082e398fd63cf26a Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 19:34:17 +0800 Subject: [PATCH 221/251] add backend for recommended fiats --- src/core/atomicdex/config/app.cfg.cpp | 35 ++++++++++++------- src/core/atomicdex/config/app.cfg.hpp | 1 + src/core/atomicdex/pages/qt.settings.page.cpp | 4 +-- src/core/atomicdex/pages/qt.settings.page.hpp | 2 +- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/core/atomicdex/config/app.cfg.cpp b/src/core/atomicdex/config/app.cfg.cpp index d60580bb58..8b5b81899d 100644 --- a/src/core/atomicdex/config/app.cfg.cpp +++ b/src/core/atomicdex/config/app.cfg.cpp @@ -39,16 +39,17 @@ namespace file.open(QIODevice::ReadOnly | QIODevice::Text); nlohmann::json config_json_data; - QString val = file.readAll(); - config_json_data = nlohmann::json::parse(val.toStdString()); - config_json_data["current_currency"] = config.current_currency; - config_json_data["current_fiat"] = config.current_fiat; - config_json_data["possible_currencies"] = config.possible_currencies; - config_json_data["current_currency_sign"] = config.current_currency_sign; - config_json_data["current_fiat_sign"] = config.current_fiat_sign; - config_json_data["available_signs"] = config.available_currency_signs; - config_json_data["notification_enabled"] = config.notification_enabled; - config_json_data["spamfilter_enabled"] = config.spamfilter_enabled; + QString val = file.readAll(); + config_json_data = nlohmann::json::parse(val.toStdString()); + config_json_data["current_currency"] = config.current_currency; + config_json_data["current_fiat"] = config.current_fiat; + config_json_data["recommended_fiat"] = config.recommended_fiat; + config_json_data["possible_currencies"] = config.possible_currencies; + config_json_data["current_currency_sign"] = config.current_currency_sign; + config_json_data["current_fiat_sign"] = config.current_fiat_sign; + config_json_data["available_signs"] = config.available_currency_signs; + config_json_data["notification_enabled"] = config.notification_enabled; + config_json_data["spamfilter_enabled"] = config.spamfilter_enabled; file.close(); @@ -67,6 +68,7 @@ namespace atomic_dex j.at("current_currency").get_to(config.current_currency); j.at("current_fiat").get_to(config.current_fiat); j.at("available_fiat").get_to(config.available_fiat); + j.at("recommended_fiat").get_to(config.recommended_fiat); j.at("possible_currencies").get_to(config.possible_currencies); j.at("current_currency_sign").get_to(config.current_currency_sign); j.at("available_signs").get_to(config.available_currency_signs); @@ -144,9 +146,16 @@ namespace atomic_dex if (is_this_currency_a_fiat(config, new_currency)) { SPDLOG_INFO("{} is fiat, setting it as current fiat and possible currencies", new_currency); - config.current_fiat = new_currency; - config.current_fiat_sign = config.current_currency_sign; - config.possible_currencies[0] = new_currency; + config.current_fiat = new_currency; + config.current_fiat_sign = config.current_currency_sign; + config.possible_currencies[0] = new_currency; + + if (!std::binary_search(config.recommended_fiat.begin(), config.recommended_fiat.end(), new_currency)) + { + SPDLOG_INFO("Adding {} to recommended fiats", new_currency); + config.recommended_fiat.pop_back(); + config.recommended_fiat.insert(config.recommended_fiat.begin(), new_currency); + } } upgrade_cfg(config); } diff --git a/src/core/atomicdex/config/app.cfg.hpp b/src/core/atomicdex/config/app.cfg.hpp index e5286d9095..41b954d4dc 100644 --- a/src/core/atomicdex/config/app.cfg.hpp +++ b/src/core/atomicdex/config/app.cfg.hpp @@ -29,6 +29,7 @@ namespace atomic_dex std::string current_fiat_sign; std::unordered_map available_currency_signs; std::vector available_fiat; + std::vector recommended_fiat; std::vector possible_currencies; bool notification_enabled; bool spamfilter_enabled{false}; diff --git a/src/core/atomicdex/pages/qt.settings.page.cpp b/src/core/atomicdex/pages/qt.settings.page.cpp index e63e29ab95..c93f49ebc7 100644 --- a/src/core/atomicdex/pages/qt.settings.page.cpp +++ b/src/core/atomicdex/pages/qt.settings.page.cpp @@ -330,12 +330,12 @@ namespace atomic_dex return out; } - QStringList settings_page::get_recommended_fiats() const + QStringList settings_page::get_recommended_fiats() { static const auto nb_recommended = 6; QStringList out; out.reserve(nb_recommended); - for (auto&& it = m_config.available_fiat.begin(); it != m_config.available_fiat.end() && it < m_config.available_fiat.begin() + nb_recommended; it++) + for (auto&& it = m_config.recommended_fiat.begin(); it != m_config.recommended_fiat.end() && it < m_config.recommended_fiat.begin() + nb_recommended; it++) { out.push_back(QString::fromStdString(*it)); } diff --git a/src/core/atomicdex/pages/qt.settings.page.hpp b/src/core/atomicdex/pages/qt.settings.page.hpp index 874e76aaf9..bc5b047310 100644 --- a/src/core/atomicdex/pages/qt.settings.page.hpp +++ b/src/core/atomicdex/pages/qt.settings.page.hpp @@ -103,7 +103,7 @@ namespace atomic_dex Q_INVOKABLE void remove_custom_coin(const QString& ticker); Q_INVOKABLE [[nodiscard]] QStringList get_available_langs() const; Q_INVOKABLE [[nodiscard]] QStringList get_available_fiats() const; - Q_INVOKABLE [[nodiscard]] QStringList get_recommended_fiats() const; // Returns 6 recommended fiats. Basically, the first 6 values in cfg.json. + Q_INVOKABLE [[nodiscard]] QStringList get_recommended_fiats(); Q_INVOKABLE [[nodiscard]] QStringList get_available_currencies() const; Q_INVOKABLE [[nodiscard]] bool is_this_ticker_present_in_raw_cfg(const QString& ticker) const; Q_INVOKABLE [[nodiscard]] bool is_this_ticker_present_in_normal_cfg(const QString& ticker) const; From a5eeb031f0da05d8cb2b6b3879f59670f0bc8cf5 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 9 Sep 2023 19:34:58 +0800 Subject: [PATCH 222/251] highlight selected fiat, refresh recommended on selection --- atomic_defi_design/Dex/Settings/Combo_fiat.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Settings/Combo_fiat.qml b/atomic_defi_design/Dex/Settings/Combo_fiat.qml index 0842bb41ef..b62c61b59f 100644 --- a/atomic_defi_design/Dex/Settings/Combo_fiat.qml +++ b/atomic_defi_design/Dex/Settings/Combo_fiat.qml @@ -77,6 +77,7 @@ Item const new_fiat = fiats[currentIndex] API.app.settings_pg.current_fiat = new_fiat API.app.settings_pg.current_currency = new_fiat + setting_modal.recommended_fiats = API.app.settings_pg.get_recommended_fiats() } } @@ -123,7 +124,7 @@ Item { text: modelData color: DexTheme.foregroundColor - opacity: fiats_mouse_area.containsMouse ? .7 : 1 + opacity: text == API.app.settings_pg.current_fiat ? 1 : fiats_mouse_area.containsMouse ? .8 : .6 DexMouseArea { From 366506d3091bde85e49d2d6886552d1887ef99ce Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 10 Sep 2023 00:21:16 +0800 Subject: [PATCH 223/251] update addressbook tags --- .../Dex/Addressbook/AddTagPopup.qml | 20 ++++++++++ .../Dex/Addressbook/EditContactModal.qml | 12 +++--- atomic_defi_design/Dex/Addressbook/Main.qml | 38 +++++++++---------- .../Dex/Addressbook/NewContactPopup.qml | 2 +- 4 files changed, 46 insertions(+), 26 deletions(-) diff --git a/atomic_defi_design/Dex/Addressbook/AddTagPopup.qml b/atomic_defi_design/Dex/Addressbook/AddTagPopup.qml index 0e53be333c..000cd1a024 100644 --- a/atomic_defi_design/Dex/Addressbook/AddTagPopup.qml +++ b/atomic_defi_design/Dex/Addressbook/AddTagPopup.qml @@ -13,6 +13,7 @@ Dex.Popup width: 250 height: 55 + onOpened: tagNameField.forceActiveFocus() onClosed: tagNameField.text = "" contentItem: Row @@ -22,10 +23,17 @@ Dex.Popup Dex.TextField { id: tagNameField + visible: contactModel.categories.length < 5 width: parent.width * 0.6 height: parent.height placeholderText: qsTr("Tag name") + onTextChanged: { + if(text.length > 10) { + text = text.substring(0, 10) + } + } + Dex.ToolTip { id: tagAlreadyTakenToolTip @@ -40,6 +48,7 @@ Dex.Popup Dex.Button { + visible: contactModel.categories.length < 5 width: parent.width * 0.36 height: parent.height text: qsTr("+ ADD") @@ -56,5 +65,16 @@ Dex.Popup else root.close() } } + + Dex.Text + { + id: tagLimitText + visible: contactModel.categories.length > 4 + width: parent.width * 0.6 + height: parent.height + color: Style.colorRed + text: qsTr("A contact can only have 5 tags.") + } + } } diff --git a/atomic_defi_design/Dex/Addressbook/EditContactModal.qml b/atomic_defi_design/Dex/Addressbook/EditContactModal.qml index 4a4668a15c..9a93b2ef9d 100644 --- a/atomic_defi_design/Dex/Addressbook/EditContactModal.qml +++ b/atomic_defi_design/Dex/Addressbook/EditContactModal.qml @@ -192,7 +192,7 @@ Dex.MultipageModal { visible: !addressList.contactAddAddressMode anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("+ Add") + text: qsTr("+ Add Address") width: 211 height: 38 radius: 18 @@ -224,7 +224,7 @@ Dex.MultipageModal width: parent.width model: contactModel.categories orientation: Qt.Horizontal - spacing: 6 + spacing: 4 delegate: Dex.MouseArea { width: tagBg.width + tagRemoveBut.width + 2 @@ -255,8 +255,8 @@ Dex.MultipageModal anchors.left: tagBg.right anchors.leftMargin: 2 anchors.verticalCenter: parent.verticalCenter - width: 18 - height: 18 + width: 16 + height: 16 color: "transparent" iconSource: Qaterial.Icons.close onClicked: contactModel.removeCategory(modelData) @@ -288,7 +288,7 @@ Dex.MultipageModal Layout.preferredWidth: 199 Layout.preferredHeight: 48 radius: 18 - text: qsTr("Cancel") + text: qsTr("Cancel Updates") onClicked: root.close() }, @@ -299,7 +299,7 @@ Dex.MultipageModal Layout.preferredWidth: 199 Layout.preferredHeight: 48 radius: 18 - text: qsTr("Confirm") + text: qsTr("Save Updates") onClicked: { contactModel.name = contactNameInput.field.text diff --git a/atomic_defi_design/Dex/Addressbook/Main.qml b/atomic_defi_design/Dex/Addressbook/Main.qml index df7b1e4a2a..a60da139d8 100644 --- a/atomic_defi_design/Dex/Addressbook/Main.qml +++ b/atomic_defi_design/Dex/Addressbook/Main.qml @@ -194,29 +194,29 @@ Item { model: modelData.categories.slice(0, 6) - delegate: Dex.Rectangle + delegate: Dex.MouseArea { - property int _currentColorIndex: contactTable._getCurrentTagColorId() + width: tagBg.width + 2 + height: tagBg.height + onClicked: searchbar.textField.text = modelData + hoverEnabled: true - width: tagLabel.width > 73 ? 83 : tagLabel.width + 10 - height: 21 - radius: 20 - color: Dex.CurrentTheme.addressBookTagColors[_currentColorIndex] - - Dex.MouseArea + Dex.Rectangle { - anchors.fill: parent - onClicked: searchbar.textField.text = modelData - } + id: tagBg + property int _currentColorIndex: contactTable._getCurrentTagColorId() + anchors.verticalCenter: parent.verticalCenter + width: tagLabel.width + 12 + height: 21 + radius: 20 + color: Dex.CurrentTheme.addressBookTagColors[_currentColorIndex] - Dex.Text - { - id: tagLabel - width: 70 - anchors.centerIn: parent - text: modelData - horizontalAlignment: Text.AlignHCenter - elide: Text.ElideRight + Dex.Text + { + id: tagLabel + anchors.centerIn: parent + text: modelData + } } } } diff --git a/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml b/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml index 535337dcaa..afddfffb9e 100644 --- a/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml +++ b/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml @@ -49,7 +49,7 @@ Dex.Popup { id: add_contact_btn font: DexTypo.body2 - text: qsTr("+ ADD") + text: qsTr("Save") height: 30 anchors.horizontalCenter: parent.horizontalCenter onClicked: From 08c8fdcf6706b7ee46318de56c63412b1d79a66e Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 10 Sep 2023 01:24:41 +0800 Subject: [PATCH 224/251] udpate addressbook tag colors --- assets/themes/Binance - Dark/colors.json | 2 +- assets/themes/Default - Dark/colors.json | 3 +-- assets/themes/Default - Light/colors.json | 2 +- atomic_defi_design/Dex/Themes/DefaultTheme.js | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/assets/themes/Binance - Dark/colors.json b/assets/themes/Binance - Dark/colors.json index 2600fb338d..96f4325b46 100644 --- a/assets/themes/Binance - Dark/colors.json +++ b/assets/themes/Binance - Dark/colors.json @@ -122,7 +122,7 @@ "listItemEvenBackground": "#161515", "listItemHoveredBackground": "#5B4704", - "addressBookTagColors": ["#627EEA", "#FFD87A", "#F7931A"], + "addressBookTagColors": ["#003bbbFF", "#006133FF", "#612600FF", "#430061FF", "#004d61FF"], "okColor": "#00C058", "warningColor": "#E52167", diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index 9ab278f8f2..faee423f39 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -121,8 +121,7 @@ "listItemEvenBackground": "#24273DFF", "listItemHoveredBackground": "#4068B9FF", - - "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], + "addressBookTagColors": ["#003bbbFF", "#006133FF", "#612600FF", "#430061FF", "#004d61FF"], "okColor": "#00C058FF", "warningColor": "#E52167FF", diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 03f8005183..de287782f6 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -119,7 +119,7 @@ "listItemEvenBackground": "#EDF4FFFF", "listItemHoveredBackground": "#D7E7FFFF", - "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], + "addressBookTagColors": ["#003bbbFF", "#006133FF", "#612600FF", "#430061FF", "#004d61FF"], "okColor": "#00C058FF", "warningColor": "#E52167FF", diff --git a/atomic_defi_design/Dex/Themes/DefaultTheme.js b/atomic_defi_design/Dex/Themes/DefaultTheme.js index b26ae4cc50..07467a9850 100644 --- a/atomic_defi_design/Dex/Themes/DefaultTheme.js +++ b/atomic_defi_design/Dex/Themes/DefaultTheme.js @@ -123,7 +123,7 @@ function getHardcoded() listItemEvenBackground: "#24273DFF", listItemHoveredBackground: "#4068B9FF", - addressBookTagColors: ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], + addressBookTagColors: ["#003bbbFF", "#006133FF", "#612600FF", "#430061FF", "#004d61FF"], okColor: "#00C058FF", warningColor: "#E52167FF", From 5cf2b5bf25e8b86c8a4fe4dce695e59e02c0684b Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 10 Sep 2023 01:25:36 +0800 Subject: [PATCH 225/251] improve tag text contrast --- atomic_defi_design/Dex/Addressbook/AddAddressForm.qml | 2 +- atomic_defi_design/Dex/Addressbook/EditContactModal.qml | 4 +++- atomic_defi_design/Dex/Addressbook/Main.qml | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml b/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml index cc0502700a..b2633f2084 100644 --- a/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml +++ b/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml @@ -195,7 +195,7 @@ Dex.Rectangle Layout.preferredWidth: 116 Layout.preferredHeight: 38 radius: 18 - text: isConvertMode ? qsTr("Convert") : editionMode ? qsTr("Edit") : qsTr("Add") + text: isConvertMode ? qsTr("Convert") : editionMode ? qsTr("Update") : qsTr("Save") onClicked: { let addressType = getTypeForAddressChecker(addressTypeComboBox.currentText) diff --git a/atomic_defi_design/Dex/Addressbook/EditContactModal.qml b/atomic_defi_design/Dex/Addressbook/EditContactModal.qml index 9a93b2ef9d..22993be058 100644 --- a/atomic_defi_design/Dex/Addressbook/EditContactModal.qml +++ b/atomic_defi_design/Dex/Addressbook/EditContactModal.qml @@ -234,17 +234,19 @@ Dex.MultipageModal Dex.Rectangle { id: tagBg + property int _currentColorIndex: contactTable._getCurrentTagColorId() anchors.verticalCenter: parent.verticalCenter width: tagLabel.width + 12 height: 21 radius: 20 - color: Dex.CurrentTheme.accentColor + color: Dex.CurrentTheme.addressBookTagColors[_currentColorIndex] Dex.Text { id: tagLabel anchors.centerIn: parent text: modelData + color: "white" } } diff --git a/atomic_defi_design/Dex/Addressbook/Main.qml b/atomic_defi_design/Dex/Addressbook/Main.qml index a60da139d8..fba4df4df4 100644 --- a/atomic_defi_design/Dex/Addressbook/Main.qml +++ b/atomic_defi_design/Dex/Addressbook/Main.qml @@ -216,6 +216,7 @@ Item id: tagLabel anchors.centerIn: parent text: modelData + color: "white" } } } From 2c3f9ae746f0da366c11453be5e70f8cfcacb847 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 10 Sep 2023 14:02:19 +0800 Subject: [PATCH 226/251] fix enable coins modal --- .../Dex/Wallet/EnableCoinModal.qml | 293 +++++++++--------- 1 file changed, 154 insertions(+), 139 deletions(-) diff --git a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml index 4ab058acca..367fcb756e 100644 --- a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml +++ b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml @@ -15,6 +15,8 @@ import Dex.Themes 1.0 as Dex MultipageModal { id: root + horizontalPadding: 35 + verticalPadding: 35 property var coin_cfg_model: API.app.portfolio_pg.global_cfg_mdl @@ -28,8 +30,7 @@ MultipageModal coin_cfg_model.all_disabled_proxy.setFilterFixedString(text === undefined ? input_coin_filter.textField.text : text) } - width: 676 - height: 720 + width: 600 onOpened: { @@ -45,12 +46,19 @@ MultipageModal coin_cfg_model.checked_nb = 0; } - MultipageModalContent + ColumnLayout { - titleText: qsTr("Enable assets") - titleAlignment: Qt.AlignHCenter - titleTopMargin: 15 - topMarginAfterTitle: 15 + spacing: 5 + anchors.fill: parent + + DefaultText + { + id: _title + Layout.topMargin: 5 + Layout.alignment: Qt.AlignHCenter + font: DexTypo.head6 + text: qsTr("Enable assets") + } // Search input SearchField @@ -59,185 +67,188 @@ MultipageModal searchIconLeftMargin: 20 Layout.alignment: Qt.AlignHCenter - Layout.topMargin: 10 + Layout.topMargin: 15 Layout.fillWidth: true - Layout.preferredHeight: 44 - textField.placeholderText: qsTr("Search asset") + Layout.preferredHeight: 40 + textField.placeholderText: qsTr("Search assets") textField.forceFocus: true textField.onTextChanged: filterCoins() } - RowLayout + MultipageModalContent { - spacing: 0 - Layout.topMargin: 10 - Layout.fillWidth: true - Layout.preferredHeight: 24 + titleTopMargin: 0 + topMarginAfterTitle: 0 + spacing: 5 - DefaultCheckBox - { - id: _selectAllCheckBox - Layout.fillWidth: true + RowLayout + { spacing: 0 - boxWidth: 20 - boxHeight: 20 - labelWidth: parent.width - 40 - label.wrapMode: Label.NoWrap - label.leftPadding: 24 + Layout.topMargin: 10 + Layout.fillWidth: true + Layout.preferredHeight: 24 - text: qsTr("Select all assets") - visible: list.visible + DefaultCheckBox + { + id: _selectAllCheckBox + Layout.fillWidth: true - onToggled: root.setCheckState(checked) - } - } + spacing: 0 + boxWidth: 20 + boxHeight: 20 + labelWidth: parent.width - 40 + label.wrapMode: Label.NoWrap + label.leftPadding: 24 - HorizontalLine { Layout.topMargin: 5; Layout.alignment: Qt.AlignHCenter; Layout.fillWidth: true } + text: qsTr("Select all assets") + visible: list.visible - DefaultListView - { - id: list - visible: coin_cfg_model.all_disabled_proxy.length > 0 - model: coin_cfg_model.all_disabled_proxy + onToggled: root.setCheckState(checked) + } + } - Layout.topMargin: -5 - Layout.alignment: Qt.AlignHCenter - Layout.preferredHeight: 300 - Layout.fillWidth: true + HorizontalLine { Layout.topMargin: 5; Layout.alignment: Qt.AlignHCenter; Layout.fillWidth: true } - delegate: Item + DefaultListView { - height: 30 - width: list.width + id: list + visible: coin_cfg_model.all_disabled_proxy.length > 0 + model: coin_cfg_model.all_disabled_proxy - RowLayout + Layout.topMargin: -5 + Layout.alignment: Qt.AlignHCenter + Layout.preferredHeight: 300 + Layout.fillWidth: true + + delegate: Item { - spacing: 0 - Layout.topMargin: 10 - Layout.fillWidth: true - Layout.preferredHeight: 24 + height: 30 + width: list.width - DefaultCheckBox + RowLayout { - id: listInnerRowCheckbox - readonly property bool backend_checked: model.checked - - Layout.fillWidth: true - spacing: 0 - boxWidth: 20 - boxHeight: 20 - labelWidth: parent.width - 40 + Layout.topMargin: 10 + Layout.fillWidth: true + Layout.preferredHeight: 24 - onBackend_checkedChanged: if (checked !== backend_checked) checked = backend_checked - onCheckStateChanged: + DefaultCheckBox { - if (checked !== backend_checked) - { - var data_index = coin_cfg_model.all_disabled_proxy.index(index, 0) - if ((coin_cfg_model.all_disabled_proxy.setData(data_index, checked, Qt.UserRole + 11)) === false) - { - checked = false - } - } - } + id: listInnerRowCheckbox + readonly property bool backend_checked: model.checked + + Layout.fillWidth: true - contentItem: RowLayout - { - Layout.alignment: Qt.AlignVCenter spacing: 0 + boxWidth: 20 + boxHeight: 20 + labelWidth: parent.width - 40 - // Icon - DefaultImage + onBackend_checkedChanged: if (checked !== backend_checked) checked = backend_checked + onCheckStateChanged: { - id: icon - Layout.leftMargin: 24 - Layout.alignment: Qt.AlignVCenter - source: General.coinIcon(model.ticker) - Layout.preferredWidth: 18 - Layout.preferredHeight: 18 + if (checked !== backend_checked) + { + var data_index = coin_cfg_model.all_disabled_proxy.index(index, 0) + if ((coin_cfg_model.all_disabled_proxy.setData(data_index, checked, Qt.UserRole + 11)) === false) + { + checked = false + } + } } - DefaultText + contentItem: RowLayout { - Layout.leftMargin: 4 Layout.alignment: Qt.AlignVCenter - text: model.name + " (" + model.ticker + ")" - } + spacing: 0 - CoinTypeTag - { - id: typeTag - Layout.leftMargin: 6 - Layout.alignment: Qt.AlignVCenter - type: model.type - } + // Icon + DefaultImage + { + id: icon + Layout.leftMargin: 24 + Layout.alignment: Qt.AlignVCenter + source: General.coinIcon(model.ticker) + Layout.preferredWidth: 18 + Layout.preferredHeight: 18 + } - CoinTypeTag - { - Layout.leftMargin: 6 - Layout.alignment: Qt.AlignVCenter - enabled: General.isIDO(model.ticker) - visible: enabled - type: "IDO" - } + DefaultText + { + Layout.leftMargin: 4 + Layout.alignment: Qt.AlignVCenter + text: model.name + " (" + model.ticker + ")" + } - CoinTypeTag - { - Layout.leftMargin: 6 - Layout.alignment: Qt.AlignVCenter - enabled: API.app.portfolio_pg.global_cfg_mdl.get_coin_info(model.ticker).is_wallet_only - visible: enabled - type: "WALLET ONLY" + CoinTypeTag + { + id: typeTag + Layout.leftMargin: 6 + Layout.alignment: Qt.AlignVCenter + type: model.type + } + + CoinTypeTag + { + Layout.leftMargin: 6 + Layout.alignment: Qt.AlignVCenter + enabled: General.isIDO(model.ticker) + visible: enabled + type: "IDO" + } + + CoinTypeTag + { + Layout.leftMargin: 6 + Layout.alignment: Qt.AlignVCenter + enabled: API.app.portfolio_pg.global_cfg_mdl.get_coin_info(model.ticker).is_wallet_only + visible: enabled + type: "WALLET ONLY" + } } } } - } - DefaultMouseArea - { - anchors.fill: parent - onClicked: listInnerRowCheckbox.checked = !listInnerRowCheckbox.checked + DefaultMouseArea + { + anchors.fill: parent + onClicked: listInnerRowCheckbox.checked = !listInnerRowCheckbox.checked + } } } - } - - Item - { - Layout.topMargin: 6 - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - DefaultText + Item { - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - text: coin_cfg_model.all_disabled_proxy.length > 0 ? - qsTr("You can still enable %1 assets. Selected: %2.") - .arg(setting_modal.enableable_coins_count - API.app.portfolio_pg.portfolio_mdl.length - coin_cfg_model.checked_nb) - .arg(coin_cfg_model.checked_nb) : - qsTr("All assets are already enabled!") - - color: Dex.CurrentTheme.textPlaceholderColor + Layout.topMargin: 6 + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + + DefaultText + { + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + text: coin_cfg_model.all_disabled_proxy.length > 0 ? + qsTr("You can still enable %1 assets. Selected: %2.") + .arg(setting_modal.enableable_coins_count - API.app.portfolio_pg.portfolio_mdl.length - coin_cfg_model.checked_nb) + .arg(coin_cfg_model.checked_nb) : + qsTr("All assets are already enabled!") + + color: Dex.CurrentTheme.textPlaceholderColor + } } } - HorizontalLine { Layout.preferredWidth: 500; Layout.alignment: Qt.AlignHCenter } - Item { Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true - Layout.topMargin: 10 - Layout.preferredHeight: 60 + Layout.preferredHeight: 40 DexTransparentButton { anchors.left: parent.left text: qsTr("Change assets limit") - topPadding: 5 - bottomPadding: 5 Layout.preferredHeight: 35 onClicked: { @@ -250,8 +261,6 @@ MultipageModal { anchors.right: parent.right text: qsTr("Add a custom asset") - topPadding: 5 - bottomPadding: 5 Layout.preferredHeight: 35 iconSource: Qaterial.Icons.plus onClicked: { @@ -261,16 +270,22 @@ MultipageModal } } - footer: - [ + // Footer + RowLayout + { + id: _footer + Layout.topMargin: Style.rowSpacing + spacing: Style.buttonSpacing + height: 40 + CancelButton { Layout.preferredWidth: 199 text: qsTr("Cancel") radius: 20 onClicked: root.close() - }, - Item { Layout.fillWidth: true }, + } + Item { Layout.fillWidth: true } DexGradientAppButton { @@ -288,6 +303,6 @@ MultipageModal root.close() } } - ] + } } } From 6f1c4f2772428fa834d8c81ec780f9df4a6cc668 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 10 Sep 2023 16:02:58 +0800 Subject: [PATCH 227/251] comment out request --- src/core/atomicdex/models/qt.orders.model.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/atomicdex/models/qt.orders.model.cpp b/src/core/atomicdex/models/qt.orders.model.cpp index 8a74a41fed..184c531e06 100644 --- a/src/core/atomicdex/models/qt.orders.model.cpp +++ b/src/core/atomicdex/models/qt.orders.model.cpp @@ -716,7 +716,8 @@ namespace atomic_dex mm2::to_json(json_data, req); batch.push_back(json_data); - SPDLOG_DEBUG("recover_funds_of_swap request: {}", json_data.dump(-1)); + // json_data["userpass"] = "*****"; + // SPDLOG_DEBUG("recover_funds_of_swap request: {}", json_data.dump(-1)); auto answer_functor = [this](web::http::http_response resp) { From a9b7b45261ebe3cb419950e9eadee8f3cb2d984f Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 10 Sep 2023 16:04:43 +0800 Subject: [PATCH 228/251] fix remaining count section --- .../Dex/Wallet/EnableCoinModal.qml | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml index 367fcb756e..9d7ba9de07 100644 --- a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml +++ b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml @@ -217,25 +217,23 @@ MultipageModal } } } + } - Item + Item + { + Layout.topMargin: 6 + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + DefaultText { - Layout.topMargin: 6 - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - - DefaultText - { - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - text: coin_cfg_model.all_disabled_proxy.length > 0 ? - qsTr("You can still enable %1 assets. Selected: %2.") - .arg(setting_modal.enableable_coins_count - API.app.portfolio_pg.portfolio_mdl.length - coin_cfg_model.checked_nb) - .arg(coin_cfg_model.checked_nb) : - qsTr("All assets are already enabled!") - - color: Dex.CurrentTheme.textPlaceholderColor - } + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + text: coin_cfg_model.all_disabled_proxy.length > 0 ? + qsTr("You can still enable %1 assets. Selected: %2.") + .arg(setting_modal.enableable_coins_count - API.app.portfolio_pg.portfolio_mdl.length - coin_cfg_model.checked_nb) + .arg(coin_cfg_model.checked_nb) : + qsTr("All assets are already enabled!") + color: Dex.CurrentTheme.textPlaceholderColor } } From 4d2c05ed794e82eb135d5dcd6ad8cf06a7079ef0 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 11 Sep 2023 00:44:58 +0800 Subject: [PATCH 229/251] sync z coin from spaling --- CMakeLists.txt | 6 +++--- src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d1ff8db01..9956a24d5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,13 +60,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.5-beta/mm2-1d8bebd15-Darwin-Release.zip) + URL https://sdk.devbuilds.komodo.earth/main/mm2_79f6205-mac-x86-64.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.5-beta/mm2-1d8bebd15-Linux-Release.zip) + URL https://sdk.devbuilds.komodo.earth/main/mm2_79f6205-linux-x86-64.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.5-beta/mm2-1d8bebd15-Win64.zip) + URL https://sdk.devbuilds.komodo.earth/main/mm2_79f6205-win-x86-64.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp index c349150d4a..5cfa3f3ce8 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp @@ -28,9 +28,11 @@ namespace atomic_dex::mm2 { j["params"]["ticker"] = request.coin_name; j["params"]["activation_params"]["mode"]["rpc"] = "Light"; + j["params"]["activation_params"]["sync_params"] = "earliest"; j["params"]["activation_params"]["mode"]["rpc_data"]["electrum_servers"] = request.servers; j["params"]["activation_params"]["mode"]["rpc_data"]["light_wallet_d_servers"] = request.z_urls; j["params"]["tx_history"] = request.with_tx_history; + earliest } //! Deserialization From 79d3bf626cc64643e79af536fbc8858e3e7734ee Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 11 Sep 2023 17:27:38 +0800 Subject: [PATCH 230/251] use checkpoint block as sync_param.height in zhtlc activation --- atomic_defi_design/Dex/Constants/General.qml | 11 ++++++++--- .../api/mm2/rpc2.task.enable_z_coin.init.cpp | 5 +++-- .../api/mm2/rpc2.task.enable_z_coin.init.hpp | 1 + src/core/atomicdex/config/coins.cfg.cpp | 8 +++++++- src/core/atomicdex/config/coins.cfg.hpp | 1 + .../atomicdex/models/qt.global.coins.cfg.model.cpp | 1 + src/core/atomicdex/services/mm2/mm2.service.cpp | 12 +++++++++++- 7 files changed, 32 insertions(+), 7 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index cdee60c2bc..2b3ae01d89 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -119,15 +119,19 @@ QtObject { function zhtlcActivationProgress(activation_status, coin='ARRR') { + // Around 90 mins for ARRR when using 'earliest' activation + // and params set as below + // j["params"]["activation_params"]["scan_blocks_per_iteration"] = 1000; + // j["params"]["activation_params"]["scan_interval_ms"] = 200; + + const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin) + let block_offset = coin_info.checkpoint_block let progress = 100 if (!activation_status.hasOwnProperty("result")) return progress // console.log("["+coin+"] [zhtlcActivationProgress]: " + JSON.stringify(activation_status)) let status = activation_status.result.status let details = activation_status.result.details - let block_offset = 0 - if (coin == 'ARRR') block_offset = 2000000 - // use range from checkpoint block to present if (!status) { @@ -153,6 +157,7 @@ QtObject { progress = 20 + parseInt(n/d*80) } else if (details.hasOwnProperty("RequestingBalance")) progress = 98 + else if (details.hasOwnProperty("ActivatingCoin")) progress = 5 else progress = 5 } else console.log("["+coin+"] [zhtlcActivationProgress] Unexpected status: " + status) diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp index 5cfa3f3ce8..bf63cfe8b1 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp @@ -28,11 +28,12 @@ namespace atomic_dex::mm2 { j["params"]["ticker"] = request.coin_name; j["params"]["activation_params"]["mode"]["rpc"] = "Light"; - j["params"]["activation_params"]["sync_params"] = "earliest"; + j["params"]["activation_params"]["scan_blocks_per_iteration"] = 1000; + j["params"]["activation_params"]["scan_interval_ms"] = 200; + j["params"]["activation_params"]["mode"]["rpc_data"]["sync_params"]["height"] = request.sync_height; j["params"]["activation_params"]["mode"]["rpc_data"]["electrum_servers"] = request.servers; j["params"]["activation_params"]["mode"]["rpc_data"]["light_wallet_d_servers"] = request.z_urls; j["params"]["tx_history"] = request.with_tx_history; - earliest } //! Deserialization diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp index a0e953fd8c..87e318d902 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp @@ -34,6 +34,7 @@ namespace atomic_dex::mm2 std::vector servers; std::vector z_urls; CoinType coin_type; + int sync_height{1000}; bool is_testnet{false}; bool with_tx_history{false}; // Not yet in API }; diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index 6ec8039b6b..1694db19e1 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -168,6 +168,7 @@ namespace atomic_dex cfg.wallet_only = is_wallet_only(cfg.ticker) ? is_wallet_only(cfg.ticker) : j.contains("wallet_only") ? j.at("wallet_only").get() : false; cfg.default_coin = is_default_coin(cfg.ticker); cfg.is_faucet_coin = is_faucet_coin(cfg.ticker); + cfg.checkpoint_block = 0; if (j.contains("other_types")) { @@ -224,7 +225,12 @@ namespace atomic_dex if (j.contains("light_wallet_d_servers")) { cfg.z_urls = j.at("light_wallet_d_servers").get>(); - } if (j.contains("alias_ticker")) + } + if (j.contains("check_point_block")) + { + cfg.checkpoint_block = j.at("check_point_block").get(); + } + if (j.contains("alias_ticker")) { cfg.alias_ticker = j.at("alias_ticker").get(); } diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index dc00fa5c5f..23e8f614ca 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -55,6 +55,7 @@ namespace atomic_dex std::string minimal_claim_amount{"0"}; CoinType coin_type; nlohmann::json activation_status; + int checkpoint_block{0}; bool segwit{false}; bool active{false}; bool checked{false}; diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp index 07783df5f1..4ff4282cb3 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp @@ -46,6 +46,7 @@ namespace {"is_testnet", coin.is_testnet.value_or(false)}, {"is_erc_family", coin.is_erc_family}, {"is_zhtlc_family", coin.is_zhtlc_family}, + {"checkpoint_block", coin.checkpoint_block}, {"is_wallet_only", coin.wallet_only}, {"has_memos", coin.has_memos}, {"fees_ticker", QString::fromStdString(coin.fees_ticker)}}; diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 08167dc525..9855b3e33d 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1404,6 +1404,7 @@ namespace atomic_dex .servers = coin_info.electrum_urls.value_or(get_electrum_server_from_token(coin_info.ticker)), .z_urls = coin_info.z_urls.value_or(std::vector{}), .coin_type = coin_info.coin_type, + .sync_height = coin_info.checkpoint_block, .is_testnet = coin_info.is_testnet.value_or(false), .with_tx_history = false}; // Tx history not yet ready for ZHTLC @@ -1411,6 +1412,7 @@ namespace atomic_dex mm2::to_json(j, request); nlohmann::json batch = nlohmann::json::array(); batch.push_back(j); + // SPDLOG_INFO("ZHTLC request: {}", batch.dump(4)); return {batch, {coin_info.ticker}}; }; @@ -1527,6 +1529,14 @@ namespace atomic_dex { event = "BuildingWalletDb"; } + else if (z_answers[0].at("result").at("details").contains("ActivatingCoin")) + { + event = "ActivatingCoin"; + } + else if (z_answers[0].at("result").at("details").contains("TemporaryError")) + { + event = "TemporaryError"; + } else { event = z_answers[0].at("result").at("details").get(); @@ -1553,7 +1563,7 @@ namespace atomic_dex m_coins_informations[tickers[idx]].activation_status = z_answers[0]; z_nb_try += 1; - } while (z_nb_try < 2000); + } while (z_nb_try < 5000); try { if (z_error[0].at("result").at("details").contains("error")) From 68de3f5fbf730e02c61c4c30ca5962a7806c84fa Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 11 Sep 2023 20:39:00 +0800 Subject: [PATCH 231/251] add settings option for pirate sync block --- .../Dex/Settings/SettingModal.qml | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/atomic_defi_design/Dex/Settings/SettingModal.qml b/atomic_defi_design/Dex/Settings/SettingModal.qml index aff1141241..185fd9166f 100644 --- a/atomic_defi_design/Dex/Settings/SettingModal.qml +++ b/atomic_defi_design/Dex/Settings/SettingModal.qml @@ -298,6 +298,52 @@ Qaterial.Dialog onClicked: openLogsFolder() } + // Notifications toggle + RowLayout + { + width: parent.width - 30 + anchors.horizontalCenter: parent.horizontalCenter + height: 50 + + DexLabel + { + Layout.alignment: Qt.AlignVCenter + Layout.fillWidth: true + font: DexTypo.subtitle1 + text: qsTr("ARRR sync height") + } + + Item { Layout.fillWidth: true } + + DexComboBox + { + id: pirate_sync_combo_box + Layout.alignment: Qt.AlignVCenter + width: 140 + height: 45 + dropDownMaxHeight: 600 + model: [ + 150000, + 300000, + 500000, + 750000, + 1000000, + 1250000, + 1500000, + 1750000, + 2000000, + 2250000, + 2500000 + ] + currentIndex: model.indexOf(parseInt(atomic_settings2.value("PirateSyncHeight"))) + onCurrentIndexChanged: atomic_settings2.setValue("PirateSyncHeight", model[currentIndex]) + Component.onCompleted: + { + currentIndex: model.indexOf(parseInt(atomic_settings2.value("PirateSyncHeight"))) + } + } + } + SettingsButton { width: parent.width - 30 From 91d82a12d40e7fb60b6e137da52a797c4df39b76 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 11 Sep 2023 21:07:20 +0800 Subject: [PATCH 232/251] use settings value for pirate sync block --- atomic_defi_design/Dex/Constants/General.qml | 8 +++----- src/app/main.prerequisites.hpp | 1 + .../api/mm2/rpc2.task.enable_z_coin.init.cpp | 2 -- src/core/atomicdex/pages/qt.settings.page.cpp | 13 +++++++++++++ src/core/atomicdex/pages/qt.settings.page.hpp | 2 ++ src/core/atomicdex/services/mm2/mm2.service.cpp | 16 +++++++++++++--- 6 files changed, 32 insertions(+), 10 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 2b3ae01d89..f071a1eb91 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -119,13 +119,11 @@ QtObject { function zhtlcActivationProgress(activation_status, coin='ARRR') { - // Around 90 mins for ARRR when using 'earliest' activation - // and params set as below - // j["params"]["activation_params"]["scan_blocks_per_iteration"] = 1000; - // j["params"]["activation_params"]["scan_interval_ms"] = 200; - const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin) let block_offset = coin_info.checkpoint_block + if (coin_info.ticker.toString() == "ARRR") { + block_offset = API.app.settings_pg.get_pirate_sync_block() + } let progress = 100 if (!activation_status.hasOwnProperty("result")) return progress // console.log("["+coin+"] [zhtlcActivationProgress]: " + JSON.stringify(activation_status)) diff --git a/src/app/main.prerequisites.hpp b/src/app/main.prerequisites.hpp index c88838c7a0..3080b11832 100644 --- a/src/app/main.prerequisites.hpp +++ b/src/app/main.prerequisites.hpp @@ -344,6 +344,7 @@ handle_settings(QSettings& settings) create_settings_functor("CurrentLang", QString("en")); create_settings_functor("2FA", 0); create_settings_functor("MaximumNbCoinsEnabled", 50); + create_settings_functor("PirateSyncHeight", 2500000); create_settings_functor("DefaultTradingMode", TradingMode::Simple); create_settings_functor("FontMode", QQuickWindow::TextRenderType::QtTextRendering); } diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp index bf63cfe8b1..8048d9d92c 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp @@ -28,8 +28,6 @@ namespace atomic_dex::mm2 { j["params"]["ticker"] = request.coin_name; j["params"]["activation_params"]["mode"]["rpc"] = "Light"; - j["params"]["activation_params"]["scan_blocks_per_iteration"] = 1000; - j["params"]["activation_params"]["scan_interval_ms"] = 200; j["params"]["activation_params"]["mode"]["rpc_data"]["sync_params"]["height"] = request.sync_height; j["params"]["activation_params"]["mode"]["rpc_data"]["electrum_servers"] = request.servers; j["params"]["activation_params"]["mode"]["rpc_data"]["light_wallet_d_servers"] = request.z_urls; diff --git a/src/core/atomicdex/pages/qt.settings.page.cpp b/src/core/atomicdex/pages/qt.settings.page.cpp index e63e29ab95..10a6ef01bf 100644 --- a/src/core/atomicdex/pages/qt.settings.page.cpp +++ b/src/core/atomicdex/pages/qt.settings.page.cpp @@ -79,6 +79,19 @@ namespace atomic_dex { void settings_page::update() {} } // Getters|Setters namespace atomic_dex { + int settings_page::get_pirate_sync_block() const + { + QSettings& settings = entity_registry_.ctx(); + return settings.value("PirateSyncHeight").toInt(); + } + + void settings_page::set_pirate_sync_block(int new_height) + { + QSettings& settings = entity_registry_.ctx(); + settings.setValue("PirateSyncHeight", new_height); + settings.sync(); + } + QString settings_page::get_current_lang() const { QSettings& settings = entity_registry_.ctx(); diff --git a/src/core/atomicdex/pages/qt.settings.page.hpp b/src/core/atomicdex/pages/qt.settings.page.hpp index 874e76aaf9..294b6e31a1 100644 --- a/src/core/atomicdex/pages/qt.settings.page.hpp +++ b/src/core/atomicdex/pages/qt.settings.page.hpp @@ -81,6 +81,7 @@ namespace atomic_dex [[nodiscard]] QString get_current_currency_sign() const; [[nodiscard]] QString get_current_fiat_sign() const; [[nodiscard]] QString get_current_fiat() const; + void set_pirate_sync_block(int new_height); [[nodiscard]] bool is_notification_enabled() const; void set_notification_enabled(bool is_enabled); [[nodiscard]] bool is_spamfilter_enabled() const; @@ -108,6 +109,7 @@ namespace atomic_dex Q_INVOKABLE [[nodiscard]] bool is_this_ticker_present_in_raw_cfg(const QString& ticker) const; Q_INVOKABLE [[nodiscard]] bool is_this_ticker_present_in_normal_cfg(const QString& ticker) const; Q_INVOKABLE [[nodiscard]] QString get_custom_coins_icons_path() const; + Q_INVOKABLE [[nodiscard]] int get_pirate_sync_block() const; Q_INVOKABLE void process_token_add(const QString& contract_address, const QString& coingecko_id, const QString& icon_filepath, CoinType coin_type); Q_INVOKABLE void process_qrc_20_token_add(const QString& contract_address, const QString& coingecko_id, const QString& icon_filepath); Q_INVOKABLE void submit(); diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 9855b3e33d..9bbb5e17a9 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include "atomicdex/api/mm2/utxo.merge.params.hpp" #include "atomicdex/api/mm2/rpc.electrum.hpp" @@ -37,6 +38,7 @@ #include "atomicdex/config/coins.cfg.hpp" #include "atomicdex/constants/dex.constants.hpp" #include "atomicdex/managers/qt.wallet.manager.hpp" +#include "atomicdex/pages/qt.settings.page.hpp" #include "atomicdex/services/internet/internet.checker.service.hpp" #include "atomicdex/services/mm2/mm2.service.hpp" #include "atomicdex/utilities/qt.utilities.hpp" @@ -1399,12 +1401,20 @@ namespace atomic_dex { auto request_functor = [this](coin_config coin_info) -> std::pair> { + int sync_from_block = coin_info.checkpoint_block; + if (coin_info.ticker == "ARRR") + { + SPDLOG_INFO("ARRR using settings for sync from block: {}", sync_from_block); + const auto& settings_system = m_system_manager.get_system(); + sync_from_block = settings_system.get_pirate_sync_block(); + } + t_enable_z_coin_request request{ .coin_name = coin_info.ticker, .servers = coin_info.electrum_urls.value_or(get_electrum_server_from_token(coin_info.ticker)), .z_urls = coin_info.z_urls.value_or(std::vector{}), .coin_type = coin_info.coin_type, - .sync_height = coin_info.checkpoint_block, + .sync_height = sync_from_block, .is_testnet = coin_info.is_testnet.value_or(false), .with_tx_history = false}; // Tx history not yet ready for ZHTLC @@ -1484,7 +1494,7 @@ namespace atomic_dex z_error = z_answers; std::string status = z_answers[0].at("result").at("status").get(); - SPDLOG_DEBUG("{} status : {}", tickers[idx], status); + // SPDLOG_DEBUG("{} status : {}", tickers[idx], status); SPDLOG_DEBUG("{} Activation Status: {}", tickers[idx], z_answers[0].dump()); if (status == "Ok") @@ -1541,7 +1551,7 @@ namespace atomic_dex { event = z_answers[0].at("result").at("details").get(); } - SPDLOG_DEBUG("{} activation event [{}]", event, tickers[idx]); + // SPDLOG_DEBUG("{} activation event [{}]", event, tickers[idx]); if (event != last_event) { From ed350b647ec5aa02b3010d832296716ba1dec491 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 11 Sep 2023 23:58:10 +0800 Subject: [PATCH 233/251] sanity for progress --- atomic_defi_design/Dex/Constants/General.qml | 8 +++++--- .../atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index f071a1eb91..9a8a237012 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -144,17 +144,19 @@ QtObject { { if (details.hasOwnProperty("UpdatingBlocksCache")) { + block_offset = details.UpdatingBlocksCache.first_sync_block.actual let n = details.UpdatingBlocksCache.current_scanned_block - block_offset let d = details.UpdatingBlocksCache.latest_block - block_offset - progress = 5 + parseInt(n/d*15) + progress = 5 + parseInt(n/d*40) } else if (details.hasOwnProperty("BuildingWalletDb")) { + block_offset = details.BuildingWalletDb.first_sync_block.actual let n = details.BuildingWalletDb.current_scanned_block - block_offset let d = details.BuildingWalletDb.latest_block - block_offset - progress = 20 + parseInt(n/d*80) + progress = 45 + parseInt(n/d*40) } - else if (details.hasOwnProperty("RequestingBalance")) progress = 98 + else if (details.hasOwnProperty("RequestingBalance")) progress = 95 else if (details.hasOwnProperty("ActivatingCoin")) progress = 5 else progress = 5 } diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp index 8048d9d92c..8ce493f11e 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp @@ -31,6 +31,8 @@ namespace atomic_dex::mm2 j["params"]["activation_params"]["mode"]["rpc_data"]["sync_params"]["height"] = request.sync_height; j["params"]["activation_params"]["mode"]["rpc_data"]["electrum_servers"] = request.servers; j["params"]["activation_params"]["mode"]["rpc_data"]["light_wallet_d_servers"] = request.z_urls; + j["params"]["activation_params"]["scan_blocks_per_iteration"] = 5000; + j["params"]["activation_params"]["scan_interval"] = 1000; j["params"]["tx_history"] = request.with_tx_history; } From 9795d20c44929d976671461738411d0b00bedcd7 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 12 Sep 2023 01:29:10 +0800 Subject: [PATCH 234/251] rm syncblock --- atomic_defi_design/Dex/Constants/General.qml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 9a8a237012..16efbecee3 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -119,11 +119,7 @@ QtObject { function zhtlcActivationProgress(activation_status, coin='ARRR') { - const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin) let block_offset = coin_info.checkpoint_block - if (coin_info.ticker.toString() == "ARRR") { - block_offset = API.app.settings_pg.get_pirate_sync_block() - } let progress = 100 if (!activation_status.hasOwnProperty("result")) return progress // console.log("["+coin+"] [zhtlcActivationProgress]: " + JSON.stringify(activation_status)) From 54f912c4eef1ad9ffe7160f9a4d98c4a4258d347 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 12 Sep 2023 02:46:32 +0800 Subject: [PATCH 235/251] sync by date --- atomic_defi_design/Dex/Constants/General.qml | 2 + .../Dex/Settings/SettingModal.qml | 46 ++++++++----------- src/app/main.prerequisites.hpp | 4 +- .../api/mm2/rpc2.task.enable_z_coin.init.cpp | 4 +- .../api/mm2/rpc2.task.enable_z_coin.init.hpp | 2 +- src/core/atomicdex/config/coins.cfg.cpp | 6 +-- src/core/atomicdex/config/coins.cfg.hpp | 1 - .../models/qt.global.coins.cfg.model.cpp | 1 - src/core/atomicdex/pages/qt.settings.page.cpp | 8 ++-- src/core/atomicdex/pages/qt.settings.page.hpp | 4 +- .../atomicdex/services/mm2/mm2.service.cpp | 11 ++--- 11 files changed, 38 insertions(+), 51 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 16efbecee3..80897cd247 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -119,6 +119,8 @@ QtObject { function zhtlcActivationProgress(activation_status, coin='ARRR') { + + const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin) let block_offset = coin_info.checkpoint_block let progress = 100 if (!activation_status.hasOwnProperty("result")) return progress diff --git a/atomic_defi_design/Dex/Settings/SettingModal.qml b/atomic_defi_design/Dex/Settings/SettingModal.qml index 185fd9166f..b4a1dd3d83 100644 --- a/atomic_defi_design/Dex/Settings/SettingModal.qml +++ b/atomic_defi_design/Dex/Settings/SettingModal.qml @@ -25,6 +25,8 @@ Qaterial.Dialog property var fiats: API.app.settings_pg.get_available_fiats() property var enableable_coins_count: enableable_coins_count_combo_box.currentValue property var orders: API.app.orders_mdl.orders_proxy_mdl.ModelHelper + readonly property date default_min_date: new Date("2019-01-01") + readonly property date default_max_date: new Date(new Date().setDate(new Date().getDate())) width: 950 height: 650 @@ -298,7 +300,7 @@ Qaterial.Dialog onClicked: openLogsFolder() } - // Notifications toggle + // Sync date picker RowLayout { width: parent.width - 30 @@ -310,36 +312,28 @@ Qaterial.Dialog Layout.alignment: Qt.AlignVCenter Layout.fillWidth: true font: DexTypo.subtitle1 - text: qsTr("ARRR sync height") + text: qsTr("ZHTLC sync date") } Item { Layout.fillWidth: true } - DexComboBox + DatePicker { - id: pirate_sync_combo_box - Layout.alignment: Qt.AlignVCenter - width: 140 - height: 45 - dropDownMaxHeight: 600 - model: [ - 150000, - 300000, - 500000, - 750000, - 1000000, - 1250000, - 1500000, - 1750000, - 2000000, - 2250000, - 2500000 - ] - currentIndex: model.indexOf(parseInt(atomic_settings2.value("PirateSyncHeight"))) - onCurrentIndexChanged: atomic_settings2.setValue("PirateSyncHeight", model[currentIndex]) - Component.onCompleted: - { - currentIndex: model.indexOf(parseInt(atomic_settings2.value("PirateSyncHeight"))) + id: sync_date + titleText: qsTr("Sync Date") + minimumDate: default_min_date + maximumDate: default_max_date + selectedDate: { + var date = new Date(new Date(0).setUTCSeconds(API.app.settings_pg.get_pirate_sync_date())); + console.log(API.app.settings_pg.get_pirate_sync_date()); + console.log(date); + return date; + } + onAccepted: { + atomic_settings2.setValue( + "PirateSyncDate", + parseInt(selectedDate.getTime().valueOf()/1000) + ) } } } diff --git a/src/app/main.prerequisites.hpp b/src/app/main.prerequisites.hpp index 3080b11832..1cf9cc9d09 100644 --- a/src/app/main.prerequisites.hpp +++ b/src/app/main.prerequisites.hpp @@ -338,13 +338,15 @@ handle_settings(QSettings& settings) #else create_settings_functor("ThemePath", QString::fromStdString(atomic_dex::utils::get_themes_path().string())); #endif + using namespace std::chrono; + int timestamp = duration_cast(system_clock::now().time_since_epoch()).count() - 86400 * 2; create_settings_functor("AutomaticUpdateOrderBot", QVariant(false)); create_settings_functor("WalletChartsCategory", qint32(WalletChartsCategories::OneMonth)); create_settings_functor("AvailableLang", QStringList{"en", "es", "fr", "de", "tr", "ru"}); create_settings_functor("CurrentLang", QString("en")); create_settings_functor("2FA", 0); create_settings_functor("MaximumNbCoinsEnabled", 50); - create_settings_functor("PirateSyncHeight", 2500000); + create_settings_functor("PirateSyncDate", timestamp); create_settings_functor("DefaultTradingMode", TradingMode::Simple); create_settings_functor("FontMode", QQuickWindow::TextRenderType::QtTextRendering); } diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp index 8ce493f11e..52be36e7da 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp @@ -28,11 +28,11 @@ namespace atomic_dex::mm2 { j["params"]["ticker"] = request.coin_name; j["params"]["activation_params"]["mode"]["rpc"] = "Light"; - j["params"]["activation_params"]["mode"]["rpc_data"]["sync_params"]["height"] = request.sync_height; + j["params"]["activation_params"]["mode"]["rpc_data"]["sync_params"]["date"] = request.sync_date; j["params"]["activation_params"]["mode"]["rpc_data"]["electrum_servers"] = request.servers; j["params"]["activation_params"]["mode"]["rpc_data"]["light_wallet_d_servers"] = request.z_urls; j["params"]["activation_params"]["scan_blocks_per_iteration"] = 5000; - j["params"]["activation_params"]["scan_interval"] = 1000; + j["params"]["activation_params"]["scan_interval"] = 0; j["params"]["tx_history"] = request.with_tx_history; } diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp index 87e318d902..44ecaff091 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp @@ -34,7 +34,7 @@ namespace atomic_dex::mm2 std::vector servers; std::vector z_urls; CoinType coin_type; - int sync_height{1000}; + int sync_date{1672531200}; // Jan 1st 2023 bool is_testnet{false}; bool with_tx_history{false}; // Not yet in API }; diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index 1694db19e1..b4ba166dec 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -168,7 +168,7 @@ namespace atomic_dex cfg.wallet_only = is_wallet_only(cfg.ticker) ? is_wallet_only(cfg.ticker) : j.contains("wallet_only") ? j.at("wallet_only").get() : false; cfg.default_coin = is_default_coin(cfg.ticker); cfg.is_faucet_coin = is_faucet_coin(cfg.ticker); - cfg.checkpoint_block = 0; + using namespace std::chrono; if (j.contains("other_types")) { @@ -226,10 +226,6 @@ namespace atomic_dex { cfg.z_urls = j.at("light_wallet_d_servers").get>(); } - if (j.contains("check_point_block")) - { - cfg.checkpoint_block = j.at("check_point_block").get(); - } if (j.contains("alias_ticker")) { cfg.alias_ticker = j.at("alias_ticker").get(); diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index 23e8f614ca..dc00fa5c5f 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -55,7 +55,6 @@ namespace atomic_dex std::string minimal_claim_amount{"0"}; CoinType coin_type; nlohmann::json activation_status; - int checkpoint_block{0}; bool segwit{false}; bool active{false}; bool checked{false}; diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp index 4ff4282cb3..07783df5f1 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp @@ -46,7 +46,6 @@ namespace {"is_testnet", coin.is_testnet.value_or(false)}, {"is_erc_family", coin.is_erc_family}, {"is_zhtlc_family", coin.is_zhtlc_family}, - {"checkpoint_block", coin.checkpoint_block}, {"is_wallet_only", coin.wallet_only}, {"has_memos", coin.has_memos}, {"fees_ticker", QString::fromStdString(coin.fees_ticker)}}; diff --git a/src/core/atomicdex/pages/qt.settings.page.cpp b/src/core/atomicdex/pages/qt.settings.page.cpp index 10a6ef01bf..0b16c79c31 100644 --- a/src/core/atomicdex/pages/qt.settings.page.cpp +++ b/src/core/atomicdex/pages/qt.settings.page.cpp @@ -79,16 +79,16 @@ namespace atomic_dex { void settings_page::update() {} } // Getters|Setters namespace atomic_dex { - int settings_page::get_pirate_sync_block() const + int settings_page::get_pirate_sync_date() const { QSettings& settings = entity_registry_.ctx(); - return settings.value("PirateSyncHeight").toInt(); + return settings.value("PirateSyncDate").toInt(); } - void settings_page::set_pirate_sync_block(int new_height) + void settings_page::set_pirate_sync_date(int new_timestamp) { QSettings& settings = entity_registry_.ctx(); - settings.setValue("PirateSyncHeight", new_height); + settings.setValue("PirateSyncDate", new_timestamp); settings.sync(); } diff --git a/src/core/atomicdex/pages/qt.settings.page.hpp b/src/core/atomicdex/pages/qt.settings.page.hpp index 294b6e31a1..d9a201c534 100644 --- a/src/core/atomicdex/pages/qt.settings.page.hpp +++ b/src/core/atomicdex/pages/qt.settings.page.hpp @@ -81,7 +81,7 @@ namespace atomic_dex [[nodiscard]] QString get_current_currency_sign() const; [[nodiscard]] QString get_current_fiat_sign() const; [[nodiscard]] QString get_current_fiat() const; - void set_pirate_sync_block(int new_height); + void set_pirate_sync_date(int new_timestamp); [[nodiscard]] bool is_notification_enabled() const; void set_notification_enabled(bool is_enabled); [[nodiscard]] bool is_spamfilter_enabled() const; @@ -109,7 +109,7 @@ namespace atomic_dex Q_INVOKABLE [[nodiscard]] bool is_this_ticker_present_in_raw_cfg(const QString& ticker) const; Q_INVOKABLE [[nodiscard]] bool is_this_ticker_present_in_normal_cfg(const QString& ticker) const; Q_INVOKABLE [[nodiscard]] QString get_custom_coins_icons_path() const; - Q_INVOKABLE [[nodiscard]] int get_pirate_sync_block() const; + Q_INVOKABLE [[nodiscard]] int get_pirate_sync_date() const; Q_INVOKABLE void process_token_add(const QString& contract_address, const QString& coingecko_id, const QString& icon_filepath, CoinType coin_type); Q_INVOKABLE void process_qrc_20_token_add(const QString& contract_address, const QString& coingecko_id, const QString& icon_filepath); Q_INVOKABLE void submit(); diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 9bbb5e17a9..e3e8841096 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1401,20 +1401,15 @@ namespace atomic_dex { auto request_functor = [this](coin_config coin_info) -> std::pair> { - int sync_from_block = coin_info.checkpoint_block; - if (coin_info.ticker == "ARRR") - { - SPDLOG_INFO("ARRR using settings for sync from block: {}", sync_from_block); - const auto& settings_system = m_system_manager.get_system(); - sync_from_block = settings_system.get_pirate_sync_block(); - } + const auto& settings_system = m_system_manager.get_system(); + int sync_from_date = settings_system.get_pirate_sync_date(); t_enable_z_coin_request request{ .coin_name = coin_info.ticker, .servers = coin_info.electrum_urls.value_or(get_electrum_server_from_token(coin_info.ticker)), .z_urls = coin_info.z_urls.value_or(std::vector{}), .coin_type = coin_info.coin_type, - .sync_height = sync_from_block, + .sync_date = sync_from_date, .is_testnet = coin_info.is_testnet.value_or(false), .with_tx_history = false}; // Tx history not yet ready for ZHTLC From 8812902d270d32c3db99feec4df66571f5054716 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 12 Sep 2023 15:14:34 +0800 Subject: [PATCH 236/251] no duplicates in recommended fiats --- src/core/atomicdex/config/app.cfg.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core/atomicdex/config/app.cfg.cpp b/src/core/atomicdex/config/app.cfg.cpp index 8b5b81899d..ba9fb02313 100644 --- a/src/core/atomicdex/config/app.cfg.cpp +++ b/src/core/atomicdex/config/app.cfg.cpp @@ -149,9 +149,14 @@ namespace atomic_dex config.current_fiat = new_currency; config.current_fiat_sign = config.current_currency_sign; config.possible_currencies[0] = new_currency; + bool update_recommended_fiat{true}; - if (!std::binary_search(config.recommended_fiat.begin(), config.recommended_fiat.end(), new_currency)) + if (std::count(config.recommended_fiat.begin(), config.recommended_fiat.end(), new_currency)) { + SPDLOG_INFO("{} is already in recommended fiats", new_currency); + update_recommended_fiat = false; + } + if (update_recommended_fiat) { SPDLOG_INFO("Adding {} to recommended fiats", new_currency); config.recommended_fiat.pop_back(); config.recommended_fiat.insert(config.recommended_fiat.begin(), new_currency); From 9cadcf566456e4dec8fdbb2ef434eebf27bd1e1a Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 13 Sep 2023 11:47:05 +0800 Subject: [PATCH 237/251] fix bad conditional --- src/core/atomicdex/api/mm2/mm2.client.cpp | 3 ++- src/core/atomicdex/services/mm2/mm2.service.cpp | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/core/atomicdex/api/mm2/mm2.client.cpp b/src/core/atomicdex/api/mm2/mm2.client.cpp index d2190d63c4..3dd79528fe 100644 --- a/src/core/atomicdex/api/mm2/mm2.client.cpp +++ b/src/core/atomicdex/api/mm2/mm2.client.cpp @@ -72,11 +72,12 @@ namespace template Rpc process_rpc_answer(const web::http::http_response& answer) { + // SPDLOG_DEBUG("rpc answer: {}", TO_STD_STR(answer.extract_string(true).get())); Rpc rpc; auto json_answer = nlohmann::json::parse(TO_STD_STR(answer.extract_string(true).get())); - if (Rpc::is_v2) { + // SPDLOG_DEBUG("v2 rpc answer") if (answer.status_code() == 200) rpc.result = json_answer.at("result").get(); else diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 08167dc525..53ac16909d 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -527,17 +527,18 @@ namespace atomic_dex { cosmos_coins.push_back(coin_config); } - if (coin_config.parent_coin == "IRIS") + else if (coin_config.parent_coin == "IRIS") { iris_coins.push_back(coin_config); } - if (coin_config.parent_coin == "OSMO") + else if (coin_config.parent_coin == "OSMO") { osmosis_coins.push_back(coin_config); } else { - SPDLOG_WARN("Unexpected Tenddermint ticker: {}", coin_config.ticker); + SPDLOG_WARN("Unexpected Tendermint ticker: {}", coin_config.ticker); + SPDLOG_WARN("Parent coin: {}", coin_config.parent_coin); } } else if (coin_config.coin_type == CoinType::ZHTLC) @@ -890,6 +891,7 @@ namespace atomic_dex } rpc.request.tokens_params.push_back({.ticker = coin_config.ticker}); } + SPDLOG_DEBUG("RPC Req: {}", rpc.request.dump(4)); m_mm2_client.process_rpc_async(rpc.request, callback); } this->m_nb_update_required += 1; From bd59af9c2c7c5e1f8464e9a267facbfafd442e5c Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 15 Sep 2023 12:49:08 +0800 Subject: [PATCH 238/251] rm log --- src/core/atomicdex/services/mm2/mm2.service.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 53ac16909d..ed4940a814 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -891,7 +891,6 @@ namespace atomic_dex } rpc.request.tokens_params.push_back({.ticker = coin_config.ticker}); } - SPDLOG_DEBUG("RPC Req: {}", rpc.request.dump(4)); m_mm2_client.process_rpc_async(rpc.request, callback); } this->m_nb_update_required += 1; From 4b6cb3c5e988e9e4b8a6be40e3f707cdb2a4d0de Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 15 Sep 2023 16:46:40 +0800 Subject: [PATCH 239/251] use info instead of debug logs --- .../atomicdex/services/mm2/mm2.service.cpp | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index e3e8841096..327b60d6b8 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1474,7 +1474,7 @@ namespace atomic_dex nlohmann::json z_batch_array = nlohmann::json::array(); t_enable_z_coin_status_request z_request{.task_id = task_id}; - SPDLOG_DEBUG("{} enable_z_coin Task ID: {}", tickers[idx], task_id); + SPDLOG_INFO("{} enable_z_coin Task ID: {}", tickers[idx], task_id); nlohmann::json j = mm2::template_request("task::enable_z_coin::status", true); mm2::to_json(j, z_request); @@ -1490,11 +1490,11 @@ namespace atomic_dex std::string status = z_answers[0].at("result").at("status").get(); // SPDLOG_DEBUG("{} status : {}", tickers[idx], status); - SPDLOG_DEBUG("{} Activation Status: {}", tickers[idx], z_answers[0].dump()); + SPDLOG_INFO("{} Activation Status: {}", tickers[idx], z_answers[0].dump()); if (status == "Ok") { - SPDLOG_DEBUG("{} activation ready...", tickers[idx]); + SPDLOG_INFO("{} activation ready...", tickers[idx]); m_coins_informations[tickers[idx]].activation_status = z_answers[0]; if (z_answers[0].at("result").at("details").contains("error")) { @@ -1506,10 +1506,10 @@ namespace atomic_dex } } event = z_answers[0].at("result").at("details").at("error").get(); - SPDLOG_DEBUG("Enabling [{}] error: {}", tickers[idx], event); + SPDLOG_INFO("Enabling [{}] error: {}", tickers[idx], event); break; } - SPDLOG_DEBUG("{} activation complete!", tickers[idx]); + SPDLOG_INFO("{} activation complete!", tickers[idx]); std::unique_lock lock(m_coin_cfg_mutex); m_coins_informations[tickers[idx]].currently_enabled = true; @@ -1550,7 +1550,7 @@ namespace atomic_dex if (event != last_event) { - SPDLOG_DEBUG("Waiting for {} to enable [{}: {}]...", tickers[idx], status, event); + SPDLOG_INFO("Waiting for {} to enable [{}: {}]...", tickers[idx], status, event); if (!m_coins_informations[tickers[idx]].currently_enabled && event != "ActivatingCoin") { std::unique_lock lock(m_coin_cfg_mutex); @@ -1573,8 +1573,8 @@ namespace atomic_dex try { if (z_error[0].at("result").at("details").contains("error")) { - SPDLOG_DEBUG("Error enabling {}: {} ", tickers[idx], event); - SPDLOG_DEBUG( + SPDLOG_INFO("Error enabling {}: {} ", tickers[idx], event); + SPDLOG_INFO( "Removing zhtlc from enabling, idx: {}, tickers size: {}, answers size: {}", tickers[idx], idx, tickers.size(), answers.size() ); @@ -1590,8 +1590,8 @@ namespace atomic_dex // Either we force disable here, or schedule to check on it later // If this happens, address will be "Invalid" and balance will be zero. // We could save this ticker in a list to try `enable_z_coin_status` again on it periodically until complete. - SPDLOG_DEBUG("Exited {} enable loop after 1000 tries ", tickers[idx]); - SPDLOG_DEBUG( + SPDLOG_INFO("Exited {} enable loop after 1000 tries ", tickers[idx]); + SPDLOG_INFO( "Bad answer for zhtlc_error: [{}] -> idx: {}, tickers size: {}, answers size: {}", tickers[idx], idx, tickers.size(), answers.size() ); @@ -1601,13 +1601,13 @@ namespace atomic_dex } else { - SPDLOG_DEBUG("{} enable loop complete!", tickers[idx]); + SPDLOG_INFO("{} enable loop complete!", tickers[idx]); this->dispatcher_.trigger(tickers[idx], "Complete!"); } } catch (const std::exception& error) { - SPDLOG_ERROR("exception caught in zhtlc batch_enable_coins: {}", error.what()); + SPDLOG_INFO("exception caught in zhtlc batch_enable_coins: {}", error.what()); } } } From e248a6867936e34f5aa865d71ddf6dc80b3b1e7a Mon Sep 17 00:00:00 2001 From: smk762 Date: Sun, 17 Sep 2023 00:54:35 +0800 Subject: [PATCH 240/251] extend z coin activation loop --- src/core/atomicdex/services/mm2/mm2.service.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 327b60d6b8..27a3482e2c 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1563,12 +1563,12 @@ namespace atomic_dex last_event = event; } // todo(syl): refactor to a background task - std::this_thread::sleep_for(2s); + std::this_thread::sleep_for(5s); } m_coins_informations[tickers[idx]].activation_status = z_answers[0]; z_nb_try += 1; - } while (z_nb_try < 5000); + } while (z_nb_try < 10000); try { if (z_error[0].at("result").at("details").contains("error")) @@ -1583,14 +1583,14 @@ namespace atomic_dex this->dispatcher_.trigger(tickers[idx], z_error[0].dump(4)); to_remove.emplace(tickers[idx]); } - else if (z_nb_try == 1000) + else if (z_nb_try == 10000) { // TODO: Handle this case. // There could be no error message if scanning takes too long. // Either we force disable here, or schedule to check on it later // If this happens, address will be "Invalid" and balance will be zero. // We could save this ticker in a list to try `enable_z_coin_status` again on it periodically until complete. - SPDLOG_INFO("Exited {} enable loop after 1000 tries ", tickers[idx]); + SPDLOG_INFO("Exited {} enable loop after 10000 tries ", tickers[idx]); SPDLOG_INFO( "Bad answer for zhtlc_error: [{}] -> idx: {}, tickers size: {}, answers size: {}", tickers[idx], idx, tickers.size(), answers.size() From 6408792c9e5a14b7e4bc583c8cc394f1f6a10744 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 18 Sep 2023 20:55:14 +0800 Subject: [PATCH 241/251] use release api --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 54881394bf..0518002205 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,13 +60,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://sdk.devbuilds.komodo.earth/main/mm2_79f6205-mac-x86-64.zip) + URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.7-beta/mm2-79f620559-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://sdk.devbuilds.komodo.earth/main/mm2_79f6205-linux-x86-64.zip) + URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.7-beta/mm2-79f620559-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://sdk.devbuilds.komodo.earth/main/mm2_79f6205-win-x86-64.zip) + URL https://github.com/KomodoPlatform/komodo-defi-framework/releases/download/v1.0.7-beta/mm2-79f620559-Win64.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) From 4c37bd18e486c87ca08963435f0346b3ddf1d8a4 Mon Sep 17 00:00:00 2001 From: smk762 Date: Tue, 19 Sep 2023 12:22:14 +0800 Subject: [PATCH 242/251] fix anchors error --- atomic_defi_design/Dex/Wallet/EnableCoinModal.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml index 9d7ba9de07..d8f53a2d3f 100644 --- a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml +++ b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml @@ -49,7 +49,8 @@ MultipageModal ColumnLayout { spacing: 5 - anchors.fill: parent + Layout.fillWidth: true + Layout.fillHeight: true DefaultText { From 3c2a1332959d9dc962276a1a019929169ba7c8e7 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 20 Sep 2023 02:28:28 +0800 Subject: [PATCH 243/251] fix simple highlight header margin --- .../Dex/Exchange/Trade/Trading/TradeViewHeader.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/atomic_defi_design/Dex/Exchange/Trade/Trading/TradeViewHeader.qml b/atomic_defi_design/Dex/Exchange/Trade/Trading/TradeViewHeader.qml index 15755c1920..8cc01d06d4 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/Trading/TradeViewHeader.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/Trading/TradeViewHeader.qml @@ -47,6 +47,7 @@ Item id: _simpleLabel text: "Simple" color: API.app.trading_pg.current_trading_mode == TradingMode.Simple ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.foregroundColor2 + anchors.leftMargin: 16 anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter font.pixelSize: 14 From b91b8bfaa6f4a85817c82cf79a40d8ced0adc601 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 20 Sep 2023 16:17:55 +0800 Subject: [PATCH 244/251] Use rounded derived height sync param --- CMakeLists.txt | 2 +- atomic_defi_design/Dex/Constants/General.qml | 11 ++++----- .../api/mm2/rpc2.task.enable_z_coin.init.cpp | 2 +- .../api/mm2/rpc2.task.enable_z_coin.init.hpp | 2 +- src/core/atomicdex/config/coins.cfg.cpp | 10 ++++++++ src/core/atomicdex/config/coins.cfg.hpp | 2 ++ .../models/qt.global.coins.cfg.model.cpp | 2 ++ src/core/atomicdex/pages/qt.settings.page.cpp | 23 +++++++++++++++++++ src/core/atomicdex/pages/qt.settings.page.hpp | 1 + .../atomicdex/services/mm2/mm2.service.cpp | 5 ++-- 10 files changed, 49 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0518002205..2266087583 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,7 +78,7 @@ FetchContent_Declare( ) FetchContent_Declare(jl777-coins - URL https://github.com/KomodoPlatform/coins/archive/master.zip) + URL https://github.com/KomodoPlatform/coins/archive/ssl-only-coins-config.zip) #FetchContent_Declare(adex-generics-coins # URL https://github.com/KomodoPlatform/komodo-wallet-desktop/archive/main.zip) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 8eeb9bf083..267d6de13b 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -119,14 +119,13 @@ QtObject { function zhtlcActivationProgress(activation_status, coin='ARRR') { - - const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin) - let block_offset = coin_info.checkpoint_block let progress = 100 if (!activation_status.hasOwnProperty("result")) return progress - // console.log("["+coin+"] [zhtlcActivationProgress]: " + JSON.stringify(activation_status)) + const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin) + let block_offset = coin_info.checkpoint_height let status = activation_status.result.status let details = activation_status.result.details + // console.log("["+coin+"] [zhtlcActivationProgress]: " + JSON.stringify(activation_status)) // use range from checkpoint block to present if (!status) @@ -145,14 +144,14 @@ QtObject { block_offset = details.UpdatingBlocksCache.first_sync_block.actual let n = details.UpdatingBlocksCache.current_scanned_block - block_offset let d = details.UpdatingBlocksCache.latest_block - block_offset - progress = 5 + parseInt(n/d*40) + progress = 5 + parseInt(n/d*20) } else if (details.hasOwnProperty("BuildingWalletDb")) { block_offset = details.BuildingWalletDb.first_sync_block.actual let n = details.BuildingWalletDb.current_scanned_block - block_offset let d = details.BuildingWalletDb.latest_block - block_offset - progress = 45 + parseInt(n/d*40) + progress = 45 + parseInt(n/d*60) } else if (details.hasOwnProperty("RequestingBalance")) progress = 95 else if (details.hasOwnProperty("ActivatingCoin")) progress = 5 diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp index 52be36e7da..a4eadae928 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.cpp @@ -28,7 +28,7 @@ namespace atomic_dex::mm2 { j["params"]["ticker"] = request.coin_name; j["params"]["activation_params"]["mode"]["rpc"] = "Light"; - j["params"]["activation_params"]["mode"]["rpc_data"]["sync_params"]["date"] = request.sync_date; + j["params"]["activation_params"]["mode"]["rpc_data"]["sync_params"]["height"] = request.sync_height; j["params"]["activation_params"]["mode"]["rpc_data"]["electrum_servers"] = request.servers; j["params"]["activation_params"]["mode"]["rpc_data"]["light_wallet_d_servers"] = request.z_urls; j["params"]["activation_params"]["scan_blocks_per_iteration"] = 5000; diff --git a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp index 44ecaff091..7fa02c2f92 100644 --- a/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp +++ b/src/core/atomicdex/api/mm2/rpc2.task.enable_z_coin.init.hpp @@ -34,7 +34,7 @@ namespace atomic_dex::mm2 std::vector servers; std::vector z_urls; CoinType coin_type; - int sync_date{1672531200}; // Jan 1st 2023 + int sync_height{0}; bool is_testnet{false}; bool with_tx_history{false}; // Not yet in API }; diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index b4ba166dec..f428f7abc9 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -168,6 +168,8 @@ namespace atomic_dex cfg.wallet_only = is_wallet_only(cfg.ticker) ? is_wallet_only(cfg.ticker) : j.contains("wallet_only") ? j.at("wallet_only").get() : false; cfg.default_coin = is_default_coin(cfg.ticker); cfg.is_faucet_coin = is_faucet_coin(cfg.ticker); + cfg.checkpoint_height = 0; + cfg.checkpoint_blocktime = 0; using namespace std::chrono; if (j.contains("other_types")) @@ -226,6 +228,14 @@ namespace atomic_dex { cfg.z_urls = j.at("light_wallet_d_servers").get>(); } + if (j.contains("checkpoint_blocktime")) + { + cfg.checkpoint_blocktime = j.at("checkpoint_blocktime").get(); + } + if (j.contains("checkpoint_height")) + { + cfg.checkpoint_height = j.at("checkpoint_height").get(); + } if (j.contains("alias_ticker")) { cfg.alias_ticker = j.at("alias_ticker").get(); diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index dc00fa5c5f..b33e79ac7b 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -55,6 +55,8 @@ namespace atomic_dex std::string minimal_claim_amount{"0"}; CoinType coin_type; nlohmann::json activation_status; + int checkpoint_height{0}; + int checkpoint_blocktime{0}; bool segwit{false}; bool active{false}; bool checked{false}; diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp index 07783df5f1..9af4ddcdf9 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp @@ -47,6 +47,8 @@ namespace {"is_erc_family", coin.is_erc_family}, {"is_zhtlc_family", coin.is_zhtlc_family}, {"is_wallet_only", coin.wallet_only}, + {"checkpoint_height", coin.checkpoint_height}, + {"checkpoint_blocktime", coin.checkpoint_blocktime}, {"has_memos", coin.has_memos}, {"fees_ticker", QString::fromStdString(coin.fees_ticker)}}; return j; diff --git a/src/core/atomicdex/pages/qt.settings.page.cpp b/src/core/atomicdex/pages/qt.settings.page.cpp index ce64a39c7b..c1767dae3a 100644 --- a/src/core/atomicdex/pages/qt.settings.page.cpp +++ b/src/core/atomicdex/pages/qt.settings.page.cpp @@ -84,6 +84,29 @@ namespace atomic_dex QSettings& settings = entity_registry_.ctx(); return settings.value("PirateSyncDate").toInt(); } + int settings_page::get_pirate_sync_height(int sync_date, int checkpoint_height, int checkpoint_blocktime) const + { + if (checkpoint_height == 0) + { + return 0; + } + int blocktime_estimate = 65; // Based on average block time between checkpoint block and block 2575600 + margin of error + SPDLOG_INFO("sync_date: {}", sync_date); + SPDLOG_INFO("checkpoint_height: {}", checkpoint_height); + SPDLOG_INFO("checkpoint_blocktime: {}", checkpoint_blocktime); + int time_delta = sync_date - checkpoint_blocktime; + SPDLOG_INFO("time_delta: {}", time_delta); + int block_delta = static_cast(time_delta / blocktime_estimate); + SPDLOG_INFO("block_delta: {}", block_delta); + // As block time is variable, we round height to the nearest 1000 blocks + int height = checkpoint_height + static_cast(block_delta / 1000) * 1000; + if (height < 0) + { + height = 0; + } + SPDLOG_INFO("height: {}", height); + return height; + } void settings_page::set_pirate_sync_date(int new_timestamp) { diff --git a/src/core/atomicdex/pages/qt.settings.page.hpp b/src/core/atomicdex/pages/qt.settings.page.hpp index 8d355d3df2..50035ca337 100644 --- a/src/core/atomicdex/pages/qt.settings.page.hpp +++ b/src/core/atomicdex/pages/qt.settings.page.hpp @@ -110,6 +110,7 @@ namespace atomic_dex Q_INVOKABLE [[nodiscard]] bool is_this_ticker_present_in_normal_cfg(const QString& ticker) const; Q_INVOKABLE [[nodiscard]] QString get_custom_coins_icons_path() const; Q_INVOKABLE [[nodiscard]] int get_pirate_sync_date() const; + Q_INVOKABLE [[nodiscard]] int get_pirate_sync_height(int sync_date, int checkpoint_height, int checkpoint_blocktime) const; Q_INVOKABLE void process_token_add(const QString& contract_address, const QString& coingecko_id, const QString& icon_filepath, CoinType coin_type); Q_INVOKABLE void process_qrc_20_token_add(const QString& contract_address, const QString& coingecko_id, const QString& icon_filepath); Q_INVOKABLE void submit(); diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index 40b3c10865..b60eceee82 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1403,14 +1403,15 @@ namespace atomic_dex auto request_functor = [this](coin_config coin_info) -> std::pair> { const auto& settings_system = m_system_manager.get_system(); - int sync_from_date = settings_system.get_pirate_sync_date(); + int sync_date = settings_system.get_pirate_sync_date(); + int sync_height = settings_system.get_pirate_sync_height(sync_date, coin_info.checkpoint_height, coin_info.checkpoint_blocktime); t_enable_z_coin_request request{ .coin_name = coin_info.ticker, .servers = coin_info.electrum_urls.value_or(get_electrum_server_from_token(coin_info.ticker)), .z_urls = coin_info.z_urls.value_or(std::vector{}), .coin_type = coin_info.coin_type, - .sync_date = sync_from_date, + .sync_height = sync_height, .is_testnet = coin_info.is_testnet.value_or(false), .with_tx_history = false}; // Tx history not yet ready for ZHTLC From 41ef0c2580a7ab53ad8aaa995b061087171b0e31 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 20 Sep 2023 22:23:32 +0800 Subject: [PATCH 245/251] avoid > 100% --- atomic_defi_design/Dex/Constants/General.qml | 4 ++-- atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml | 4 ++-- atomic_defi_design/Dex/Portfolio/AssetsList.qml | 4 ++-- atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 267d6de13b..1848760969 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -125,8 +125,6 @@ QtObject { let block_offset = coin_info.checkpoint_height let status = activation_status.result.status let details = activation_status.result.details - // console.log("["+coin+"] [zhtlcActivationProgress]: " + JSON.stringify(activation_status)) - // use range from checkpoint block to present if (!status) { @@ -152,12 +150,14 @@ QtObject { let n = details.BuildingWalletDb.current_scanned_block - block_offset let d = details.BuildingWalletDb.latest_block - block_offset progress = 45 + parseInt(n/d*60) + if progress > 95: progress = 95 } else if (details.hasOwnProperty("RequestingBalance")) progress = 95 else if (details.hasOwnProperty("ActivatingCoin")) progress = 5 else progress = 5 } else console.log("["+coin+"] [zhtlcActivationProgress] Unexpected status: " + status) + if progress > 100: progress = 98 return progress } diff --git a/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml index 89d6265293..aeae50a0c7 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml @@ -40,7 +40,7 @@ RowLayout anchors.centerIn: parent anchors.fill: parent radius: 10 - enabled: Dex.General.isZhtlc(details.ticker) ? activation_progress != 100 : false + enabled: Dex.General.isZhtlc(details.ticker) ? activation_progress < 100 : false visible: enabled opacity: .9 color: Dex.DexTheme.backgroundColor @@ -50,7 +50,7 @@ RowLayout { anchors.centerIn: parent anchors.fill: parent - enabled: Dex.General.isZhtlc(details.ticker) ? activation_progress != 100 : false + enabled: Dex.General.isZhtlc(details.ticker) ? activation_progress < 100 : false visible: enabled horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/atomic_defi_design/Dex/Portfolio/AssetsList.qml b/atomic_defi_design/Dex/Portfolio/AssetsList.qml index 2ee0e4582e..1edddc6658 100644 --- a/atomic_defi_design/Dex/Portfolio/AssetsList.qml +++ b/atomic_defi_design/Dex/Portfolio/AssetsList.qml @@ -126,7 +126,7 @@ Dex.DexListView anchors.centerIn: parent anchors.fill: parent radius: 15 - enabled: Dex.General.isZhtlc(ticker) ? activation_progress != 100 : false + enabled: Dex.General.isZhtlc(ticker) ? activation_progress < 100 : false visible: enabled opacity: .9 color: Dex.DexTheme.backgroundColor @@ -136,7 +136,7 @@ Dex.DexListView { anchors.centerIn: parent anchors.fill: parent - enabled: Dex.General.isZhtlc(ticker) ? activation_progress != 100 : false + enabled: Dex.General.isZhtlc(ticker) ? activation_progress < 100 : false visible: enabled horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml b/atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml index f4743e9c69..a4551cd784 100644 --- a/atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml +++ b/atomic_defi_design/Dex/Wallet/SidebarItemDelegate.qml @@ -62,7 +62,7 @@ GradientRectangle anchors.centerIn: parent anchors.fill: parent radius: 15 - enabled: Dex.General.isZhtlc(ticker) ? activation_progress != 100 : false + enabled: Dex.General.isZhtlc(ticker) ? activation_progress < 100 : false visible: enabled opacity: .9 color: Dex.DexTheme.backgroundColor @@ -72,7 +72,7 @@ GradientRectangle { anchors.centerIn: parent anchors.fill: parent - enabled: Dex.General.isZhtlc(ticker) ? activation_progress != 100 : false + enabled: Dex.General.isZhtlc(ticker) ? activation_progress < 100 : false visible: enabled horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter From 771fe83759ae3277bedceaf352e74ed60267f6ce Mon Sep 17 00:00:00 2001 From: smk762 <35845239+smk762@users.noreply.github.com> Date: Thu, 21 Sep 2023 00:27:24 +0800 Subject: [PATCH 246/251] its not python mate --- atomic_defi_design/Dex/Constants/General.qml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index 1848760969..2577767cd9 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -150,14 +150,20 @@ QtObject { let n = details.BuildingWalletDb.current_scanned_block - block_offset let d = details.BuildingWalletDb.latest_block - block_offset progress = 45 + parseInt(n/d*60) - if progress > 95: progress = 95 + if (progress > 95) { + progress = 95 + } + } else if (details.hasOwnProperty("RequestingBalance")) progress = 95 else if (details.hasOwnProperty("ActivatingCoin")) progress = 5 else progress = 5 } else console.log("["+coin+"] [zhtlcActivationProgress] Unexpected status: " + status) - if progress > 100: progress = 98 + if (progress > 100) { + progress = 98 + } + return progress } From 5ffbfd51fbe58a03deb15c94fdda3f92b994b706 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 22 Sep 2023 00:08:07 +0800 Subject: [PATCH 247/251] use nim 1.6.2 --- .github/workflows/atomicdex-desktop-ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index b03ca4d6c0..63531cad42 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -156,24 +156,24 @@ jobs: run: | export DEBIAN_FRONTEND=noninteractive export SHELL=/bin/bash - echo "CHOOSENIM_CHOOSE_VERSION=1.6.10" >> $GITHUB_ENV - export CHOOSENIM_CHOOSE_VERSION=1.6.10 + echo "CHOOSENIM_CHOOSE_VERSION=1.6.20" >> $GITHUB_ENV + export CHOOSENIM_CHOOSE_VERSION=1.6.20 curl https://nim-lang.org/choosenim/init.sh > choosenim.sh chmod +x choosenim.sh ./choosenim.sh -y export PATH=/home/runner/.nimble/bin:$PATH - chmod +x /home/runner/.choosenim/toolchains/nim-1.6.10/bin/* + chmod +x /home/runner/.choosenim/toolchains/nim-1.6.20/bin/* - name: Install nim (MacOS) if: runner.os == 'macOS' run: | - echo "CHOOSENIM_CHOOSE_VERSION=1.6.10" >> $GITHUB_ENV - export CHOOSENIM_CHOOSE_VERSION=1.6.10 + echo "CHOOSENIM_CHOOSE_VERSION=1.6.20" >> $GITHUB_ENV + export CHOOSENIM_CHOOSE_VERSION=1.6.20 curl https://nim-lang.org/choosenim/init.sh > choosenim.sh chmod +x choosenim.sh ./choosenim.sh -y export PATH=/Users/runner/.nimble/bin:$PATH - chmod +x /Users/runner/.choosenim/toolchains/nim-1.6.10/bin/* + chmod +x /Users/runner/.choosenim/toolchains/nim-1.6.20/bin/* - name: Install deps (Linux) if: runner.os == 'Linux' From 87e3dc6f0325ec14330f2104dc63938149ee8e51 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 22 Sep 2023 00:58:29 +0800 Subject: [PATCH 248/251] fix nim version --- .github/workflows/atomicdex-desktop-ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index 63531cad42..7a61079109 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -156,24 +156,24 @@ jobs: run: | export DEBIAN_FRONTEND=noninteractive export SHELL=/bin/bash - echo "CHOOSENIM_CHOOSE_VERSION=1.6.20" >> $GITHUB_ENV - export CHOOSENIM_CHOOSE_VERSION=1.6.20 + echo "CHOOSENIM_CHOOSE_VERSION=1.6.2" >> $GITHUB_ENV + export CHOOSENIM_CHOOSE_VERSION=1.6.2 curl https://nim-lang.org/choosenim/init.sh > choosenim.sh chmod +x choosenim.sh ./choosenim.sh -y export PATH=/home/runner/.nimble/bin:$PATH - chmod +x /home/runner/.choosenim/toolchains/nim-1.6.20/bin/* + chmod +x /home/runner/.choosenim/toolchains/nim-1.6.2/bin/* - name: Install nim (MacOS) if: runner.os == 'macOS' run: | - echo "CHOOSENIM_CHOOSE_VERSION=1.6.20" >> $GITHUB_ENV - export CHOOSENIM_CHOOSE_VERSION=1.6.20 + echo "CHOOSENIM_CHOOSE_VERSION=1.6.2" >> $GITHUB_ENV + export CHOOSENIM_CHOOSE_VERSION=1.6.2 curl https://nim-lang.org/choosenim/init.sh > choosenim.sh chmod +x choosenim.sh ./choosenim.sh -y export PATH=/Users/runner/.nimble/bin:$PATH - chmod +x /Users/runner/.choosenim/toolchains/nim-1.6.20/bin/* + chmod +x /Users/runner/.choosenim/toolchains/nim-1.6.2/bin/* - name: Install deps (Linux) if: runner.os == 'Linux' From 2c7c072edc41c9a4a3c6a7f2d32d12edc520d421 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 22 Sep 2023 18:57:51 +0800 Subject: [PATCH 249/251] fix tendermint tx history --- .../atomicdex/services/mm2/mm2.service.cpp | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/src/core/atomicdex/services/mm2/mm2.service.cpp b/src/core/atomicdex/services/mm2/mm2.service.cpp index b60eceee82..4fc37fcd80 100644 --- a/src/core/atomicdex/services/mm2/mm2.service.cpp +++ b/src/core/atomicdex/services/mm2/mm2.service.cpp @@ -1298,36 +1298,27 @@ namespace atomic_dex std::size_t limit = 5000; bool requires_v2 = false; std::string method = "my_tx_history"; - if (coin_info.coin_type == CoinTypeGadget::SLP || coin_info.ticker == "tBCH" || coin_info.ticker == "BCH") + if (coin_info.coin_type == CoinTypeGadget::ZHTLC || coin_info.coin_type == CoinTypeGadget::TENDERMINT || coin_info.coin_type == CoinTypeGadget::TENDERMINTTOKEN || coin_info.coin_type == CoinTypeGadget::SLP || coin_info.ticker == "tBCH" || coin_info.ticker == "BCH") { requires_v2 = true; - t_tx_history_request request{.coin = ticker, .limit = limit}; - nlohmann::json j = mm2::template_request(method, requires_v2); - mm2::to_json(j, request); - batch_array.push_back(j); - } - else if (coin_info.is_zhtlc_family) - { - // Don't request balance / history if not completely activated. - if (coin_info.activation_status.at("result").at("status") == "Ok") + if (coin_info.is_zhtlc_family) { - limit = 50; - requires_v2 = true; - method = "z_coin_tx_history"; - t_tx_history_request request{.coin = ticker, .limit = limit}; - nlohmann::json j = mm2::template_request(method, requires_v2); - mm2::to_json(j, request); - batch_array.push_back(j); + // Don't request balance / history if not completely activated. + if (coin_info.activation_status.at("result").at("status") == "Ok") + { + limit = 50; + method = "z_coin_tx_history"; + } + else + { + return std::make_tuple(batch_array, tickers_idx, tokens_to_fetch); + } } } - else - { - t_tx_history_request request{.coin = ticker, .limit = limit}; - nlohmann::json j = mm2::template_request(method, requires_v2); - mm2::to_json(j, request); - batch_array.push_back(j); - } - + t_tx_history_request request{.coin = ticker, .limit = limit}; + nlohmann::json j = mm2::template_request(method, requires_v2); + mm2::to_json(j, request); + batch_array.push_back(j); } if (not only_tx) From de268063a4c0ae4c33f66ee9d884b2fc546e8681 Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 23 Sep 2023 02:54:03 +0800 Subject: [PATCH 250/251] fix coins repo refs --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2266087583..e578073320 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,7 +78,7 @@ FetchContent_Declare( ) FetchContent_Declare(jl777-coins - URL https://github.com/KomodoPlatform/coins/archive/ssl-only-coins-config.zip) + URL https://github.com/KomodoPlatform/coins/archive/master.zip) #FetchContent_Declare(adex-generics-coins # URL https://github.com/KomodoPlatform/komodo-wallet-desktop/archive/main.zip) @@ -87,7 +87,7 @@ FetchContent_MakeAvailable(mm2 jl777-coins qmaterial) ##! Configure our needs. if (UNIX) - configure_file(${jl777-coins_SOURCE_DIR}/utils/coins_config.json ${CMAKE_CURRENT_SOURCE_DIR}/assets/config/${PROJECT_VERSION}-coins.json COPYONLY) + configure_file(${jl777-coins_SOURCE_DIR}/utils/coins_config_tcp.json ${CMAKE_CURRENT_SOURCE_DIR}/assets/config/${PROJECT_VERSION}-coins.json COPYONLY) configure_file(${jl777-coins_SOURCE_DIR}/coins ${CMAKE_CURRENT_SOURCE_DIR}/assets/tools/mm2/coins COPYONLY) configure_file(${mm2_SOURCE_DIR}/mm2 ${CMAKE_CURRENT_SOURCE_DIR}/assets/tools/mm2/${DEX_API} COPYONLY) file(COPY ${jl777-coins_SOURCE_DIR}/icons/ DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/atomic_defi_design/assets/images/coins/) From 7324e0bc520e7a3893f0c29630452106f600c35c Mon Sep 17 00:00:00 2001 From: smk762 Date: Sat, 23 Sep 2023 03:05:20 +0800 Subject: [PATCH 251/251] tinted windows --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e578073320..2f4f825ced 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,7 +92,7 @@ if (UNIX) configure_file(${mm2_SOURCE_DIR}/mm2 ${CMAKE_CURRENT_SOURCE_DIR}/assets/tools/mm2/${DEX_API} COPYONLY) file(COPY ${jl777-coins_SOURCE_DIR}/icons/ DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/atomic_defi_design/assets/images/coins/) else () - configure_file(${jl777-coins_SOURCE_DIR}/utils/coins_config.json ${CMAKE_BINARY_DIR}/bin/assets/config/${PROJECT_VERSION}-coins.json COPYONLY) + configure_file(${jl777-coins_SOURCE_DIR}/utils/coins_config_tcp.json ${CMAKE_BINARY_DIR}/bin/assets/config/${PROJECT_VERSION}-coins.json COPYONLY) configure_file(${jl777-coins_SOURCE_DIR}/coins ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/coins COPYONLY) configure_file(${mm2_SOURCE_DIR}/mm2.exe ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/${DEX_API}.exe COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ci_tools_atomic_dex/windows_misc/msvcp140.dll ${CMAKE_BINARY_DIR}/bin/assets/tools/mm2/msvcp140.dll COPYONLY)

- +