@@ -744,6 +744,10 @@ impl Processor {
744
744
let token_program_info = next_account_info ( account_info_iter) ?;
745
745
746
746
let token_swap = SwapVersion :: unpack ( & swap_info. data . borrow ( ) ) ?;
747
+ let calculator = & token_swap. swap_curve ( ) . calculator ;
748
+ if !calculator. allows_deposits ( ) {
749
+ return Err ( SwapError :: UnsupportedCurveOperation . into ( ) ) ;
750
+ }
747
751
let source_account =
748
752
Self :: unpack_token_account ( source_info, token_swap. token_program_id ( ) ) ?;
749
753
let swap_token_a =
@@ -793,7 +797,7 @@ impl Processor {
793
797
)
794
798
. ok_or ( SwapError :: ZeroTradingTokens ) ?
795
799
} else {
796
- token_swap . swap_curve ( ) . calculator . new_pool_supply ( )
800
+ calculator. new_pool_supply ( )
797
801
} ;
798
802
799
803
let pool_token_amount = to_u64 ( pool_token_amount) ?;
@@ -6855,4 +6859,71 @@ mod tests {
6855
6859
)
6856
6860
. unwrap ( ) ;
6857
6861
}
6862
+
6863
+ #[ test]
6864
+ fn test_deposits_allowed_single_token ( ) {
6865
+ let trade_fee_numerator = 1 ;
6866
+ let trade_fee_denominator = 10 ;
6867
+ let owner_trade_fee_numerator = 1 ;
6868
+ let owner_trade_fee_denominator = 30 ;
6869
+ let owner_withdraw_fee_numerator = 0 ;
6870
+ let owner_withdraw_fee_denominator = 30 ;
6871
+ let host_fee_numerator = 10 ;
6872
+ let host_fee_denominator = 100 ;
6873
+
6874
+ let token_a_amount = 1_000_000 ;
6875
+ let token_b_amount = 0 ;
6876
+ let fees = Fees {
6877
+ trade_fee_numerator,
6878
+ trade_fee_denominator,
6879
+ owner_trade_fee_numerator,
6880
+ owner_trade_fee_denominator,
6881
+ owner_withdraw_fee_numerator,
6882
+ owner_withdraw_fee_denominator,
6883
+ host_fee_numerator,
6884
+ host_fee_denominator,
6885
+ } ;
6886
+
6887
+ let token_b_offset = 2_000_000 ;
6888
+ let swap_curve = SwapCurve {
6889
+ curve_type : CurveType :: Offset ,
6890
+ calculator : Box :: new ( OffsetCurve { token_b_offset } ) ,
6891
+ } ;
6892
+ let creator_key = Pubkey :: new_unique ( ) ;
6893
+ let depositor_key = Pubkey :: new_unique ( ) ;
6894
+
6895
+ let mut accounts = SwapAccountInfo :: new (
6896
+ & creator_key,
6897
+ fees,
6898
+ swap_curve,
6899
+ token_a_amount,
6900
+ token_b_amount,
6901
+ ) ;
6902
+
6903
+ accounts. initialize_swap ( ) . unwrap ( ) ;
6904
+
6905
+ let initial_a = 1_000_000 ;
6906
+ let initial_b = 2_000_000 ;
6907
+ let (
6908
+ _depositor_token_a_key,
6909
+ _depositor_token_a_account,
6910
+ depositor_token_b_key,
6911
+ mut depositor_token_b_account,
6912
+ depositor_pool_key,
6913
+ mut depositor_pool_account,
6914
+ ) = accounts. setup_token_accounts ( & creator_key, & depositor_key, initial_a, initial_b, 0 ) ;
6915
+
6916
+ assert_eq ! (
6917
+ Err ( SwapError :: UnsupportedCurveOperation . into( ) ) ,
6918
+ accounts. deposit_single_token_type_exact_amount_in(
6919
+ & depositor_key,
6920
+ & depositor_token_b_key,
6921
+ & mut depositor_token_b_account,
6922
+ & depositor_pool_key,
6923
+ & mut depositor_pool_account,
6924
+ initial_b,
6925
+ 0 ,
6926
+ )
6927
+ ) ;
6928
+ }
6858
6929
}
0 commit comments