nautilus_binance/common/
consts.rs

1// -------------------------------------------------------------------------------------------------
2//  Copyright (C) 2015-2026 Nautech Systems Pty Ltd. All rights reserved.
3//  https://nautechsystems.io
4//
5//  Licensed under the GNU Lesser General Public License Version 3.0 (the "License");
6//  You may not use this file except in compliance with the License.
7//  You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html
8//
9//  Unless required by applicable law or agreed to in writing, software
10//  distributed under the License is distributed on an "AS IS" BASIS,
11//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//  See the License for the specific language governing permissions and
13//  limitations under the License.
14// -------------------------------------------------------------------------------------------------
15
16//! Binance venue constants and API endpoints.
17
18use std::sync::LazyLock;
19
20use nautilus_model::identifiers::Venue;
21
22use super::enums::{BinanceRateLimitInterval, BinanceRateLimitType};
23
24/// The Binance venue identifier string.
25pub const BINANCE: &str = "BINANCE";
26
27/// Static venue instance for Binance.
28pub static BINANCE_VENUE: LazyLock<Venue> = LazyLock::new(|| Venue::new(BINANCE));
29
30/// Binance Spot API base URL (mainnet).
31pub const BINANCE_SPOT_HTTP_URL: &str = "https://api.binance.com";
32
33/// Binance USD-M Futures API base URL (mainnet).
34pub const BINANCE_FUTURES_USD_HTTP_URL: &str = "https://fapi.binance.com";
35
36/// Binance COIN-M Futures API base URL (mainnet).
37pub const BINANCE_FUTURES_COIN_HTTP_URL: &str = "https://dapi.binance.com";
38
39/// Binance European Options API base URL (mainnet).
40pub const BINANCE_OPTIONS_HTTP_URL: &str = "https://eapi.binance.com";
41
42/// Binance Spot API base URL (testnet).
43pub const BINANCE_SPOT_TESTNET_HTTP_URL: &str = "https://testnet.binance.vision";
44
45/// Binance USD-M Futures API base URL (testnet).
46pub const BINANCE_FUTURES_USD_TESTNET_HTTP_URL: &str = "https://testnet.binancefuture.com";
47
48/// Binance COIN-M Futures API base URL (testnet).
49pub const BINANCE_FUTURES_COIN_TESTNET_HTTP_URL: &str = "https://testnet.binancefuture.com";
50
51/// Binance Spot WebSocket base URL (mainnet).
52pub const BINANCE_SPOT_WS_URL: &str = "wss://stream.binance.com:9443/ws";
53
54/// Binance USD-M Futures WebSocket base URL (mainnet).
55pub const BINANCE_FUTURES_USD_WS_URL: &str = "wss://fstream.binance.com/ws";
56
57/// Binance COIN-M Futures WebSocket base URL (mainnet).
58pub const BINANCE_FUTURES_COIN_WS_URL: &str = "wss://dstream.binance.com/ws";
59
60/// Binance European Options WebSocket base URL (mainnet).
61pub const BINANCE_OPTIONS_WS_URL: &str = "wss://nbstream.binance.com/eoptions";
62
63/// Binance Spot SBE WebSocket stream URL (mainnet).
64pub const BINANCE_SPOT_SBE_WS_URL: &str = "wss://stream-sbe.binance.com/ws";
65
66/// Binance Spot SBE WebSocket API URL (mainnet).
67pub const BINANCE_SPOT_SBE_WS_API_URL: &str =
68    "wss://ws-api.binance.com:443/ws-api/v3?responseFormat=sbe&sbeSchemaId=3&sbeSchemaVersion=2";
69
70/// Binance Spot SBE WebSocket API URL (testnet).
71pub const BINANCE_SPOT_SBE_WS_API_TESTNET_URL: &str =
72    "wss://testnet.binance.vision/ws-api/v3?responseFormat=sbe&sbeSchemaId=3&sbeSchemaVersion=2";
73
74/// Binance Spot WebSocket base URL (testnet).
75pub const BINANCE_SPOT_TESTNET_WS_URL: &str = "wss://testnet.binance.vision/ws";
76
77/// Binance USD-M Futures WebSocket base URL (testnet).
78pub const BINANCE_FUTURES_USD_TESTNET_WS_URL: &str = "wss://stream.binancefuture.com/ws";
79
80/// Binance COIN-M Futures WebSocket base URL (testnet).
81pub const BINANCE_FUTURES_COIN_TESTNET_WS_URL: &str = "wss://dstream.binancefuture.com/ws";
82
83/// Binance Spot API version path.
84pub const BINANCE_SPOT_API_PATH: &str = "/api/v3";
85
86/// Binance USD-M Futures API version path.
87pub const BINANCE_FAPI_PATH: &str = "/fapi/v1";
88
89/// Binance COIN-M Futures API version path.
90pub const BINANCE_DAPI_PATH: &str = "/dapi/v1";
91
92/// Binance European Options API version path.
93pub const BINANCE_EAPI_PATH: &str = "/eapi/v1";
94
95/// Describes a static rate limit quota for a product type.
96#[derive(Clone, Copy, Debug)]
97pub struct BinanceRateLimitQuota {
98    /// Rate limit type.
99    pub rate_limit_type: BinanceRateLimitType,
100    /// Time interval unit.
101    pub interval: BinanceRateLimitInterval,
102    /// Number of intervals.
103    pub interval_num: u32,
104    /// Maximum allowed requests for the interval.
105    pub limit: u32,
106}
107
108/// Spot & margin REST limits (default IP weights).
109///
110/// References:
111/// - <https://developers.binance.com/docs/binance-spot-api-docs/limits>
112pub const BINANCE_SPOT_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
113    BinanceRateLimitQuota {
114        rate_limit_type: BinanceRateLimitType::RequestWeight,
115        interval: BinanceRateLimitInterval::Minute,
116        interval_num: 1,
117        limit: 1_200,
118    },
119    BinanceRateLimitQuota {
120        rate_limit_type: BinanceRateLimitType::Orders,
121        interval: BinanceRateLimitInterval::Second,
122        interval_num: 1,
123        limit: 10,
124    },
125    BinanceRateLimitQuota {
126        rate_limit_type: BinanceRateLimitType::Orders,
127        interval: BinanceRateLimitInterval::Day,
128        interval_num: 1,
129        limit: 100_000,
130    },
131];
132
133/// USD-M Futures REST limits (default IP weights).
134///
135/// References:
136/// - <https://developers.binance.com/docs/derivatives/usds-margined-futures/general-info#limits>
137pub const BINANCE_FAPI_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
138    BinanceRateLimitQuota {
139        rate_limit_type: BinanceRateLimitType::RequestWeight,
140        interval: BinanceRateLimitInterval::Minute,
141        interval_num: 1,
142        limit: 2_400,
143    },
144    BinanceRateLimitQuota {
145        rate_limit_type: BinanceRateLimitType::Orders,
146        interval: BinanceRateLimitInterval::Second,
147        interval_num: 1,
148        limit: 50,
149    },
150    BinanceRateLimitQuota {
151        rate_limit_type: BinanceRateLimitType::Orders,
152        interval: BinanceRateLimitInterval::Minute,
153        interval_num: 1,
154        limit: 1_200,
155    },
156];
157
158/// COIN-M Futures REST limits (default IP weights).
159///
160/// References:
161/// - <https://developers.binance.com/docs/derivatives/coin-margined-futures/general-info#limits>
162pub const BINANCE_DAPI_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
163    BinanceRateLimitQuota {
164        rate_limit_type: BinanceRateLimitType::RequestWeight,
165        interval: BinanceRateLimitInterval::Minute,
166        interval_num: 1,
167        limit: 1_200,
168    },
169    BinanceRateLimitQuota {
170        rate_limit_type: BinanceRateLimitType::Orders,
171        interval: BinanceRateLimitInterval::Second,
172        interval_num: 1,
173        limit: 20,
174    },
175    BinanceRateLimitQuota {
176        rate_limit_type: BinanceRateLimitType::Orders,
177        interval: BinanceRateLimitInterval::Minute,
178        interval_num: 1,
179        limit: 1_200,
180    },
181];
182
183/// Options REST limits (default IP weights).
184///
185/// References:
186/// - <https://developers.binance.com/docs/derivatives/european-options/general-info#limits>
187pub const BINANCE_EAPI_RATE_LIMITS: &[BinanceRateLimitQuota] = &[
188    BinanceRateLimitQuota {
189        rate_limit_type: BinanceRateLimitType::RequestWeight,
190        interval: BinanceRateLimitInterval::Minute,
191        interval_num: 1,
192        limit: 3_000,
193    },
194    BinanceRateLimitQuota {
195        rate_limit_type: BinanceRateLimitType::Orders,
196        interval: BinanceRateLimitInterval::Second,
197        interval_num: 1,
198        limit: 5,
199    },
200    BinanceRateLimitQuota {
201        rate_limit_type: BinanceRateLimitType::Orders,
202        interval: BinanceRateLimitInterval::Minute,
203        interval_num: 1,
204        limit: 200,
205    },
206];