Skip to content

Commit e592e67

Browse files
authored
Revert "Revert "Crispeaney/revert swift max margin ratio" (#1877)" (#1907)
This reverts commit 0a8e153.
1 parent 31c69e0 commit e592e67

File tree

9 files changed

+47
-497
lines changed

9 files changed

+47
-497
lines changed

CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3434
- program: post only respects reduce only ([#1878](https://github.com/drift-labs/protocol-v2/pull/1878))
3535
- program: add sequence id to exchange/mm oracle ([#1834](https://github.com/drift-labs/protocol-v2/pull/1834))
3636
- program: perp position max margin ratio ([#1847](https://github.com/drift-labs/protocol-v2/pull/1847))
37-
- program: add padding to swift messages ([#1845](https://github.com/drift-labs/protocol-v2/pull/1845))
3837
- program: rm lp ([#1755](https://github.com/drift-labs/protocol-v2/pull/1755))
3938

4039
### Fixes

programs/drift/src/instructions/keeper.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -760,10 +760,6 @@ pub fn place_signed_msg_taker_order<'c: 'info, 'info>(
760760
return Ok(());
761761
}
762762

763-
if let Some(max_margin_ratio) = verified_message_and_signature.max_margin_ratio {
764-
taker.update_perp_position_max_margin_ratio(market_index, max_margin_ratio)?;
765-
}
766-
767763
// Dont place order if signed msg order already exists
768764
let mut taker_order_id_to_use = taker.next_order_id;
769765
let mut signed_msg_order_id =

programs/drift/src/state/order_params.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,6 @@ pub struct SignedMsgOrderParamsMessage {
872872
pub uuid: [u8; 8],
873873
pub take_profit_order_params: Option<SignedMsgTriggerOrderParams>,
874874
pub stop_loss_order_params: Option<SignedMsgTriggerOrderParams>,
875-
pub max_margin_ratio: Option<u16>,
876875
}
877876

878877
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Default, Eq, PartialEq, Debug)]
@@ -883,7 +882,6 @@ pub struct SignedMsgOrderParamsDelegateMessage {
883882
pub uuid: [u8; 8],
884883
pub take_profit_order_params: Option<SignedMsgTriggerOrderParams>,
885884
pub stop_loss_order_params: Option<SignedMsgTriggerOrderParams>,
886-
pub max_margin_ratio: Option<u16>,
887885
}
888886

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

programs/drift/src/validation/sig_verification.rs

Lines changed: 39 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ use solana_program::program_memory::sol_memcmp;
1414
use solana_program::sysvar;
1515
use std::convert::TryInto;
1616

17-
#[cfg(test)]
18-
mod tests;
19-
2017
const ED25519_PROGRAM_INPUT_HEADER_LEN: usize = 2;
2118

2219
const SIGNATURE_LEN: u16 = 64;
@@ -48,7 +45,6 @@ pub struct Ed25519SignatureOffsets {
4845
pub message_instruction_index: u16,
4946
}
5047

51-
#[derive(Debug)]
5248
pub struct VerifiedMessage {
5349
pub signed_msg_order_params: OrderParams,
5450
pub sub_account_id: Option<u16>,
@@ -57,77 +53,13 @@ pub struct VerifiedMessage {
5753
pub uuid: [u8; 8],
5854
pub take_profit_order_params: Option<SignedMsgTriggerOrderParams>,
5955
pub stop_loss_order_params: Option<SignedMsgTriggerOrderParams>,
60-
pub max_margin_ratio: Option<u16>,
6156
pub signature: [u8; 64],
6257
}
6358

6459
fn slice_eq(a: &[u8], b: &[u8]) -> bool {
6560
a.len() == b.len() && sol_memcmp(a, b, a.len()) == 0
6661
}
6762

68-
pub fn deserialize_into_verified_message(
69-
payload: Vec<u8>,
70-
signature: &[u8; 64],
71-
is_delegate_signer: bool,
72-
) -> Result<VerifiedMessage> {
73-
if is_delegate_signer {
74-
if payload.len() < 8 {
75-
return Err(SignatureVerificationError::InvalidMessageDataSize.into());
76-
}
77-
let min_len: usize = std::mem::size_of::<SignedMsgOrderParamsDelegateMessage>();
78-
let mut owned = payload;
79-
if owned.len() < min_len {
80-
owned.resize(min_len, 0);
81-
}
82-
let deserialized = SignedMsgOrderParamsDelegateMessage::deserialize(
83-
&mut &owned[8..], // 8 byte manual discriminator
84-
)
85-
.map_err(|_| {
86-
msg!("Invalid message encoding for is_delegate_signer = true");
87-
SignatureVerificationError::InvalidMessageDataSize
88-
})?;
89-
90-
return Ok(VerifiedMessage {
91-
signed_msg_order_params: deserialized.signed_msg_order_params,
92-
sub_account_id: None,
93-
delegate_signed_taker_pubkey: Some(deserialized.taker_pubkey),
94-
slot: deserialized.slot,
95-
uuid: deserialized.uuid,
96-
take_profit_order_params: deserialized.take_profit_order_params,
97-
stop_loss_order_params: deserialized.stop_loss_order_params,
98-
max_margin_ratio: deserialized.max_margin_ratio,
99-
signature: *signature,
100-
});
101-
} else {
102-
if payload.len() < 8 {
103-
return Err(SignatureVerificationError::InvalidMessageDataSize.into());
104-
}
105-
let min_len: usize = std::mem::size_of::<SignedMsgOrderParamsMessage>();
106-
let mut owned = payload;
107-
if owned.len() < min_len {
108-
owned.resize(min_len, 0);
109-
}
110-
let deserialized = SignedMsgOrderParamsMessage::deserialize(
111-
&mut &owned[8..], // 8 byte manual discriminator
112-
)
113-
.map_err(|_| {
114-
msg!("Invalid delegate message encoding for with is_delegate_signer = false");
115-
SignatureVerificationError::InvalidMessageDataSize
116-
})?;
117-
return Ok(VerifiedMessage {
118-
signed_msg_order_params: deserialized.signed_msg_order_params,
119-
sub_account_id: Some(deserialized.sub_account_id),
120-
delegate_signed_taker_pubkey: None,
121-
slot: deserialized.slot,
122-
uuid: deserialized.uuid,
123-
take_profit_order_params: deserialized.take_profit_order_params,
124-
stop_loss_order_params: deserialized.stop_loss_order_params,
125-
max_margin_ratio: deserialized.max_margin_ratio,
126-
signature: *signature,
127-
});
128-
}
129-
}
130-
13163
/// Check Ed25519Program instruction data verifies the given msg
13264
///
13365
/// `ix` an Ed25519Program instruction [see](https://github.com/solana-labs/solana/blob/master/sdk/src/ed25519_instruction.rs))
@@ -300,7 +232,45 @@ pub fn verify_and_decode_ed25519_msg(
300232
let payload =
301233
hex::decode(payload).map_err(|_| SignatureVerificationError::InvalidMessageHex)?;
302234

303-
deserialize_into_verified_message(payload, signature, is_delegate_signer)
235+
if is_delegate_signer {
236+
let deserialized = SignedMsgOrderParamsDelegateMessage::deserialize(
237+
&mut &payload[8..], // 8 byte manual discriminator
238+
)
239+
.map_err(|_| {
240+
msg!("Invalid message encoding for is_delegate_signer = true");
241+
SignatureVerificationError::InvalidMessageDataSize
242+
})?;
243+
244+
return Ok(VerifiedMessage {
245+
signed_msg_order_params: deserialized.signed_msg_order_params,
246+
sub_account_id: None,
247+
delegate_signed_taker_pubkey: Some(deserialized.taker_pubkey),
248+
slot: deserialized.slot,
249+
uuid: deserialized.uuid,
250+
take_profit_order_params: deserialized.take_profit_order_params,
251+
stop_loss_order_params: deserialized.stop_loss_order_params,
252+
signature: *signature,
253+
});
254+
} else {
255+
let deserialized = SignedMsgOrderParamsMessage::deserialize(
256+
&mut &payload[8..], // 8 byte manual discriminator
257+
)
258+
.map_err(|_| {
259+
msg!("Invalid delegate message encoding for with is_delegate_signer = false");
260+
SignatureVerificationError::InvalidMessageDataSize
261+
})?;
262+
263+
return Ok(VerifiedMessage {
264+
signed_msg_order_params: deserialized.signed_msg_order_params,
265+
sub_account_id: Some(deserialized.sub_account_id),
266+
delegate_signed_taker_pubkey: None,
267+
slot: deserialized.slot,
268+
uuid: deserialized.uuid,
269+
take_profit_order_params: deserialized.take_profit_order_params,
270+
stop_loss_order_params: deserialized.stop_loss_order_params,
271+
signature: *signature,
272+
});
273+
}
304274
}
305275

306276
#[error_code]

0 commit comments

Comments
 (0)