|
@@ -155,9 +155,9 @@ impl ExtendedRestClient {
|
|
|
let account = self.account.clone().ok_or_else(|| anyhow!("请将账户传入再进行下单操作"))?;
|
|
let account = self.account.clone().ok_or_else(|| anyhow!("请将账户传入再进行下单操作"))?;
|
|
|
|
|
|
|
|
// 时间戳处理
|
|
// 时间戳处理
|
|
|
- // 1. 获取当前时间,并增加 14 天的缓冲期
|
|
|
|
|
|
|
+ // 1. 获取当前时间,并增加 1 天的缓冲期
|
|
|
let now = Utc::now();
|
|
let now = Utc::now();
|
|
|
- let expire_time_with_buffer = now + Duration::days(14);
|
|
|
|
|
|
|
+ let expire_time_with_buffer = now + Duration::hours(1);
|
|
|
|
|
|
|
|
// 2. 向上取整到秒
|
|
// 2. 向上取整到秒
|
|
|
// 先截断到秒,如果原始时间在截断之后,说明有纳秒部分,需要再加一秒
|
|
// 先截断到秒,如果原始时间在截断之后,说明有纳秒部分,需要再加一秒
|
|
@@ -167,18 +167,20 @@ impl ExtendedRestClient {
|
|
|
}
|
|
}
|
|
|
// 3. 获取 Unix 时间戳 (秒)
|
|
// 3. 获取 Unix 时间戳 (秒)
|
|
|
let expire_time_as_seconds = expire_time_rounded.timestamp();
|
|
let expire_time_as_seconds = expire_time_rounded.timestamp();
|
|
|
|
|
+ // let expire_time_as_seconds = 1760694584i64;
|
|
|
|
|
|
|
|
// 需要传给extended的参数整理
|
|
// 需要传给extended的参数整理
|
|
|
- let id = Uuid::new_v4().to_string();
|
|
|
|
|
|
|
+ // let id = Uuid::new_v4().to_string();
|
|
|
let market = self.market.as_str();
|
|
let market = self.market.as_str();
|
|
|
// type
|
|
// type
|
|
|
// side
|
|
// side
|
|
|
// qty
|
|
// qty
|
|
|
// price
|
|
// price
|
|
|
let time_in_force = "GTT";
|
|
let time_in_force = "GTT";
|
|
|
- let expiry_epoch_millis = expire_time_rounded.timestamp_millis();
|
|
|
|
|
- let nonce_u32: u32 = rand::random();
|
|
|
|
|
- let nonce = nonce_u32.to_string();
|
|
|
|
|
|
|
+ let expiry_epoch_millis = expire_time_as_seconds * 1000;
|
|
|
|
|
+ let nonce_i64 = Utc::now().timestamp_millis();
|
|
|
|
|
+ // let nonce_i64 = 1760690983597i64;
|
|
|
|
|
+ let nonce = nonce_i64.to_string();
|
|
|
let self_trade_protection_level = "ACCOUNT";
|
|
let self_trade_protection_level = "ACCOUNT";
|
|
|
|
|
|
|
|
// 准备OrderHash
|
|
// 准备OrderHash
|
|
@@ -236,7 +238,8 @@ impl ExtendedRestClient {
|
|
|
let fee_amount = stark_fee_part.to_u64() // Fee 通常是正数
|
|
let fee_amount = stark_fee_part.to_u64() // Fee 通常是正数
|
|
|
.context("stark_fee_part 无法转换为 u64")?
|
|
.context("stark_fee_part 无法转换为 u64")?
|
|
|
.to_string();
|
|
.to_string();
|
|
|
- let expiration = expire_time_as_seconds.to_string();
|
|
|
|
|
|
|
+ // !!!!!! 这傻逼签名时间还tm要往后延14天 !!!!!!
|
|
|
|
|
+ let expiration = (expire_time_as_seconds + (14 * 24 * 3600)).to_string();
|
|
|
let salt = nonce.clone();
|
|
let salt = nonce.clone();
|
|
|
let user_public_key_hex = account.stark_public_key.clone();
|
|
let user_public_key_hex = account.stark_public_key.clone();
|
|
|
let domain_name = "Perpetuals".to_string();
|
|
let domain_name = "Perpetuals".to_string();
|
|
@@ -260,6 +263,7 @@ impl ExtendedRestClient {
|
|
|
domain_chain_id,
|
|
domain_chain_id,
|
|
|
domain_revision,
|
|
domain_revision,
|
|
|
).unwrap();
|
|
).unwrap();
|
|
|
|
|
+ // info!("hash--------{}", hash.to_hex_string());
|
|
|
let private_key = Felt::from_hex(account.stark_private_key.as_str())?;
|
|
let private_key = Felt::from_hex(account.stark_private_key.as_str())?;
|
|
|
|
|
|
|
|
// 签名
|
|
// 签名
|
|
@@ -276,6 +280,7 @@ impl ExtendedRestClient {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 组装最后参数
|
|
// 组装最后参数
|
|
|
|
|
+ let id = hash.to_hex_string();
|
|
|
let params = json!({
|
|
let params = json!({
|
|
|
"id": id,
|
|
"id": id,
|
|
|
"market": market,
|
|
"market": market,
|
|
@@ -292,7 +297,7 @@ impl ExtendedRestClient {
|
|
|
"settlement": settlement,
|
|
"settlement": settlement,
|
|
|
"selfTradeProtectionLevel": self_trade_protection_level,
|
|
"selfTradeProtectionLevel": self_trade_protection_level,
|
|
|
});
|
|
});
|
|
|
- info!("{}", serde_json::to_string_pretty(¶ms)?);
|
|
|
|
|
|
|
+ // info!("{}", serde_json::to_string_pretty(¶ms)?);
|
|
|
|
|
|
|
|
// 发送订单
|
|
// 发送订单
|
|
|
Ok(self.request("POST",
|
|
Ok(self.request("POST",
|
|
@@ -511,7 +516,6 @@ mod tests {
|
|
|
async fn test_create_order() {
|
|
async fn test_create_order() {
|
|
|
let _guard = setup_logging().unwrap();
|
|
let _guard = setup_logging().unwrap();
|
|
|
let mut client = get_client().await;
|
|
let mut client = get_client().await;
|
|
|
- info!("{}", serde_json::to_string_pretty(&client.market_info).unwrap());
|
|
|
|
|
let response_result = client.post_order("LIMIT", "BUY", "0.0001", "100000").await;
|
|
let response_result = client.post_order("LIMIT", "BUY", "0.0001", "100000").await;
|
|
|
|
|
|
|
|
match response_result {
|
|
match response_result {
|