@drift-labs/sdk 2.129.0-beta.1 → 2.129.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 2.129.0-beta.1
1
+ 2.129.0-beta.3
@@ -529,7 +529,28 @@ function calculateSpreadReserves(amm, oraclePriceData, now, isPrediction = false
529
529
  const liquidityFractionSigned = liquidityFraction.mul((0, __1.sigNum)(amm.baseAssetAmountWithAmm.add(amm.baseAssetAmountWithUnsettledLp)));
530
530
  referencePriceOffset = calculateReferencePriceOffset(reservePrice, amm.last24HAvgFundingRate, liquidityFractionSigned, amm.historicalOracleData.lastOraclePriceTwap5Min, amm.lastMarkPriceTwap5Min, amm.historicalOracleData.lastOraclePriceTwap, amm.lastMarkPriceTwap, maxOffset).toNumber();
531
531
  }
532
- const [longSpread, shortSpread] = calculateSpread(amm, oraclePriceData, now, reservePrice);
532
+ let [longSpread, shortSpread] = calculateSpread(amm, oraclePriceData, now, reservePrice);
533
+ const doReferencePricOffsetSmooth = Math.sign(referencePriceOffset) !== Math.sign(amm.referencePriceOffset) &&
534
+ amm.curveUpdateIntensity > 100;
535
+ if (doReferencePricOffsetSmooth) {
536
+ if (oraclePriceData.slot !== amm.lastUpdateSlot) {
537
+ const slotsPassed = oraclePriceData.slot.toNumber() - amm.lastUpdateSlot.toNumber();
538
+ const fullOffsetDelta = referencePriceOffset - amm.referencePriceOffset;
539
+ const raw = Math.trunc(Math.min(Math.abs(fullOffsetDelta), slotsPassed * 1000) / 10);
540
+ const maxAllowed = Math.abs(amm.referencePriceOffset) || Math.abs(referencePriceOffset);
541
+ const magnitude = Math.min(Math.max(raw, 10), maxAllowed);
542
+ const referencePriceDelta = Math.sign(fullOffsetDelta) * magnitude;
543
+ referencePriceOffset = amm.referencePriceOffset + referencePriceDelta;
544
+ if (referencePriceDelta < 0) {
545
+ longSpread += Math.abs(referencePriceDelta);
546
+ shortSpread += Math.abs(referencePriceOffset);
547
+ }
548
+ else {
549
+ shortSpread += Math.abs(referencePriceDelta);
550
+ longSpread += Math.abs(referencePriceOffset);
551
+ }
552
+ }
553
+ }
533
554
  const askReserves = calculateSpreadReserve(longSpread + referencePriceOffset, types_1.PositionDirection.LONG, amm);
534
555
  const bidReserves = calculateSpreadReserve(-shortSpread + referencePriceOffset, types_1.PositionDirection.SHORT, amm);
535
556
  return [bidReserves, askReserves];
