Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v0.7.1 rc #2426

Merged
merged 42 commits into from
Apr 10, 2024
Merged
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
6a19c92
rm paprika api services
smk762 Mar 28, 2024
0d2974f
add pair trades 24hr stat
smk762 Mar 28, 2024
4ae90fe
tabbed orderbook / bestorders
smk762 Mar 28, 2024
f67e3be
fix missing cancel button for own orders on orderbook
smk762 Mar 29, 2024
e2e0b3f
Use layouts for orderbook columns
smk762 Mar 31, 2024
d960923
add outgoing/incoming text to orders modal
smk762 Apr 1, 2024
42aca12
rm logspam
smk762 Apr 1, 2024
955a091
exception avoidance
smk762 Apr 1, 2024
af650fd
add min/max vol to orders modal
smk762 Apr 1, 2024
4a2d105
Merge pull request #2415 from KomodoPlatform/update/defi-stats-api
smk762 Apr 1, 2024
a952f3d
open lcw when chart is clicked
smk762 Apr 1, 2024
22df4dd
allow testcoins through filter in simple dex view
smk762 Apr 1, 2024
8dbad10
Merge pull request #2416 from KomodoPlatform/add/bestorders-filter
smk762 Apr 2, 2024
cc7ba3e
isolate testcoins in bestorders
smk762 Apr 2, 2024
bdd6eff
Merge branch 'dev' into fix/simple-dex-testcoins
smk762 Apr 2, 2024
6110313
Merge branch 'dev' into fix/chart-hyperlink
smk762 Apr 2, 2024
ef89df2
Merge branch 'dev' into remove/paprika
smk762 Apr 2, 2024
155c661
Merge branch 'dev' into fix/orderbook-cancel
smk762 Apr 2, 2024
85e69fd
Merge branch 'dev' into add/order-info
smk762 Apr 2, 2024
3c908ae
update dex pro layout
smk762 Apr 2, 2024
8e6690c
refactor dex pro
smk762 Apr 2, 2024
8c2f797
add checkbox for good until canceled
smk762 Apr 3, 2024
c6d98df
apply order_type to rpc req body
smk762 Apr 4, 2024
c6148a7
adds maker order tab
smk762 Apr 4, 2024
5e7cf33
reset selected trade on tab switch
smk762 Apr 4, 2024
3f19105
Merge pull request #2414 from KomodoPlatform/remove/paprika
smk762 Apr 4, 2024
5cd7124
Merge pull request #2419 from KomodoPlatform/fix/orderbook-cancel
smk762 Apr 4, 2024
da0f8ff
Merge pull request #2421 from KomodoPlatform/fix/chart-hyperlink
smk762 Apr 4, 2024
e5f4fbb
disable orderbook in maker mode
smk762 Apr 4, 2024
2bd2120
Merge branch 'dev' into add/order-options
smk762 Apr 4, 2024
b52849a
Merge branch 'dev' into add/order-info
smk762 Apr 4, 2024
624b9c7
rm gitlab ci
smk762 Apr 5, 2024
d2fe944
tweak ci workflows
smk762 Apr 5, 2024
2bb35a2
Merge pull request #2422 from KomodoPlatform/fix/simple-dex-testcoins
smk762 Apr 6, 2024
fa1821f
Merge pull request #2420 from KomodoPlatform/add/order-info
smk762 Apr 6, 2024
229203a
add `is_vote_coin` category
smk762 Apr 6, 2024
c86019b
add button for vote info in wallet
smk762 Apr 6, 2024
d5c7358
set vote coins to wallet only
smk762 Apr 6, 2024
98dde1b
move warning to avoid overflow
smk762 Apr 6, 2024
7bd6127
Update ts for release
smk762 Apr 6, 2024
d8ce050
Merge pull request #2425 from KomodoPlatform/add/kip2024
smk762 Apr 8, 2024
3f25b37
Merge pull request #2424 from KomodoPlatform/add/order-options
smk762 Apr 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add pair trades 24hr stat
  • Loading branch information
