Skip to content

Commit 457c499

Browse files
authored
program: add isolated_position_deposit to swift params (#2002)
* program: add isolated_position_deposit to swift params * CHANGELOG
1 parent 6df768f commit 457c499

File tree

4 files changed

+110
-0
lines changed

4 files changed

+110
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Features
1111

12+
- program: add isolated_position_deposit to signed msg params
13+
1214
### Fixes
1315

1416
### Breaking

programs/drift/src/state/order_params.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,6 +875,7 @@ pub struct SignedMsgOrderParamsMessage {
875875
pub max_margin_ratio: Option<u16>,
876876
pub builder_idx: Option<u8>,
877877
pub builder_fee_tenth_bps: Option<u16>,
878+
pub isolated_position_deposit: Option<u64>,
878879
}
879880

880881
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Default, Eq, PartialEq, Debug)]
@@ -888,6 +889,7 @@ pub struct SignedMsgOrderParamsDelegateMessage {
888889
pub max_margin_ratio: Option<u16>,
889890
pub builder_idx: Option<u8>,
890891
pub builder_fee_tenth_bps: Option<u16>,
892+
pub isolated_position_deposit: Option<u64>,
891893
}
892894

893895
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Default, Eq, PartialEq, Debug)]

programs/drift/src/validation/sig_verification.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ pub struct VerifiedMessage {
6060
pub max_margin_ratio: Option<u16>,
6161
pub builder_idx: Option<u8>,
6262
pub builder_fee_tenth_bps: Option<u16>,
63+
pub isolated_position_deposit: Option<u64>,
6364
pub signature: [u8; 64],
6465
}
6566

@@ -100,6 +101,7 @@ pub fn deserialize_into_verified_message(
100101
max_margin_ratio: deserialized.max_margin_ratio,
101102
builder_idx: deserialized.builder_idx,
102103
builder_fee_tenth_bps: deserialized.builder_fee_tenth_bps,
104+
isolated_position_deposit: deserialized.isolated_position_deposit,
103105
signature: *signature,
104106
});
105107
} else {
@@ -129,6 +131,7 @@ pub fn deserialize_into_verified_message(
129131
max_margin_ratio: deserialized.max_margin_ratio,
130132
builder_idx: deserialized.builder_idx,
131133
builder_fee_tenth_bps: deserialized.builder_fee_tenth_bps,
134+
isolated_position_deposit: deserialized.isolated_position_deposit,
132135
signature: *signature,
133136
});
134137
}

programs/drift/src/validation/sig_verification/tests.rs

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,55 @@ mod sig_verification {
148148
assert_eq!(order_params.auction_end_price, Some(237000000i64));
149149
}
150150

