@@ -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