smk762 committed Mar 28, 2024
commit 0d2974faacb6f16b7c78fc85f83c95ba0ee91f89
3 changes: 2 additions & 1 deletion atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@ import Dex.Themes 1.0 as Dex
Widget
{
title: qsTr("Order Book")
readonly property string pair_trades_24hr: API.app.trading_pg.pair_trades_24hr
readonly property string pair_volume_24hr: API.app.trading_pg.pair_volume_24hr
readonly property string pair: atomic_qt_utilities.retrieve_main_ticker(left_ticker) + "/" + atomic_qt_utilities.retrieve_main_ticker(right_ticker)

@@ -61,7 +62,7 @@ Widget
Layout.bottomMargin: 2
Layout.alignment: Qt.AlignHCenter
color: Dex.CurrentTheme.foregroundColor2
text_value: pair + qsTr(" traded 24hrs: %1").arg("<b>" + General.convertUsd(pair_volume_24hr) + "</b>")
text_value: pair + qsTr(" 24hrs | %1 | %2 trades").arg(General.convertUsd(pair_volume_24hr)).arg(pair_trades_24hr)
font.pixelSize: Style.textSizeSmall1
}
}
10 changes: 10 additions & 0 deletions src/core/atomicdex/pages/qt.trading.page.cpp
Original file line number Diff line number Diff line change
@@ -708,6 +708,7 @@ namespace atomic_dex
this->m_preferred_order = std::nullopt;
this->m_fees = QVariantMap();
this->m_cex_price = "0";
this->m_pair_trades_24hr = "0";
this->m_pair_volume_24hr = "0";
this->m_post_clear_forms = true;
this->set_selected_order_status(SelectedOrderStatus::None);
@@ -1394,15 +1395,24 @@ namespace atomic_dex
const auto* market_selector = get_market_pairs_mdl();
const auto& base = utils::retrieve_main_ticker(market_selector->get_left_selected_coin().toStdString(), true);
const auto& rel = utils::retrieve_main_ticker(market_selector->get_right_selected_coin().toStdString(), true);
QString trades = QString::fromStdString(defi_stats_service.get_trades_24h(base, rel));
QString vol = QString::fromStdString(defi_stats_service.get_volume_24h_usd(base, rel));

if (vol != m_pair_volume_24hr)
{
m_pair_trades_24hr = trades;
emit pairTrades24hrChanged();
m_pair_volume_24hr = vol;
emit pairVolume24hrChanged();
}
}

QString
trading_page::get_pair_trades_24hr() const
{
return m_pair_trades_24hr;
}