@@ -1 +1 @@
1
- {"version":3,"file":"amm.d.ts","sourceRoot":"","sources":["../../../src/math/amm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"amm.d.ts","sourceRoot":"","sources":["../../../src/math/amm.ts"],"names":[],"mappings":"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"}
@@ -529,7 +529,28 @@ function calculateSpreadReserves(amm, oraclePriceData, now, isPrediction = false
529
529
  const liquidityFractionSigned = liquidityFraction.mul((0, __1.sigNum)(amm.baseAssetAmountWithAmm.add(amm.baseAssetAmountWithUnsettledLp)));
530
530
  referencePriceOffset = calculateReferencePriceOffset(reservePrice, amm.last24HAvgFundingRate, liquidityFractionSigned, amm.historicalOracleData.lastOraclePriceTwap5Min, amm.lastMarkPriceTwap5Min, amm.historicalOracleData.lastOraclePriceTwap, amm.lastMarkPriceTwap, maxOffset).toNumber();
531
531
  }
532
- const [longSpread, shortSpread] = calculateSpread(amm, oraclePriceData, now, reservePrice);
532
+ let [longSpread, shortSpread] = calculateSpread(amm, oraclePriceData, now, reservePrice);
533
+ const doReferencePricOffsetSmooth = Math.sign(referencePriceOffset) !== Math.sign(amm.referencePriceOffset) &&
534
+ amm.curveUpdateIntensity > 100;
535
+ if (doReferencePricOffsetSmooth) {
536
+ if (oraclePriceData.slot !== amm.lastUpdateSlot) {
537
+ const slotsPassed = oraclePriceData.slot.toNumber() - amm.lastUpdateSlot.toNumber();
538
+ const fullOffsetDelta = referencePriceOffset - amm.referencePriceOffset;
539
+ const raw = Math.trunc(Math.min(Math.abs(fullOffsetDelta), slotsPassed * 1000) / 10);
540
+ const maxAllowed = Math.abs(amm.referencePriceOffset) || Math.abs(referencePriceOffset);
541
+ const magnitude = Math.min(Math.max(raw, 10), maxAllowed);
542
+ const referencePriceDelta = Math.sign(fullOffsetDelta) * magnitude;
543
+ referencePriceOffset = amm.referencePriceOffset + referencePriceDelta;
544
+ if (referencePriceDelta < 0) {
545
+ longSpread += Math.abs(referencePriceDelta);
546
+ shortSpread += Math.abs(referencePriceOffset);
547
+ }
548
+ else {
549
+ shortSpread += Math.abs(referencePriceDelta);
550
+ longSpread += Math.abs(referencePriceOffset);
551
+ }
552
+ }
553
+ }
533
554
  const askReserves = calculateSpreadReserve(longSpread + referencePriceOffset, types_1.PositionDirection.LONG, amm);
534
555
  const bidReserves = calculateSpreadReserve(-shortSpread + referencePriceOffset, types_1.PositionDirection.SHORT, amm);
535
556
  return [bidReserves, askReserves];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/sdk",
3
- "version": "2.129.0-beta.1",
3
+ "version": "2.129.0-beta.3",
4
4
  "main": "lib/node/index.js",
5
5
  "types": "lib/node/index.d.ts",
6
6
  "browser": "./lib/browser/index.js",
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  PublicKey,
3
3
  SystemProgram,
4
+ SYSVAR_CLOCK_PUBKEY,
4
5
  SYSVAR_RENT_PUBKEY,
5
6
  TransactionInstruction,
6
7
  TransactionSignature,
@@ -57,6 +58,7 @@ import { PROGRAM_ID as PHOENIX_PROGRAM_ID } from '@ellipsis-labs/phoenix-sdk';
57
58
  import { DRIFT_ORACLE_RECEIVER_ID } from './config';
58
59
  import { getFeedIdUint8Array } from './util/pythOracleUtils';
59
60
  import { FUEL_RESET_LOG_ACCOUNT } from './constants/txConstants';
61
+ import { createNativeInstructionDiscriminatorBuffer } from './tx/utils';
60
62
 
61
63
  const OPENBOOK_PROGRAM_ID = new PublicKey(
62
64
  'opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb'
@@ -4552,27 +4554,136 @@ export class AdminClient extends DriftClient {
4552
4554
  });
4553
4555
  }
4554
4556
 
4555
- public async zeroAmmFieldsPrepMmOracleInfo(
4556
- marketIndex: number
4557
+ public async updateMmOracleNative(
4558
+ marketIndex: number,
4559
+ oraclePrice: BN,
4560
+ oracleSequenceId: BN
4557
4561
  ): Promise<TransactionSignature> {
4558
- const zeroAmmFieldsPrepMmOracleInfoIx =
4559
- await this.getZeroAmmFieldsPrepMmOracleInfoIx(marketIndex);
4560
-
4561
- const tx = await this.buildTransaction(zeroAmmFieldsPrepMmOracleInfoIx);
4562
+ const updateMmOracleIx = await this.getUpdateMmOracleNativeIx(
4563
+ marketIndex,
4564
+ oraclePrice,
4565
+ oracleSequenceId
4566
+ );
4562
4567
 
4568
+ const tx = await this.buildTransaction(updateMmOracleIx, {
4569
+ computeUnits: 5000,
4570
+ computeUnitsPrice: 0,
4571
+ });
4563
4572
  const { txSig } = await this.sendTransaction(tx, [], this.opts);
4564
4573
 
4565
4574
  return txSig;
4566
4575
  }
4567
4576
 
4568
- public async getZeroAmmFieldsPrepMmOracleInfoIx(
4569
- marketIndex: number
4577
+ public async getUpdateMmOracleNativeIx(
4578
+ marketIndex: number,
4579
+ oraclePrice: BN,
4580
+ oracleSequenceId: BN
4570
4581
  ): Promise<TransactionInstruction> {
4571
- return await this.program.instruction.zeroAmmFieldsPrepMmOracleInfo({
4572
- accounts: {
4573
- admin: this.wallet.publicKey,
4574
- perpMarket: this.getPerpMarketAccount(marketIndex).pubkey,
4575
- },
4582
+ const discriminatorBuffer = createNativeInstructionDiscriminatorBuffer(0);
4583
+ const data = Buffer.alloc(discriminatorBuffer.length + 16);
4584
+ data.set(discriminatorBuffer, 0);
4585
+ data.set(oraclePrice.toArrayLike(Buffer, 'le', 8), 5); // next 8 bytes
4586
+ data.set(oracleSequenceId.toArrayLike(Buffer, 'le', 8), 13); // next 8 bytes
4587
+
4588
+ // Build the instruction manually
4589
+ return new TransactionInstruction({
4590
+ programId: this.program.programId,
4591
+ keys: [
4592
+ {
4593
+ pubkey: this.getPerpMarketAccount(marketIndex).pubkey,
4594
+ isWritable: true,
4595
+ isSigner: false,
4596
+ },
4597
+ {
4598
+ pubkey: this.wallet.publicKey,
4599
+ isWritable: false,
4600
+ isSigner: true,
4601
+ },
4602
+ {
4603
+ pubkey: SYSVAR_CLOCK_PUBKEY,
4604
+ isWritable: false,
4605
+ isSigner: false,
4606
+ },
4607
+ {
4608
+ pubkey: await this.getStatePublicKey(),
4609
+ isWritable: false,
4610
+ isSigner: false,
4611
+ },
4612
+ ],
4613
+ data,
4614
+ });
4615
+ }
4616
+
4617
+ public async updateAmmSpreadAdjustmentNative(
4618
+ marketIndex: number,
4619
+ ammSpreadAdjustment: number
4620
+ ): Promise<TransactionSignature> {
4621
+ const updateMmOracleIx = await this.getUpdateAmmSpreadAdjustmentNativeIx(
4622
+ marketIndex,
4623
+ ammSpreadAdjustment
4624
+ );
4625
+
4626
+ const tx = await this.buildTransaction(updateMmOracleIx, {
4627
+ computeUnits: 1000,
4628
+ computeUnitsPrice: 0,
4629
+ });
4630
+ const { txSig } = await this.sendTransaction(tx, [], this.opts);
4631
+
4632
+ return txSig;
4633
+ }
4634
+
4635
+ public getUpdateAmmSpreadAdjustmentNativeIx(
4636
+ marketIndex: number,
4637
+ ammSpreadAdjustment: number // i8
4638
+ ): TransactionInstruction {
4639
+ const discriminatorBuffer = createNativeInstructionDiscriminatorBuffer(1);
4640
+ const data = Buffer.alloc(discriminatorBuffer.length + 4);
4641
+ data.set(discriminatorBuffer, 0);
4642
+ data.writeInt8(ammSpreadAdjustment, 5); // next byte
4643
+
4644
+ // Build the instruction manually
4645
+ return new TransactionInstruction({
4646
+ programId: this.program.programId,
4647
+ keys: [
4648
+ {
4649
+ pubkey: this.getPerpMarketAccount(marketIndex).pubkey,
4650
+ isWritable: true,
4651
+ isSigner: false,
4652
+ },
4653
+ {
4654
+ pubkey: this.wallet.publicKey,
4655
+ isWritable: false,
4656
+ isSigner: true,
4657
+ },
4658
+ ],
4659
+ data,
4576
4660
  });
4577
4661
  }
4662
+
4663
+ public async updateDisableBitFlagsMMOracle(
4664
+ disable: boolean
4665
+ ): Promise<TransactionSignature> {
4666
+ const updateDisableBitFlagsMMOracleIx =
4667
+ await this.getUpdateDisableBitFlagsMMOracleIx(disable);
4668
+
4669
+ const tx = await this.buildTransaction(updateDisableBitFlagsMMOracleIx);
4670
+ const { txSig } = await this.sendTransaction(tx, [], this.opts);
4671
+
4672
+ return txSig;
4673
+ }
4674
+ public async getUpdateDisableBitFlagsMMOracleIx(
4675
+ disable: boolean
4676
+ ): Promise<TransactionInstruction> {
4677
+ return await this.program.instruction.updateDisableBitflagsMmOracle(
4678
+ disable,
4679
+ {
4680
+ accounts: {
4681
+ admin: this.isSubscribed
4682
+ ? this.getStateAccount().admin
4683
+ : this.wallet.publicKey,
4684
+ state: await this.getStatePublicKey(),
4685
+ },
4686
+ }
4687
+ );
4688
+ }
4578
4689
  }
@@ -20,8 +20,10 @@ import {
20
20
  PRICE_PRECISION,
21
21
  AMM_TO_QUOTE_PRECISION_RATIO,
22
22
  standardizeBaseAssetAmount,
23
+ MMOraclePriceData,
23
24
  } from '..';
24
25
  import { PublicKey } from '@solana/web3.js';
26
+ import { getOraclePriceFromMMOracleData } from '../oracles/utils';
25
27
 
26
28
  type liquiditySource =
27
29
  | 'serum'
@@ -175,12 +177,23 @@ export function getVammL2Generator({
175
177
  topOfBookQuoteAmounts = [],
176
178
  }: {
177
179
  marketAccount: PerpMarketAccount;
178
- oraclePriceData: OraclePriceData;
180
+ oraclePriceData: OraclePriceData | MMOraclePriceData;
179
181
  numOrders: number;
180
182
  now?: BN;
181
183
  topOfBookQuoteAmounts?: BN[];
182
184
  }): L2OrderBookGenerator {
183
- const updatedAmm = calculateUpdatedAMM(marketAccount.amm, oraclePriceData);
185
+ let mmOraclePriceData: MMOraclePriceData;
186
+ if ('mmOraclePrice' in mmOraclePriceData) {
187
+ mmOraclePriceData = oraclePriceData as MMOraclePriceData;
188
+ } else {
189
+ mmOraclePriceData = {
190
+ mmOraclePrice: marketAccount.amm.mmOraclePrice,
191
+ mmOracleSlot: marketAccount.amm.mmOracleSlot,
192
+ oraclePriceData: oraclePriceData as OraclePriceData,
193
+ };
194
+ }
195
+
196
+ const updatedAmm = calculateUpdatedAMM(marketAccount.amm, mmOraclePriceData);
184
197
  const paused = isOperationPaused(
185
198
  marketAccount.pausedOperations,
186
199
  PerpOperation.AMM_FILL
@@ -200,7 +213,7 @@ export function getVammL2Generator({
200
213
 
201
214
  const [bidReserves, askReserves] = calculateSpreadReserves(
202
215
  updatedAmm,
203
- oraclePriceData,
216
+ mmOraclePriceData,
204
217
  now,
205
218
  isVariant(marketAccount.contractType, 'prediction')
206
219
  );
@@ -209,7 +222,7 @@ export function getVammL2Generator({
209
222
  const commonOpts = {
210
223
  numOrders,
211
224
  numBaseOrders,
212
- oraclePriceData,
225
+ mmOraclePriceData,
213
226
  orderTickSize: marketAccount.amm.orderTickSize,
214
227
  orderStepSize: marketAccount.amm.orderStepSize,
215
228
  pegMultiplier: updatedAmm.pegMultiplier,
@@ -244,7 +257,7 @@ export function getVammL2Generator({
244
257
  const raw = commonOpts.topOfBookQuoteAmounts[count]
245
258
  .mul(AMM_TO_QUOTE_PRECISION_RATIO)
246
259
  .mul(PRICE_PRECISION)
247
- .div(commonOpts.oraclePriceData.price);
260
+ .div(getOraclePriceFromMMOracleData(commonOpts.mmOraclePriceData));
248
261
  baseSwap = standardizeBaseAssetAmount(raw, commonOpts.orderStepSize);
249
262
  const remaining = openLiquidity.abs().sub(topSize);
250
263
  if (remaining.lt(baseSwap)) baseSwap = remaining;
@@ -130,7 +130,7 @@ import {
130
130
  import { findDirectionToClose, positionIsAvailable } from './math/position';
131
131
  import { getSignedTokenAmount, getTokenAmount } from './math/spotBalance';
132
132
  import { decodeName, DEFAULT_USER_NAME, encodeName } from './userName';
133
- import { OraclePriceData } from './oracles/types';
133
+ import { MMOraclePriceData, OraclePriceData } from './oracles/types';
134
134
  import { DriftClientConfig } from './driftClientConfig';
135
135
  import { PollingDriftClientAccountSubscriber } from './accounts/pollingDriftClientAccountSubscriber';
136
136
  import { WebSocketDriftClientAccountSubscriber } from './accounts/webSocketDriftClientAccountSubscriber';
@@ -8485,6 +8485,15 @@ export class DriftClient {
8485
8485
  ).data;
8486
8486
  }
8487
8487
 
8488
+ public getMMOracleDataForPerpMarket(marketIndex: number): MMOraclePriceData {
8489
+ const perpMarket = this.getPerpMarketAccount(marketIndex);
8490
+ return {
8491
+ mmOraclePrice: perpMarket.amm.mmOraclePrice,
8492
+ mmOracleSlot: perpMarket.amm.mmOracleSlot,
8493
+ oraclePriceData: this.getOracleDataForPerpMarket(marketIndex),
8494
+ };
8495
+ }
8496
+
8488
8497
  public getOracleDataForSpotMarket(marketIndex: number): OraclePriceData {
8489
8498
  return this.accountSubscriber.getOraclePriceDataAndSlotForSpotMarket(
8490
8499
  marketIndex
@@ -6730,6 +6730,10 @@
6730
6730
  {
6731
6731
  "name": "ammInventorySpreadAdjustment",
6732
6732
  "type": "i8"
6733
+ },
6734
+ {
6735
+ "name": "referencePriceOffset",
6736
+ "type": "i32"
6733
6737
  }
6734
6738
  ]
6735
6739
  },
@@ -7525,20 +7529,25 @@
7525
7529
  ]
7526
7530
  },
7527
7531
  {
7528
- "name": "zeroAmmFieldsPrepMmOracleInfo",
7532
+ "name": "updateDisableBitflagsMmOracle",
7529
7533
  "accounts": [
7530
7534
  {
7531
7535
  "name": "admin",
7532
- "isMut": true,
7536
+ "isMut": false,
7533
7537
  "isSigner": true
7534
7538
  },
7535
7539
  {
7536
- "name": "perpMarket",
7540
+ "name": "state",
7537
7541
  "isMut": true,
7538
7542
  "isSigner": false
7539
7543
  }
7540
7544
  ],
7541
- "args": []
7545
+ "args": [
7546
+ {
7547
+ "name": "disable",
7548
+ "type": "bool"
7549
+ }
7550
+ ]
7542
7551
  }
7543
7552
  ],
7544
7553
  "accounts": [
@@ -9027,12 +9036,16 @@
9027
9036
  "name": "maxInitializeUserFee",
9028
9037
  "type": "u16"
9029
9038
  },
9039
+ {
9040
+ "name": "disableBitFlags",
9041
+ "type": "u8"
9042
+ },
9030
9043
  {
9031
9044
  "name": "padding",
9032
9045
  "type": {
9033
9046
  "array": [
9034
9047
  "u8",
9035
- 10
9048
+ 9
9036
9049
  ]
9037
9050
  }
9038
9051
  }
@@ -10841,7 +10854,7 @@
10841
10854
  "type": "u64"
10842
10855
  },
10843
10856
  {
10844
- "name": "maxPositionSize",
10857
+ "name": "mmOracleSlot",
10845
10858
  "docs": [
10846
10859
  "the max base size a single user can have",
10847
10860
  "precision: BASE_PRECISION"
@@ -10929,18 +10942,11 @@
10929
10942
  "type": "u32"
10930
10943
  },
10931
10944
  {
10932
- "name": "longIntensityCount",
10945
+ "name": "mmOraclePrice",
10933
10946
  "docs": [
10934
- "the count intensity of long fills against AMM"
10947
+ "MM oracle price"
10935
10948
  ],
10936
- "type": "u32"
10937
- },
10938
- {
10939
- "name": "shortIntensityCount",
10940
- "docs": [
10941
- "the count intensity of short fills against AMM"
10942
- ],
10943
- "type": "u32"
10949
+ "type": "i64"
10944
10950
  },
10945
10951
  {
10946
10952
  "name": "maxFillReserveFraction",
@@ -11022,7 +11028,7 @@
11022
11028
  "type": "i8"
11023
11029
  },
11024
11030
  {
11025
- "name": "totalFeeEarnedPerLp",
11031
+ "name": "mmOracleSequenceId",
11026
11032
  "type": "u64"
11027
11033
  },
11028
11034
  {
@@ -15947,4 +15953,4 @@
15947
15953
  "metadata": {
15948
15954
  "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH"
15949
15955
  }
15950
- }
15956
+ }
package/src/math/amm.ts CHANGED
@@ -25,7 +25,7 @@ import {
25
25
  import { assert } from '../assert/assert';
26
26
  import { squareRootBN, sigNum, clampBN, standardizeBaseAssetAmount } from '..';
27
27
 
28
- import { OraclePriceData } from '../oracles/types';
28
+ import { MMOraclePriceData } from '../oracles/types';
29
29
  import {
30
30
  calculateRepegCost,
31
31
  calculateAdjustKCost,
@@ -33,6 +33,10 @@ import {
33
33
  } from './repeg';
34
34
 
35
35
  import { calculateLiveOracleStd, getNewOracleConfPct } from './oracles';
36
+ import {
37
+ getOracleConfidenceFromMMOracleData,
38
+ getOraclePriceFromMMOracleData,
39
+ } from '../oracles/utils';
36
40
 
37
41
  export function calculatePegFromTargetPrice(
38
42
  targetPrice: BN,
@@ -51,14 +55,14 @@ export function calculatePegFromTargetPrice(
51
55
 
52
56
  export function calculateOptimalPegAndBudget(
53
57
  amm: AMM,
54
- oraclePriceData: OraclePriceData
58
+ mmOraclePriceData: MMOraclePriceData
55
59
  ): [BN, BN, BN, boolean] {
56
60
  const reservePriceBefore = calculatePrice(
57
61
  amm.baseAssetReserve,
58
62
  amm.quoteAssetReserve,
59
63
  amm.pegMultiplier
60
64
  );
61
- const targetPrice = oraclePriceData.price;
65
+ const targetPrice = getOraclePriceFromMMOracleData(mmOraclePriceData);
62
66
  const newPeg = calculatePegFromTargetPrice(
63
67
  targetPrice,
64
68
  amm.baseAssetReserve,
@@ -112,13 +116,13 @@ export function calculateOptimalPegAndBudget(
112
116
 
113
117
  export function calculateNewAmm(
114
118
  amm: AMM,
115
- oraclePriceData: OraclePriceData
119
+ mmOraclePriceData: MMOraclePriceData
116
120
  ): [BN, BN, BN, BN] {
117
121
  let pKNumer = new BN(1);
118
122
  let pKDenom = new BN(1);
119
123
 
120
124
  const [targetPrice, _newPeg, budget, _checkLowerBound] =
121
- calculateOptimalPegAndBudget(amm, oraclePriceData);
125
+ calculateOptimalPegAndBudget(amm, mmOraclePriceData);
122
126
  let prePegCost = calculateRepegCost(amm, _newPeg);
123
127
  let newPeg = _newPeg;
124
128
 
@@ -154,15 +158,15 @@ export function calculateNewAmm(
154
158
 
155
159
  export function calculateUpdatedAMM(
156
160
  amm: AMM,
157
- oraclePriceData: OraclePriceData
161
+ mmOraclePriceData: MMOraclePriceData
158
162
  ): AMM {
159
- if (amm.curveUpdateIntensity == 0 || oraclePriceData === undefined) {
163
+ if (amm.curveUpdateIntensity == 0 || mmOraclePriceData === undefined) {
160
164
  return amm;
161
165
  }
162
166
  const newAmm = Object.assign({}, amm);
163
167
  const [prepegCost, pKNumer, pKDenom, newPeg] = calculateNewAmm(
164
168
  amm,
165
- oraclePriceData
169
+ mmOraclePriceData
166
170
  );
167
171
 
168
172
  newAmm.baseAssetReserve = newAmm.baseAssetReserve.mul(pKNumer).div(pKDenom);
@@ -195,13 +199,13 @@ export function calculateUpdatedAMM(
195
199
  export function calculateUpdatedAMMSpreadReserves(
196
200
  amm: AMM,
197
201
  direction: PositionDirection,
198
- oraclePriceData: OraclePriceData,
202
+ mmOraclePriceData: MMOraclePriceData,
199
203
  isPrediction = false
200
204
  ): { baseAssetReserve: BN; quoteAssetReserve: BN; sqrtK: BN; newPeg: BN } {
201
- const newAmm = calculateUpdatedAMM(amm, oraclePriceData);
205
+ const newAmm = calculateUpdatedAMM(amm, mmOraclePriceData);
202
206
  const [shortReserves, longReserves] = calculateSpreadReserves(
203
207
  newAmm,
204
- oraclePriceData,
208
+ mmOraclePriceData,
205
209
  undefined,
206
210
  isPrediction
207
211
  );
@@ -222,20 +226,20 @@ export function calculateUpdatedAMMSpreadReserves(
222
226
 
223
227
  export function calculateBidAskPrice(
224
228
  amm: AMM,
225
- oraclePriceData: OraclePriceData,
229
+ mmOraclePriceData: MMOraclePriceData,
226
230
  withUpdate = true,
227
231
  isPrediction = false
228
232
  ): [BN, BN] {
229
233
  let newAmm: AMM;
230
234
  if (withUpdate) {
231
- newAmm = calculateUpdatedAMM(amm, oraclePriceData);
235
+ newAmm = calculateUpdatedAMM(amm, mmOraclePriceData);
232
236
  } else {
233
237
  newAmm = amm;
234
238
  }
235
239
 
236
240
  const [bidReserves, askReserves] = calculateSpreadReserves(
237
241
  newAmm,
238
- oraclePriceData,
242
+ mmOraclePriceData,
239
243
  undefined,
240
244
  isPrediction
241
245
  );
@@ -824,7 +828,7 @@ export function calculateSpreadBN(
824
828
 
825
829
  export function calculateSpread(
826
830
  amm: AMM,
827
- oraclePriceData: OraclePriceData,
831
+ mmOraclePriceData: MMOraclePriceData,
828
832
  now?: BN,
829
833
  reservePrice?: BN
830
834
  ): [number, number] {
@@ -839,18 +843,18 @@ export function calculateSpread(
839
843
  amm.pegMultiplier
840
844
  );
841
845
  }
842
-
843
- const targetPrice = oraclePriceData?.price || reservePrice;
846
+ const oraclePrice = getOraclePriceFromMMOracleData(mmOraclePriceData);
847
+ const targetPrice = oraclePrice || reservePrice;
844
848
  const targetMarkSpreadPct = reservePrice
845
849
  .sub(targetPrice)
846
850
  .mul(BID_ASK_SPREAD_PRECISION)
847
851
  .div(reservePrice);
848
852
 
849
853
  now = now || new BN(new Date().getTime() / 1000); //todo
850
- const liveOracleStd = calculateLiveOracleStd(amm, oraclePriceData, now);
854
+ const liveOracleStd = calculateLiveOracleStd(amm, oraclePrice, now);
851
855
  const confIntervalPct = getNewOracleConfPct(
852
856
  amm,
853
- oraclePriceData,
857
+ getOracleConfidenceFromMMOracleData(mmOraclePriceData),
854
858
  reservePrice,
855
859
  now
856
860
  );
@@ -936,7 +940,7 @@ export function getQuoteAssetReservePredictionMarketBounds(
936
940
 
937
941
  export function calculateSpreadReserves(
938
942
  amm: AMM,
939
- oraclePriceData: OraclePriceData,
943
+ mmOraclePriceData: MMOraclePriceData,
940
944
  now?: BN,
941
945
  isPrediction = false
942
946
  ) {
@@ -1028,13 +1032,43 @@ export function calculateSpreadReserves(
1028
1032
  ).toNumber();
1029
1033
  }
1030
1034
 
1031
- const [longSpread, shortSpread] = calculateSpread(
1035
+ let [longSpread, shortSpread] = calculateSpread(
1032
1036
  amm,
1033
- oraclePriceData,
1037
+ mmOraclePriceData,
1034
1038
  now,
1035
1039
  reservePrice
1036
1040
  );
1037
1041
 
1042
+ const doReferencePricOffsetSmooth =
1043
+ Math.sign(referencePriceOffset) !== Math.sign(amm.referencePriceOffset) &&
1044
+ amm.curveUpdateIntensity > 100;
1045
+
1046
+ if (doReferencePricOffsetSmooth) {
1047
+ if (oraclePriceData.slot !== amm.lastUpdateSlot) {
1048
+ const slotsPassed =
1049
+ oraclePriceData.slot.toNumber() - amm.lastUpdateSlot.toNumber();
1050
+ const fullOffsetDelta = referencePriceOffset - amm.referencePriceOffset;
1051
+ const raw = Math.trunc(
1052
+ Math.min(Math.abs(fullOffsetDelta), slotsPassed * 1000) / 10
1053
+ );
1054
+ const maxAllowed =
1055
+ Math.abs(amm.referencePriceOffset) || Math.abs(referencePriceOffset);
1056
+
1057
+ const magnitude = Math.min(Math.max(raw, 10), maxAllowed);
1058
+ const referencePriceDelta = Math.sign(fullOffsetDelta) * magnitude;
1059
+
1060
+ referencePriceOffset = amm.referencePriceOffset + referencePriceDelta;
1061
+
1062
+ if (referencePriceDelta < 0) {
1063
+ longSpread += Math.abs(referencePriceDelta);
1064
+ shortSpread += Math.abs(referencePriceOffset);
1065
+ } else {
1066
+ shortSpread += Math.abs(referencePriceDelta);
1067
+ longSpread += Math.abs(referencePriceOffset);
1068
+ }
1069
+ }
1070
+ }
1071
+
1038
1072
  const askReserves = calculateSpreadReserve(
1039
1073
  longSpread + referencePriceOffset,
1040
1074
  PositionDirection.LONG,
@@ -1127,7 +1161,7 @@ export function calculateMaxBaseAssetAmountToTrade(
1127
1161
  amm: AMM,
1128
1162
  limit_price: BN,
1129
1163
  direction: PositionDirection,
1130
- oraclePriceData?: OraclePriceData,
1164
+ mmOraclePriceData?: MMOraclePriceData,
1131
1165
  now?: BN,
1132
1166
  isPrediction = false
1133
1167
  ): [BN, PositionDirection] {
@@ -1142,7 +1176,7 @@ export function calculateMaxBaseAssetAmountToTrade(
1142
1176
  const newBaseAssetReserve = squareRootBN(newBaseAssetReserveSquared);
1143
1177
  const [shortSpreadReserves, longSpreadReserves] = calculateSpreadReserves(
1144
1178
  amm,
1145
- oraclePriceData,
1179
+ mmOraclePriceData,
1146
1180
  now,
1147
1181
  isPrediction
1148
1182
  );