@sonarwatch/portfolio-plugins 0.12.37 → 0.12.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. package/CHANGELOG.md +1843 -1839
  2. package/README.md +3 -3
  3. package/package.json +1 -1
  4. package/src/plugins/balancer/helpers/pools.js +21 -21
  5. package/src/plugins/drift/constants.d.ts +1 -0
  6. package/src/plugins/drift/constants.js +2 -1
  7. package/src/plugins/drift/constants.js.map +1 -1
  8. package/src/plugins/drift/depositsFetcher.js +63 -1
  9. package/src/plugins/drift/depositsFetcher.js.map +1 -1
  10. package/src/plugins/drift/filters.d.ts +1 -0
  11. package/src/plugins/drift/filters.js +4 -1
  12. package/src/plugins/drift/filters.js.map +1 -1
  13. package/src/plugins/drift/index.js +2 -1
  14. package/src/plugins/drift/index.js.map +1 -1
  15. package/src/plugins/drift/perpHelpers/amm.d.ts +74 -0
  16. package/src/plugins/drift/perpHelpers/amm.js +567 -0
  17. package/src/plugins/drift/perpHelpers/amm.js.map +1 -0
  18. package/src/plugins/drift/perpHelpers/assert.d.ts +1 -0
  19. package/src/plugins/drift/perpHelpers/assert.js +10 -0
  20. package/src/plugins/drift/perpHelpers/assert.js.map +1 -0
  21. package/src/plugins/drift/perpHelpers/constants.d.ts +27 -0
  22. package/src/plugins/drift/perpHelpers/constants.js +35 -0
  23. package/src/plugins/drift/perpHelpers/constants.js.map +1 -0
  24. package/src/plugins/drift/perpHelpers/convert.d.ts +0 -0
  25. package/src/plugins/drift/perpHelpers/convert.js +2 -0
  26. package/src/plugins/drift/perpHelpers/convert.js.map +1 -0
  27. package/src/plugins/drift/perpHelpers/getOraclePrice.d.ts +4 -0
  28. package/src/plugins/drift/perpHelpers/getOraclePrice.js +61 -0
  29. package/src/plugins/drift/perpHelpers/getOraclePrice.js.map +1 -0
  30. package/src/plugins/drift/perpHelpers/getPerpMarket.d.ts +4 -0
  31. package/src/plugins/drift/perpHelpers/getPerpMarket.js +33 -0
  32. package/src/plugins/drift/perpHelpers/getPerpMarket.js.map +1 -0
  33. package/src/plugins/drift/perpHelpers/margin.d.ts +10 -0
  34. package/src/plugins/drift/perpHelpers/margin.js +82 -0
  35. package/src/plugins/drift/perpHelpers/margin.js.map +1 -0
  36. package/src/plugins/drift/perpHelpers/math.d.ts +4 -0
  37. package/src/plugins/drift/perpHelpers/math.js +29 -0
  38. package/src/plugins/drift/perpHelpers/math.js.map +1 -0
  39. package/src/plugins/drift/perpHelpers/oracle.d.ts +6 -0
  40. package/src/plugins/drift/perpHelpers/oracle.js +54 -0
  41. package/src/plugins/drift/perpHelpers/oracle.js.map +1 -0
  42. package/src/plugins/drift/perpHelpers/orders.d.ts +2 -0
  43. package/src/plugins/drift/perpHelpers/orders.js +9 -0
  44. package/src/plugins/drift/perpHelpers/orders.js.map +1 -0
  45. package/src/plugins/drift/perpHelpers/position.d.ts +44 -0
  46. package/src/plugins/drift/perpHelpers/position.js +184 -0
  47. package/src/plugins/drift/perpHelpers/position.js.map +1 -0
  48. package/src/plugins/drift/perpHelpers/prelaunchOracle.d.ts +3 -0
  49. package/src/plugins/drift/perpHelpers/prelaunchOracle.js +20 -0
  50. package/src/plugins/drift/perpHelpers/prelaunchOracle.js.map +1 -0
  51. package/src/plugins/drift/perpHelpers/pyth.d.ts +5 -0
  52. package/src/plugins/drift/perpHelpers/pyth.js +42 -0
  53. package/src/plugins/drift/perpHelpers/pyth.js.map +1 -0
  54. package/src/plugins/drift/perpHelpers/repeg.d.ts +14 -0
  55. package/src/plugins/drift/perpHelpers/repeg.js +162 -0
  56. package/src/plugins/drift/perpHelpers/repeg.js.map +1 -0
  57. package/src/plugins/drift/perpHelpers/switchboard.d.ts +3 -0
  58. package/src/plugins/drift/perpHelpers/switchboard.js +31 -0
  59. package/src/plugins/drift/perpHelpers/switchboard.js.map +1 -0
  60. package/src/plugins/drift/perpHelpers/types.d.ts +28 -0
  61. package/src/plugins/drift/perpHelpers/types.js +19 -0
  62. package/src/plugins/drift/perpHelpers/types.js.map +1 -0
  63. package/src/plugins/drift/prepMarketsJob.d.ts +3 -0
  64. package/src/plugins/drift/prepMarketsJob.js +38 -0
  65. package/src/plugins/drift/prepMarketsJob.js.map +1 -0
  66. package/src/plugins/drift/struct.d.ts +82 -76
  67. package/src/plugins/drift/struct.js +79 -74
  68. package/src/plugins/drift/struct.js.map +1 -1
  69. package/src/plugins/drift/types.d.ts +1 -0
  70. package/src/plugins/jupiter/exchange/perpetualFetcher.js +3 -6
  71. package/src/plugins/jupiter/exchange/perpetualFetcher.js.map +1 -1
  72. package/src/plugins/jupiter/exchange/valueAverageFetcher.js.map +1 -1
  73. package/src/plugins/jupiter/helpers.d.ts +2 -2
  74. package/src/plugins/jupiter/helpers.js.map +1 -1
  75. package/src/plugins/sushiswap/helpers.js +24 -24
  76. package/src/plugins/uniswap-v2/helpers.js +22 -22
  77. package/src/plugins/zeta/airdropFetcher.js +14 -14
  78. package/src/utils/sei/constants.js +8 -8
  79. package/src/utils/sei/getQueryBalanceByOwner.js +4 -4
