Skip to content

Commit 4791182

Browse files
committed
nuke: recv_window on non-sign methods
1 parent 16d80bc commit 4791182

File tree

12 files changed

+45
-100
lines changed

12 files changed

+45
-100
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

v_exchanges/src/binance/mod.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ impl Exchange for Binance {
3131
self.update_default_option(BinanceOption::RecvWindow(recv_window));
3232
}
3333

34-
async fn exchange_info(&self, instrument: Instrument, recv_window: Option<std::time::Duration>) -> ExchangeResult<ExchangeInfo> {
34+
async fn exchange_info(&self, instrument: Instrument, _recv_window: Option<std::time::Duration>) -> ExchangeResult<ExchangeInfo> {
3535
match instrument {
36-
Instrument::Perp => perp::general::exchange_info(self, recv_window).await,
36+
Instrument::Perp => perp::general::exchange_info(self).await,
3737
_ => unimplemented!(),
3838
}
3939
}
@@ -49,18 +49,18 @@ impl Exchange for Binance {
4949
}
5050
}
5151

52-
async fn prices(&self, pairs: Option<Vec<Pair>>, instrument: Instrument, recv_window: Option<std::time::Duration>) -> ExchangeResult<BTreeMap<Pair, f64>> {
52+
async fn prices(&self, pairs: Option<Vec<Pair>>, instrument: Instrument, _recv_window: Option<std::time::Duration>) -> ExchangeResult<BTreeMap<Pair, f64>> {
5353
match instrument {
54-
Instrument::Spot | Instrument::Margin => spot::market::prices(self, pairs, recv_window).await,
55-
Instrument::Perp => perp::market::prices(self, pairs, recv_window).await,
54+
Instrument::Spot | Instrument::Margin => spot::market::prices(self, pairs).await,
55+
Instrument::Perp => perp::market::prices(self, pairs).await,
5656
_ => Err(ExchangeError::Method(MethodError::MethodNotImplemented { exchange: self.name(), instrument })),
5757
}
5858
}
5959

60-
async fn price(&self, symbol: Symbol, recv_window: Option<std::time::Duration>) -> ExchangeResult<f64> {
60+
async fn price(&self, symbol: Symbol, _recv_window: Option<std::time::Duration>) -> ExchangeResult<f64> {
6161
match symbol.instrument {
62-
Instrument::Spot | Instrument::Margin => spot::market::price(self, symbol.pair, recv_window).await,
63-
Instrument::Perp => perp::market::price(self, symbol.pair, recv_window).await,
62+
Instrument::Spot | Instrument::Margin => spot::market::price(self, symbol.pair).await,
63+
Instrument::Perp => perp::market::price(self, symbol.pair).await,
6464
_ => Err(ExchangeError::Method(MethodError::MethodNotImplemented {
6565
exchange: self.name(),
6666
instrument: symbol.instrument,

v_exchanges/src/binance/perp/general.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
1-
use adapters::binance::{BinanceHttpUrl, BinanceOption, BinanceOptions};
1+
use adapters::binance::{BinanceHttpUrl, BinanceOption};
22
use eyre::Result;
33
use jiff::Timestamp;
44
use serde::{Deserialize, Serialize};
55
use serde_json::Value;
66
use serde_with::{DisplayFromStr, serde_as};
7-
use v_exchanges_adapters::GetOptions;
87
use v_utils::trades::Pair;
98

109
use crate::{
1110
ExchangeError,
1211
core::{ExchangeInfo, PairInfo},
13-
recv_window_check,
1412
};
1513
//TODO: general endpoints, like ping and exchange info
1614

17-
pub async fn exchange_info(client: &v_exchanges_adapters::Client, recv_window: Option<std::time::Duration>) -> Result<ExchangeInfo, ExchangeError> {
18-
recv_window_check!(recv_window, GetOptions::<BinanceOptions>::default_options(client));
19-
let mut options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::FuturesUsdM)];
20-
if let Some(rw) = recv_window {
21-
options.push(BinanceOption::RecvWindow(rw));
22-
}
15+
pub async fn exchange_info(client: &v_exchanges_adapters::Client) -> Result<ExchangeInfo, ExchangeError> {
16+
let options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::FuturesUsdM)];
2317
let r: BinanceExchangeFutures = client.get_no_query("/fapi/v1/exchangeInfo", options).await?;
2418
Ok(r.into())
2519
}

v_exchanges/src/binance/perp/market.rs

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,26 @@
11
use adapters::Client;
22
//HACK: Methods should be implemented on the central interface struct, following <https://github.com/wisespace-io/binance-rs>.
33
use serde_with::{DisplayFromStr, serde_as};
4-
use v_exchanges_adapters::{
5-
GetOptions,
6-
binance::{BinanceHttpUrl, BinanceOption, BinanceOptions},
7-
};
4+
use v_exchanges_adapters::binance::{BinanceHttpUrl, BinanceOption};
85
use v_utils::prelude::*;
96

10-
use crate::{ExchangeResult, recv_window_check};
7+
use crate::ExchangeResult;
118

129
// price {{{
1310
//HACK: should use /fapi/v2/ticker/price instead
14-
pub async fn price(client: &Client, pair: Pair, recv_window: Option<std::time::Duration>) -> ExchangeResult<f64> {
15-
recv_window_check!(recv_window, GetOptions::<BinanceOptions>::default_options(client));
11+
pub async fn price(client: &Client, pair: Pair) -> ExchangeResult<f64> {
1612
let params = json!({
1713
"symbol": pair.fmt_binance(),
1814
});
1915

20-
let mut options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::FuturesUsdM)];
21-
if let Some(rw) = recv_window {
22-
options.push(BinanceOption::RecvWindow(rw));
23-
}
16+
let options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::FuturesUsdM)];
2417
let r: MarkPriceResponse = client.get("/fapi/v1/premiumIndex", &params, options).await?;
2518
let price = r.index_price; // when using this framework, we care for per-exchange price, obviously
2619
Ok(price)
2720
}
2821

29-
pub async fn prices(client: &Client, pairs: Option<Vec<Pair>>, recv_window: Option<std::time::Duration>) -> ExchangeResult<BTreeMap<Pair, f64>> {
30-
recv_window_check!(recv_window, GetOptions::<BinanceOptions>::default_options(client));
31-
let mut options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::FuturesUsdM)];
32-
if let Some(rw) = recv_window {
33-
options.push(BinanceOption::RecvWindow(rw));
34-
}
22+
pub async fn prices(client: &Client, pairs: Option<Vec<Pair>>) -> ExchangeResult<BTreeMap<Pair, f64>> {
23+
let options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::FuturesUsdM)];
3524
let rs: Vec<PriceObject> = match pairs {
3625
Some(pairs) => {
3726
let params = json!({

v_exchanges/src/binance/spot/market.rs

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
use std::{collections::BTreeMap, str::FromStr};
22

3-
use adapters::binance::{BinanceHttpUrl, BinanceOption, BinanceOptions};
3+
use adapters::binance::{BinanceHttpUrl, BinanceOption};
44
use serde::{Deserialize, Serialize};
55
use serde_json::json;
66
use serde_with::{DisplayFromStr, serde_as};
77
use tracing::instrument;
8-
use v_exchanges_adapters::GetOptions;
98
use v_utils::trades::Pair;
109

11-
use crate::{ExchangeResult, recv_window_check};
10+
use crate::ExchangeResult;
1211

1312
#[instrument(skip_all, fields(?pairs))]
14-
pub async fn prices(client: &v_exchanges_adapters::Client, pairs: Option<Vec<Pair>>, recv_window: Option<std::time::Duration>) -> ExchangeResult<BTreeMap<Pair, f64>> {
15-
recv_window_check!(recv_window, GetOptions::<BinanceOptions>::default_options(client));
16-
let mut options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::Spot)];
17-
if let Some(rw) = recv_window {
18-
options.push(BinanceOption::RecvWindow(rw));
19-
}
13+
pub async fn prices(client: &v_exchanges_adapters::Client, pairs: Option<Vec<Pair>>) -> ExchangeResult<BTreeMap<Pair, f64>> {
14+
let options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::Spot)];
2015
let r: PricesResponse = match pairs {
2116
//TODO!!!: fix this branch
2217
//BUG: doesn't work for some reason
@@ -46,16 +41,12 @@ pub async fn prices(client: &v_exchanges_adapters::Client, pairs: Option<Vec<Pai
4641
Ok(prices)
4742
}
4843

49-
pub async fn price(client: &v_exchanges_adapters::Client, pair: Pair, recv_window: Option<std::time::Duration>) -> ExchangeResult<f64> {
50-
recv_window_check!(recv_window, GetOptions::<BinanceOptions>::default_options(client));
44+
pub async fn price(client: &v_exchanges_adapters::Client, pair: Pair) -> ExchangeResult<f64> {
5145
let params = json!({
5246
"symbol": pair.fmt_binance(),
5347
});
5448

55-
let mut options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::Spot)];
56-
if let Some(rw) = recv_window {
57-
options.push(BinanceOption::RecvWindow(rw));
58-
}
49+
let options = vec![BinanceOption::HttpUrl(BinanceHttpUrl::Spot)];
5950
let r: AssetPriceResponse = client.get("/api/v3/ticker/price", &params, options).await.unwrap();
6051
let price = r.price;
6152
Ok(price)

v_exchanges/src/bybit/market.rs

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ use jiff::Timestamp;
44
use serde::{Deserialize, Serialize};
55
use serde_json::{Value, json};
66
use serde_with::{DisplayFromStr, serde_as};
7-
use v_exchanges_adapters::{
8-
GetOptions,
9-
bybit::{BybitOption, BybitOptions},
10-
};
7+
use v_exchanges_adapters::bybit::BybitOption;
118
use v_utils::{
129
trades::{Kline, Ohlc, Pair},
1310
utils::filter_nulls,
@@ -17,12 +14,10 @@ use super::{BybitInterval, BybitIntervalTime};
1714
use crate::{
1815
ExchangeName, ExchangeResult, Instrument, Symbol,
1916
core::{Klines, OpenInterest, RequestRange},
20-
recv_window_check,
2117
};
2218

2319
// klines {{{
24-
pub async fn klines(client: &v_exchanges_adapters::Client, symbol: Symbol, tf: BybitInterval, range: RequestRange, recv_window: Option<std::time::Duration>) -> ExchangeResult<Klines> {
25-
recv_window_check!(recv_window, GetOptions::<BybitOptions>::default_options(client));
20+
pub async fn klines(client: &v_exchanges_adapters::Client, symbol: Symbol, tf: BybitInterval, range: RequestRange) -> ExchangeResult<Klines> {
2621
range.ensure_allowed(1..=1000, &tf)?;
2722
let range_json = range.serialize(ExchangeName::Bybit);
2823
let base_params = filter_nulls(json!({
@@ -36,10 +31,7 @@ pub async fn klines(client: &v_exchanges_adapters::Client, symbol: Symbol, tf: B
3631
base_map.extend(range_map.clone());
3732
let params = filter_nulls(serde_json::Value::Object(base_map));
3833

39-
let mut options = vec![BybitOption::None];
40-
if let Some(rw) = recv_window {
41-
options.push(BybitOption::RecvWindow(rw));
42-
}
34+
let options = vec![BybitOption::None];
4335
let kline_response: KlineResponse = client.get("/v5/market/kline", &params, options).await.unwrap();
4436

4537
let mut klines = VecDeque::with_capacity(kline_response.result.list.len());
@@ -96,16 +88,12 @@ pub struct KlineData(
9688
//,}}}
9789

9890
// price {{{
99-
pub async fn price(client: &v_exchanges_adapters::Client, pair: Pair, recv_window: Option<std::time::Duration>) -> ExchangeResult<f64> {
100-
recv_window_check!(recv_window, GetOptions::<BybitOptions>::default_options(client));
91+
pub async fn price(client: &v_exchanges_adapters::Client, pair: Pair) -> ExchangeResult<f64> {
10192
let params = filter_nulls(json!({
10293
"category": "linear",
10394
"symbol": pair.fmt_bybit(),
10495
}));
105-
let mut options = vec![BybitOption::None];
106-
if let Some(rw) = recv_window {
107-
options.push(BybitOption::RecvWindow(rw));
108-
}
96+
let options = vec![BybitOption::None];
10997
let response: MarketTickerResponse = client.get("/v5/market/tickers", &params, options).await?;
11098
Ok(response.result.list[0].last_price)
11199
}
@@ -171,14 +159,7 @@ pub struct MarketTickerData {
171159
//,}}}
172160

173161
// open_interest {{{
174-
pub async fn open_interest(
175-
client: &v_exchanges_adapters::Client,
176-
symbol: Symbol,
177-
tf: BybitIntervalTime,
178-
range: RequestRange,
179-
recv_window: Option<std::time::Duration>,
180-
) -> ExchangeResult<Vec<OpenInterest>> {
181-
recv_window_check!(recv_window, GetOptions::<BybitOptions>::default_options(client));
162+
pub async fn open_interest(client: &v_exchanges_adapters::Client, symbol: Symbol, tf: BybitIntervalTime, range: RequestRange) -> ExchangeResult<Vec<OpenInterest>> {
182163
range.ensure_allowed(1..=200, &tf)?;
183164
let range_json = range.serialize(ExchangeName::Bybit);
184165

@@ -193,10 +174,7 @@ pub async fn open_interest(
193174
base_map.extend(range_map.clone());
194175
let params = filter_nulls(serde_json::Value::Object(base_map));
195176

196-
let mut options = vec![BybitOption::None];
197-
if let Some(rw) = recv_window {
198-
options.push(BybitOption::RecvWindow(rw));
199-
}
177+
let options = vec![BybitOption::None];
200178
let response: OpenInterestResponse = client.get("/v5/market/open-interest", &params, options).await?;
201179

202180
if response.result.list.is_empty() {
@@ -209,10 +187,7 @@ pub async fn open_interest(
209187
"category": "linear",
210188
"symbol": symbol.pair.fmt_bybit(),
211189
}));
212-
let mut options = vec![BybitOption::None];
213-
if let Some(rw) = recv_window {
214-
options.push(BybitOption::RecvWindow(rw));
215-
}
190+
let options = vec![BybitOption::None];
216191
let ticker_response: MarketTickerResponse = client.get("/v5/market/tickers", &params, options).await?;
217192
Some(ticker_response.result.list[0].last_price)
218193
} else {

v_exchanges/src/bybit/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,23 @@ impl Exchange for Bybit {
3030
self.update_default_option(BybitOption::RecvWindow(recv_window));
3131
}
3232

33-
async fn klines(&self, symbol: Symbol, tf: Timeframe, range: RequestRange, recv_window: Option<std::time::Duration>) -> ExchangeResult<Klines> {
33+
async fn klines(&self, symbol: Symbol, tf: Timeframe, range: RequestRange, _recv_window: Option<std::time::Duration>) -> ExchangeResult<Klines> {
3434
match symbol.instrument {
35-
Instrument::Perp => market::klines(self, symbol, tf.try_into()?, range, recv_window).await,
35+
Instrument::Perp => market::klines(self, symbol, tf.try_into()?, range).await,
3636
_ => unimplemented!(),
3737
}
3838
}
3939

40-
async fn price(&self, symbol: Symbol, recv_window: Option<std::time::Duration>) -> ExchangeResult<f64> {
40+
async fn price(&self, symbol: Symbol, _recv_window: Option<std::time::Duration>) -> ExchangeResult<f64> {
4141
match symbol.instrument {
42-
Instrument::Perp => market::price(self, symbol.pair, recv_window).await,
42+
Instrument::Perp => market::price(self, symbol.pair).await,
4343
_ => unimplemented!(),
4444
}
4545
}
4646

47-
async fn open_interest(&self, symbol: Symbol, tf: Timeframe, range: RequestRange, recv_window: Option<std::time::Duration>) -> ExchangeResult<Vec<OpenInterest>> {
47+
async fn open_interest(&self, symbol: Symbol, tf: Timeframe, range: RequestRange, _recv_window: Option<std::time::Duration>) -> ExchangeResult<Vec<OpenInterest>> {
4848
match symbol.instrument {
49-
Instrument::Perp => market::open_interest(self, symbol, tf.try_into()?, range, recv_window).await,
49+
Instrument::Perp => market::open_interest(self, symbol, tf.try_into()?, range).await,
5050
_ => Err(crate::ExchangeError::Method(crate::MethodError::MethodNotSupported {
5151
exchange: self.name(),
5252
instrument: symbol.instrument,

v_exchanges/src/kucoin/account.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub async fn balances(client: &Client, recv_window: Option<std::time::Duration>)
4040
}
4141
// Fetch price for non-stablecoin assets
4242
let usdt_pair = Pair::new(asset, "USDT".into());
43-
let usdt_price = market::price(client, usdt_pair, recv_window)
43+
let usdt_price = market::price(client, usdt_pair, None)
4444
.await
4545
.map_err(|e| eyre!("Failed to fetch USDT price for {asset} (balance: {underlying}): {e}"))?;
4646
Ok((underlying * usdt_price).into())

v_exchanges/src/kucoin/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ impl Exchange for Kucoin {
3131
}
3232

3333
fn set_recv_window(&mut self, _recv_window: std::time::Duration) {
34-
tracing::warn!("Kucoin does not support recv_window as a global setting");
34+
tracing::warn!("KuCoin does not support configurable recv_window - uses a fixed 5-second tolerance window for all authenticated requests");
3535
}
3636

3737
async fn exchange_info(&self, instrument: Instrument, recv_window: Option<std::time::Duration>) -> ExchangeResult<ExchangeInfo> {

v_exchanges/src/mexc/account.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub async fn balances(client: &Client, recv_window: Option<std::time::Duration>)
3939
if b.asset == "USDT" {
4040
Box::pin(async move { Ok(1.) }) as Pin<Box<dyn Future<Output = ExchangeResult<f64>> + Send>>
4141
} else {
42-
Box::pin(super::market::price(client, (b.asset, "USDT".into()).into(), recv_window)) as Pin<Box<dyn Future<Output = ExchangeResult<f64>> + Send>>
42+
Box::pin(super::market::price(client, (b.asset, "USDT".into()).into())) as Pin<Box<dyn Future<Output = ExchangeResult<f64>> + Send>>
4343
}
4444
})
4545
.collect();

0 commit comments

Comments
 (0)