Skip to content

Commit 464e533

Browse files
committed
Add modify order
1 parent 4f66a10 commit 464e533

File tree

4 files changed

+63
-3
lines changed

4 files changed

+63
-3
lines changed

src/exchange/actions.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::exchange::{cancel::CancelRequest, order::OrderRequest};
1+
use crate::exchange::{cancel::CancelRequest, modify::ModifyRequest, order::OrderRequest};
22
pub(crate) use ethers::{
33
abi::{encode, ParamType, Tokenizable},
44
types::{
@@ -107,6 +107,12 @@ pub struct BulkCancel {
107107
pub cancels: Vec<CancelRequest>,
108108
}
109109

110+
#[derive(Serialize, Deserialize, Debug, Clone)]
111+
#[serde(rename_all = "camelCase")]
112+
pub struct BulkModify {
113+
pub modifies: Vec<ModifyRequest>,
114+
}
115+
110116
#[derive(Serialize, Deserialize, Debug, Clone)]
111117
#[serde(rename_all = "camelCase")]
112118
pub struct BulkCancelCloid {

src/exchange/exchange_client.rs

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ use crate::signature::sign_typed_data;
22
use crate::{
33
exchange::{
44
actions::{
5-
ApproveAgent, BulkCancel, BulkOrder, SetReferrer, UpdateIsolatedMargin, UpdateLeverage,
6-
UsdSend,
5+
ApproveAgent, BulkCancel, BulkModify, BulkOrder, SetReferrer, UpdateIsolatedMargin,
6+
UpdateLeverage, UsdSend,
77
},
88
cancel::{CancelRequest, CancelRequestCloid},
9+
modify::{ClientModifyRequest, ModifyRequest},
910
ClientCancelRequest, ClientOrderRequest,
1011
},
1112
helpers::{generate_random_key, next_nonce, uuid_to_hex_string},
@@ -58,6 +59,8 @@ pub enum Actions {
5859
Order(BulkOrder),
5960
Cancel(BulkCancel),
6061
CancelByCloid(BulkCancelCloid),
62+
#[serde(rename = "batchModify")]
63+
Modify(BulkModify),
6164
ApproveAgent(ApproveAgent),
6265
Withdraw3(Withdraw3),
6366
SpotUser(SpotUser),
@@ -427,6 +430,42 @@ impl ExchangeClient {
427430
self.post(action, signature, timestamp).await
428431
}
429432

433+
pub async fn modify(
434+
&self,
435+
modify: ClientModifyRequest,
436+
wallet: Option<&LocalWallet>,
437+
) -> Result<ExchangeResponseStatus> {
438+
self.bulk_modify(vec![modify], wallet).await
439+
}
440+
441+
pub async fn bulk_modify(
442+
&self,
443+
modifies: Vec<ClientModifyRequest>,
444+
wallet: Option<&LocalWallet>,
445+
) -> Result<ExchangeResponseStatus> {
446+
let wallet = wallet.unwrap_or(&self.wallet);
447+
let timestamp = next_nonce();
448+
449+
let mut transformed_modifies = Vec::new();
450+
for modify in modifies.into_iter() {
451+
transformed_modifies.push(ModifyRequest {
452+
oid: modify.oid,
453+
order: modify.order.convert(&self.coin_to_asset)?,
454+
});
455+
}
456+
457+
let action = Actions::Modify(BulkModify {
458+
modifies: transformed_modifies,
459+
});
460+
let connection_id = action.hash(timestamp, self.vault_address)?;
461+
462+
let action = serde_json::to_value(&action).map_err(|e| Error::JsonParse(e.to_string()))?;
463+
let is_mainnet = self.http_client.is_mainnet();
464+
let signature = sign_l1_action(wallet, connection_id, is_mainnet)?;
465+
466+
self.post(action, signature, timestamp).await
467+
}
468+
430469
pub async fn cancel_by_cloid(
431470
&self,
432471
cancel: ClientCancelRequestCloid,

src/exchange/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ mod actions;
22
mod cancel;
33
mod exchange_client;
44
mod exchange_responses;
5+
mod modify;
56
mod order;
67

78
pub use actions::*;
89
pub use cancel::{ClientCancelRequest, ClientCancelRequestCloid};
910
pub use exchange_client::*;
1011
pub use exchange_responses::*;
12+
pub use modify::{ClientModifyRequest, ModifyRequest};
1113
pub use order::{
1214
ClientLimit, ClientOrder, ClientOrderRequest, ClientTrigger, MarketCloseParams,
1315
MarketOrderParams, Order,

src/exchange/modify.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use super::{order::OrderRequest, ClientOrderRequest};
2+
use serde::{Deserialize, Serialize};
3+
4+
pub struct ClientModifyRequest {
5+
pub oid: u64,
6+
pub order: ClientOrderRequest,
7+
}
8+
9+
#[derive(Serialize, Deserialize, Debug, Clone)]
10+
pub struct ModifyRequest {
11+
pub oid: u64,
12+
pub order: OrderRequest,
13+
}

0 commit comments

Comments
 (0)