@@ -0,0 +1,567 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.calculateReferencePriceOffset = exports.calculateMarketOpenBidAsk = exports.calculateInventoryLiquidityRatio = exports.calculateInventoryScale = exports.calculateEffectiveLeverage = exports.calculatePrice = exports.calculateVolSpreadBN = exports.calculateSpread = exports.calculateSpreadBN = exports.calculateAmmReservesAfterSwap = exports.calculateMaxBaseAssetAmountFillable = exports.calculateQuoteAssetAmountSwapped = exports.calculateMaxBaseAssetAmountToTrade = exports.calculateTerminalPrice = exports.getSwapDirection = exports.calculateSwapOutput = exports.calculateSpreadReserves = exports.calculateOptimalPegAndBudget = exports.calculateUpdatedAMM = exports.calculateUpdatedAMMSpreadReserves = void 0;
7
+ /* eslint-disable no-param-reassign */
8
+ /* eslint-disable @typescript-eslint/naming-convention */
9
+ const bn_js_1 = __importDefault(require("bn.js"));
10
+ const types_1 = require("./types");
11
+ const constants_1 = require("./constants");
12
+ const orders_1 = require("./orders");
13
+ const math_1 = require("./math");
14
+ const assert_1 = require("./assert");
15
+ const oracle_1 = require("./oracle");
16
+ const repeg_1 = require("./repeg");
17
+ function calculateUpdatedAMMSpreadReserves(amm, direction, oraclePriceData) {
18
+ const newAmm = calculateUpdatedAMM(amm, oraclePriceData);
19
+ const [shortReserves, longReserves] = calculateSpreadReserves(newAmm, oraclePriceData);
20
+ const dirReserves = (0, types_1.isVariant)(direction, 'long')
21
+ ? longReserves
22
+ : shortReserves;
23
+ const result = {
24
+ baseAssetReserve: dirReserves.baseAssetReserve,
25
+ quoteAssetReserve: dirReserves.quoteAssetReserve,
26
+ sqrtK: newAmm.sqrtK,
27
+ newPeg: newAmm.pegMultiplier,
28
+ };
29
+ return result;
30
+ }
31
+ exports.calculateUpdatedAMMSpreadReserves = calculateUpdatedAMMSpreadReserves;
32
+ function calculateUpdatedAMM(amm, oraclePriceData) {
33
+ if (amm.curveUpdateIntensity === 0 || oraclePriceData === undefined) {
34
+ return amm;
35
+ }
36
+ const newAmm = Object.assign({}, amm);
37
+ const [prepegCost, pKNumer, pKDenom, newPeg] = calculateNewAmm(amm, oraclePriceData);
38
+ newAmm.baseAssetReserve = newAmm.baseAssetReserve.mul(pKNumer).div(pKDenom);
39
+ newAmm.sqrtK = newAmm.sqrtK.mul(pKNumer).div(pKDenom);
40
+ const invariant = newAmm.sqrtK.mul(newAmm.sqrtK);
41
+ newAmm.quoteAssetReserve = invariant.div(newAmm.baseAssetReserve);
42
+ newAmm.pegMultiplier = newPeg;
43
+ const directionToClose = amm.baseAssetAmountWithAmm.gt(constants_1.ZERO)
44
+ ? types_1.PositionDirection.SHORT
45
+ : types_1.PositionDirection.LONG;
46
+ const [newQuoteAssetReserve] = calculateAmmReservesAfterSwap(newAmm, 'base', amm.baseAssetAmountWithAmm.abs(), getSwapDirection('base', directionToClose));
47
+ newAmm.terminalQuoteAssetReserve = newQuoteAssetReserve;
48
+ newAmm.totalFeeMinusDistributions =
49
+ newAmm.totalFeeMinusDistributions.sub(prepegCost);
50
+ newAmm.netRevenueSinceLastFunding =
51
+ newAmm.netRevenueSinceLastFunding.sub(prepegCost);
52
+ return newAmm;
53
+ }
54
+ exports.calculateUpdatedAMM = calculateUpdatedAMM;
55
+ function calculateNewAmm(amm, oraclePriceData) {
56
+ let pKNumer = new bn_js_1.default(1);
57
+ let pKDenom = new bn_js_1.default(1);
58
+ const [targetPrice, _newPeg, budget] = calculateOptimalPegAndBudget(amm, oraclePriceData);
59
+ let prePegCost = (0, repeg_1.calculateRepegCost)(amm, _newPeg);
60
+ let newPeg = _newPeg;
61
+ if (prePegCost.gte(budget) && prePegCost.gt(constants_1.ZERO)) {
62
+ [pKNumer, pKDenom] = [new bn_js_1.default(999), new bn_js_1.default(1000)];
63
+ const deficitMadeup = (0, repeg_1.calculateAdjustKCost)(amm, pKNumer, pKDenom);
64
+ (0, assert_1.assert)(deficitMadeup.lte(new bn_js_1.default(0)));
65
+ prePegCost = budget.add(deficitMadeup.abs());
66
+ const newAmm = Object.assign({}, amm);
67
+ newAmm.baseAssetReserve = newAmm.baseAssetReserve.mul(pKNumer).div(pKDenom);
68
+ newAmm.sqrtK = newAmm.sqrtK.mul(pKNumer).div(pKDenom);
69
+ const invariant = newAmm.sqrtK.mul(newAmm.sqrtK);
70
+ newAmm.quoteAssetReserve = invariant.div(newAmm.baseAssetReserve);
71
+ const directionToClose = amm.baseAssetAmountWithAmm.gt(constants_1.ZERO)
72
+ ? types_1.PositionDirection.SHORT
73
+ : types_1.PositionDirection.LONG;
74
+ const [newQuoteAssetReserve] = calculateAmmReservesAfterSwap(newAmm, 'base', amm.baseAssetAmountWithAmm.abs(), getSwapDirection('base', directionToClose));
75
+ newAmm.terminalQuoteAssetReserve = newQuoteAssetReserve;
76
+ newPeg = (0, repeg_1.calculateBudgetedPeg)(newAmm, prePegCost, targetPrice);
77
+ prePegCost = (0, repeg_1.calculateRepegCost)(newAmm, newPeg);
78
+ }
79
+ return [prePegCost, pKNumer, pKDenom, newPeg];
80
+ }
81
+ function calculateOptimalPegAndBudget(amm, oraclePriceData) {
82
+ const reservePriceBefore = calculatePrice(amm.baseAssetReserve, amm.quoteAssetReserve, amm.pegMultiplier);
83
+ const targetPrice = oraclePriceData.price;
84
+ const newPeg = calculatePegFromTargetPrice(targetPrice, amm.baseAssetReserve, amm.quoteAssetReserve);
85
+ const prePegCost = (0, repeg_1.calculateRepegCost)(amm, newPeg);
86
+ const totalFeeLB = amm.totalExchangeFee.div(new bn_js_1.default(2));
87
+ const budget = bn_js_1.default.max(constants_1.ZERO, amm.totalFeeMinusDistributions.sub(totalFeeLB));
88
+ let checkLowerBound = true;
89
+ if (budget.lt(prePegCost)) {
90
+ const halfMaxPriceSpread = new bn_js_1.default(amm.maxSpread)
91
+ .div(new bn_js_1.default(2))
92
+ .mul(targetPrice)
93
+ .div(constants_1.BID_ASK_SPREAD_PRECISION);
94
+ let newTargetPrice;
95
+ let newOptimalPeg;
96
+ let newBudget;
97
+ const targetPriceGap = reservePriceBefore.sub(targetPrice);
98
+ if (targetPriceGap.abs().gt(halfMaxPriceSpread)) {
99
+ const markAdj = targetPriceGap.abs().sub(halfMaxPriceSpread);
100
+ if (targetPriceGap.lt(new bn_js_1.default(0))) {
101
+ newTargetPrice = reservePriceBefore.add(markAdj);
102
+ }
103
+ else {
104
+ newTargetPrice = reservePriceBefore.sub(markAdj);
105
+ }
106
+ newOptimalPeg = calculatePegFromTargetPrice(newTargetPrice, amm.baseAssetReserve, amm.quoteAssetReserve);
107
+ newBudget = (0, repeg_1.calculateRepegCost)(amm, newOptimalPeg);
108
+ checkLowerBound = false;
109
+ return [newTargetPrice, newOptimalPeg, newBudget, false];
110
+ }
111
+ if (amm.totalFeeMinusDistributions.lt(amm.totalExchangeFee.div(new bn_js_1.default(2)))) {
112
+ checkLowerBound = false;
113
+ }
114
+ }
115
+ return [targetPrice, newPeg, budget, checkLowerBound];
116
+ }
117
+ exports.calculateOptimalPegAndBudget = calculateOptimalPegAndBudget;
118
+ function calculateSpreadReserves(amm, oraclePriceData, now) {
119
+ function calculateSpreadReserve(spread, direction,
120
+ // eslint-disable-next-line @typescript-eslint/no-shadow
121
+ amm) {
122
+ if (spread === 0) {
123
+ return {
124
+ baseAssetReserve: amm.baseAssetReserve,
125
+ quoteAssetReserve: amm.quoteAssetReserve,
126
+ };
127
+ }
128
+ let spreadFraction = new bn_js_1.default(spread / 2);
129
+ // make non-zero
130
+ if (spreadFraction.eq(constants_1.ZERO)) {
131
+ spreadFraction = spread >= 0 ? new bn_js_1.default(1) : new bn_js_1.default(-1);
132
+ }
133
+ const quoteAssetReserveDelta = amm.quoteAssetReserve.div(constants_1.BID_ASK_SPREAD_PRECISION.div(spreadFraction));
134
+ let quoteAssetReserve;
135
+ if (quoteAssetReserveDelta.gte(constants_1.ZERO)) {
136
+ quoteAssetReserve = amm.quoteAssetReserve.add(quoteAssetReserveDelta.abs());
137
+ }
138
+ else {
139
+ quoteAssetReserve = amm.quoteAssetReserve.sub(quoteAssetReserveDelta.abs());
140
+ }
141
+ const baseAssetReserve = amm.sqrtK.mul(amm.sqrtK).div(quoteAssetReserve);
142
+ return {
143
+ baseAssetReserve,
144
+ quoteAssetReserve,
145
+ };
146
+ }
147
+ const reservePrice = calculatePrice(amm.baseAssetReserve, amm.quoteAssetReserve, amm.pegMultiplier);
148
+ // always allow 10 bps of price offset, up to a fifth of the market's max_spread
149
+ let maxOffset = 0;
150
+ let referencePriceOffset = constants_1.ZERO;
151
+ if (amm.curveUpdateIntensity > 100) {
152
+ maxOffset = Math.max(amm.maxSpread / 5, (constants_1.PERCENTAGE_PRECISION.toNumber() / 10000) *
153
+ (amm.curveUpdateIntensity - 100));
154
+ const liquidityFraction = calculateInventoryLiquidityRatio(amm.baseAssetAmountWithAmm, amm.baseAssetReserve, amm.minBaseAssetReserve, amm.maxBaseAssetReserve);
155
+ const liquidityFractionSigned = liquidityFraction.mul((0, math_1.sigNum)(amm.baseAssetAmountWithAmm.add(amm.baseAssetAmountWithUnsettledLp)));
156
+ referencePriceOffset = calculateReferencePriceOffset(reservePrice, amm.last24HAvgFundingRate, liquidityFractionSigned, new bn_js_1.default(amm.historicalOracleData.lastOraclePriceTwap5Min.toString(10), 10), amm.lastMarkPriceTwap5Min, new bn_js_1.default(amm.historicalOracleData.lastOraclePriceTwap.toString(10), 10), amm.lastMarkPriceTwap, maxOffset);
157
+ }
158
+ const [longSpread, shortSpread] = calculateSpread(amm, oraclePriceData, now, reservePrice);
159
+ const askReserves = calculateSpreadReserve(longSpread + referencePriceOffset.toNumber(), types_1.PositionDirection.LONG, amm);
160
+ const bidReserves = calculateSpreadReserve(-shortSpread + referencePriceOffset.toNumber(), types_1.PositionDirection.SHORT, amm);
161
+ return [bidReserves, askReserves];
162
+ }
163
+ exports.calculateSpreadReserves = calculateSpreadReserves;
164
+ /**
165
+ * Helper function calculating constant product curve output. Agnostic to whether input asset is quote or base
166
+ *
167
+ * @param inputAssetReserve
168
+ * @param swapAmount
169
+ * @param swapDirection
170
+ * @param invariant
171
+ * @returns newInputAssetReserve and newOutputAssetReserve after swap. : Precision AMM_RESERVE_PRECISION
172
+ */
173
+ function calculateSwapOutput(inputAssetReserve, swapAmount, swapDirection, invariant) {
174
+ let newInputAssetReserve;
175
+ if (swapDirection === types_1.SwapDirection.ADD) {
176
+ newInputAssetReserve = inputAssetReserve.add(swapAmount);
177
+ }
178
+ else {
179
+ newInputAssetReserve = inputAssetReserve.sub(swapAmount);
180
+ }
181
+ const newOutputAssetReserve = invariant.div(newInputAssetReserve);
182
+ return [newInputAssetReserve, newOutputAssetReserve];
183
+ }
184
+ exports.calculateSwapOutput = calculateSwapOutput;
185
+ /**
186
+ * Translate long/shorting quote/base asset into amm operation
187
+ *
188
+ * @param inputAssetType
189
+ * @param positionDirection
190
+ */
191
+ function getSwapDirection(inputAssetType, positionDirection) {
192
+ if ((0, types_1.isVariant)(positionDirection, 'long') && inputAssetType === 'base') {
193
+ return types_1.SwapDirection.REMOVE;
194
+ }
195
+ if ((0, types_1.isVariant)(positionDirection, 'short') && inputAssetType === 'quote') {
196
+ return types_1.SwapDirection.REMOVE;
197
+ }
198
+ return types_1.SwapDirection.ADD;
199
+ }
200
+ exports.getSwapDirection = getSwapDirection;
201
+ /**
202
+ * Helper function calculating terminal price of amm
203
+ *
204
+ * @param market
205
+ * @returns cost : Precision PRICE_PRECISION
206
+ */
207
+ function calculateTerminalPrice(market) {
208
+ const directionToClose = market.amm.baseAssetAmountWithAmm.gt(constants_1.ZERO)
209
+ ? types_1.PositionDirection.SHORT
210
+ : types_1.PositionDirection.LONG;
211
+ const [newQuoteAssetReserve, newBaseAssetReserve] = calculateAmmReservesAfterSwap(market.amm, 'base', market.amm.baseAssetAmountWithAmm.abs(), getSwapDirection('base', directionToClose));
212
+ const terminalPrice = newQuoteAssetReserve
213
+ .mul(constants_1.PRICE_PRECISION)
214
+ .mul(market.amm.pegMultiplier)
215
+ .div(constants_1.PEG_PRECISION)
216
+ .div(newBaseAssetReserve);
217
+ return terminalPrice;
218
+ }
219
+ exports.calculateTerminalPrice = calculateTerminalPrice;
220
+ function calculateMaxBaseAssetAmountToTrade(amm, limit_price, direction, oraclePriceData, now) {
221
+ const invariant = amm.sqrtK.mul(amm.sqrtK);
222
+ const newBaseAssetReserveSquared = invariant
223
+ .mul(constants_1.PRICE_PRECISION)
224
+ .mul(amm.pegMultiplier)
225
+ .div(limit_price)
226
+ .div(constants_1.PEG_PRECISION);
227
+ const newBaseAssetReserve = (0, math_1.squareRootBN)(newBaseAssetReserveSquared);
228
+ const [shortSpreadReserves, longSpreadReserves] = calculateSpreadReserves(amm, oraclePriceData, now);
229
+ const baseAssetReserveBefore = (0, types_1.isVariant)(direction, 'long')
230
+ ? longSpreadReserves.baseAssetReserve
231
+ : shortSpreadReserves.baseAssetReserve;
232
+ if (newBaseAssetReserve.gt(baseAssetReserveBefore)) {
233
+ return [
234
+ newBaseAssetReserve.sub(baseAssetReserveBefore),
235
+ types_1.PositionDirection.SHORT,
236
+ ];
237
+ }
238
+ if (newBaseAssetReserve.lt(baseAssetReserveBefore)) {
239
+ return [
240
+ baseAssetReserveBefore.sub(newBaseAssetReserve),
241
+ types_1.PositionDirection.LONG,
242
+ ];
243
+ }
244
+ return [new bn_js_1.default(0), types_1.PositionDirection.LONG];
245
+ }
246
+ exports.calculateMaxBaseAssetAmountToTrade = calculateMaxBaseAssetAmountToTrade;
247
+ function calculateQuoteAssetAmountSwapped(quoteAssetReserves, pegMultiplier, swapDirection) {
248
+ if ((0, types_1.isVariant)(swapDirection, 'remove')) {
249
+ quoteAssetReserves = quoteAssetReserves.add(constants_1.ONE);
250
+ }
251
+ let quoteAssetAmount = quoteAssetReserves
252
+ .mul(pegMultiplier)
253
+ .div(constants_1.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO);
254
+ if ((0, types_1.isVariant)(swapDirection, 'remove')) {
255
+ quoteAssetAmount = quoteAssetAmount.add(constants_1.ONE);
256
+ }
257
+ return quoteAssetAmount;
258
+ }
259
+ exports.calculateQuoteAssetAmountSwapped = calculateQuoteAssetAmountSwapped;
260
+ function calculateMaxBaseAssetAmountFillable(amm, orderDirection) {
261
+ const maxFillSize = amm.baseAssetReserve.div(new bn_js_1.default(amm.maxFillReserveFraction));
262
+ let maxBaseAssetAmountOnSide;
263
+ if ((0, types_1.isVariant)(orderDirection, 'long')) {
264
+ maxBaseAssetAmountOnSide = bn_js_1.default.max(constants_1.ZERO, amm.baseAssetReserve.sub(amm.minBaseAssetReserve));
265
+ }
266
+ else {
267
+ maxBaseAssetAmountOnSide = bn_js_1.default.max(constants_1.ZERO, amm.maxBaseAssetReserve.sub(amm.baseAssetReserve));
268
+ }
269
+ return (0, orders_1.standardizeBaseAssetAmount)(bn_js_1.default.min(maxFillSize, maxBaseAssetAmountOnSide), amm.orderStepSize);
270
+ }
271
+ exports.calculateMaxBaseAssetAmountFillable = calculateMaxBaseAssetAmountFillable;
272
+ function calculateAmmReservesAfterSwap(amm, inputAssetType, swapAmount, swapDirection) {
273
+ (0, assert_1.assert)(swapAmount.gte(constants_1.ZERO), 'swapAmount must be greater than 0');
274
+ let newQuoteAssetReserve;
275
+ let newBaseAssetReserve;
276
+ if (inputAssetType === 'quote') {
277
+ swapAmount = swapAmount
278
+ .mul(constants_1.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO)
279
+ .div(amm.pegMultiplier);
280
+ [newQuoteAssetReserve, newBaseAssetReserve] = calculateSwapOutput(amm.quoteAssetReserve, swapAmount, swapDirection, amm.sqrtK.mul(amm.sqrtK));
281
+ }
282
+ else {
283
+ [newBaseAssetReserve, newQuoteAssetReserve] = calculateSwapOutput(amm.baseAssetReserve, swapAmount, swapDirection, amm.sqrtK.mul(amm.sqrtK));
284
+ }
285
+ return [newQuoteAssetReserve, newBaseAssetReserve];
286
+ }
287
+ exports.calculateAmmReservesAfterSwap = calculateAmmReservesAfterSwap;
288
+ function calculateSpreadBN(baseSpread, lastOracleReservePriceSpreadPct, lastOracleConfPct, maxSpread, quoteAssetReserve, terminalQuoteAssetReserve, pegMultiplier, baseAssetAmountWithAmm, reservePrice, totalFeeMinusDistributions, netRevenueSinceLastFunding, baseAssetReserve, minBaseAssetReserve, maxBaseAssetReserve, markStd, oracleStd, longIntensity, shortIntensity, volume24H, returnTerms = false) {
289
+ (0, assert_1.assert)(Number.isInteger(baseSpread));
290
+ (0, assert_1.assert)(Number.isInteger(maxSpread));
291
+ const spreadTerms = {
292
+ longVolSpread: 0,
293
+ shortVolSpread: 0,
294
+ longSpreadwPS: 0,
295
+ shortSpreadwPS: 0,
296
+ maxTargetSpread: 0,
297
+ inventorySpreadScale: 0,
298
+ longSpreadwInvScale: 0,
299
+ shortSpreadwInvScale: 0,
300
+ effectiveLeverage: 0,
301
+ effectiveLeverageCapped: 0,
302
+ longSpreadwEL: 0,
303
+ shortSpreadwEL: 0,
304
+ revenueRetreatAmount: 0,
305
+ halfRevenueRetreatAmount: 0,
306
+ longSpreadwRevRetreat: 0,
307
+ shortSpreadwRevRetreat: 0,
308
+ longSpreadwOffsetShrink: 0,
309
+ shortSpreadwOffsetShrink: 0,
310
+ totalSpread: 0,
311
+ longSpread: 0,
312
+ shortSpread: 0,
313
+ };
314
+ const [longVolSpread, shortVolSpread] = calculateVolSpreadBN(lastOracleConfPct, reservePrice, markStd, oracleStd, longIntensity, shortIntensity, volume24H);
315
+ spreadTerms.longVolSpread = longVolSpread.toNumber();
316
+ spreadTerms.shortVolSpread = shortVolSpread.toNumber();
317
+ let longSpread = Math.max(baseSpread / 2, longVolSpread.toNumber());
318
+ let shortSpread = Math.max(baseSpread / 2, shortVolSpread.toNumber());
319
+ if (lastOracleReservePriceSpreadPct.gt(constants_1.ZERO)) {
320
+ shortSpread = Math.max(shortSpread, lastOracleReservePriceSpreadPct.abs().toNumber() +
321
+ shortVolSpread.toNumber());
322
+ }
323
+ else if (lastOracleReservePriceSpreadPct.lt(constants_1.ZERO)) {
324
+ longSpread = Math.max(longSpread, lastOracleReservePriceSpreadPct.abs().toNumber() +
325
+ longVolSpread.toNumber());
326
+ }
327
+ spreadTerms.longSpreadwPS = longSpread;
328
+ spreadTerms.shortSpreadwPS = shortSpread;
329
+ const maxSpreadBaseline = Math.min(Math.max(lastOracleReservePriceSpreadPct.abs().toNumber(), lastOracleConfPct.muln(2).toNumber(), bn_js_1.default.max(markStd, oracleStd)
330
+ .mul(constants_1.PERCENTAGE_PRECISION)
331
+ .div(reservePrice)
332
+ .toNumber()), constants_1.BID_ASK_SPREAD_PRECISION.toNumber());
333
+ const maxTargetSpread = Math.floor(Math.max(maxSpread, maxSpreadBaseline));
334
+ const inventorySpreadScale = calculateInventoryScale(baseAssetAmountWithAmm, baseAssetReserve, minBaseAssetReserve, maxBaseAssetReserve, baseAssetAmountWithAmm.gt(constants_1.ZERO) ? longSpread : shortSpread, maxTargetSpread);
335
+ if (baseAssetAmountWithAmm.gt(constants_1.ZERO)) {
336
+ longSpread *= inventorySpreadScale;
337
+ }
338
+ else if (baseAssetAmountWithAmm.lt(constants_1.ZERO)) {
339
+ shortSpread *= inventorySpreadScale;
340
+ }
341
+ spreadTerms.maxTargetSpread = maxTargetSpread;
342
+ spreadTerms.inventorySpreadScale = inventorySpreadScale;
343
+ spreadTerms.longSpreadwInvScale = longSpread;
344
+ spreadTerms.shortSpreadwInvScale = shortSpread;
345
+ const MAX_SPREAD_SCALE = 10;
346
+ if (totalFeeMinusDistributions.gt(constants_1.ZERO)) {
347
+ const effectiveLeverage = calculateEffectiveLeverage(baseSpread, quoteAssetReserve, terminalQuoteAssetReserve, pegMultiplier, baseAssetAmountWithAmm, reservePrice, totalFeeMinusDistributions);
348
+ spreadTerms.effectiveLeverage = effectiveLeverage;
349
+ const spreadScale = Math.min(MAX_SPREAD_SCALE, 1 + effectiveLeverage);
350
+ spreadTerms.effectiveLeverageCapped = spreadScale;
351
+ if (baseAssetAmountWithAmm.gt(constants_1.ZERO)) {
352
+ longSpread *= spreadScale;
353
+ longSpread = Math.floor(longSpread);
354
+ }
355
+ else {
356
+ shortSpread *= spreadScale;
357
+ shortSpread = Math.floor(shortSpread);
358
+ }
359
+ }
360
+ else {
361
+ longSpread *= MAX_SPREAD_SCALE;
362
+ shortSpread *= MAX_SPREAD_SCALE;
363
+ }
364
+ spreadTerms.longSpreadwEL = longSpread;
365
+ spreadTerms.shortSpreadwEL = shortSpread;
366
+ if (netRevenueSinceLastFunding.lt(constants_1.DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT)) {
367
+ const maxRetreat = maxTargetSpread / 10;
368
+ let revenueRetreatAmount = maxRetreat;
369
+ if (netRevenueSinceLastFunding.gte(constants_1.DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT.mul(new bn_js_1.default(1000)))) {
370
+ revenueRetreatAmount = Math.min(maxRetreat, Math.floor((baseSpread * netRevenueSinceLastFunding.abs().toNumber()) /
371
+ constants_1.DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT.abs().toNumber()));
372
+ }
373
+ const halfRevenueRetreatAmount = Math.floor(revenueRetreatAmount / 2);
374
+ spreadTerms.revenueRetreatAmount = revenueRetreatAmount;
375
+ spreadTerms.halfRevenueRetreatAmount = halfRevenueRetreatAmount;
376
+ if (baseAssetAmountWithAmm.gt(constants_1.ZERO)) {
377
+ longSpread += revenueRetreatAmount;
378
+ shortSpread += halfRevenueRetreatAmount;
379
+ }
380
+ else if (baseAssetAmountWithAmm.lt(constants_1.ZERO)) {
381
+ longSpread += halfRevenueRetreatAmount;
382
+ shortSpread += revenueRetreatAmount;
383
+ }
384
+ else {
385
+ longSpread += halfRevenueRetreatAmount;
386
+ shortSpread += halfRevenueRetreatAmount;
387
+ }
388
+ }
389
+ spreadTerms.longSpreadwRevRetreat = longSpread;
390
+ spreadTerms.shortSpreadwRevRetreat = shortSpread;
391
+ const totalSpread = longSpread + shortSpread;
392
+ if (totalSpread > maxTargetSpread) {
393
+ if (longSpread > shortSpread) {
394
+ longSpread = Math.ceil((longSpread * maxTargetSpread) / totalSpread);
395
+ shortSpread = Math.floor(maxTargetSpread - longSpread);
396
+ }
397
+ else {
398
+ shortSpread = Math.ceil((shortSpread * maxTargetSpread) / totalSpread);
399
+ longSpread = Math.floor(maxTargetSpread - shortSpread);
400
+ }
401
+ }
402
+ spreadTerms.totalSpread = totalSpread;
403
+ spreadTerms.longSpread = longSpread;
404
+ spreadTerms.shortSpread = shortSpread;
405
+ if (returnTerms) {
406
+ return spreadTerms;
407
+ }
408
+ return [longSpread, shortSpread];
409
+ }
410
+ exports.calculateSpreadBN = calculateSpreadBN;
411
+ function calculateSpread(amm, oraclePriceData, now, reservePrice) {
412
+ if (amm.baseSpread === 0 || amm.curveUpdateIntensity === 0) {
413
+ return [amm.baseSpread / 2, amm.baseSpread / 2];
414
+ }
415
+ if (!reservePrice) {
416
+ reservePrice = calculatePrice(amm.baseAssetReserve, amm.quoteAssetReserve, amm.pegMultiplier);
417
+ }
418
+ const targetPrice = (oraclePriceData === null || oraclePriceData === void 0 ? void 0 : oraclePriceData.price) || reservePrice;
419
+ const targetMarkSpreadPct = reservePrice
420
+ .sub(targetPrice)
421
+ .mul(constants_1.BID_ASK_SPREAD_PRECISION)
422
+ .div(reservePrice);
423
+ now = now || new bn_js_1.default(new Date().getTime() / 1000); // todo
424
+ const liveOracleStd = (0, oracle_1.calculateLiveOracleStd)(amm, oraclePriceData, now);
425
+ const confIntervalPct = (0, oracle_1.getNewOracleConfPct)(amm, oraclePriceData, reservePrice, now);
426
+ const spreads = calculateSpreadBN(amm.baseSpread, targetMarkSpreadPct, confIntervalPct, amm.maxSpread, amm.quoteAssetReserve, amm.terminalQuoteAssetReserve, amm.pegMultiplier, amm.baseAssetAmountWithAmm, reservePrice, amm.totalFeeMinusDistributions, amm.netRevenueSinceLastFunding, amm.baseAssetReserve, amm.minBaseAssetReserve, amm.maxBaseAssetReserve, amm.markStd, liveOracleStd, amm.longIntensityVolume, amm.shortIntensityVolume, amm.volume24H);
427
+ if (!Array.isArray(spreads))
428
+ return [0, 0];
429
+ const longSpread = spreads[0];
430
+ const shortSpread = spreads[1];
431
+ return [longSpread, shortSpread];
432
+ }
433
+ exports.calculateSpread = calculateSpread;
434
+ function calculateVolSpreadBN(lastOracleConfPct, reservePrice, markStd, oracleStd, longIntensity, shortIntensity, volume24H) {
435
+ const marketAvgStdPct = markStd
436
+ .add(oracleStd)
437
+ .mul(constants_1.PERCENTAGE_PRECISION)
438
+ .div(reservePrice)
439
+ .div(new bn_js_1.default(2));
440
+ const volSpread = bn_js_1.default.max(lastOracleConfPct, marketAvgStdPct.div(new bn_js_1.default(2)));
441
+ const clampMin = constants_1.PERCENTAGE_PRECISION.div(new bn_js_1.default(100));
442
+ const clampMax = constants_1.PERCENTAGE_PRECISION.mul(new bn_js_1.default(16)).div(new bn_js_1.default(10));
443
+ const longVolSpreadFactor = (0, math_1.clampBN)(longIntensity.mul(constants_1.PERCENTAGE_PRECISION).div(bn_js_1.default.max(constants_1.ONE, volume24H)), clampMin, clampMax);
444
+ const shortVolSpreadFactor = (0, math_1.clampBN)(shortIntensity.mul(constants_1.PERCENTAGE_PRECISION).div(bn_js_1.default.max(constants_1.ONE, volume24H)), clampMin, clampMax);
445
+ // only consider confidence interval at full value when above 25 bps
446
+ let confComponent = lastOracleConfPct;
447
+ if (lastOracleConfPct.lte(constants_1.PRICE_PRECISION.div(new bn_js_1.default(400)))) {
448
+ confComponent = lastOracleConfPct.div(new bn_js_1.default(10));
449
+ }
450
+ const longVolSpread = bn_js_1.default.max(confComponent, volSpread.mul(longVolSpreadFactor).div(constants_1.PERCENTAGE_PRECISION));
451
+ const shortVolSpread = bn_js_1.default.max(confComponent, volSpread.mul(shortVolSpreadFactor).div(constants_1.PERCENTAGE_PRECISION));
452
+ return [longVolSpread, shortVolSpread];
453
+ }
454
+ exports.calculateVolSpreadBN = calculateVolSpreadBN;
455
+ function calculatePrice(baseAssetReserves, quoteAssetReserves, pegMultiplier) {
456
+ if (baseAssetReserves.abs().lte(constants_1.ZERO)) {
457
+ return new bn_js_1.default(0);
458
+ }
459
+ return quoteAssetReserves
460
+ .mul(constants_1.PRICE_PRECISION)
461
+ .mul(pegMultiplier)
462
+ .div(constants_1.PEG_PRECISION)
463
+ .div(baseAssetReserves);
464
+ }
465
+ exports.calculatePrice = calculatePrice;
466
+ function calculateEffectiveLeverage(baseSpread, quoteAssetReserve, terminalQuoteAssetReserve, pegMultiplier, netBaseAssetAmount, reservePrice, totalFeeMinusDistributions) {
467
+ // vAMM skew
468
+ const netBaseAssetValue = quoteAssetReserve
469
+ .sub(terminalQuoteAssetReserve)
470
+ .mul(pegMultiplier)
471
+ .div(constants_1.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO);
472
+ const localBaseAssetValue = netBaseAssetAmount
473
+ .mul(reservePrice)
474
+ .div(constants_1.AMM_TO_QUOTE_PRECISION_RATIO.mul(constants_1.PRICE_PRECISION));
475
+ const effectiveGap = Math.max(0, localBaseAssetValue.sub(netBaseAssetValue).toNumber());
476
+ const effectiveLeverage = effectiveGap / (Math.max(0, totalFeeMinusDistributions.toNumber()) + 1) +
477
+ 1 / constants_1.QUOTE_PRECISION.toNumber();
478
+ return effectiveLeverage;
479
+ }
480
+ exports.calculateEffectiveLeverage = calculateEffectiveLeverage;
481
+ function calculateInventoryScale(baseAssetAmountWithAmm, baseAssetReserve, minBaseAssetReserve, maxBaseAssetReserve, directionalSpread, maxSpread) {
482
+ if (baseAssetAmountWithAmm.eq(constants_1.ZERO)) {
483
+ return 1;
484
+ }
485
+ const MAX_BID_ASK_INVENTORY_SKEW_FACTOR = constants_1.BID_ASK_SPREAD_PRECISION.mul(new bn_js_1.default(10));
486
+ const inventoryScaleBN = calculateInventoryLiquidityRatio(baseAssetAmountWithAmm, baseAssetReserve, minBaseAssetReserve, maxBaseAssetReserve);
487
+ const inventoryScaleMaxBN = bn_js_1.default.max(MAX_BID_ASK_INVENTORY_SKEW_FACTOR, new bn_js_1.default(maxSpread)
488
+ .mul(constants_1.BID_ASK_SPREAD_PRECISION)
489
+ .div(new bn_js_1.default(Math.max(directionalSpread, 1))));
490
+ const inventoryScaleCapped = bn_js_1.default.min(inventoryScaleMaxBN, constants_1.BID_ASK_SPREAD_PRECISION.add(inventoryScaleMaxBN.mul(inventoryScaleBN).div(constants_1.PERCENTAGE_PRECISION))).toNumber() / constants_1.BID_ASK_SPREAD_PRECISION.toNumber();
491
+ return inventoryScaleCapped;
492
+ }
493
+ exports.calculateInventoryScale = calculateInventoryScale;
494
+ function calculateInventoryLiquidityRatio(baseAssetAmountWithAmm, baseAssetReserve, minBaseAssetReserve, maxBaseAssetReserve) {
495
+ // inventory skew
496
+ const [openBids, openAsks] = calculateMarketOpenBidAsk(baseAssetReserve, minBaseAssetReserve, maxBaseAssetReserve);
497
+ const minSideLiquidity = bn_js_1.default.min(openBids.abs(), openAsks.abs());
498
+ const inventoryScaleBN = bn_js_1.default.min(baseAssetAmountWithAmm
499
+ .mul(constants_1.PERCENTAGE_PRECISION)
500
+ .div(bn_js_1.default.max(minSideLiquidity, constants_1.ONE))
501
+ .abs(), constants_1.PERCENTAGE_PRECISION);
502
+ return inventoryScaleBN;
503
+ }
504
+ exports.calculateInventoryLiquidityRatio = calculateInventoryLiquidityRatio;
505
+ function calculateMarketOpenBidAsk(baseAssetReserve, minBaseAssetReserve, maxBaseAssetReserve, stepSize) {
506
+ // open orders
507
+ let openAsks;
508
+ if (minBaseAssetReserve.lt(baseAssetReserve)) {
509
+ openAsks = baseAssetReserve.sub(minBaseAssetReserve).mul(new bn_js_1.default(-1));
510
+ if (stepSize && openAsks.abs().div(constants_1.TWO).lt(stepSize)) {
511
+ openAsks = constants_1.ZERO;
512
+ }
513
+ }
514
+ else {
515
+ openAsks = constants_1.ZERO;
516
+ }
517
+ let openBids;
518
+ if (maxBaseAssetReserve.gt(baseAssetReserve)) {
519
+ openBids = maxBaseAssetReserve.sub(baseAssetReserve);
520
+ if (stepSize && openBids.div(constants_1.TWO).lt(stepSize)) {
521
+ openBids = constants_1.ZERO;
522
+ }
523
+ }
524
+ else {
525
+ openBids = constants_1.ZERO;
526
+ }
527
+ return [openBids, openAsks];
528
+ }
529
+ exports.calculateMarketOpenBidAsk = calculateMarketOpenBidAsk;
530
+ function calculateReferencePriceOffset(reservePrice, last24hAvgFundingRate, liquidityFraction, oracleTwapFast, markTwapFast, oracleTwapSlow, markTwapSlow, maxOffsetPct) {
531
+ if (last24hAvgFundingRate.eq(constants_1.ZERO)) {
532
+ return constants_1.ZERO;
533
+ }
534
+ const maxOffsetInPrice = new bn_js_1.default(maxOffsetPct)
535
+ .mul(reservePrice)
536
+ .div(constants_1.PERCENTAGE_PRECISION);
537
+ // Calculate quote denominated market premium
538
+ const markPremiumMinute = (0, math_1.clampBN)(markTwapFast.sub(oracleTwapFast), maxOffsetInPrice.mul(new bn_js_1.default(-1)), maxOffsetInPrice);
539
+ const markPremiumHour = (0, math_1.clampBN)(markTwapSlow.sub(oracleTwapSlow), maxOffsetInPrice.mul(new bn_js_1.default(-1)), maxOffsetInPrice);
540
+ // Convert last24hAvgFundingRate to quote denominated premium
541
+ const markPremiumDay = (0, math_1.clampBN)(last24hAvgFundingRate.div(constants_1.FUNDING_RATE_BUFFER_PRECISION).mul(new bn_js_1.default(24)), maxOffsetInPrice.mul(new bn_js_1.default(-1)), maxOffsetInPrice);
542
+ // Take average clamped premium as the price-based offset
543
+ const markPremiumAvg = markPremiumMinute
544
+ .add(markPremiumHour)
545
+ .add(markPremiumDay)
546
+ .div(new bn_js_1.default(3));
547
+ const markPremiumAvgPct = markPremiumAvg
548
+ .mul(constants_1.PRICE_PRECISION)
549
+ .div(reservePrice);
550
+ const inventoryPct = (0, math_1.clampBN)(liquidityFraction.mul(new bn_js_1.default(maxOffsetPct)).div(constants_1.PERCENTAGE_PRECISION), maxOffsetInPrice.mul(new bn_js_1.default(-1)), maxOffsetInPrice);
551
+ // Only apply when inventory is consistent with recent and 24h market premium
552
+ let offsetPct = markPremiumAvgPct.add(inventoryPct);
553
+ if (!(0, math_1.sigNum)(inventoryPct).eq((0, math_1.sigNum)(markPremiumAvgPct))) {
554
+ offsetPct = constants_1.ZERO;
555
+ }
556
+ const clampedOffsetPct = (0, math_1.clampBN)(offsetPct, new bn_js_1.default(-maxOffsetPct), new bn_js_1.default(maxOffsetPct));
557
+ return clampedOffsetPct;
558
+ }
559
+ exports.calculateReferencePriceOffset = calculateReferencePriceOffset;
560
+ function calculatePegFromTargetPrice(targetPrice, baseAssetReserve, quoteAssetReserve) {
561
+ return bn_js_1.default.max(targetPrice
562
+ .mul(baseAssetReserve)
563
+ .div(quoteAssetReserve)
564
+ .add(constants_1.PRICE_DIV_PEG.div(new bn_js_1.default(2)))
565
+ .div(constants_1.PRICE_DIV_PEG), constants_1.ONE);
566
+ }
567
+ //# sourceMappingURL=amm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amm.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/amm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function assert(condition: boolean, error?: string): void;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assert = void 0;
4
+ function assert(condition, error) {
5
+ if (!condition) {
6
+ throw new Error(error || 'Unspecified AssertionError');
7
+ }
8
+ }
9
+ exports.assert = assert;
10
+ //# sourceMappingURL=assert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/drift/perpHelpers/assert.ts"],"names":[],"mappings":";;;AAAA,SAAgB,MAAM,CAAC,SAAkB,EAAE,KAAc;IACvD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,4BAA4B,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAJD,wBAIC"}