From c79897ae0fdbe062e5a7bbca233e2b9e352de950 Mon Sep 17 00:00:00 2001 From: sparqet Date: Wed, 3 Jul 2024 11:06:59 +0200 Subject: [PATCH] add is_position_liquidable in reader --- src/reader/reader.cairo | 24 +++++++++++++++++++ tests/integration/test_long_integration.cairo | 12 +++++----- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/reader/reader.cairo b/src/reader/reader.cairo index 489e8a1b..640112a5 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,20 @@ 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..53411fc4 100644 --- a/tests/integration/test_long_integration.cairo +++ b/tests/integration/test_long_integration.cairo @@ -3713,8 +3713,8 @@ 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,8 +3727,8 @@ 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,8 +4637,8 @@ 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');