Bladeren bron

通过参数区分测试环境和正式环境

skyfffire 2 weken geleden
bovenliggende
commit
65eeca52f1
3 gewijzigde bestanden met toevoegingen van 59 en 20 verwijderingen
  1. 44 13
      src/exchange/extended_rest_client.rs
  2. 12 6
      src/exchange/extended_stream_client.rs
  3. 3 1
      src/main.rs

+ 44 - 13
src/exchange/extended_rest_client.rs

@@ -8,14 +8,18 @@ use rust_decimal::prelude::{FromPrimitive, ToPrimitive};
 use rust_decimal_macros::dec;
 use serde_json::{json, Value};
 use starknet::core::types::Felt;
-use tracing::{error, info, warn};
-use tracing_subscriber::fmt::format;
-use uuid::{Uuid};
+use tracing::{error, warn};
 use crate::exchange::extended_account::ExtendedAccount;
 use crate::utils::lib::{get_order_hash, sign_message};
 use crate::utils::response::Response;
 use crate::utils::rest_utils::RestUtils;
-use crate::utils::starknet_messages::{AssetId, Order, PositionId, Timestamp};
+
+pub struct Domain {
+    name: String,
+    version: String,
+    chain_id: String,
+    revision: String,
+}
 
 pub struct ExtendedRestClient {
     pub tag: String,
@@ -23,6 +27,7 @@ pub struct ExtendedRestClient {
 
     // 一些私有变量
     base_url: String,
+    domain: Domain,
     client: Client,
     account: Option<ExtendedAccount>,
     market_info: Value,
@@ -34,11 +39,37 @@ pub struct ExtendedRestClient {
 }
 
 impl ExtendedRestClient {
-    pub async fn new(tag: &str, account: Option<ExtendedAccount>, market: &str) -> Result<Self> {
-        let mut client = ExtendedRestClient {
-            // base_url: "https://api.starknet.extended.exchange".to_string(),
-            base_url: "https://api.starknet.sepolia.extended.exchange".to_string(),
+    pub async fn new(tag: &str, account: Option<ExtendedAccount>, market: &str, is_testnet: bool) -> Result<Self> {
+        let base_url = match is_testnet {
+            true => {
+                "https://api.starknet.sepolia.extended.exchange".to_string()
+            }
+            false => {
+                "https://api.starknet.extended.exchange".to_string()
+            }
+        };
+        let domain = match is_testnet {
+            true => {
+                Domain {
+                    name: "Perpetuals".to_string(),
+                    version: "v0".to_string(),
+                    chain_id: "SN_SEPOLIA".to_string(),
+                    revision: "1".to_string(),
+                }
+            }
+            false => {
+                Domain {
+                    name: "Perpetuals".to_string(),
+                    version: "v0".to_string(),
+                    chain_id: "SN_MAIN".to_string(),
+                    revision: "1".to_string(),
+                }
+            }
+        };
 
+        let mut client = ExtendedRestClient {
+            base_url,
+            domain,
             tag: tag.to_string(),
             market: market.to_string(),
 
@@ -242,10 +273,10 @@ impl ExtendedRestClient {
         let expiration = (expire_time_as_seconds + (14 * 24 * 3600)).to_string();
         let salt = nonce.clone();
         let user_public_key_hex = account.stark_public_key.clone();
-        let domain_name = "Perpetuals".to_string();
-        let domain_version = "v0".to_string();
-        let domain_chain_id = "SN_SEPOLIA".to_string();
-        let domain_revision = "1".to_string();
+        let domain_name = self.domain.name.clone();
+        let domain_version = self.domain.version.clone();
+        let domain_chain_id = self.domain.chain_id.clone();
+        let domain_revision = self.domain.revision.clone();
 
         let hash = get_order_hash(
             position_id.clone(),
@@ -482,7 +513,7 @@ mod tests {
         let tag = "Extended";
         let market = "BTC-USD";
 
-        let client_result = ExtendedRestClient::new(tag, Some(account), market).await;
+        let client_result = ExtendedRestClient::new(tag, Some(account), market, true).await;
 
         match client_result {
             Ok(client) => {

+ 12 - 6
src/exchange/extended_stream_client.rs

@@ -30,9 +30,15 @@ pub struct ExtendedStreamClient {
 
 impl ExtendedStreamClient {
     // ============================================= 构造函数 ================================================
-    fn new(tag: String, account_option: Option<ExtendedAccount>, subscribe_pattern: String) -> ExtendedStreamClient {
-        let host = "wss://api.starknet.extended.exchange/stream.extended.exchange/v1/".to_string();  // mainnet
-        // let host = "wss://api.starknet.sepolia.extended.exchange/stream.extended.exchange/v1/".to_string();  // testnet
+    fn new(tag: String, account_option: Option<ExtendedAccount>, subscribe_pattern: String, is_testnet: bool) -> ExtendedStreamClient {
+        let host = match is_testnet {
+            true => {
+                "wss://api.starknet.sepolia.extended.exchange/stream.extended.exchange/v1/".to_string()  // testnet
+            }
+            false => {
+                "wss://api.starknet.extended.exchange/stream.extended.exchange/v1/".to_string()     // mainnet
+            }
+        };
         
         let address_url = format!("{}{}", host, subscribe_pattern);
 
@@ -45,8 +51,8 @@ impl ExtendedStreamClient {
     }
 
     // ============================================= 订阅函数 ================================================
-    pub fn order_books(tag: String, account_option: Option<ExtendedAccount>, symbol: String) -> ExtendedStreamClient {
-        Self::new(tag, account_option, format!("orderbooks/{}", symbol))
+    pub fn order_books(tag: String, account_option: Option<ExtendedAccount>, symbol: String, is_testnet: bool) -> ExtendedStreamClient {
+        Self::new(tag, account_option, format!("orderbooks/{}", symbol), is_testnet)
     }
 
     // 链接
@@ -296,7 +302,7 @@ mod tests {
         let (write_tx, write_rx) = futures_channel::mpsc::unbounded::<Message>();
         let _guard = setup_logging().unwrap();
 
-        let mut ws = ExtendedStreamClient::order_books("Extended".to_string(), None, "BTC-USD".to_string());
+        let mut ws = ExtendedStreamClient::order_books("Extended".to_string(), None, "BTC-USD".to_string(), true);
 
         let fun = move |response: Response| {
             info!("{}", serde_json::to_string_pretty(&response.data).unwrap());

+ 3 - 1
src/main.rs

@@ -91,8 +91,10 @@ async fn main() {
 ///
 /// # Returns
 pub async fn run_extended_subscriptions(running: Arc<AtomicBool>) -> Result<()> {
+    let is_testnet = true;
+    
     let stream_client_list = vec![
-        ExtendedStreamClient::order_books("ExtendedOrderBooks".to_string(), None, "BTC-USD".to_string())
+        ExtendedStreamClient::order_books("ExtendedOrderBooks".to_string(), None, "BTC-USD".to_string(), is_testnet)
     ];
 
     // 数据管理及消息分发