From eab45fb7c1d6da3bcc67ea616de8249910ee2db3 Mon Sep 17 00:00:00 2001 From: shamardy Date: Fri, 8 Dec 2023 21:15:02 +0200 Subject: [PATCH 1/6] allow more than one prices url in makerbot --- mm2src/coins/lp_price.rs | 25 +++++++++++++++---- mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs | 2 +- .../src/lp_ordermatch/simple_market_maker.rs | 19 ++++++-------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/mm2src/coins/lp_price.rs b/mm2src/coins/lp_price.rs index c0834c2efe..c1242799ce 100644 --- a/mm2src/coins/lp_price.rs +++ b/mm2src/coins/lp_price.rs @@ -1,4 +1,4 @@ -use common::log::{debug, error}; +use common::log::{debug, error, info}; use common::StatusCode; use mm2_err_handle::prelude::{MmError, OrMmError}; use mm2_net::transport::SlurpError; @@ -208,10 +208,25 @@ async fn process_price_request(price_url: &str) -> Result Result> { - let model = process_price_request(price_url).await?; - debug!("price registry size: {}", model.0.len()); - Ok(model) +pub async fn fetch_price_tickers( + price_urls: Vec, +) -> Result> { + for url in price_urls { + let model = match process_price_request(&url).await { + Ok(model) => model, + Err(err) => { + error!("Error fetching price from: {}, error: {:?}", url, err); + continue; + }, + }; + debug!("price registry size: {}", model.0.len()); + info!("price successfully fetched from {url}"); + return Ok(model); + } + + MmError::err(PriceServiceRequestError::HttpProcessError( + "couldn't fetch price".to_string(), + )) } /// CEXRates, structure for storing `base` coin and `rel` coin USD price diff --git a/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs b/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs index 77f075b083..02ff7f32b9 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs @@ -93,7 +93,7 @@ impl From for TradingBotEvent { pub struct RunningState { trading_bot_cfg: SimpleMakerBotRegistry, bot_refresh_rate: f64, - price_url: String, + price_urls: Vec, } pub struct StoppingState { diff --git a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs index 4fde30b8ee..134a077e7e 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs @@ -113,7 +113,7 @@ impl From for OrderProcessingError { #[derive(Deserialize)] pub struct StartSimpleMakerBotRequest { cfg: SimpleMakerBotRegistry, - price_url: Option, + price_urls: Option>, bot_refresh_rate: Option, } @@ -615,19 +615,16 @@ async fn execute_create_single_order( async fn process_bot_logic(ctx: &MmArc) { let simple_market_maker_bot_ctx = TradingBotContext::from_ctx(ctx).unwrap(); let state = simple_market_maker_bot_ctx.trading_bot_states.lock().await; - let (cfg, price_url) = if let TradingBotState::Running(running_state) = &*state { - let res = (running_state.trading_bot_cfg.clone(), running_state.price_url.clone()); + let (cfg, price_urls) = if let TradingBotState::Running(running_state) = &*state { + let res = (running_state.trading_bot_cfg.clone(), running_state.price_urls.clone()); drop(state); res } else { drop(state); return; }; - let rates_registry = match fetch_price_tickers(price_url.as_str()).await { - Ok(model) => { - info!("price successfully fetched from {price_url}"); - model - }, + let rates_registry = match fetch_price_tickers(price_urls).await { + Ok(model) => model, Err(err) => { let nb_orders = cancel_pending_orders(ctx, &cfg).await; error!("error fetching price: {err:?} - cancel {nb_orders} orders"); @@ -738,7 +735,7 @@ pub async fn start_simple_market_maker_bot(ctx: MmArc, req: StartSimpleMakerBotR *state = RunningState { trading_bot_cfg: req.cfg, bot_refresh_rate: refresh_rate, - price_url: req.price_url.unwrap_or_else(|| KMD_PRICE_ENDPOINT.to_string()), + price_urls: req.price_urls.unwrap_or_else(|| vec![KMD_PRICE_ENDPOINT.to_string()]), } .into(); drop(state); @@ -793,7 +790,7 @@ mod tests { let another_cloned_ctx = ctx.clone(); let req = StartSimpleMakerBotRequest { cfg: Default::default(), - price_url: None, + price_urls: None, bot_refresh_rate: None, }; let answer = block_on(start_simple_market_maker_bot(ctx, req)).unwrap(); @@ -801,7 +798,7 @@ mod tests { let req = StartSimpleMakerBotRequest { cfg: Default::default(), - price_url: None, + price_urls: None, bot_refresh_rate: None, }; let answer = block_on(start_simple_market_maker_bot(cloned_ctx, req)); From 50c464f49244a263bf672b393d9ee92ae5033d51 Mon Sep 17 00:00:00 2001 From: shamardy Date: Fri, 8 Dec 2023 21:26:59 +0200 Subject: [PATCH 2/6] use PRICE_ENDPOINTS multiple urls as default --- mm2src/coins/lp_price.rs | 2 +- mm2src/mm2_main/src/lp_ordermatch.rs | 2 +- mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs | 2 +- mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs | 7 ++++--- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/mm2src/coins/lp_price.rs b/mm2src/coins/lp_price.rs index c1242799ce..1c887f7841 100644 --- a/mm2src/coins/lp_price.rs +++ b/mm2src/coins/lp_price.rs @@ -10,7 +10,7 @@ use std::collections::HashMap; #[cfg(feature = "run-docker-tests")] use std::str::FromStr; use std::str::Utf8Error; -const PRICE_ENDPOINTS: [&str; 2] = [ +pub const PRICE_ENDPOINTS: [&str; 2] = [ "https://prices.komodo.earth/api/v2/tickers", "https://prices.cipig.net:1717/api/v2/tickers", ]; diff --git a/mm2src/mm2_main/src/lp_ordermatch.rs b/mm2src/mm2_main/src/lp_ordermatch.rs index 92055cf43d..81da108633 100644 --- a/mm2src/mm2_main/src/lp_ordermatch.rs +++ b/mm2src/mm2_main/src/lp_ordermatch.rs @@ -102,7 +102,7 @@ cfg_wasm32! { #[path = "lp_ordermatch/best_orders.rs"] mod best_orders; #[path = "lp_ordermatch/lp_bot.rs"] mod lp_bot; pub use lp_bot::{start_simple_market_maker_bot, stop_simple_market_maker_bot, StartSimpleMakerBotRequest, - TradingBotEvent, KMD_PRICE_ENDPOINT}; + TradingBotEvent}; #[path = "lp_ordermatch/my_orders_storage.rs"] mod my_orders_storage; diff --git a/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs b/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs index 02ff7f32b9..acdb6bd217 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs @@ -22,7 +22,7 @@ use crate::mm2::lp_ordermatch::lp_bot::simple_market_maker_bot::{tear_down_bot, PRECISION_FOR_NOTIFICATION}; use crate::mm2::lp_swap::MakerSwapStatusChanged; pub use simple_market_maker_bot::{start_simple_market_maker_bot, stop_simple_market_maker_bot, - StartSimpleMakerBotRequest, KMD_PRICE_ENDPOINT}; + StartSimpleMakerBotRequest}; #[cfg(all(test, not(target_arch = "wasm32")))] #[path = "simple_market_maker_tests.rs"] diff --git a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs index 134a077e7e..c1eef1a694 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs @@ -9,7 +9,7 @@ use crate::mm2::{lp_ordermatch::{cancel_order, create_maker_order, update_maker_order, CancelOrderReq, MakerOrder, MakerOrderUpdateReq, OrdermatchContext, SetPriceReq}, lp_swap::{latest_swaps_for_pair, LatestSwapsErr}}; -use coins::lp_price::{fetch_price_tickers, Provider, RateInfos}; +use coins::lp_price::{fetch_price_tickers, Provider, RateInfos, PRICE_ENDPOINTS}; use coins::{lp_coinfind, GetNonZeroBalance}; use common::{executor::{SpawnFuture, Timer}, log::{debug, error, info, warn}, @@ -23,7 +23,6 @@ use std::collections::{HashMap, HashSet}; use uuid::Uuid; // !< constants -pub const KMD_PRICE_ENDPOINT: &str = "https://prices.komodo.earth/api/v2/tickers"; pub const BOT_DEFAULT_REFRESH_RATE: f64 = 30.0; pub const PRECISION_FOR_NOTIFICATION: u64 = 8; const LATEST_SWAPS_LIMIT: usize = 1000; @@ -735,7 +734,9 @@ pub async fn start_simple_market_maker_bot(ctx: MmArc, req: StartSimpleMakerBotR *state = RunningState { trading_bot_cfg: req.cfg, bot_refresh_rate: refresh_rate, - price_urls: req.price_urls.unwrap_or_else(|| vec![KMD_PRICE_ENDPOINT.to_string()]), + price_urls: req + .price_urls + .unwrap_or_else(|| PRICE_ENDPOINTS.iter().map(|url| url.to_string()).collect()), } .into(); drop(state); From 7e7f5e360b9956111431f4ac8de79587f8843dfd Mon Sep 17 00:00:00 2001 From: shamardy Date: Tue, 12 Dec 2023 15:36:16 +0200 Subject: [PATCH 3/6] add rotation logic for price urls --- mm2src/coins/lp_price.rs | 7 +++--- mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs | 2 +- .../src/lp_ordermatch/simple_market_maker.rs | 25 +++++++++++-------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/mm2src/coins/lp_price.rs b/mm2src/coins/lp_price.rs index 1c887f7841..fc31095460 100644 --- a/mm2src/coins/lp_price.rs +++ b/mm2src/coins/lp_price.rs @@ -209,16 +209,17 @@ async fn process_price_request(price_url: &str) -> Result, + price_urls: &mut [String], ) -> Result> { - for url in price_urls { - let model = match process_price_request(&url).await { + for (i, url) in price_urls.to_owned().iter().enumerate() { + let model = match process_price_request(url).await { Ok(model) => model, Err(err) => { error!("Error fetching price from: {}, error: {:?}", url, err); continue; }, }; + price_urls.rotate_left(i); debug!("price registry size: {}", model.0.len()); info!("price successfully fetched from {url}"); return Ok(model); diff --git a/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs b/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs index acdb6bd217..64e6889da5 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs @@ -93,7 +93,7 @@ impl From for TradingBotEvent { pub struct RunningState { trading_bot_cfg: SimpleMakerBotRegistry, bot_refresh_rate: f64, - price_urls: Vec, + price_urls: AsyncMutex>, } pub struct StoppingState { diff --git a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs index c1eef1a694..a6c68c57e6 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs @@ -9,6 +9,7 @@ use crate::mm2::{lp_ordermatch::{cancel_order, create_maker_order, update_maker_order, CancelOrderReq, MakerOrder, MakerOrderUpdateReq, OrdermatchContext, SetPriceReq}, lp_swap::{latest_swaps_for_pair, LatestSwapsErr}}; +use coins::hd_wallet::AsyncMutex; use coins::lp_price::{fetch_price_tickers, Provider, RateInfos, PRICE_ENDPOINTS}; use coins::{lp_coinfind, GetNonZeroBalance}; use common::{executor::{SpawnFuture, Timer}, @@ -614,15 +615,14 @@ async fn execute_create_single_order( async fn process_bot_logic(ctx: &MmArc) { let simple_market_maker_bot_ctx = TradingBotContext::from_ctx(ctx).unwrap(); let state = simple_market_maker_bot_ctx.trading_bot_states.lock().await; - let (cfg, price_urls) = if let TradingBotState::Running(running_state) = &*state { - let res = (running_state.trading_bot_cfg.clone(), running_state.price_urls.clone()); - drop(state); - res - } else { - drop(state); - return; + let (cfg, mut price_urls) = match &*state { + TradingBotState::Running(running_state) => ( + running_state.trading_bot_cfg.clone(), + running_state.price_urls.lock().await, + ), + TradingBotState::Stopping(_) | TradingBotState::Stopped(_) => return, }; - let rates_registry = match fetch_price_tickers(price_urls).await { + let rates_registry = match fetch_price_tickers(&mut price_urls).await { Ok(model) => model, Err(err) => { let nb_orders = cancel_pending_orders(ctx, &cfg).await; @@ -630,6 +630,8 @@ async fn process_bot_logic(ctx: &MmArc) { return; }, }; + drop(price_urls); + drop(state); let mut memoization_pair_registry: HashSet = HashSet::new(); let ordermatch_ctx = OrdermatchContext::from_ctx(ctx).unwrap(); @@ -734,9 +736,10 @@ pub async fn start_simple_market_maker_bot(ctx: MmArc, req: StartSimpleMakerBotR *state = RunningState { trading_bot_cfg: req.cfg, bot_refresh_rate: refresh_rate, - price_urls: req - .price_urls - .unwrap_or_else(|| PRICE_ENDPOINTS.iter().map(|url| url.to_string()).collect()), + price_urls: AsyncMutex::new( + req.price_urls + .unwrap_or_else(|| PRICE_ENDPOINTS.iter().map(|url| url.to_string()).collect()), + ), } .into(); drop(state); From 147144dff79e9b6092022deeafb2fd53ed4e6440 Mon Sep 17 00:00:00 2001 From: shamardy Date: Wed, 10 Jan 2024 17:16:34 +0200 Subject: [PATCH 4/6] allow the use of a singular or multiple price urls for backward compatibility --- .../src/lp_ordermatch/simple_market_maker.rs | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs index a6c68c57e6..8bd88f5980 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs @@ -110,10 +110,36 @@ impl From for OrderProcessingError { fn from(error: std::string::String) -> Self { OrderProcessingError::LegacyError(error) } } +#[derive(Deserialize)] +enum PriceSources { + #[serde(rename = "price_url")] + Singular(String), + #[serde(rename = "price_urls")] + Multiple(Vec), +} + +impl Default for PriceSources { + fn default() -> Self { PriceSources::Multiple(PRICE_ENDPOINTS.iter().map(|url| url.to_string()).collect()) } +} + +impl PriceSources { + /// # Important + /// + /// Always use this to get the data + fn get_urls(&self) -> Vec { + match self { + // TODO: deprecate price_url soon and inform the users + PriceSources::Singular(url) => vec![url.clone()], + PriceSources::Multiple(urls) => urls.clone(), + } + } +} + #[derive(Deserialize)] pub struct StartSimpleMakerBotRequest { cfg: SimpleMakerBotRegistry, - price_urls: Option>, + #[serde(default, flatten)] + price_sources: PriceSources, bot_refresh_rate: Option, } @@ -736,10 +762,7 @@ pub async fn start_simple_market_maker_bot(ctx: MmArc, req: StartSimpleMakerBotR *state = RunningState { trading_bot_cfg: req.cfg, bot_refresh_rate: refresh_rate, - price_urls: AsyncMutex::new( - req.price_urls - .unwrap_or_else(|| PRICE_ENDPOINTS.iter().map(|url| url.to_string()).collect()), - ), + price_urls: AsyncMutex::new(req.price_sources.get_urls()), } .into(); drop(state); @@ -794,7 +817,7 @@ mod tests { let another_cloned_ctx = ctx.clone(); let req = StartSimpleMakerBotRequest { cfg: Default::default(), - price_urls: None, + price_sources: Default::default(), bot_refresh_rate: None, }; let answer = block_on(start_simple_market_maker_bot(ctx, req)).unwrap(); @@ -802,7 +825,7 @@ mod tests { let req = StartSimpleMakerBotRequest { cfg: Default::default(), - price_urls: None, + price_sources: Default::default(), bot_refresh_rate: None, }; let answer = block_on(start_simple_market_maker_bot(cloned_ctx, req)); From d8f884ba1734b72a8837f05d3d99d0b4ca27cd19 Mon Sep 17 00:00:00 2001 From: shamardy Date: Thu, 11 Jan 2024 13:07:37 +0200 Subject: [PATCH 5/6] make price_urls in bot running_state lock free --- mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs | 2 +- .../src/lp_ordermatch/simple_market_maker.rs | 95 ++++++++----------- 2 files changed, 43 insertions(+), 54 deletions(-) diff --git a/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs b/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs index 64e6889da5..acdb6bd217 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/lp_bot.rs @@ -93,7 +93,7 @@ impl From for TradingBotEvent { pub struct RunningState { trading_bot_cfg: SimpleMakerBotRegistry, bot_refresh_rate: f64, - price_urls: AsyncMutex>, + price_urls: Vec, } pub struct StoppingState { diff --git a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs index 8bd88f5980..db8cd4f95a 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs @@ -9,7 +9,6 @@ use crate::mm2::{lp_ordermatch::{cancel_order, create_maker_order, update_maker_order, CancelOrderReq, MakerOrder, MakerOrderUpdateReq, OrdermatchContext, SetPriceReq}, lp_swap::{latest_swaps_for_pair, LatestSwapsErr}}; -use coins::hd_wallet::AsyncMutex; use coins::lp_price::{fetch_price_tickers, Provider, RateInfos, PRICE_ENDPOINTS}; use coins::{lp_coinfind, GetNonZeroBalance}; use common::{executor::{SpawnFuture, Timer}, @@ -640,15 +639,15 @@ async fn execute_create_single_order( async fn process_bot_logic(ctx: &MmArc) { let simple_market_maker_bot_ctx = TradingBotContext::from_ctx(ctx).unwrap(); - let state = simple_market_maker_bot_ctx.trading_bot_states.lock().await; - let (cfg, mut price_urls) = match &*state { - TradingBotState::Running(running_state) => ( - running_state.trading_bot_cfg.clone(), - running_state.price_urls.lock().await, - ), + let mut state = simple_market_maker_bot_ctx.trading_bot_states.lock().await; + let running_state = match &mut *state { + TradingBotState::Running(running_state) => running_state, TradingBotState::Stopping(_) | TradingBotState::Stopped(_) => return, }; - let rates_registry = match fetch_price_tickers(&mut price_urls).await { + + let cfg = running_state.trading_bot_cfg.clone(); + let price_urls = &mut running_state.price_urls; + let rates_registry = match fetch_price_tickers(price_urls).await { Ok(model) => model, Err(err) => { let nb_orders = cancel_pending_orders(ctx, &cfg).await; @@ -656,63 +655,53 @@ async fn process_bot_logic(ctx: &MmArc) { return; }, }; - drop(price_urls); + drop(state); let mut memoization_pair_registry: HashSet = HashSet::new(); let ordermatch_ctx = OrdermatchContext::from_ctx(ctx).unwrap(); let maker_orders = ordermatch_ctx.maker_orders_ctx.lock().orders.clone(); - let mut futures_order_update = Vec::with_capacity(0); - // Iterating over maker orders and update order that are present in cfg as the key_trade_pair e.g KMD/LTC - for (uuid, order_mutex) in maker_orders.into_iter() { + let mut futures_order_update = Vec::with_capacity(maker_orders.len()); + for (uuid, order_mutex) in maker_orders { let order = order_mutex.lock().await; let key_trade_pair = TradingPair::new(order.base.clone(), order.rel.clone()); - match cfg.get(&key_trade_pair.as_combination()) { - Some(coin_cfg) => { - if !coin_cfg.enable { - continue; - } - let cloned_infos = ( - ctx.clone(), - rates_registry - .get_cex_rates(&coin_cfg.base, &coin_cfg.rel) - .unwrap_or_default(), - key_trade_pair.clone(), - coin_cfg.clone(), - ); - futures_order_update.push(execute_update_order(uuid, order.clone(), cloned_infos)); - memoization_pair_registry.insert(key_trade_pair.as_combination()); - }, - _ => continue, + + if let Some(coin_cfg) = cfg.get(&key_trade_pair.as_combination()) { + if !coin_cfg.enable { + continue; + } + let cloned_infos = ( + ctx.clone(), + rates_registry + .get_cex_rates(&coin_cfg.base, &coin_cfg.rel) + .unwrap_or_default(), + key_trade_pair.clone(), + coin_cfg.clone(), + ); + futures_order_update.push(execute_update_order(uuid, order.clone(), cloned_infos)); + memoization_pair_registry.insert(key_trade_pair.as_combination()); } } - let all_updated_orders_tasks = futures::future::join_all(futures_order_update); - let _results_order_updates = all_updated_orders_tasks.await; + let _results_order_updates = futures::future::join_all(futures_order_update).await; - let mut futures_order_creation = Vec::with_capacity(0); + let mut futures_order_creation = Vec::with_capacity(cfg.len()); // Now iterate over the registry and for every pairs that are not hit let's create an order - for (trading_pair, cur_cfg) in cfg.into_iter() { - match memoization_pair_registry.get(&trading_pair) { - Some(_) => continue, - None => { - if !cur_cfg.enable { - continue; - } - let rates_infos = rates_registry - .get_cex_rates(&cur_cfg.base, &cur_cfg.rel) - .unwrap_or_default(); - futures_order_creation.push(execute_create_single_order( - rates_infos, - cur_cfg, - trading_pair.clone(), - ctx, - )); - }, - }; + for (trading_pair, cur_cfg) in cfg { + if memoization_pair_registry.get(&trading_pair).is_some() || !cur_cfg.enable { + continue; + } + let rates_infos = rates_registry + .get_cex_rates(&cur_cfg.base, &cur_cfg.rel) + .unwrap_or_default(); + futures_order_creation.push(execute_create_single_order( + rates_infos, + cur_cfg, + trading_pair.clone(), + ctx, + )); } - let all_created_orders_tasks = futures::future::join_all(futures_order_creation); - let _results_order_creations = all_created_orders_tasks.await; + let _results_order_creations = futures::future::join_all(futures_order_creation).await; } pub async fn lp_bot_loop(ctx: MmArc) { @@ -762,7 +751,7 @@ pub async fn start_simple_market_maker_bot(ctx: MmArc, req: StartSimpleMakerBotR *state = RunningState { trading_bot_cfg: req.cfg, bot_refresh_rate: refresh_rate, - price_urls: AsyncMutex::new(req.price_sources.get_urls()), + price_urls: req.price_sources.get_urls(), } .into(); drop(state); From 4d93e986ba5f93c24272daed91542bea617eec5d Mon Sep 17 00:00:00 2001 From: shamardy Date: Wed, 17 Jan 2024 18:56:26 +0200 Subject: [PATCH 6/6] fix minor review comments --- mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs index db8cd4f95a..da234ba488 100644 --- a/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs +++ b/mm2src/mm2_main/src/lp_ordermatch/simple_market_maker.rs @@ -118,7 +118,7 @@ enum PriceSources { } impl Default for PriceSources { - fn default() -> Self { PriceSources::Multiple(PRICE_ENDPOINTS.iter().map(|url| url.to_string()).collect()) } + fn default() -> Self { PriceSources::Multiple(PRICE_ENDPOINTS.iter().map(ToString::to_string).collect()) } } impl PriceSources { @@ -646,8 +646,7 @@ async fn process_bot_logic(ctx: &MmArc) { }; let cfg = running_state.trading_bot_cfg.clone(); - let price_urls = &mut running_state.price_urls; - let rates_registry = match fetch_price_tickers(price_urls).await { + let rates_registry = match fetch_price_tickers(&mut running_state.price_urls).await { Ok(model) => model, Err(err) => { let nb_orders = cancel_pending_orders(ctx, &cfg).await;