Skip to content

Commit 83fc275

Browse files
authored
Merge pull request #86 from drift-labs/feat/deposit-trade-2
depositToTrade changes:
2 parents cd332d4 + a884f98 commit 83fc275

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

src/swift_server.rs

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -374,11 +374,11 @@ pub async fn deposit_trade(
374374
State(server_params): State<&'static ServerParams>,
375375
Json(req): Json<DepositAndPlaceRequest>,
376376
) -> impl axum::response::IntoResponse {
377-
let min_trade_value = 100 * PRICE_PRECISION as u64;
377+
let min_deposit_value = 100 * PRICE_PRECISION as u64;
378378

379379
if req.deposit_tx.signatures.is_empty()
380-
|| req.deposit_tx.message.instructions.len() != 1
381-
|| req.deposit_tx.verify().is_err()
380+
|| req.deposit_tx.message.instructions().len() != 1
381+
|| req.deposit_tx.verify_with_results().iter().all(|x| *x)
382382
{
383383
return (
384384
StatusCode::BAD_REQUEST,
@@ -390,20 +390,20 @@ pub async fn deposit_trade(
390390
}
391391

392392
// verify deposit ix exists and amount
393-
let ix = &req.deposit_tx.message.instructions[0];
393+
let ix = &req.deposit_tx.message.instructions()[0];
394394
if &ix.data[..8] == drift_idl::instructions::Deposit::DISCRIMINATOR {
395395
if let Ok(deposit_ix) = drift_idl::instructions::Deposit::deserialize(&mut &ix.data[8..]) {
396396
let spot_oracle = server_params
397397
.drift
398398
.try_get_oracle_price_data_and_slot(MarketId::spot(deposit_ix.market_index))
399399
.expect("got price");
400400
let deposit_value = spot_oracle.data.price as u64 * deposit_ix.amount;
401-
if deposit_value < min_trade_value {
401+
if deposit_value < min_deposit_value {
402402
return (
403403
StatusCode::BAD_REQUEST,
404404
Json(ProcessOrderResponse {
405405
message: "",
406-
error: Some(format!("deposit size must be > ${min_trade_value}")),
406+
error: Some(format!("deposit size must be > ${min_deposit_value}")),
407407
}),
408408
);
409409
}
@@ -426,6 +426,28 @@ pub async fn deposit_trade(
426426
);
427427
}
428428

429+
match server_params
430+
.drift
431+
.simulate_tx(req.deposit_tx.message.clone())
432+
.await
433+
{
434+
Ok(res) => {
435+
if let Some(err) = res.err {
436+
log::info!(target: "server", "deposit sim failed: {err:?}");
437+
return (
438+
StatusCode::BAD_REQUEST,
439+
Json(ProcessOrderResponse {
440+
message: "",
441+
error: Some("invalid deposit tx".into()),
442+
}),
443+
);
444+
}
445+
}
446+
Err(err) => {
447+
log::info!(target: "server", "deposit sim network err: {err:?}");
448+
}
449+
}
450+
429451
let context = RequestContext::from_incoming_message(&req.swift_order);
430452
let (status, resp) = match process_order(server_params, req.swift_order, &context).await {
431453
Ok(order_metadata) => {

src/types/messages.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ use drift_rs::{
1313
};
1414
use ed25519_dalek::{PublicKey, Signature, Verifier};
1515
use serde_json::json;
16-
use solana_sdk::{pubkey::Pubkey, transaction::Transaction};
16+
use solana_sdk::{pubkey::Pubkey, transaction::VersionedTransaction};
1717

1818
#[derive(serde::Deserialize, Clone, Debug, PartialEq)]
1919
pub struct DepositAndPlaceRequest {
2020
#[serde(deserialize_with = "deser_transaction")]
21-
pub deposit_tx: Transaction,
21+
pub deposit_tx: VersionedTransaction,
2222
pub swift_order: IncomingSignedMessage,
2323
}
2424

@@ -289,7 +289,7 @@ where
289289
}
290290

291291
/// Deserialize solana transaction
292-
pub fn deser_transaction<'de, D>(deserializer: D) -> Result<Transaction, D::Error>
292+
pub fn deser_transaction<'de, D>(deserializer: D) -> Result<VersionedTransaction, D::Error>
293293
where
294294
D: serde::Deserializer<'de>,
295295
{

0 commit comments

Comments
 (0)