nautilus_binance/common/
consts.rs1use std::{num::NonZeroU32, sync::LazyLock};
19
20use nautilus_model::identifiers::Venue;
21use nautilus_network::ratelimiter::quota::Quota;
22use ustr::Ustr;
23
24use super::enums::{BinanceRateLimitInterval, BinanceRateLimitType};
25
26pub const BINANCE: &str = "BINANCE";
28
29pub static BINANCE_VENUE: LazyLock<Venue> = LazyLock::new(|| Venue::new(BINANCE));
31
32pub const BINANCE_SPOT_HTTP_URL: &str = "https://api.binance.com";
34
35pub const BINANCE_FUTURES_USD_HTTP_URL: &str = "https://fapi.binance.com";
37
38pub const BINANCE_FUTURES_COIN_HTTP_URL: &str = "https://dapi.binance.com";
40
41pub const BINANCE_OPTIONS_HTTP_URL: &str = "https://eapi.binance.com";
43
44pub const BINANCE_SPOT_TESTNET_HTTP_URL: &str = "https://testnet.binance.vision";
46
47pub const BINANCE_FUTURES_USD_TESTNET_HTTP_URL: &str = "https://testnet.binancefuture.com";
49
50pub const BINANCE_FUTURES_COIN_TESTNET_HTTP_URL: &str = "https://testnet.binancefuture.com";
52
53pub const BINANCE_SPOT_DEMO_HTTP_URL: &str = "https://demo-api.binance.com";
55
56pub const BINANCE_FUTURES_DEMO_HTTP_URL: &str = "https://testnet.binancefuture.com";
58
59pub const BINANCE_SPOT_WS_URL: &str = "wss://stream.binance.com:9443/ws";
61
62pub const BINANCE_FUTURES_USD_WS_URL: &str = "wss://fstream.binance.com/ws";
64
65pub const BINANCE_FUTURES_COIN_WS_URL: &str = "wss://dstream.binance.com/ws";
67
68pub const BINANCE_OPTIONS_WS_URL: &str = "wss://nbstream.binance.com/eoptions";
70
71pub const BINANCE_SPOT_SBE_WS_URL: &str = "wss://stream-sbe.binance.com/ws";
73
74pub const BINANCE_SPOT_SBE_WS_API_URL: &str =
76 "wss://ws-api.binance.com:443/ws-api/v3?responseFormat=sbe&sbeSchemaId=3&sbeSchemaVersion=2";
77
78pub const BINANCE_SPOT_SBE_WS_API_TESTNET_URL: &str =
80 "wss://testnet.binance.vision/ws-api/v3?responseFormat=sbe&sbeSchemaId=3&sbeSchemaVersion=2";
81
82pub const BINANCE_SPOT_SBE_WS_API_DEMO_URL: &str =
84 "wss://demo-ws-api.binance.com/ws-api/v3?responseFormat=sbe&sbeSchemaId=3&sbeSchemaVersion=2";
85
86pub const BINANCE_SPOT_TESTNET_WS_URL: &str = "wss://stream.testnet.binance.vision/ws";
88
89pub const BINANCE_SPOT_DEMO_WS_URL: &str = "wss://demo-stream.binance.com/ws";
91
92pub const BINANCE_FUTURES_USD_TESTNET_WS_URL: &str = "wss://stream.binancefuture.com/ws";
94
95pub const BINANCE_FUTURES_COIN_TESTNET_WS_URL: &str = "wss://dstream.binancefuture.com/ws";
97
98pub const BINANCE_SPOT_API_PATH: &str = "/api/v3";
100
101pub const BINANCE_FAPI_PATH: &str = "/fapi/v1";
103
104pub const BINANCE_DAPI_PATH: &str = "/dapi/v1";
106
107pub const BINANCE_EAPI_PATH: &str = "/eapi/v1";
109
110#[derive(Clone, Copy, Debug)]
112pub struct BinanceRateLimitQuota {
113 pub rate_limit_type: BinanceRateLimitType,
115 pub interval: BinanceRateLimitInterval,
117 pub interval_num: u32,
119 pub limit: u32,
121}
122
123pub const BINANCE_SPOT_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
128 BinanceRateLimitQuota {
129 rate_limit_type: BinanceRateLimitType::RequestWeight,
130 interval: BinanceRateLimitInterval::Minute,
131 interval_num: 1,
132 limit: 1_200,
133 },
134 BinanceRateLimitQuota {
135 rate_limit_type: BinanceRateLimitType::Orders,
136 interval: BinanceRateLimitInterval::Second,
137 interval_num: 1,
138 limit: 10,
139 },
140 BinanceRateLimitQuota {
141 rate_limit_type: BinanceRateLimitType::Orders,
142 interval: BinanceRateLimitInterval::Day,
143 interval_num: 1,
144 limit: 100_000,
145 },
146];
147
148pub const BINANCE_FAPI_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
153 BinanceRateLimitQuota {
154 rate_limit_type: BinanceRateLimitType::RequestWeight,
155 interval: BinanceRateLimitInterval::Minute,
156 interval_num: 1,
157 limit: 2_400,
158 },
159 BinanceRateLimitQuota {
160 rate_limit_type: BinanceRateLimitType::Orders,
161 interval: BinanceRateLimitInterval::Second,
162 interval_num: 1,
163 limit: 50,
164 },
165 BinanceRateLimitQuota {
166 rate_limit_type: BinanceRateLimitType::Orders,
167 interval: BinanceRateLimitInterval::Minute,
168 interval_num: 1,
169 limit: 1_200,
170 },
171];
172
173pub const BINANCE_DAPI_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
178 BinanceRateLimitQuota {
179 rate_limit_type: BinanceRateLimitType::RequestWeight,
180 interval: BinanceRateLimitInterval::Minute,
181 interval_num: 1,
182 limit: 1_200,
183 },
184 BinanceRateLimitQuota {
185 rate_limit_type: BinanceRateLimitType::Orders,
186 interval: BinanceRateLimitInterval::Second,
187 interval_num: 1,
188 limit: 20,
189 },
190 BinanceRateLimitQuota {
191 rate_limit_type: BinanceRateLimitType::Orders,
192 interval: BinanceRateLimitInterval::Minute,
193 interval_num: 1,
194 limit: 1_200,
195 },
196];
197
198pub const BINANCE_EAPI_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
203 BinanceRateLimitQuota {
204 rate_limit_type: BinanceRateLimitType::RequestWeight,
205 interval: BinanceRateLimitInterval::Minute,
206 interval_num: 1,
207 limit: 3_000,
208 },
209 BinanceRateLimitQuota {
210 rate_limit_type: BinanceRateLimitType::Orders,
211 interval: BinanceRateLimitInterval::Second,
212 interval_num: 1,
213 limit: 5,
214 },
215 BinanceRateLimitQuota {
216 rate_limit_type: BinanceRateLimitType::Orders,
217 interval: BinanceRateLimitInterval::Minute,
218 interval_num: 1,
219 limit: 200,
220 },
221];
222
223pub static BINANCE_WS_SUBSCRIPTION_QUOTA: LazyLock<Quota> =
227 LazyLock::new(|| Quota::per_second(NonZeroU32::new(5).expect("5 > 0")));
228
229pub static BINANCE_WS_CONNECTION_QUOTA: LazyLock<Quota> =
234 LazyLock::new(|| Quota::per_second(NonZeroU32::new(1).expect("1 > 0")));
235
236pub static BINANCE_RATE_LIMIT_KEY_SUBSCRIPTION: LazyLock<[Ustr; 1]> =
238 LazyLock::new(|| [Ustr::from("subscription")]);
239
240pub const BINANCE_BOOK_DEPTHS: [u32; 7] = [5, 10, 20, 50, 100, 500, 1000];