QString
trading_page::get_pair_volume_24hr() const
{
4 changes: 4 additions & 0 deletions src/core/atomicdex/pages/qt.trading.page.hpp
Original file line number Diff line number Diff line change
@@ -59,6 +59,7 @@ namespace atomic_dex
Q_PROPERTY(SelectedOrderStatus selected_order_status READ get_selected_order_status WRITE set_selected_order_status NOTIFY selectedOrderStatusChanged)
Q_PROPERTY(QString price_reversed READ get_price_reversed NOTIFY priceReversedChanged)
Q_PROPERTY(QString pair_volume_24hr READ get_pair_volume_24hr NOTIFY pairVolume24hrChanged)
Q_PROPERTY(QString pair_trades_24hr READ get_pair_trades_24hr NOTIFY pairTrades24hrChanged)
Q_PROPERTY(QString cex_price READ get_cex_price NOTIFY cexPriceChanged)
Q_PROPERTY(QString cex_price_reversed READ get_cex_price_reversed NOTIFY cexPriceReversedChanged)
Q_PROPERTY(QString cex_price_diff READ get_cex_price_diff NOTIFY cexPriceDiffChanged)
@@ -115,6 +116,7 @@ namespace atomic_dex
QString m_total_amount{"0.00777"};
QString m_cex_price{"0"};
QString m_pair_volume_24hr{"0"};
QString m_pair_trades_24hr{"0"};
QString m_minimal_trading_amount{"0.0001"};
std::optional<nlohmann::json> m_preferred_order;
boost::synchronized_value<QVariantMap> m_fees;
@@ -197,6 +199,7 @@ namespace atomic_dex
void set_total_amount(QString total_amount);
[[nodiscard]] QString get_base_amount() const;
[[nodiscard]] QString get_rel_amount() const;
[[nodiscard]] QString get_pair_trades_24hr() const;
[[nodiscard]] QString get_pair_volume_24hr() const;
[[nodiscard]] QString get_cex_price() const;
[[nodiscard]] QString get_cex_price_reversed() const;
@@ -238,6 +241,7 @@ namespace atomic_dex
void baseAmountChanged();
void relAmountChanged();
void feesChanged();
void pairTrades24hrChanged();
void pairVolume24hrChanged();
void cexPriceChanged();
void cexPriceReversedChanged();
135 changes: 121 additions & 14 deletions src/core/atomicdex/services/price/defi.stats.cpp
Original file line number Diff line number Diff line change
@@ -49,17 +49,17 @@ namespace
pplx::cancellation_token_source d_token_source;

pplx::task<web::http::http_response>
async_fetch_defi_ticker_stats()
async_fetch_defi_stats_volumes()
{
web::http::http_request req;
req.set_method(web::http::methods::GET);
req.set_request_uri(FROM_STD_STR("api/v3/tickers/summary"));
req.set_request_uri(FROM_STD_STR("api/v3/pairs/volumes_24hr"));
SPDLOG_INFO("defi_stats req: {}", TO_STD_STR(req.to_string()));
return g_defi_stats_client->request(req, d_token_source.get_token());
}

nlohmann::json
process_fetch_defi_ticker_stats_answer(web::http::http_response resp)
process_fetch_defi_stats_volumes_answer(web::http::http_response resp)
{
std::string body = TO_STD_STR(resp.extract_string(true).get());
if (resp.status_code() == 200)
@@ -119,11 +119,11 @@ namespace atomic_dex
this->process_update();
};
};
async_fetch_defi_ticker_stats()
async_fetch_defi_stats_volumes()
.then(
[this](web::http::http_response resp)
{
this->m_defi_ticker_stats = process_fetch_defi_ticker_stats_answer(resp);
this->m_defi_stats_volumes = process_fetch_defi_stats_volumes_answer(resp);
nb_try = 0;
})
.then(error_functor);
@@ -136,33 +136,140 @@ namespace atomic_dex
auto ticker = base + "_" + quote;
auto ticker_reversed = quote + "_" + base;
SPDLOG_INFO("Getting 24hr volume data for {}", ticker);

// Check if base/quote are the same
if (base == quote)
{
SPDLOG_INFO("Base/quote must be different, no volume data for {}", ticker);
return volume_24h_usd;
}

auto defi_ticker_stats = m_defi_ticker_stats.get();
// SPDLOG_INFO("Volume data: {}", defi_ticker_stats.dump(4));
// Check if defi_stats_volumes is valid
auto defi_stats_volumes = m_defi_stats_volumes.get();
if (!defi_stats_volumes.is_object())
{
SPDLOG_WARN("Invalid defi stats volumes data.");
return volume_24h_usd;
}

if (defi_ticker_stats.contains("data"))
// Check if volumes key exists
if (!defi_stats_volumes.contains("volumes"))
{
SPDLOG_WARN("No volumes data available.");
return volume_24h_usd;
}

// Extract ticker trade_volume_usd safely
if (defi_stats_volumes.at("volumes").contains(ticker))
{
SPDLOG_INFO("Combined volume usd: {}", defi_ticker_stats["combined_volume_usd"]);
if (defi_ticker_stats.at("data").contains(ticker))
auto volume_node = defi_stats_volumes["volumes"][ticker]["ALL"]["trade_volume_usd"];
if (volume_node.is_number())
{
volume_24h_usd = defi_ticker_stats.at("data").at(ticker).at("volume_usd_24hr").get<std::string>();
volume_24h_usd = std::to_string(volume_node.get<double>());
SPDLOG_INFO("{} volume usd: {}", ticker, volume_24h_usd);
}
else if (defi_ticker_stats.at("data").contains(ticker_reversed))
else if (volume_node.is_null())
{
SPDLOG_WARN("Volume value is null for {}", ticker);
}
else
{
SPDLOG_WARN("Volume value is not a number for {}: {}", ticker, volume_node.type_name());
}
}
else if (defi_stats_volumes["volumes"].contains(ticker_reversed))
{
auto volume_node = defi_stats_volumes["volumes"][ticker_reversed]["ALL"]["trade_volume_usd"];
if (volume_node.is_number())
{
volume_24h_usd = defi_ticker_stats.at("data").at(ticker_reversed).at("volume_usd_24hr").get<std::string>();
volume_24h_usd = std::to_string(volume_node.get<double>());
SPDLOG_INFO("{} volume usd: {}", ticker_reversed, volume_24h_usd);
}
else if (volume_node.is_null())
{
SPDLOG_WARN("Volume value is null for {}", ticker);
}
else
{
SPDLOG_WARN("Volume value is not a number for {}: {}", ticker, volume_node.type_name());
}
}
else
{
SPDLOG_WARN("Empty 24hr volume data for {}", defi_ticker_stats.dump(4));
SPDLOG_WARN("No volume data available for {}", ticker);
}
return volume_24h_usd;
}

