diff --git a/sdk/src/driftClient.ts b/sdk/src/driftClient.ts index bf80ca94f..2d1ecb13a 100644 --- a/sdk/src/driftClient.ts +++ b/sdk/src/driftClient.ts @@ -9402,8 +9402,7 @@ export class DriftClient { confidence: conf, hasSufficientNumberOfDataPoints: true, }, - stateAccountAndSlot.data.oracleGuardRails, - perpMarket.amm.mmOracleSlot + stateAccountAndSlot.data.oracleGuardRails ) || perpMarket.amm.mmOraclePrice.eq(ZERO) || isExchangeOracleMoreRecent || diff --git a/sdk/src/math/oracles.ts b/sdk/src/math/oracles.ts index 8873c6615..6575ed7a1 100644 --- a/sdk/src/math/oracles.ts +++ b/sdk/src/math/oracles.ts @@ -10,7 +10,6 @@ import { OraclePriceData } from '../oracles/types'; import { BID_ASK_SPREAD_PRECISION, MARGIN_PRECISION, - PRICE_PRECISION, ONE, ZERO, FIVE_MINUTE, @@ -97,29 +96,17 @@ export function isOracleValid( export function isOracleTooDivergent( amm: AMM, oraclePriceData: OraclePriceData, - oracleGuardRails: OracleGuardRails, - now: BN + oracleGuardRails: OracleGuardRails ): boolean { - const sinceLastUpdate = now.sub( - amm.historicalOracleData.lastOraclePriceTwapTs - ); - const sinceStart = BN.max(ZERO, FIVE_MINUTE.sub(sinceLastUpdate)); - const oracleTwap5min = amm.historicalOracleData.lastOraclePriceTwap5Min - .mul(sinceStart) - .add(oraclePriceData.price) - .mul(sinceLastUpdate) - .div(sinceStart.add(sinceLastUpdate)); - - const oracleSpread = oracleTwap5min.sub(oraclePriceData.price); - const oracleSpreadPct = oracleSpread.mul(PRICE_PRECISION).div(oracleTwap5min); - + const oracleSpreadPct = oraclePriceData.price + .sub(amm.historicalOracleData.lastOraclePriceTwap5Min) + .mul(PERCENTAGE_PRECISION) + .div(amm.historicalOracleData.lastOraclePriceTwap5Min); const maxDivergence = BN.max( - oracleGuardRails.priceDivergence.markOraclePercentDivergence, - PERCENTAGE_PRECISION.div(new BN(10)) + oracleGuardRails.priceDivergence.oracleTwap5MinPercentDivergence, + PERCENTAGE_PRECISION.div(new BN(2)) ); - const tooDivergent = oracleSpreadPct.abs().gte(maxDivergence); - return tooDivergent; }