151+
#[test]
152+
fn test_deserialize_into_verified_message_non_delegate_with_isolated_position_deposit() {
153+
let signature = [1u8; 64];
154+
let payload = vec![
155+
200, 213, 166, 94, 34, 52, 245, 93, 0, 1, 0, 3, 0, 96, 254, 205, 0, 0, 0, 0, 64, 85,
156+
32, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 1, 128, 133, 181, 13, 0, 0, 0, 0,
157+
1, 64, 85, 32, 14, 0, 0, 0, 0, 2, 0, 41, 9, 0, 0, 0, 0, 0, 0, 67, 82, 79, 51, 105, 114,
158+
71, 49, 1, 0, 28, 78, 14, 0, 0, 0, 0, 0, 96, 254, 205, 0, 0, 0, 0, 1, 64, 58, 105, 13,
159+
0, 0, 0, 0, 0, 96, 254, 205, 0, 0, 0, 0, 0, 0, 0, 1, 1,
160+
];
161+
162+
// Test deserialization with delegate signer
163+
let result = deserialize_into_verified_message(payload, &signature, false);
164+
assert!(result.is_ok());
165+
166+
let verified_message = result.unwrap();
167+
168+
// Verify the deserialized message has expected structure
169+
assert_eq!(verified_message.signature, signature);
170+
assert_eq!(verified_message.sub_account_id, Some(2));
171+
assert_eq!(verified_message.delegate_signed_taker_pubkey, None);
172+
assert_eq!(verified_message.slot, 2345);
173+
assert_eq!(verified_message.uuid, [67, 82, 79, 51, 105, 114, 71, 49]);
174+
assert!(verified_message.isolated_position_deposit.is_some());
175+
assert_eq!(verified_message.isolated_position_deposit.unwrap(), 1);
176+
177+
assert!(verified_message.take_profit_order_params.is_some());
178+
let tp = verified_message.take_profit_order_params.unwrap();
179+
assert_eq!(tp.base_asset_amount, 3456000000u64);
180+
assert_eq!(tp.trigger_price, 240000000u64);
181+
182+
assert!(verified_message.stop_loss_order_params.is_some());
183+
let sl = verified_message.stop_loss_order_params.unwrap();
184+
assert_eq!(sl.base_asset_amount, 3456000000u64);
185+
assert_eq!(sl.trigger_price, 225000000u64);
186+
187+
// Verify order params
188+
let order_params = &verified_message.signed_msg_order_params;
189+
assert_eq!(order_params.user_order_id, 3);
190+
assert_eq!(order_params.direction, PositionDirection::Long);
191+
assert_eq!(order_params.base_asset_amount, 3456000000u64);
192+
assert_eq!(order_params.price, 237000000u64);
193+
assert_eq!(order_params.market_index, 0);
194+
assert_eq!(order_params.reduce_only, false);
195+
assert_eq!(order_params.auction_duration, Some(10));
196+
assert_eq!(order_params.auction_start_price, Some(230000000i64));
197+
assert_eq!(order_params.auction_end_price, Some(237000000i64));
198+
}
199+
151200
#[test]
152201
fn test_deserialize_into_verified_message_delegate() {
153202
let signature = [1u8; 64];
@@ -353,4 +402,58 @@ mod sig_verification {
353402
assert_eq!(order_params.auction_start_price, Some(230000000i64));
354403
assert_eq!(order_params.auction_end_price, Some(237000000i64));
355404
}
405+
406+
#[test]
407+
fn test_deserialize_into_verified_message_delegate_with_isolated_position_deposit() {
408+
let signature = [1u8; 64];
409+
let payload = vec![
410+
66, 101, 102, 56, 199, 37, 158, 35, 0, 1, 1, 2, 0, 202, 154, 59, 0, 0, 0, 0, 64, 85,
411+
32, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 1, 0, 28, 78, 14, 0, 0, 0, 0, 1,
412+
128, 151, 47, 14, 0, 0, 0, 0, 241, 148, 164, 10, 232, 65, 33, 157, 18, 12, 251, 132,
413+
245, 208, 37, 127, 112, 55, 83, 186, 54, 139, 1, 135, 220, 180, 208, 219, 189, 94, 79,
414+
148, 41, 9, 0, 0, 0, 0, 0, 0, 67, 82, 79, 51, 105, 114, 71, 49, 1, 128, 133, 181, 13,
415+
0, 0, 0, 0, 0, 202, 154, 59, 0, 0, 0, 0, 1, 128, 178, 230, 14, 0, 0, 0, 0, 0, 202, 154,
416+
59, 0, 0, 0, 0, 0, 0, 0, 1, 1,
417+
];
418+
419+
// Test deserialization with delegate signer
420+
let result = deserialize_into_verified_message(payload, &signature, true);
421+
assert!(result.is_ok());
422+
423+
let verified_message = result.unwrap();
424+
425+
// Verify the deserialized message has expected structure
426+
assert_eq!(verified_message.signature, signature);
427+
assert_eq!(verified_message.sub_account_id, None);
428+
assert_eq!(
429+
verified_message.delegate_signed_taker_pubkey,
430+
Some(Pubkey::from_str("HG2iQKnRkkasrLptwMZewV6wT7KPstw9wkA8yyu8Nx3m").unwrap())
431+
);
432+
assert_eq!(verified_message.slot, 2345);
433+
assert_eq!(verified_message.uuid, [67, 82, 79, 51, 105, 114, 71, 49]);
434+
assert!(verified_message.isolated_position_deposit.is_some());
435+
assert_eq!(verified_message.isolated_position_deposit.unwrap(), 1);
436+
437+
assert!(verified_message.take_profit_order_params.is_some());
438+
let tp = verified_message.take_profit_order_params.unwrap();
439+
assert_eq!(tp.base_asset_amount, 1000000000u64);
440+
assert_eq!(tp.trigger_price, 230000000u64);
441+
442+
assert!(verified_message.stop_loss_order_params.is_some());
443+
let sl = verified_message.stop_loss_order_params.unwrap();
444+
assert_eq!(sl.base_asset_amount, 1000000000u64);
445+
assert_eq!(sl.trigger_price, 250000000u64);
446+
447+
// Verify order params
448+
let order_params = &verified_message.signed_msg_order_params;
449+
assert_eq!(order_params.user_order_id, 2);
450+
assert_eq!(order_params.direction, PositionDirection::Short);
451+
assert_eq!(order_params.base_asset_amount, 1000000000u64);
452+
assert_eq!(order_params.price, 237000000u64);
453+
assert_eq!(order_params.market_index, 0);
454+
assert_eq!(order_params.reduce_only, false);
455+
assert_eq!(order_params.auction_duration, Some(10));
456+
assert_eq!(order_params.auction_start_price, Some(240000000i64));
457+
assert_eq!(order_params.auction_end_price, Some(238000000i64));
458+
}
356459
}

0 commit comments

Comments
 (0)