std::string
global_defi_stats_service::get_trades_24h(const std::string& base, const std::string& quote) const
{
std::string trades_24h = "0";
auto ticker = base + "_" + quote;
auto ticker_reversed = quote + "_" + base;
SPDLOG_INFO("Getting 24hr trade data for {}", ticker);

// Check if base/quote are the same
if (base == quote)
{
SPDLOG_INFO("Base/quote must be different, no volume data for {}", ticker);
return trades_24h;
}

// Check if defi_stats_volumes is valid
auto defi_stats_volumes = m_defi_stats_volumes.get();
if (!defi_stats_volumes.is_object())
{
SPDLOG_WARN("Invalid defi stats volumes data.");
return trades_24h;
}

// Check if volumes key exists
if (!defi_stats_volumes.contains("volumes"))
{
SPDLOG_WARN("No volumes data available.");
return trades_24h;
}

// Extract ticker trade_volume_usd safely
if (defi_stats_volumes.at("volumes").contains(ticker))
{
auto trades_node = defi_stats_volumes["volumes"][ticker]["ALL"]["trades_24hr"];
if (trades_node.is_number())
{
trades_24h = std::to_string(trades_node.get<int>());
SPDLOG_INFO("{} trades_24h: {}", ticker, trades_24h);
}
else if (trades_node.is_null())
{
SPDLOG_WARN("Trades value is null for {}", ticker);
}
else
{
SPDLOG_WARN("Trades value is not a number for {}: {}", ticker, trades_node.type_name());
}
}
else if (defi_stats_volumes["volumes"].contains(ticker_reversed))
{
auto trades_node = defi_stats_volumes["volumes"][ticker_reversed]["ALL"]["trades_24hr"];
if (trades_node.is_number())
{
trades_24h = std::to_string(trades_node.get<int>());
SPDLOG_INFO("{} trades_24h: {}", ticker_reversed, trades_24h);
}
else if (trades_node.is_null())
{
SPDLOG_WARN("Trades value is null for {}", ticker);
}
else
{
SPDLOG_WARN("Trades value is not a number for {}: {}", ticker, trades_node.type_name());
}
}
else
{
SPDLOG_WARN("No trades data available for {}", ticker);
}
return trades_24h;
}
} // namespace atomic_dex
9 changes: 5 additions & 4 deletions src/core/atomicdex/services/price/defi.stats.hpp
Original file line number Diff line number Diff line change
@@ -24,18 +24,18 @@

namespace atomic_dex::mm2
{
struct defi_ticker_stats_answer
struct defi_stats_volumes_answer
{
nlohmann::json result;
int status_code;
};
void from_json(const nlohmann::json& j, defi_ticker_stats_answer& answer);
void from_json(const nlohmann::json& j, defi_stats_volumes_answer& answer);
} // namespace atomic_dex::mm2


namespace atomic_dex
{
using t_defi_ticker_stats_answer = mm2::defi_ticker_stats_answer;
using t_defi_stats_volumes_answer = mm2::defi_stats_volumes_answer;
} // namespace atomic_dex

namespace atomic_dex
@@ -49,7 +49,7 @@ namespace atomic_dex

//! Private member fields
ag::ecs::system_manager& m_system_manager;
t_json_synchronized m_defi_ticker_stats;
t_json_synchronized m_defi_stats_volumes;
t_defi_stats_time_point m_update_clock;

//! private functions
@@ -67,6 +67,7 @@ namespace atomic_dex

//! Public API
void process_defi_stats();
std::string get_trades_24h(const std::string& base, const std::string& quote) const;
std::string get_volume_24h_usd(const std::string& base, const std::string& quote) const;


Loading