From 9ea6b2dafa7d3c985cd908e1e43b2473af130d14 Mon Sep 17 00:00:00 2001 From: sparqet <37338401+sparqet@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:33:52 +0200 Subject: [PATCH] Feat/is liquidable func (#689) * refactor integration tests * add is_position_liquidable in reader * fix coding style --- src/reader/reader.cairo | 29 +++++++++++++++++++ tests/integration/test_long_integration.cairo | 21 ++++++++------ 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/reader/reader.cairo b/src/reader/reader.cairo index 489e8a1b..3530cc78 100644 --- a/src/reader/reader.cairo +++ b/src/reader/reader.cairo @@ -425,6 +425,16 @@ trait IReader { is_long: bool, prices: MarketPrices ) -> (u64, bool, i256, u256); + + fn is_position_liquidable( + self: @TContractState, + data_store: IDataStoreDispatcher, + referral_storage: IReferralStorageDispatcher, + position: Position, + market: Market, + prices: MarketPrices, + should_validate_min_collateral_usd: bool, + ) -> (bool, felt252); } #[starknet::contract] @@ -856,6 +866,25 @@ mod Reader { ); (latest_adl_block, should_enabled_ald, pnl_to_pool_factor, max_pnl_factor) } + + fn is_position_liquidable( + self: @ContractState, + data_store: IDataStoreDispatcher, + referral_storage: IReferralStorageDispatcher, + position: Position, + market: Market, + prices: MarketPrices, + should_validate_min_collateral_usd: bool + ) -> (bool, felt252) { + position_utils::is_position_liquiditable( + data_store, + referral_storage, + position, + market, + prices, + should_validate_min_collateral_usd + ) + } } } diff --git a/tests/integration/test_long_integration.cairo b/tests/integration/test_long_integration.cairo index 91a65112..0dba739e 100644 --- a/tests/integration/test_long_integration.cairo +++ b/tests/integration/test_long_integration.cairo @@ -3713,9 +3713,10 @@ fn test_long_liquidation() { short_token_price: Price { min: 1, max: 1, }, }; - let (is_liquiditable, reason) = position_utils::is_position_liquiditable( - data_store, referal_storage, first_position, market, market_prices, false - ); + let (is_liquiditable, reason) = reader + .is_position_liquidable( + data_store, referal_storage, first_position, market, market_prices, true + ); assert(is_liquiditable == true, 'Position is liquidable'); @@ -3727,9 +3728,10 @@ fn test_long_liquidation() { short_token_price: Price { min: 1, max: 1, }, }; - let (is_liquiditable, reason) = position_utils::is_position_liquiditable( - data_store, referal_storage, first_position, market, market_prices, false - ); + let (is_liquiditable, reason) = reader + .is_position_liquidable( + data_store, referal_storage, first_position, market, market_prices, true + ); assert(is_liquiditable == false, 'Position is not liquidable'); @@ -4637,9 +4639,10 @@ fn test_long_leverage_liquidation() { short_token_price: Price { min: 1, max: 1, }, }; - let (is_liquiditable, reason) = position_utils::is_position_liquiditable( - data_store, referal_storage, first_position, market, market_prices, false - ); + let (is_liquiditable, reason) = reader + .is_position_liquidable( + data_store, referal_storage, first_position, market, market_prices, true + ); // position x10 leverage is liquidable at 3000$, position x1 leverage is not liquidable at 3000$ assert(is_liquiditable == true, 'Position is liquidable');