@@ -168,7 +168,11 @@ import { getMarinadeDepositIx, getMarinadeFinanceProgram } from './marinade';
168168import { getOrderParams , isUpdateHighLeverageMode } from './orderParams' ;
169169import { numberToSafeBN } from './math/utils' ;
170170import { TransactionParamProcessor } from './tx/txParamProcessor' ;
171- import { isOracleValid , trimVaaSignatures } from './math/oracles' ;
171+ import {
172+ isOracleTooDivergent ,
173+ isOracleValid ,
174+ trimVaaSignatures ,
175+ } from './math/oracles' ;
172176import { TxHandler } from './tx/txHandler' ;
173177import {
174178 DEFAULT_RECEIVER_PROGRAM_ID ,
@@ -9384,23 +9388,28 @@ export class DriftClient {
93849388 isExchangeOracleMoreRecent = false ;
93859389 }
93869390
9391+ const conf = getOracleConfidenceFromMMOracleData (
9392+ perpMarket . amm . mmOraclePrice ,
9393+ oracleData
9394+ ) ;
9395+
93879396 if (
9388- ! isOracleValid (
9389- perpMarket ,
9390- oracleData ,
9391- stateAccountAndSlot . data . oracleGuardRails ,
9392- stateAccountAndSlot . slot
9397+ isOracleTooDivergent (
9398+ perpMarket . amm ,
9399+ {
9400+ price : perpMarket . amm . mmOraclePrice ,
9401+ slot : perpMarket . amm . mmOracleSlot ,
9402+ confidence : conf ,
9403+ hasSufficientNumberOfDataPoints : true ,
9404+ } ,
9405+ stateAccountAndSlot . data . oracleGuardRails
93939406 ) ||
93949407 perpMarket . amm . mmOraclePrice . eq ( ZERO ) ||
93959408 isExchangeOracleMoreRecent ||
93969409 pctDiff . gt ( PERCENTAGE_PRECISION . divn ( 100 ) ) // 1% threshold
93979410 ) {
93989411 return { ...oracleData , isMMOracleActive } ;
93999412 } else {
9400- const conf = getOracleConfidenceFromMMOracleData (
9401- perpMarket . amm . mmOraclePrice ,
9402- oracleData
9403- ) ;
94049413 return {
94059414 price : perpMarket . amm . mmOraclePrice ,
94069415 slot : perpMarket . amm . mmOracleSlot ,
0 commit comments