From 59e034aa61ec4a9e09791e177587dad448d78d9c Mon Sep 17 00:00:00 2001 From: nahem Date: Tue, 28 May 2024 15:08:25 +0200 Subject: [PATCH] fix(smart-contracts): update slippage tolerance to work with N coins --- contracts/liquidity_hub/pool-manager/src/error.rs | 3 +++ contracts/liquidity_hub/pool-manager/src/helpers.rs | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/contracts/liquidity_hub/pool-manager/src/error.rs b/contracts/liquidity_hub/pool-manager/src/error.rs index d8ba8036..656b6c84 100644 --- a/contracts/liquidity_hub/pool-manager/src/error.rs +++ b/contracts/liquidity_hub/pool-manager/src/error.rs @@ -162,6 +162,9 @@ pub enum ContractError { #[error("Invalid swap route: {0}")] InvalidSwapRoute(SwapRoute), + + #[error("Invalid pool assets length, expected {expected} got {actual}")] + InvalidPoolAssetsLength { expected: usize, actual: usize }, } impl From for ContractError { diff --git a/contracts/liquidity_hub/pool-manager/src/helpers.rs b/contracts/liquidity_hub/pool-manager/src/helpers.rs index 0eef6f5a..ce14fbc5 100644 --- a/contracts/liquidity_hub/pool-manager/src/helpers.rs +++ b/contracts/liquidity_hub/pool-manager/src/helpers.rs @@ -530,6 +530,12 @@ pub fn assert_slippage_tolerance( } } PoolType::ConstantProduct => { + if deposits.len() != 2 || pools.len() != 2 { + return Err(ContractError::InvalidPoolAssetsLength { + expected: 2, + actual: deposits.len(), + }); + } if Decimal256::from_ratio(deposits[0], deposits[1]) * one_minus_slippage_tolerance > Decimal256::from_ratio(pools[0], pools[1]) || Decimal256::from_ratio(deposits[1], deposits[0])