Skip to content

Commit

Permalink
Add modify order (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
abrkn authored Oct 16, 2024
1 parent 57f679c commit 2caf5a6
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 3 deletions.
8 changes: 7 additions & 1 deletion src/exchange/actions.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::exchange::{cancel::CancelRequest, order::OrderRequest};
use crate::exchange::{cancel::CancelRequest, modify::ModifyRequest, order::OrderRequest};
pub(crate) use ethers::{
abi::{encode, ParamType, Tokenizable},
types::{
Expand Down Expand Up @@ -107,6 +107,12 @@ pub struct BulkCancel {
pub cancels: Vec<CancelRequest>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct BulkModify {
pub modifies: Vec<ModifyRequest>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct BulkCancelCloid {
Expand Down
42 changes: 40 additions & 2 deletions src/exchange/exchange_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ use crate::signature::sign_typed_data;
use crate::{
exchange::{
actions::{
ApproveAgent, BulkCancel, BulkOrder, SetReferrer, UpdateIsolatedMargin, UpdateLeverage,
UsdSend,
ApproveAgent, BulkCancel, BulkModify, BulkOrder, SetReferrer, UpdateIsolatedMargin,
UpdateLeverage, UsdSend,
},
cancel::{CancelRequest, CancelRequestCloid},
modify::{ClientModifyRequest, ModifyRequest},
ClientCancelRequest, ClientOrderRequest,
},
helpers::{generate_random_key, next_nonce, uuid_to_hex_string},
Expand Down Expand Up @@ -58,6 +59,7 @@ pub enum Actions {
Order(BulkOrder),
Cancel(BulkCancel),
CancelByCloid(BulkCancelCloid),
BatchModify(BulkModify),
ApproveAgent(ApproveAgent),
Withdraw3(Withdraw3),
SpotUser(SpotUser),
Expand Down Expand Up @@ -427,6 +429,42 @@ impl ExchangeClient {
self.post(action, signature, timestamp).await
}

pub async fn modify(
&self,
modify: ClientModifyRequest,
wallet: Option<&LocalWallet>,
) -> Result<ExchangeResponseStatus> {
self.bulk_modify(vec![modify], wallet).await
}

pub async fn bulk_modify(
&self,
modifies: Vec<ClientModifyRequest>,
wallet: Option<&LocalWallet>,
) -> Result<ExchangeResponseStatus> {
let wallet = wallet.unwrap_or(&self.wallet);
let timestamp = next_nonce();

let mut transformed_modifies = Vec::new();
for modify in modifies.into_iter() {
transformed_modifies.push(ModifyRequest {
oid: modify.oid,
order: modify.order.convert(&self.coin_to_asset)?,
});
}

let action = Actions::BatchModify(BulkModify {
modifies: transformed_modifies,
});
let connection_id = action.hash(timestamp, self.vault_address)?;

let action = serde_json::to_value(&action).map_err(|e| Error::JsonParse(e.to_string()))?;
let is_mainnet = self.http_client.is_mainnet();
let signature = sign_l1_action(wallet, connection_id, is_mainnet)?;

self.post(action, signature, timestamp).await
}

pub async fn cancel_by_cloid(
&self,
cancel: ClientCancelRequestCloid,
Expand Down
2 changes: 2 additions & 0 deletions src/exchange/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ mod actions;
mod cancel;
mod exchange_client;
mod exchange_responses;
mod modify;
mod order;

pub use actions::*;
pub use cancel::{ClientCancelRequest, ClientCancelRequestCloid};
pub use exchange_client::*;
pub use exchange_responses::*;
pub use modify::{ClientModifyRequest, ModifyRequest};
pub use order::{
ClientLimit, ClientOrder, ClientOrderRequest, ClientTrigger, MarketCloseParams,
MarketOrderParams, Order,
Expand Down
13 changes: 13 additions & 0 deletions src/exchange/modify.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
use super::{order::OrderRequest, ClientOrderRequest};
use serde::{Deserialize, Serialize};

pub struct ClientModifyRequest {
pub oid: u64,
pub order: ClientOrderRequest,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ModifyRequest {
pub oid: u64,
pub order: OrderRequest,
}

0 comments on commit 2caf5a6

Please sign in to comment.