From 59ae7636bc3824b09b0ee265b3d27ac4fe1d6dd4 Mon Sep 17 00:00:00 2001 From: Kaloyan Gangov <gangov1@gmail.com> Date: Thu, 25 Jan 2024 21:37:13 +0200 Subject: [PATCH] Phoenix: updates validate_bps macro to check the range in a more Rust-native way; Pool, Pool-Stable: uses validate_bps macro in the init call and updates tests. --- contracts/pool/src/contract.rs | 9 ++++++++- contracts/pool/src/tests/liquidity.rs | 2 +- contracts/pool/src/tests/setup.rs | 6 +----- contracts/pool_stable/src/contract.rs | 7 ++++++- contracts/pool_stable/src/tests/liquidity.rs | 2 +- packages/phoenix/src/utils.rs | 7 ++++--- 6 files changed, 21 insertions(+), 12 deletions(-) diff --git a/contracts/pool/src/contract.rs b/contracts/pool/src/contract.rs index 8b6672396..1b711a1f3 100644 --- a/contracts/pool/src/contract.rs +++ b/contracts/pool/src/contract.rs @@ -17,7 +17,7 @@ use crate::{ token_contract, }; use decimal::Decimal; -use phoenix::{utils::is_approx_ratio, validate_int_parameters}; +use phoenix::{utils::is_approx_ratio, validate_bps, validate_int_parameters}; // Metadata that is added on to the WASM custom section contractmeta!( @@ -144,6 +144,13 @@ impl LiquidityPoolTrait for LiquidityPool { let token_init_info = lp_init_info.token_init_info; let stake_init_info = lp_init_info.stake_init_info; + validate_bps!( + swap_fee_bps, + max_allowed_slippage_bps, + max_allowed_spread_bps, + max_referral_bps + ); + set_initialized(&env); // Token info diff --git a/contracts/pool/src/tests/liquidity.rs b/contracts/pool/src/tests/liquidity.rs index 13516ac5a..d48cbc6d4 100644 --- a/contracts/pool/src/tests/liquidity.rs +++ b/contracts/pool/src/tests/liquidity.rs @@ -542,7 +542,7 @@ fn provide_liqudity_single_asset_one_third_with_fees() { } #[test] -#[should_panic(expected = "Pool: Initialize: Fees must be between 0 and 100%")] +#[should_panic(expected = "The value 10001 is out of range. Must be between 0 and 10000 bps.")] fn provide_liqudity_too_high_fees() { let env = Env::default(); env.mock_all_auths(); diff --git a/contracts/pool/src/tests/setup.rs b/contracts/pool/src/tests/setup.rs index 3e1c639fc..d229b0c64 100644 --- a/contracts/pool/src/tests/setup.rs +++ b/contracts/pool/src/tests/setup.rs @@ -65,10 +65,6 @@ pub fn deploy_liquidity_pool_contract<'a>( stake_init_info, }; - pool.initialize( - &stake_wasm_hash, - &token_wasm_hash, - &lp_init_info, - ); + pool.initialize(&stake_wasm_hash, &token_wasm_hash, &lp_init_info); pool } diff --git a/contracts/pool_stable/src/contract.rs b/contracts/pool_stable/src/contract.rs index 4aa72de3a..dc73b6507 100644 --- a/contracts/pool_stable/src/contract.rs +++ b/contracts/pool_stable/src/contract.rs @@ -14,7 +14,7 @@ use crate::{ token_contract, }; use decimal::Decimal; -use phoenix::validate_int_parameters; +use phoenix::{validate_bps, validate_int_parameters}; // Minimum amount of initial LP shares to mint const MINIMUM_LIQUIDITY_AMOUNT: i128 = 1000; @@ -140,6 +140,11 @@ impl StableLiquidityPoolTrait for StableLiquidityPool { let token_init_info = lp_init_info.token_init_info; let stake_init_info = lp_init_info.stake_init_info; + validate_bps!( + swap_fee_bps, + max_allowed_slippage_bps, + max_allowed_spread_bps + ); set_initialized(&env); // Token info diff --git a/contracts/pool_stable/src/tests/liquidity.rs b/contracts/pool_stable/src/tests/liquidity.rs index 53ecf19e7..80210183a 100644 --- a/contracts/pool_stable/src/tests/liquidity.rs +++ b/contracts/pool_stable/src/tests/liquidity.rs @@ -542,7 +542,7 @@ fn provide_liqudity_single_asset_one_third_with_fees() { } #[test] -#[should_panic(expected = "Pool: Initialize: Fees must be between 0 and 100%")] +#[should_panic(expected = "The value 10001 is out of range. Must be between 0 and 10000 bps.")] fn provide_liqudity_too_high_fees() { let env = Env::default(); env.mock_all_auths(); diff --git a/packages/phoenix/src/utils.rs b/packages/phoenix/src/utils.rs index f6fcff2c2..1395f51d2 100644 --- a/packages/phoenix/src/utils.rs +++ b/packages/phoenix/src/utils.rs @@ -25,9 +25,10 @@ macro_rules! validate_bps { const MIN_BPS: i64 = 0; const MAX_BPS: i64 = 10_000; $( - if $value < MIN_BPS || $value > MAX_BPS { - panic!("The value {} is out of range. Must be between {} and {} bps.", $value, MIN_BPS, MAX_BPS); - } + // if $value < MIN_BPS || $value > MAX_BPS { + // panic!("The value {} is out of range. Must be between {} and {} bps.", $value, MIN_BPS, MAX_BPS); + // } + assert!((MIN_BPS..=MAX_BPS).contains(&$value), "The value {} is out of range. Must be between {} and {} bps.", $value, MIN_BPS, MAX_BPS); )+ } }