diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index 5ddc6efaaf..69bf3eacbb 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -885,7 +885,7 @@ impl Pallet { liquidity: u64, ) -> Result<(Position, u64, u64), Error> { ensure!( - Self::count_positions(netuid, coldkey_account_id) <= T::MaxPositions::get() as usize, + Self::count_positions(netuid, coldkey_account_id) < T::MaxPositions::get() as usize, Error::::MaxPositionsExceeded ); diff --git a/pallets/swap/src/pallet/tests.rs b/pallets/swap/src/pallet/tests.rs index 4c3a890c9b..845acd957a 100644 --- a/pallets/swap/src/pallet/tests.rs +++ b/pallets/swap/src/pallet/tests.rs @@ -342,6 +342,40 @@ fn test_add_liquidity_basic() { }); } +#[test] +fn test_add_liquidity_max_limit_enforced() { + new_test_ext().execute_with(|| { + let netuid = NetUid::from(1); + let liquidity = 2_000_000_000_u64; + assert_ok!(Pallet::::maybe_initialize_v3(netuid)); + + let limit = MaxPositions::get() as usize; + + for _ in 0..limit { + Pallet::::do_add_liquidity( + netuid, + &OK_COLDKEY_ACCOUNT_ID, + &OK_HOTKEY_ACCOUNT_ID, + TickIndex::MIN, + TickIndex::MAX, + liquidity, + ) + .unwrap(); + } + + let test_result = Pallet::::do_add_liquidity( + netuid, + &OK_COLDKEY_ACCOUNT_ID, + &OK_HOTKEY_ACCOUNT_ID, + TickIndex::MIN, + TickIndex::MAX, + liquidity, + ); + + assert_err!(test_result, Error::::MaxPositionsExceeded); + }); +} + #[test] fn test_add_liquidity_out_of_bounds() { new_test_ext().execute_with(|| {