From f73df1a1f355e101cdba63df30bca1c74442d8da Mon Sep 17 00:00:00 2001 From: Nour Alharithi <14929853+moosecat2@users.noreply.github.com> Date: Tue, 21 Oct 2025 10:27:02 -0700 Subject: [PATCH 1/3] patch mm oracle price data selection --- sdk/src/driftClient.ts | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/sdk/src/driftClient.ts b/sdk/src/driftClient.ts index 4c71a49ab..9529a0a37 100644 --- a/sdk/src/driftClient.ts +++ b/sdk/src/driftClient.ts @@ -168,7 +168,11 @@ import { getMarinadeDepositIx, getMarinadeFinanceProgram } from './marinade'; import { getOrderParams, isUpdateHighLeverageMode } from './orderParams'; import { numberToSafeBN } from './math/utils'; import { TransactionParamProcessor } from './tx/txParamProcessor'; -import { isOracleValid, trimVaaSignatures } from './math/oracles'; +import { + isOracleTooDivergent, + isOracleValid, + trimVaaSignatures, +} from './math/oracles'; import { TxHandler } from './tx/txHandler'; import { DEFAULT_RECEIVER_PROGRAM_ID, @@ -9384,12 +9388,22 @@ export class DriftClient { isExchangeOracleMoreRecent = false; } + const conf = getOracleConfidenceFromMMOracleData( + perpMarket.amm.mmOraclePrice, + oracleData + ); + if ( - !isOracleValid( - perpMarket, - oracleData, + !isOracleTooDivergent( + perpMarket.amm, + { + price: perpMarket.amm.mmOraclePrice, + slot: perpMarket.amm.mmOracleSlot, + confidence: conf, + hasSufficientNumberOfDataPoints: true, + }, stateAccountAndSlot.data.oracleGuardRails, - stateAccountAndSlot.slot + perpMarket.amm.mmOracleSlot ) || perpMarket.amm.mmOraclePrice.eq(ZERO) || isExchangeOracleMoreRecent || @@ -9397,10 +9411,6 @@ export class DriftClient { ) { return { ...oracleData, isMMOracleActive }; } else { - const conf = getOracleConfidenceFromMMOracleData( - perpMarket.amm.mmOraclePrice, - oracleData - ); return { price: perpMarket.amm.mmOraclePrice, slot: perpMarket.amm.mmOracleSlot, From 28a2d0f98951e7f1bcfe683ac09cbdb092d62689 Mon Sep 17 00:00:00 2001 From: Nour Alharithi <14929853+moosecat2@users.noreply.github.com> Date: Tue, 21 Oct 2025 10:27:23 -0700 Subject: [PATCH 2/3] patch the patch --- sdk/src/driftClient.ts | 94 +++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/sdk/src/driftClient.ts b/sdk/src/driftClient.ts index 9529a0a37..cc2db0eb8 100644 --- a/sdk/src/driftClient.ts +++ b/sdk/src/driftClient.ts @@ -353,8 +353,8 @@ export class DriftClient { this.authoritySubAccountMap = config.authoritySubAccountMap ? config.authoritySubAccountMap : config.subAccountIds - ? new Map([[this.authority.toString(), config.subAccountIds]]) - : new Map(); + ? new Map([[this.authority.toString(), config.subAccountIds]]) + : new Map(); this.includeDelegates = config.includeDelegates ?? false; if (config.accountSubscription?.type === 'polling') { @@ -844,8 +844,8 @@ export class DriftClient { this.authoritySubAccountMap = authoritySubaccountMap ? authoritySubaccountMap : subAccountIds - ? new Map([[this.authority.toString(), subAccountIds]]) - : new Map(); + ? new Map([[this.authority.toString(), subAccountIds]]) + : new Map(); /* Reset user stats account */ if (this.userStats?.isSubscribed) { @@ -997,7 +997,7 @@ export class DriftClient { [...this.authoritySubAccountMap.values()][0][0] ?? 0, new PublicKey( [...this.authoritySubAccountMap.keys()][0] ?? - this.authority.toString() + this.authority.toString() ) ); } @@ -3316,19 +3316,19 @@ export class DriftClient { const depositCollateralIx = isFromSubaccount ? await this.getTransferDepositIx( - amount, - marketIndex, - fromSubAccountId, - subAccountId - ) + amount, + marketIndex, + fromSubAccountId, + subAccountId + ) : await this.getDepositInstruction( - amount, - marketIndex, - userTokenAccount, - subAccountId, - false, - false - ); + amount, + marketIndex, + userTokenAccount, + subAccountId, + false, + false + ); if (subAccountId === 0) { if ( @@ -4368,14 +4368,14 @@ export class DriftClient { const marketOrderTxIxs = positionMaxLev ? this.getPlaceOrdersAndSetPositionMaxLevIx( - [orderParams, ...bracketOrdersParams], - positionMaxLev, - userAccount.subAccountId - ) + [orderParams, ...bracketOrdersParams], + positionMaxLev, + userAccount.subAccountId + ) : this.getPlaceOrdersIx( - [orderParams, ...bracketOrdersParams], - userAccount.subAccountId - ); + [orderParams, ...bracketOrdersParams], + userAccount.subAccountId + ); ixPromisesForTxs.marketOrderTx = marketOrderTxIxs; @@ -4523,10 +4523,10 @@ export class DriftClient { const user = isDepositToTradeTx ? getUserAccountPublicKeySync( - this.program.programId, - this.authority, - subAccountId - ) + this.program.programId, + this.authority, + subAccountId + ) : await this.getUserAccountPublicKey(subAccountId); const remainingAccounts = this.getRemainingAccounts({ @@ -5163,14 +5163,14 @@ export class DriftClient { const marketIndex = order ? order.marketIndex : userAccount.orders.find( - (order) => order.orderId === userAccount.nextOrderId - 1 - ).marketIndex; + (order) => order.orderId === userAccount.nextOrderId - 1 + ).marketIndex; makerInfo = Array.isArray(makerInfo) ? makerInfo : makerInfo - ? [makerInfo] - : []; + ? [makerInfo] + : []; const userAccounts = [userAccount]; for (const maker of makerInfo) { @@ -5386,14 +5386,14 @@ export class DriftClient { const marketIndex = order ? order.marketIndex : userAccount.orders.find( - (order) => order.orderId === userAccount.nextOrderId - 1 - ).marketIndex; + (order) => order.orderId === userAccount.nextOrderId - 1 + ).marketIndex; makerInfo = Array.isArray(makerInfo) ? makerInfo : makerInfo - ? [makerInfo] - : []; + ? [makerInfo] + : []; const userAccounts = [userAccount]; for (const maker of makerInfo) { @@ -6732,8 +6732,8 @@ export class DriftClient { makerInfo = Array.isArray(makerInfo) ? makerInfo : makerInfo - ? [makerInfo] - : []; + ? [makerInfo] + : []; const userAccounts = [this.getUserAccount(subAccountId)]; for (const maker of makerInfo) { @@ -6979,13 +6979,13 @@ export class DriftClient { prefix, delegateSigner ? this.program.coder.types.encode( - 'SignedMsgOrderParamsDelegateMessage', - withBuilderDefaults as SignedMsgOrderParamsDelegateMessage - ) + 'SignedMsgOrderParamsDelegateMessage', + withBuilderDefaults as SignedMsgOrderParamsDelegateMessage + ) : this.program.coder.types.encode( - 'SignedMsgOrderParamsMessage', - withBuilderDefaults as SignedMsgOrderParamsMessage - ), + 'SignedMsgOrderParamsMessage', + withBuilderDefaults as SignedMsgOrderParamsMessage + ), ]); return buf; } @@ -9394,7 +9394,7 @@ export class DriftClient { ); if ( - !isOracleTooDivergent( + isOracleTooDivergent( perpMarket.amm, { price: perpMarket.amm.mmOraclePrice, @@ -10710,8 +10710,8 @@ export class DriftClient { ): Promise { const remainingAccounts = userAccount ? this.getRemainingAccounts({ - userAccounts: [userAccount], - }) + userAccounts: [userAccount], + }) : undefined; const ix = await this.program.instruction.disableUserHighLeverageMode( From 4c85950683afcc94fd5cb569439197fa5a2962db Mon Sep 17 00:00:00 2001 From: Nour Alharithi <14929853+moosecat2@users.noreply.github.com> Date: Tue, 21 Oct 2025 10:28:35 -0700 Subject: [PATCH 3/3] prettify --- sdk/src/driftClient.ts | 92 +++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/sdk/src/driftClient.ts b/sdk/src/driftClient.ts index cc2db0eb8..bf80ca94f 100644 --- a/sdk/src/driftClient.ts +++ b/sdk/src/driftClient.ts @@ -353,8 +353,8 @@ export class DriftClient { this.authoritySubAccountMap = config.authoritySubAccountMap ? config.authoritySubAccountMap : config.subAccountIds - ? new Map([[this.authority.toString(), config.subAccountIds]]) - : new Map(); + ? new Map([[this.authority.toString(), config.subAccountIds]]) + : new Map(); this.includeDelegates = config.includeDelegates ?? false; if (config.accountSubscription?.type === 'polling') { @@ -844,8 +844,8 @@ export class DriftClient { this.authoritySubAccountMap = authoritySubaccountMap ? authoritySubaccountMap : subAccountIds - ? new Map([[this.authority.toString(), subAccountIds]]) - : new Map(); + ? new Map([[this.authority.toString(), subAccountIds]]) + : new Map(); /* Reset user stats account */ if (this.userStats?.isSubscribed) { @@ -997,7 +997,7 @@ export class DriftClient { [...this.authoritySubAccountMap.values()][0][0] ?? 0, new PublicKey( [...this.authoritySubAccountMap.keys()][0] ?? - this.authority.toString() + this.authority.toString() ) ); } @@ -3316,19 +3316,19 @@ export class DriftClient { const depositCollateralIx = isFromSubaccount ? await this.getTransferDepositIx( - amount, - marketIndex, - fromSubAccountId, - subAccountId - ) + amount, + marketIndex, + fromSubAccountId, + subAccountId + ) : await this.getDepositInstruction( - amount, - marketIndex, - userTokenAccount, - subAccountId, - false, - false - ); + amount, + marketIndex, + userTokenAccount, + subAccountId, + false, + false + ); if (subAccountId === 0) { if ( @@ -4368,14 +4368,14 @@ export class DriftClient { const marketOrderTxIxs = positionMaxLev ? this.getPlaceOrdersAndSetPositionMaxLevIx( - [orderParams, ...bracketOrdersParams], - positionMaxLev, - userAccount.subAccountId - ) + [orderParams, ...bracketOrdersParams], + positionMaxLev, + userAccount.subAccountId + ) : this.getPlaceOrdersIx( - [orderParams, ...bracketOrdersParams], - userAccount.subAccountId - ); + [orderParams, ...bracketOrdersParams], + userAccount.subAccountId + ); ixPromisesForTxs.marketOrderTx = marketOrderTxIxs; @@ -4523,10 +4523,10 @@ export class DriftClient { const user = isDepositToTradeTx ? getUserAccountPublicKeySync( - this.program.programId, - this.authority, - subAccountId - ) + this.program.programId, + this.authority, + subAccountId + ) : await this.getUserAccountPublicKey(subAccountId); const remainingAccounts = this.getRemainingAccounts({ @@ -5163,14 +5163,14 @@ export class DriftClient { const marketIndex = order ? order.marketIndex : userAccount.orders.find( - (order) => order.orderId === userAccount.nextOrderId - 1 - ).marketIndex; + (order) => order.orderId === userAccount.nextOrderId - 1 + ).marketIndex; makerInfo = Array.isArray(makerInfo) ? makerInfo : makerInfo - ? [makerInfo] - : []; + ? [makerInfo] + : []; const userAccounts = [userAccount]; for (const maker of makerInfo) { @@ -5386,14 +5386,14 @@ export class DriftClient { const marketIndex = order ? order.marketIndex : userAccount.orders.find( - (order) => order.orderId === userAccount.nextOrderId - 1 - ).marketIndex; + (order) => order.orderId === userAccount.nextOrderId - 1 + ).marketIndex; makerInfo = Array.isArray(makerInfo) ? makerInfo : makerInfo - ? [makerInfo] - : []; + ? [makerInfo] + : []; const userAccounts = [userAccount]; for (const maker of makerInfo) { @@ -6732,8 +6732,8 @@ export class DriftClient { makerInfo = Array.isArray(makerInfo) ? makerInfo : makerInfo - ? [makerInfo] - : []; + ? [makerInfo] + : []; const userAccounts = [this.getUserAccount(subAccountId)]; for (const maker of makerInfo) { @@ -6979,13 +6979,13 @@ export class DriftClient { prefix, delegateSigner ? this.program.coder.types.encode( - 'SignedMsgOrderParamsDelegateMessage', - withBuilderDefaults as SignedMsgOrderParamsDelegateMessage - ) + 'SignedMsgOrderParamsDelegateMessage', + withBuilderDefaults as SignedMsgOrderParamsDelegateMessage + ) : this.program.coder.types.encode( - 'SignedMsgOrderParamsMessage', - withBuilderDefaults as SignedMsgOrderParamsMessage - ), + 'SignedMsgOrderParamsMessage', + withBuilderDefaults as SignedMsgOrderParamsMessage + ), ]); return buf; } @@ -10710,8 +10710,8 @@ export class DriftClient { ): Promise { const remainingAccounts = userAccount ? this.getRemainingAccounts({ - userAccounts: [userAccount], - }) + userAccounts: [userAccount], + }) : undefined; const ix = await this.program.instruction.disableUserHighLeverageMode(