Skip to content

Commit 834d5d9

Browse files
committed
Merge branch 'master' into bigz/initial-margin-hlm-imf
2 parents f584fc9 + 37f0781 commit 834d5d9

File tree

7 files changed

+34
-36
lines changed

7 files changed

+34
-36
lines changed

programs/drift/src/math/amm_spread.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ use crate::math::constants::{
1212
BID_ASK_SPREAD_PRECISION, BID_ASK_SPREAD_PRECISION_I128, DEFAULT_LARGE_BID_ASK_FACTOR,
1313
DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT, FUNDING_RATE_BUFFER,
1414
MAX_BID_ASK_INVENTORY_SKEW_FACTOR, PEG_PRECISION, PERCENTAGE_PRECISION,
15-
PERCENTAGE_PRECISION_I128, PERCENTAGE_PRECISION_I64, PERCENTAGE_PRECISION_U64, PRICE_PRECISION,
16-
PRICE_PRECISION_I128, PRICE_PRECISION_I64,
15+
PERCENTAGE_PRECISION_I128, PERCENTAGE_PRECISION_U64, PRICE_PRECISION, PRICE_PRECISION_I128,
16+
PRICE_PRECISION_I64,
1717
};
1818
use crate::math::safe_math::SafeMath;
1919
use crate::state::perp_market::{ContractType, PerpMarket, AMM};

programs/drift/src/state/perp_market.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::msg;
12
use crate::state::pyth_lazer_oracle::PythLazerOracle;
23
use crate::state::user::MarketType;
34
use anchor_lang::prelude::*;

sdk/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.143.0-beta.4
1+
2.143.0-beta.7

sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@drift-labs/sdk",
3-
"version": "2.143.0-beta.4",
3+
"version": "2.143.0-beta.7",
44
"main": "lib/node/index.js",
55
"types": "lib/node/index.d.ts",
66
"module": "./lib/browser/index.js",

sdk/src/constants/spotMarkets.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,14 +459,15 @@ export const MainnetSpotMarkets: SpotMarketConfig[] = [
459459
symbol: 'JLP',
460460
marketIndex: 19,
461461
poolId: 0,
462-
oracle: new PublicKey('5Mb11e5rt1Sp6A286B145E4TmgMzsM2UX9nCF2vas5bs'),
463-
oracleSource: OracleSource.PYTH_PULL,
462+
oracle: new PublicKey('4VMtKepA6iFwMTJ7bBbdcGxavNRKiDjxxRr1CaB2NnFJ'),
463+
oracleSource: OracleSource.PYTH_LAZER,
464464
mint: new PublicKey('27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4'),
465465
precision: new BN(10).pow(SIX),
466466
precisionExp: SIX,
467467
launchTs: 1719415157000,
468468
pythFeedId:
469469
'0xc811abc82b4bad1f9bd711a2773ccaa935b03ecef974236942cec5e0eb845a3a',
470+
pythLazerId: 459,
470471
},
471472
{
472473
symbol: 'POPCAT',

sdk/src/driftClient.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,11 @@ import { getMarinadeDepositIx, getMarinadeFinanceProgram } from './marinade';
168168
import { getOrderParams, isUpdateHighLeverageMode } from './orderParams';
169169
import { numberToSafeBN } from './math/utils';
170170
import { TransactionParamProcessor } from './tx/txParamProcessor';
171-
import { isOracleValid, trimVaaSignatures } from './math/oracles';
171+
import {
172+
isOracleTooDivergent,
173+
isOracleValid,
174+
trimVaaSignatures,
175+
} from './math/oracles';
172176
import { TxHandler } from './tx/txHandler';
173177
import {
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,

sdk/src/math/oracles.ts

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { OraclePriceData } from '../oracles/types';
1010
import {
1111
BID_ASK_SPREAD_PRECISION,
1212
MARGIN_PRECISION,
13-
PRICE_PRECISION,
1413
ONE,
1514
ZERO,
1615
FIVE_MINUTE,
@@ -97,29 +96,17 @@ export function isOracleValid(
9796
export function isOracleTooDivergent(
9897
amm: AMM,
9998
oraclePriceData: OraclePriceData,
100-
oracleGuardRails: OracleGuardRails,
101-
now: BN
99+
oracleGuardRails: OracleGuardRails
102100
): boolean {
103-
const sinceLastUpdate = now.sub(
104-
amm.historicalOracleData.lastOraclePriceTwapTs
105-
);
106-
const sinceStart = BN.max(ZERO, FIVE_MINUTE.sub(sinceLastUpdate));
107-
const oracleTwap5min = amm.historicalOracleData.lastOraclePriceTwap5Min
108-
.mul(sinceStart)
109-
.add(oraclePriceData.price)
110-
.mul(sinceLastUpdate)
111-
.div(sinceStart.add(sinceLastUpdate));
112-
113-
const oracleSpread = oracleTwap5min.sub(oraclePriceData.price);
114-
const oracleSpreadPct = oracleSpread.mul(PRICE_PRECISION).div(oracleTwap5min);
115-
101+
const oracleSpreadPct = oraclePriceData.price
102+
.sub(amm.historicalOracleData.lastOraclePriceTwap5Min)
103+
.mul(PERCENTAGE_PRECISION)
104+
.div(amm.historicalOracleData.lastOraclePriceTwap5Min);
116105
const maxDivergence = BN.max(
117-
oracleGuardRails.priceDivergence.markOraclePercentDivergence,
118-
PERCENTAGE_PRECISION.div(new BN(10))
106+
oracleGuardRails.priceDivergence.oracleTwap5MinPercentDivergence,
107+
PERCENTAGE_PRECISION.div(new BN(2))
119108
);
120-
121109
const tooDivergent = oracleSpreadPct.abs().gte(maxDivergence);
122-
123110
return tooDivergent;
124111
}
125112

0 commit comments

Comments
 (0)