diff --git a/contracts/sumtree-orderbook/src/query.rs b/contracts/sumtree-orderbook/src/query.rs index 4384841..9b74378 100644 --- a/contracts/sumtree-orderbook/src/query.rs +++ b/contracts/sumtree-orderbook/src/query.rs @@ -8,8 +8,8 @@ use crate::{ error::ContractResult, msg::{ CalcOutAmtGivenInResponse, DenomsResponse, GetSwapFeeResponse, - GetTotalPoolLiquidityResponse, GetUnrealizedCancelsResponse, OrdersResponse, SpotPriceResponse, - TickIdAndState, TickUnrealizedCancels, TicksResponse, UnrealizedCancels, + GetTotalPoolLiquidityResponse, GetUnrealizedCancelsResponse, OrdersResponse, + SpotPriceResponse, TickIdAndState, TickUnrealizedCancels, TicksResponse, UnrealizedCancels, }, order, state::{ @@ -17,7 +17,7 @@ use crate::{ }, sudo::ensure_swap_fee, sumtree::tree::{get_prefix_sum, get_root_node}, - tick_math::tick_to_price, + tick_math::{amount_to_value, tick_to_price, RoundingDirection}, types::{FilterOwnerOrders, LimitOrder, MarketOrder, OrderDirection, TickState}, ContractError, }; @@ -59,8 +59,10 @@ pub(crate) fn spot_price( // Generate spot price based on current active tick for desired order direction let price = tick_to_price(next_tick)?; + let spot_price = amount_to_value(direction, Uint128::one(), price, RoundingDirection::Down)?; + Ok(SpotPriceResponse { - spot_price: Decimal::from_str(&price.to_string())?, + spot_price: Decimal::from_str(&spot_price.to_string())?, }) } diff --git a/contracts/sumtree-orderbook/src/tests/test_query.rs b/contracts/sumtree-orderbook/src/tests/test_query.rs index e2d3732..4c1a675 100644 --- a/contracts/sumtree-orderbook/src/tests/test_query.rs +++ b/contracts/sumtree-orderbook/src/tests/test_query.rs @@ -253,7 +253,7 @@ fn test_query_spot_price() { ], base_denom: QUOTE_DENOM.to_string(), quote_denom: BASE_DENOM.to_string(), - expected_price: Decimal::percent(50), + expected_price: Decimal::percent(200), expected_error: None, }, SpotPriceTestCase {