@drift-labs/sdk 0.1.29-master.1 → 0.1.30-master.1

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.
Files changed (73) hide show
  1. package/lib/accounts/bulkAccountLoader.d.ts +2 -1
  2. package/lib/accounts/bulkAccountLoader.js +44 -32
  3. package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +15 -0
  4. package/lib/accounts/pollingClearingHouseAccountSubscriber.js +50 -23
  5. package/lib/clearingHouse.d.ts +4 -2
  6. package/lib/clearingHouse.js +49 -14
  7. package/lib/constants/accounts.d.ts +15 -0
  8. package/lib/constants/accounts.js +18 -0
  9. package/lib/constants/markets.js +11 -0
  10. package/lib/factory/clearingHouse.d.ts +14 -4
  11. package/lib/factory/clearingHouse.js +23 -6
  12. package/lib/idl/clearing_house.json +53 -33
  13. package/lib/math/amm.d.ts +18 -0
  14. package/lib/math/amm.js +88 -1
  15. package/lib/oracles/pythClient.js +1 -1
  16. package/lib/orderParams.d.ts +1 -1
  17. package/lib/orderParams.js +2 -2
  18. package/lib/tx/retryTxSender.d.ts +5 -2
  19. package/lib/tx/retryTxSender.js +14 -1
  20. package/lib/util/promiseTimeout.d.ts +1 -0
  21. package/lib/util/promiseTimeout.js +14 -0
  22. package/package.json +1 -1
  23. package/src/accounts/bulkAccountLoader.ts +51 -40
  24. package/src/accounts/pollingClearingHouseAccountSubscriber.ts +73 -30
  25. package/src/clearingHouse.ts +71 -13
  26. package/src/constants/accounts.ts +26 -0
  27. package/src/constants/markets.ts +11 -0
  28. package/src/factory/clearingHouse.ts +47 -7
  29. package/src/idl/clearing_house.json +53 -33
  30. package/src/math/amm.ts +127 -2
  31. package/src/oracles/pythClient.ts +1 -1
  32. package/src/orderParams.ts +3 -2
  33. package/src/tx/retryTxSender.ts +19 -1
  34. package/src/util/promiseTimeout.ts +14 -0
  35. package/lib/math/repeg.d.ts +0 -32
  36. package/lib/math/repeg.js +0 -178
  37. package/src/accounts/bulkUserSubscription.js +0 -56
  38. package/src/accounts/bulkUserSubscription.js.map +0 -1
  39. package/src/accounts/pollingClearingHouseAccountSubscriber.js +0 -210
  40. package/src/accounts/pollingClearingHouseAccountSubscriber.js.map +0 -1
  41. package/src/accounts/pollingOracleSubscriber.js +0 -65
  42. package/src/accounts/pollingOracleSubscriber.js.map +0 -1
  43. package/src/accounts/pollingTokenAccountSubscriber.js +0 -65
  44. package/src/accounts/pollingTokenAccountSubscriber.js.map +0 -1
  45. package/src/accounts/pollingUserAccountSubscriber.js +0 -139
  46. package/src/accounts/pollingUserAccountSubscriber.js.map +0 -1
  47. package/src/accounts/types.js +0 -11
  48. package/src/accounts/types.js.map +0 -1
  49. package/src/accounts/utils.js +0 -8
  50. package/src/accounts/utils.js.map +0 -1
  51. package/src/accounts/webSocketAccountSubscriber.js +0 -64
  52. package/src/accounts/webSocketAccountSubscriber.js.map +0 -1
  53. package/src/accounts/webSocketClearingHouseAccountSubscriber.js +0 -212
  54. package/src/accounts/webSocketClearingHouseAccountSubscriber.js.map +0 -1
  55. package/src/accounts/webSocketUserAccountSubscriber.js +0 -78
  56. package/src/accounts/webSocketUserAccountSubscriber.js.map +0 -1
  57. package/src/constants/markets.js +0 -167
  58. package/src/constants/markets.js.map +0 -1
  59. package/src/constants/numericConstants.js +0 -22
  60. package/src/constants/numericConstants.js.map +0 -1
  61. package/src/factory/clearingHouse.js +0 -65
  62. package/src/factory/clearingHouse.js.map +0 -1
  63. package/src/factory/clearingHouseUser.js +0 -35
  64. package/src/factory/clearingHouseUser.js.map +0 -1
  65. package/src/factory/oracleClient.js +0 -17
  66. package/src/factory/oracleClient.js.map +0 -1
  67. package/src/math/amm.js +0 -285
  68. package/src/math/amm.js.map +0 -1
  69. package/src/math/repeg.ts +0 -253
  70. package/src/oracles/pythClient.js +0 -39
  71. package/src/oracles/pythClient.js.map +0 -1
  72. package/src/tx/retryTxSender.js +0 -137
  73. package/src/tx/retryTxSender.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"oracleClient.js","sourceRoot":"","sources":["oracleClient.ts"],"names":[],"mappings":";;;AAAA,oCAAmD;AAInD,sDAAmD;AACnD,oEAAiE;AAEjE,SAAgB,eAAe,CAC9B,YAA0B,EAC1B,UAAsB,EACtB,GAAa;IAEb,IAAI,IAAA,iBAAS,EAAC,YAAY,EAAE,MAAM,CAAC,EAAE;QACpC,OAAO,IAAI,uBAAU,CAAC,UAAU,CAAC,CAAC;KAClC;IAED,IAAI,IAAA,iBAAS,EAAC,YAAY,EAAE,aAAa,CAAC,EAAE;QAC3C,OAAO,IAAI,qCAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;KAC9C;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;AAC1D,CAAC;AAdD,0CAcC"}
package/src/math/amm.js DELETED
@@ -1,285 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calculateBudgetedPeg = exports.calculateBudgetedK = exports.calculateMaxBaseAssetAmountToTrade = exports.calculateTerminalPrice = exports.calculateRepegCost = exports.calculateAdjustKCost = exports.getSwapDirection = exports.calculateSwapOutput = exports.calculateAmmReservesAfterSwap = exports.calculatePrice = void 0;
4
- const anchor_1 = require("@project-serum/anchor");
5
- const numericConstants_1 = require("../constants/numericConstants");
6
- const position_1 = require("./position");
7
- const types_1 = require("../types");
8
- const assert_1 = require("../assert/assert");
9
- const __1 = require("..");
10
- /**
11
- * Calculates a price given an arbitrary base and quote amount (they must have the same precision)
12
- *
13
- * @param baseAssetAmount
14
- * @param quoteAssetAmount
15
- * @param peg_multiplier
16
- * @returns price : Precision MARK_PRICE_PRECISION
17
- */
18
- function calculatePrice(baseAssetAmount, quoteAssetAmount, peg_multiplier) {
19
- if (baseAssetAmount.abs().lte(numericConstants_1.ZERO)) {
20
- return new anchor_1.BN(0);
21
- }
22
- return quoteAssetAmount
23
- .mul(numericConstants_1.MARK_PRICE_PRECISION)
24
- .mul(peg_multiplier)
25
- .div(numericConstants_1.PEG_PRECISION)
26
- .div(baseAssetAmount);
27
- }
28
- exports.calculatePrice = calculatePrice;
29
- /**
30
- * Calculates what the amm reserves would be after swapping a quote or base asset amount.
31
- *
32
- * @param amm
33
- * @param inputAssetType
34
- * @param swapAmount
35
- * @param swapDirection
36
- * @returns quoteAssetReserve and baseAssetReserve after swap. : Precision AMM_RESERVE_PRECISION
37
- */
38
- function calculateAmmReservesAfterSwap(amm, inputAssetType, swapAmount, swapDirection) {
39
- (0, assert_1.assert)(swapAmount.gte(numericConstants_1.ZERO), 'swapAmount must be greater than 0');
40
- let newQuoteAssetReserve;
41
- let newBaseAssetReserve;
42
- if (inputAssetType === 'quote') {
43
- swapAmount = swapAmount
44
- .mul(numericConstants_1.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO)
45
- .div(amm.pegMultiplier);
46
- [newQuoteAssetReserve, newBaseAssetReserve] = calculateSwapOutput(amm.quoteAssetReserve, swapAmount, swapDirection, amm.sqrtK.mul(amm.sqrtK));
47
- }
48
- else {
49
- [newBaseAssetReserve, newQuoteAssetReserve] = calculateSwapOutput(amm.baseAssetReserve, swapAmount, swapDirection, amm.sqrtK.mul(amm.sqrtK));
50
- }
51
- return [newQuoteAssetReserve, newBaseAssetReserve];
52
- }
53
- exports.calculateAmmReservesAfterSwap = calculateAmmReservesAfterSwap;
54
- /**
55
- * Helper function calculating constant product curve output. Agnostic to whether input asset is quote or base
56
- *
57
- * @param inputAssetReserve
58
- * @param swapAmount
59
- * @param swapDirection
60
- * @param invariant
61
- * @returns newInputAssetReserve and newOutputAssetReserve after swap. : Precision AMM_RESERVE_PRECISION
62
- */
63
- function calculateSwapOutput(inputAssetReserve, swapAmount, swapDirection, invariant) {
64
- let newInputAssetReserve;
65
- if (swapDirection === types_1.SwapDirection.ADD) {
66
- newInputAssetReserve = inputAssetReserve.add(swapAmount);
67
- }
68
- else {
69
- newInputAssetReserve = inputAssetReserve.sub(swapAmount);
70
- }
71
- const newOutputAssetReserve = invariant.div(newInputAssetReserve);
72
- return [newInputAssetReserve, newOutputAssetReserve];
73
- }
74
- exports.calculateSwapOutput = calculateSwapOutput;
75
- /**
76
- * Translate long/shorting quote/base asset into amm operation
77
- *
78
- * @param inputAssetType
79
- * @param positionDirection
80
- */
81
- function getSwapDirection(inputAssetType, positionDirection) {
82
- if ((0, types_1.isVariant)(positionDirection, 'long') && inputAssetType === 'base') {
83
- return types_1.SwapDirection.REMOVE;
84
- }
85
- if ((0, types_1.isVariant)(positionDirection, 'short') && inputAssetType === 'quote') {
86
- return types_1.SwapDirection.REMOVE;
87
- }
88
- return types_1.SwapDirection.ADD;
89
- }
90
- exports.getSwapDirection = getSwapDirection;
91
- /**
92
- * Helper function calculating adjust k cost
93
- * @param market
94
- * @param marketIndex
95
- * @param numerator
96
- * @param denomenator
97
- * @returns cost : Precision QUOTE_ASSET_PRECISION
98
- */
99
- function calculateAdjustKCost(market, marketIndex, numerator, denomenator) {
100
- const netUserPosition = {
101
- baseAssetAmount: market.baseAssetAmount,
102
- lastCumulativeFundingRate: market.amm.cumulativeFundingRate,
103
- marketIndex: new anchor_1.BN(marketIndex),
104
- quoteAssetAmount: new anchor_1.BN(0),
105
- openOrders: new anchor_1.BN(0),
106
- };
107
- const currentValue = (0, position_1.calculateBaseAssetValue)(market, netUserPosition);
108
- const marketNewK = Object.assign({}, market);
109
- marketNewK.amm = Object.assign({}, market.amm);
110
- marketNewK.amm.baseAssetReserve = market.amm.baseAssetReserve
111
- .mul(numerator)
112
- .div(denomenator);
113
- marketNewK.amm.quoteAssetReserve = market.amm.quoteAssetReserve
114
- .mul(numerator)
115
- .div(denomenator);
116
- marketNewK.amm.sqrtK = market.amm.sqrtK.mul(numerator).div(denomenator);
117
- netUserPosition.quoteAssetAmount = currentValue;
118
- const cost = (0, __1.calculatePositionPNL)(marketNewK, netUserPosition);
119
- const p = numericConstants_1.PEG_PRECISION.mul(numerator).div(denomenator);
120
- const x = market.amm.baseAssetReserve;
121
- const y = market.amm.quoteAssetReserve;
122
- const delta = market.baseAssetAmount;
123
- const k = market.amm.sqrtK.mul(market.amm.sqrtK);
124
- const numer1 = numericConstants_1.PEG_PRECISION.sub(p).mul(y).div(numericConstants_1.PEG_PRECISION);
125
- const numer20 = k
126
- .mul(p)
127
- .mul(p)
128
- .div(numericConstants_1.PEG_PRECISION)
129
- .div(numericConstants_1.PEG_PRECISION)
130
- .div(x.mul(p).div(numericConstants_1.PEG_PRECISION).add(delta));
131
- const numer21 = k.div(x.add(delta));
132
- const formulaCost = numer21
133
- .sub(numer20)
134
- .sub(numer1)
135
- .mul(market.amm.pegMultiplier)
136
- .div(numericConstants_1.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO);
137
- console.log((0, __1.convertToNumber)(formulaCost, numericConstants_1.QUOTE_PRECISION));
138
- // p.div(p.mul(x).add(delta)).sub()
139
- return cost;
140
- }
141
- exports.calculateAdjustKCost = calculateAdjustKCost;
142
- /**
143
- * Helper function calculating adjust pegMultiplier (repeg) cost
144
- *
145
- * @param market
146
- * @param marketIndex
147
- * @param newPeg
148
- * @returns cost : Precision QUOTE_ASSET_PRECISION
149
- */
150
- function calculateRepegCost(market, marketIndex, newPeg) {
151
- const netUserPosition = {
152
- baseAssetAmount: market.baseAssetAmount,
153
- lastCumulativeFundingRate: market.amm.cumulativeFundingRate,
154
- marketIndex: new anchor_1.BN(marketIndex),
155
- quoteAssetAmount: new anchor_1.BN(0),
156
- openOrders: new anchor_1.BN(0),
157
- };
158
- const currentValue = (0, position_1.calculateBaseAssetValue)(market, netUserPosition);
159
- netUserPosition.quoteAssetAmount = currentValue;
160
- const prevMarketPrice = (0, __1.calculateMarkPrice)(market);
161
- const marketNewPeg = Object.assign({}, market);
162
- marketNewPeg.amm = Object.assign({}, market.amm);
163
- // const marketNewPeg = JSON.parse(JSON.stringify(market));
164
- marketNewPeg.amm.pegMultiplier = newPeg;
165
- console.log('Price moves from', (0, __1.convertToNumber)(prevMarketPrice), 'to', (0, __1.convertToNumber)((0, __1.calculateMarkPrice)(marketNewPeg)));
166
- const cost = (0, __1.calculatePositionPNL)(marketNewPeg, netUserPosition);
167
- const k = market.amm.sqrtK.mul(market.amm.sqrtK);
168
- const newQuoteAssetReserve = k.div(market.amm.baseAssetReserve.add(netUserPosition.baseAssetAmount));
169
- const deltaQuoteAssetReserves = newQuoteAssetReserve.sub(market.amm.quoteAssetReserve);
170
- const cost2 = deltaQuoteAssetReserves
171
- .mul(market.amm.pegMultiplier.sub(newPeg))
172
- .div(numericConstants_1.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO);
173
- console.log((0, __1.convertToNumber)(cost2, numericConstants_1.QUOTE_PRECISION));
174
- return cost;
175
- }
176
- exports.calculateRepegCost = calculateRepegCost;
177
- /**
178
- * Helper function calculating terminal price of amm
179
- *
180
- * @param market
181
- * @returns cost : Precision MARK_PRICE_PRECISION
182
- */
183
- function calculateTerminalPrice(market) {
184
- const directionToClose = market.baseAssetAmount.gt(numericConstants_1.ZERO)
185
- ? types_1.PositionDirection.SHORT
186
- : types_1.PositionDirection.LONG;
187
- const [newQuoteAssetReserve, newBaseAssetReserve] = calculateAmmReservesAfterSwap(market.amm, 'base', market.baseAssetAmount.abs(), getSwapDirection('base', directionToClose));
188
- const terminalPrice = newQuoteAssetReserve
189
- .mul(numericConstants_1.MARK_PRICE_PRECISION)
190
- .mul(market.amm.pegMultiplier)
191
- .div(numericConstants_1.PEG_PRECISION)
192
- .div(newBaseAssetReserve);
193
- return terminalPrice;
194
- }
195
- exports.calculateTerminalPrice = calculateTerminalPrice;
196
- function calculateMaxBaseAssetAmountToTrade(amm, limit_price) {
197
- const invariant = amm.sqrtK.mul(amm.sqrtK);
198
- const newBaseAssetReserveSquared = invariant
199
- .mul(numericConstants_1.MARK_PRICE_PRECISION)
200
- .mul(amm.pegMultiplier)
201
- .div(limit_price)
202
- .div(numericConstants_1.PEG_PRECISION);
203
- const newBaseAssetReserve = (0, __1.squareRootBN)(newBaseAssetReserveSquared);
204
- if (newBaseAssetReserve.gt(amm.baseAssetReserve)) {
205
- return [
206
- newBaseAssetReserve.sub(amm.baseAssetReserve),
207
- types_1.PositionDirection.SHORT,
208
- ];
209
- }
210
- else if (newBaseAssetReserve.lt(amm.baseAssetReserve)) {
211
- return [
212
- amm.baseAssetReserve.sub(newBaseAssetReserve),
213
- types_1.PositionDirection.LONG,
214
- ];
215
- }
216
- else {
217
- console.log('tradeSize Too Small');
218
- return [new anchor_1.BN(0), types_1.PositionDirection.LONG];
219
- }
220
- }
221
- exports.calculateMaxBaseAssetAmountToTrade = calculateMaxBaseAssetAmountToTrade;
222
- function calculateBudgetedK(market, cost) {
223
- // wolframalpha.com
224
- // (1/(x+d) - p/(x*p+d))*y*d*Q = C solve for p
225
- // p = (d(y*d*Q - C(x+d))) / (C*x(x+d) + y*y*d*Q)
226
- // todo: assumes k = x * y
227
- // otherwise use: (y(1-p) + (kp^2/(x*p+d)) - k/(x+d)) * Q = C solve for p
228
- // const k = market.amm.sqrtK.mul(market.amm.sqrtK);
229
- const x = market.amm.baseAssetReserve;
230
- const y = market.amm.quoteAssetReserve;
231
- const d = market.baseAssetAmount;
232
- const Q = market.amm.pegMultiplier;
233
- const C = cost.mul(new anchor_1.BN(-1));
234
- const numer1 = y.mul(d).mul(Q).div(numericConstants_1.AMM_RESERVE_PRECISION).div(numericConstants_1.PEG_PRECISION);
235
- const numer2 = C.mul(x.add(d)).div(numericConstants_1.QUOTE_PRECISION);
236
- const denom1 = C.mul(x)
237
- .mul(x.add(d))
238
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
239
- .div(numericConstants_1.QUOTE_PRECISION);
240
- const denom2 = y
241
- .mul(d)
242
- .mul(d)
243
- .mul(Q)
244
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
245
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
246
- .div(numericConstants_1.PEG_PRECISION);
247
- const numerator = d
248
- .mul(numer1.add(numer2))
249
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
250
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
251
- .div(numericConstants_1.AMM_TO_QUOTE_PRECISION_RATIO);
252
- const denominator = denom1
253
- .add(denom2)
254
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
255
- .div(numericConstants_1.AMM_TO_QUOTE_PRECISION_RATIO);
256
- console.log(numerator, denominator);
257
- // const p = (numerator).div(denominator);
258
- // const formulaCost = (numer21.sub(numer20).sub(numer1)).mul(market.amm.pegMultiplier).div(AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO)
259
- // console.log(convertToNumber(formulaCost, QUOTE_PRECISION))
260
- return [numerator, denominator];
261
- }
262
- exports.calculateBudgetedK = calculateBudgetedK;
263
- function calculateBudgetedPeg(market, cost) {
264
- // wolframalpha.com
265
- // (1/(x+d) - p/(x*p+d))*y*d*Q = C solve for p
266
- // p = (d(y*d*Q - C(x+d))) / (C*x(x+d) + y*y*d*Q)
267
- // todo: assumes k = x * y
268
- // otherwise use: (y(1-p) + (kp^2/(x*p+d)) - k/(x+d)) * Q = C solve for p
269
- const k = market.amm.sqrtK.mul(market.amm.sqrtK);
270
- const x = market.amm.baseAssetReserve;
271
- const y = market.amm.quoteAssetReserve;
272
- const d = market.baseAssetAmount;
273
- const Q = market.amm.pegMultiplier;
274
- const C = cost.mul(new anchor_1.BN(-1));
275
- const deltaQuoteAssetReserves = y.sub(k.div(x.add(d)));
276
- const deltaPegMultiplier = C.mul(numericConstants_1.MARK_PRICE_PRECISION)
277
- .div(deltaQuoteAssetReserves.div(numericConstants_1.AMM_TO_QUOTE_PRECISION_RATIO))
278
- .mul(numericConstants_1.PEG_PRECISION)
279
- .div(numericConstants_1.QUOTE_PRECISION);
280
- console.log(Q.toNumber(), 'change by', deltaPegMultiplier.toNumber() / numericConstants_1.MARK_PRICE_PRECISION.toNumber());
281
- const newPeg = Q.sub(deltaPegMultiplier.mul(numericConstants_1.PEG_PRECISION).div(numericConstants_1.MARK_PRICE_PRECISION));
282
- return newPeg;
283
- }
284
- exports.calculateBudgetedPeg = calculateBudgetedPeg;
285
- //# sourceMappingURL=amm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"amm.js","sourceRoot":"","sources":["amm.ts"],"names":[],"mappings":";;;AAAA,kDAA2C;AAC3C,oEAQuC;AACvC,yCAAqD;AACrD,oCAMkB;AAClB,6CAA0C;AAC1C,0BAKY;AAEZ;;;;;;;GAOG;AACH,SAAgB,cAAc,CAC7B,eAAmB,EACnB,gBAAoB,EACpB,cAAkB;IAElB,IAAI,eAAe,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,uBAAI,CAAC,EAAE;QACpC,OAAO,IAAI,WAAE,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,OAAO,gBAAgB;SACrB,GAAG,CAAC,uCAAoB,CAAC;SACzB,GAAG,CAAC,cAAc,CAAC;SACnB,GAAG,CAAC,gCAAa,CAAC;SAClB,GAAG,CAAC,eAAe,CAAC,CAAC;AACxB,CAAC;AAdD,wCAcC;AAID;;;;;;;;GAQG;AACH,SAAgB,6BAA6B,CAC5C,GAAQ,EACR,cAAyB,EACzB,UAAc,EACd,aAA4B;IAE5B,IAAA,eAAM,EAAC,UAAU,CAAC,GAAG,CAAC,uBAAI,CAAC,EAAE,mCAAmC,CAAC,CAAC;IAElE,IAAI,oBAAoB,CAAC;IACzB,IAAI,mBAAmB,CAAC;IAExB,IAAI,cAAc,KAAK,OAAO,EAAE;QAC/B,UAAU,GAAG,UAAU;aACrB,GAAG,CAAC,yDAAsC,CAAC;aAC3C,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEzB,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,GAAG,mBAAmB,CAChE,GAAG,CAAC,iBAAiB,EACrB,UAAU,EACV,aAAa,EACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CACxB,CAAC;KACF;SAAM;QACN,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,GAAG,mBAAmB,CAChE,GAAG,CAAC,gBAAgB,EACpB,UAAU,EACV,aAAa,EACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CACxB,CAAC;KACF;IAED,OAAO,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;AACpD,CAAC;AAhCD,sEAgCC;AAED;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CAClC,iBAAqB,EACrB,UAAc,EACd,aAA4B,EAC5B,SAAa;IAEb,IAAI,oBAAoB,CAAC;IACzB,IAAI,aAAa,KAAK,qBAAa,CAAC,GAAG,EAAE;QACxC,oBAAoB,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACzD;SAAM;QACN,oBAAoB,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACzD;IACD,MAAM,qBAAqB,GAAG,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClE,OAAO,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC;AACtD,CAAC;AAdD,kDAcC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAC/B,cAAyB,EACzB,iBAAoC;IAEpC,IAAI,IAAA,iBAAS,EAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,cAAc,KAAK,MAAM,EAAE;QACtE,OAAO,qBAAa,CAAC,MAAM,CAAC;KAC5B;IAED,IAAI,IAAA,iBAAS,EAAC,iBAAiB,EAAE,OAAO,CAAC,IAAI,cAAc,KAAK,OAAO,EAAE;QACxE,OAAO,qBAAa,CAAC,MAAM,CAAC;KAC5B;IAED,OAAO,qBAAa,CAAC,GAAG,CAAC;AAC1B,CAAC;AAbD,4CAaC;AAED;;;;;;;GAOG;AACH,SAAgB,oBAAoB,CACnC,MAAc,EACd,WAAe,EACf,SAAa,EACb,WAAe;IAEf,MAAM,eAAe,GAAG;QACvB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,yBAAyB,EAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB;QAC3D,WAAW,EAAE,IAAI,WAAE,CAAC,WAAW,CAAC;QAChC,gBAAgB,EAAE,IAAI,WAAE,CAAC,CAAC,CAAC;QAC3B,UAAU,EAAE,IAAI,WAAE,CAAC,CAAC,CAAC;KACrB,CAAC;IAEF,MAAM,YAAY,GAAG,IAAA,kCAAuB,EAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7C,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAE/C,UAAU,CAAC,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB;SAC3D,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,WAAW,CAAC,CAAC;IACnB,UAAU,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB;SAC7D,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,WAAW,CAAC,CAAC;IACnB,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAExE,eAAe,CAAC,gBAAgB,GAAG,YAAY,CAAC;IAEhD,MAAM,IAAI,GAAG,IAAA,wBAAoB,EAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAE/D,MAAM,CAAC,GAAG,gCAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,gCAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gCAAa,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,CAAC;SACf,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,gCAAa,CAAC;SAClB,GAAG,CAAC,gCAAa,CAAC;SAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gCAAa,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpC,MAAM,WAAW,GAAG,OAAO;SACzB,GAAG,CAAC,OAAO,CAAC;SACZ,GAAG,CAAC,MAAM,CAAC;SACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;SAC7B,GAAG,CAAC,yDAAsC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAe,EAAC,WAAW,EAAE,kCAAe,CAAC,CAAC,CAAC;IAE3D,mCAAmC;IAEnC,OAAO,IAAI,CAAC;AACb,CAAC;AAxDD,oDAwDC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CACjC,MAAc,EACd,WAAe,EACf,MAAU;IAEV,MAAM,eAAe,GAAG;QACvB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,yBAAyB,EAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB;QAC3D,WAAW,EAAE,IAAI,WAAE,CAAC,WAAW,CAAC;QAChC,gBAAgB,EAAE,IAAI,WAAE,CAAC,CAAC,CAAC;QAC3B,UAAU,EAAE,IAAI,WAAE,CAAC,CAAC,CAAC;KACrB,CAAC;IAEF,MAAM,YAAY,GAAG,IAAA,kCAAuB,EAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACtE,eAAe,CAAC,gBAAgB,GAAG,YAAY,CAAC;IAChD,MAAM,eAAe,GAAG,IAAA,sBAAkB,EAAC,MAAM,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,YAAY,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAEjD,2DAA2D;IAC3D,YAAY,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;IAExC,OAAO,CAAC,GAAG,CACV,kBAAkB,EAClB,IAAA,mBAAe,EAAC,eAAe,CAAC,EAChC,IAAI,EACJ,IAAA,mBAAe,EAAC,IAAA,sBAAkB,EAAC,YAAY,CAAC,CAAC,CACjD,CAAC;IAEF,MAAM,IAAI,GAAG,IAAA,wBAAoB,EAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAEjE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,oBAAoB,GAAG,CAAC,CAAC,GAAG,CACjC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,CAChE,CAAC;IACF,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,GAAG,CACvD,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAC5B,CAAC;IACF,MAAM,KAAK,GAAG,uBAAuB;SACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SACzC,GAAG,CAAC,yDAAsC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAe,EAAC,KAAK,EAAE,kCAAe,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACb,CAAC;AA3CD,gDA2CC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,MAAc;IACpD,MAAM,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,uBAAI,CAAC;QACvD,CAAC,CAAC,yBAAiB,CAAC,KAAK;QACzB,CAAC,CAAC,yBAAiB,CAAC,IAAI,CAAC;IAE1B,MAAM,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,GAChD,6BAA6B,CAC5B,MAAM,CAAC,GAAG,EACV,MAAM,EACN,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,EAC5B,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAC1C,CAAC;IAEH,MAAM,aAAa,GAAG,oBAAoB;SACxC,GAAG,CAAC,uCAAoB,CAAC;SACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;SAC7B,GAAG,CAAC,gCAAa,CAAC;SAClB,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAE3B,OAAO,aAAa,CAAC;AACtB,CAAC;AApBD,wDAoBC;AAED,SAAgB,kCAAkC,CACjD,GAAQ,EACR,WAAe;IAEf,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,0BAA0B,GAAG,SAAS;SAC1C,GAAG,CAAC,uCAAoB,CAAC;SACzB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;SACtB,GAAG,CAAC,WAAW,CAAC;SAChB,GAAG,CAAC,gCAAa,CAAC,CAAC;IAErB,MAAM,mBAAmB,GAAG,IAAA,gBAAY,EAAC,0BAA0B,CAAC,CAAC;IAErE,IAAI,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;QACjD,OAAO;YACN,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC7C,yBAAiB,CAAC,KAAK;SACvB,CAAC;KACF;SAAM,IAAI,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;QACxD,OAAO;YACN,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAC7C,yBAAiB,CAAC,IAAI;SACtB,CAAC;KACF;SAAM;QACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,WAAE,CAAC,CAAC,CAAC,EAAE,yBAAiB,CAAC,IAAI,CAAC,CAAC;KAC3C;AACF,CAAC;AA5BD,gFA4BC;AAED,SAAgB,kBAAkB,CAAC,MAAc,EAAE,IAAQ;IAC1D,mBAAmB;IACnB,8CAA8C;IAC9C,iDAAiD;IAEjD,0BAA0B;IAC1B,yEAAyE;IAEzE,oDAAoD;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAEvC,MAAM,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;IACjC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;IAEnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,WAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,wCAAqB,CAAC,CAAC,GAAG,CAAC,gCAAa,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kCAAe,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACb,GAAG,CAAC,wCAAqB,CAAC;SAC1B,GAAG,CAAC,kCAAe,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,CAAC;SACd,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,wCAAqB,CAAC;SAC1B,GAAG,CAAC,wCAAqB,CAAC;SAC1B,GAAG,CAAC,gCAAa,CAAC,CAAC;IAErB,MAAM,SAAS,GAAG,CAAC;SACjB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SACvB,GAAG,CAAC,wCAAqB,CAAC;SAC1B,GAAG,CAAC,wCAAqB,CAAC;SAC1B,GAAG,CAAC,+CAA4B,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,MAAM;SACxB,GAAG,CAAC,MAAM,CAAC;SACX,GAAG,CAAC,wCAAqB,CAAC;SAC1B,GAAG,CAAC,+CAA4B,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACpC,0CAA0C;IAE1C,mIAAmI;IACnI,6DAA6D;IAE7D,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACjC,CAAC;AA/CD,gDA+CC;AAED,SAAgB,oBAAoB,CAAC,MAAc,EAAE,IAAQ;IAC5D,mBAAmB;IACnB,8CAA8C;IAC9C,iDAAiD;IAEjD,0BAA0B;IAC1B,yEAAyE;IAEzE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAEvC,MAAM,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;IACjC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;IAEnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,WAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/B,MAAM,uBAAuB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,uCAAoB,CAAC;SACpD,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,+CAA4B,CAAC,CAAC;SAC9D,GAAG,CAAC,gCAAa,CAAC;SAClB,GAAG,CAAC,kCAAe,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CACV,CAAC,CAAC,QAAQ,EAAE,EACZ,WAAW,EACX,kBAAkB,CAAC,QAAQ,EAAE,GAAG,uCAAoB,CAAC,QAAQ,EAAE,CAC/D,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CACnB,kBAAkB,CAAC,GAAG,CAAC,gCAAa,CAAC,CAAC,GAAG,CAAC,uCAAoB,CAAC,CAC/D,CAAC;IAEF,OAAO,MAAM,CAAC;AACf,CAAC;AAhCD,oDAgCC"}
package/src/math/repeg.ts DELETED
@@ -1,253 +0,0 @@
1
- import { BN } from '@project-serum/anchor';
2
- import {
3
- MARK_PRICE_PRECISION,
4
- AMM_RESERVE_PRECISION,
5
- PEG_PRECISION,
6
- AMM_TO_QUOTE_PRECISION_RATIO,
7
- QUOTE_PRECISION,
8
- ZERO,
9
- } from '../constants/numericConstants';
10
- import { calculateBaseAssetValue } from './position';
11
- import { calculateTerminalPrice } from './amm';
12
-
13
- import { Market } from '../types';
14
- import { calculatePositionPNL, calculateMarkPrice, convertToNumber } from '..';
15
-
16
- /**
17
- * Helper function calculating adjust k cost
18
- * @param market
19
- * @param marketIndex
20
- * @param numerator
21
- * @param denomenator
22
- * @returns cost : Precision QUOTE_ASSET_PRECISION
23
- */
24
- export function calculateAdjustKCost(
25
- market: Market,
26
- marketIndex: BN,
27
- numerator: BN,
28
- denomenator: BN
29
- ): BN {
30
- const netUserPosition = {
31
- baseAssetAmount: market.baseAssetAmount,
32
- lastCumulativeFundingRate: market.amm.cumulativeFundingRate,
33
- marketIndex: new BN(marketIndex),
34
- quoteAssetAmount: ZERO,
35
- openOrders: ZERO,
36
- };
37
-
38
- const currentValue = calculateBaseAssetValue(market, netUserPosition);
39
-
40
- const marketNewK = Object.assign({}, market);
41
- marketNewK.amm = Object.assign({}, market.amm);
42
-
43
- marketNewK.amm.baseAssetReserve = market.amm.baseAssetReserve
44
- .mul(numerator)
45
- .div(denomenator);
46
- marketNewK.amm.quoteAssetReserve = market.amm.quoteAssetReserve
47
- .mul(numerator)
48
- .div(denomenator);
49
- marketNewK.amm.sqrtK = market.amm.sqrtK.mul(numerator).div(denomenator);
50
-
51
- netUserPosition.quoteAssetAmount = currentValue;
52
-
53
- const cost = calculatePositionPNL(marketNewK, netUserPosition);
54
-
55
- return cost;
56
- }
57
-
58
- /**
59
- * Helper function calculating adjust pegMultiplier (repeg) cost
60
- *
61
- * @param market
62
- * @param marketIndex
63
- * @param newPeg
64
- * @returns cost : Precision QUOTE_ASSET_PRECISION
65
- */
66
- export function calculateRepegCost(
67
- market: Market,
68
- marketIndex: BN,
69
- newPeg: BN
70
- ): BN {
71
- const netUserPosition = {
72
- baseAssetAmount: market.baseAssetAmount,
73
- lastCumulativeFundingRate: market.amm.cumulativeFundingRate,
74
- marketIndex: new BN(marketIndex),
75
- quoteAssetAmount: new BN(0),
76
- openOrders: ZERO,
77
- };
78
-
79
- const currentValue = calculateBaseAssetValue(market, netUserPosition);
80
- netUserPosition.quoteAssetAmount = currentValue;
81
- const prevMarketPrice = calculateMarkPrice(market);
82
- const marketNewPeg = Object.assign({}, market);
83
- marketNewPeg.amm = Object.assign({}, market.amm);
84
-
85
- // const marketNewPeg = JSON.parse(JSON.stringify(market));
86
- marketNewPeg.amm.pegMultiplier = newPeg;
87
-
88
- console.log(
89
- 'Price moves from',
90
- convertToNumber(prevMarketPrice),
91
- 'to',
92
- convertToNumber(calculateMarkPrice(marketNewPeg))
93
- );
94
-
95
- const cost = calculatePositionPNL(marketNewPeg, netUserPosition);
96
-
97
- return cost;
98
- }
99
-
100
- /**
101
- * Helper function calculating adjust pegMultiplier (repeg) cost
102
- *
103
- * @param market
104
- * @param marketIndex
105
- * @param newPeg
106
- * @returns cost : Precision QUOTE_ASSET_PRECISION
107
- */
108
- export function calculateReserveRebalanceCost(
109
- market: Market,
110
- marketIndex: BN
111
- ): BN {
112
- const netUserPosition = {
113
- baseAssetAmount: market.baseAssetAmount,
114
- lastCumulativeFundingRate: market.amm.cumulativeFundingRate,
115
- marketIndex: new BN(marketIndex),
116
- quoteAssetAmount: new BN(0),
117
- openOrders: ZERO,
118
- };
119
-
120
- const currentValue = calculateBaseAssetValue(market, netUserPosition);
121
- netUserPosition.quoteAssetAmount = currentValue;
122
- const prevMarketPrice = calculateMarkPrice(market);
123
- const marketNewPeg = Object.assign({}, market);
124
- marketNewPeg.amm = Object.assign({}, market.amm);
125
-
126
- // const marketNewPeg = JSON.parse(JSON.stringify(market));
127
- const newPeg = calculateTerminalPrice(market)
128
- .mul(PEG_PRECISION)
129
- .div(MARK_PRICE_PRECISION);
130
- // const newPeg = prevMarketPrice.mul(PEG_PRECISION).div(MARK_PRICE_PRECISION);
131
-
132
- const newBaseReserve = market.amm.baseAssetReserve.add(
133
- market.baseAssetAmount
134
- );
135
- const newQuoteReserve = market.amm.sqrtK
136
- .mul(market.amm.sqrtK)
137
- .div(newBaseReserve);
138
- console.log(
139
- 'current reserves on close, quote:',
140
- convertToNumber(newQuoteReserve, AMM_RESERVE_PRECISION),
141
- 'base:',
142
- convertToNumber(newBaseReserve, AMM_RESERVE_PRECISION)
143
- );
144
-
145
- let newSqrtK;
146
- if (newPeg.lt(market.amm.pegMultiplier)) {
147
- newSqrtK = newBaseReserve;
148
- } else {
149
- newSqrtK = newQuoteReserve;
150
- }
151
-
152
- marketNewPeg.amm.baseAssetReserve = newSqrtK.sub(market.baseAssetAmount); // newSqrtK.sub(market.baseAssetAmount);
153
- marketNewPeg.amm.quoteAssetReserve = newSqrtK
154
- .mul(newSqrtK)
155
- .div(marketNewPeg.amm.baseAssetReserve);
156
- marketNewPeg.amm.sqrtK = newSqrtK;
157
- marketNewPeg.amm.pegMultiplier = newPeg;
158
-
159
- console.log(
160
- 'Price moves from',
161
- convertToNumber(prevMarketPrice),
162
- 'to',
163
- convertToNumber(calculateMarkPrice(marketNewPeg))
164
- );
165
-
166
- const cost = calculatePositionPNL(marketNewPeg, netUserPosition);
167
-
168
- return cost;
169
- }
170
-
171
- export function calculateBudgetedK(market: Market, cost: BN): [BN, BN] {
172
- // wolframalpha.com
173
- // (1/(x+d) - p/(x*p+d))*y*d*Q = C solve for p
174
- // p = (d(y*d*Q - C(x+d))) / (C*x(x+d) + y*y*d*Q)
175
-
176
- // todo: assumes k = x * y
177
- // otherwise use: (y(1-p) + (kp^2/(x*p+d)) - k/(x+d)) * Q = C solve for p
178
-
179
- // const k = market.amm.sqrtK.mul(market.amm.sqrtK);
180
- const x = market.amm.baseAssetReserve;
181
- const y = market.amm.quoteAssetReserve;
182
-
183
- const d = market.baseAssetAmount;
184
- const Q = market.amm.pegMultiplier;
185
-
186
- const C = cost.mul(new BN(-1));
187
-
188
- const numer1 = y.mul(d).mul(Q).div(AMM_RESERVE_PRECISION).div(PEG_PRECISION);
189
- const numer2 = C.mul(x.add(d)).div(QUOTE_PRECISION);
190
- const denom1 = C.mul(x)
191
- .mul(x.add(d))
192
- .div(AMM_RESERVE_PRECISION)
193
- .div(QUOTE_PRECISION);
194
- const denom2 = y
195
- .mul(d)
196
- .mul(d)
197
- .mul(Q)
198
- .div(AMM_RESERVE_PRECISION)
199
- .div(AMM_RESERVE_PRECISION)
200
- .div(PEG_PRECISION);
201
-
202
- const numerator = d
203
- .mul(numer1.add(numer2))
204
- .div(AMM_RESERVE_PRECISION)
205
- .div(AMM_RESERVE_PRECISION)
206
- .div(AMM_TO_QUOTE_PRECISION_RATIO);
207
- const denominator = denom1
208
- .add(denom2)
209
- .div(AMM_RESERVE_PRECISION)
210
- .div(AMM_TO_QUOTE_PRECISION_RATIO);
211
- console.log(numerator, denominator);
212
- // const p = (numerator).div(denominator);
213
-
214
- // const formulaCost = (numer21.sub(numer20).sub(numer1)).mul(market.amm.pegMultiplier).div(AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO)
215
- // console.log(convertToNumber(formulaCost, QUOTE_PRECISION))
216
-
217
- return [numerator, denominator];
218
- }
219
-
220
- export function calculateBudgetedPeg(market: Market, cost: BN): BN {
221
- // wolframalpha.com
222
- // (1/(x+d) - p/(x*p+d))*y*d*Q = C solve for p
223
- // p = (d(y*d*Q - C(x+d))) / (C*x(x+d) + y*y*d*Q)
224
-
225
- // todo: assumes k = x * y
226
- // otherwise use: (y(1-p) + (kp^2/(x*p+d)) - k/(x+d)) * Q = C solve for p
227
-
228
- const k = market.amm.sqrtK.mul(market.amm.sqrtK);
229
- const x = market.amm.baseAssetReserve;
230
- const y = market.amm.quoteAssetReserve;
231
-
232
- const d = market.baseAssetAmount;
233
- const Q = market.amm.pegMultiplier;
234
-
235
- const C = cost.mul(new BN(-1));
236
-
237
- const deltaQuoteAssetReserves = y.sub(k.div(x.add(d)));
238
- const deltaPegMultiplier = C.mul(MARK_PRICE_PRECISION).div(
239
- deltaQuoteAssetReserves.div(AMM_TO_QUOTE_PRECISION_RATIO)
240
- );
241
- // .mul(PEG_PRECISION)
242
- // .div(QUOTE_PRECISION);
243
- console.log(
244
- Q.toNumber(),
245
- 'change by',
246
- deltaPegMultiplier.toNumber() / MARK_PRICE_PRECISION.toNumber()
247
- );
248
- const newPeg = Q.sub(
249
- deltaPegMultiplier.mul(PEG_PRECISION).div(MARK_PRICE_PRECISION)
250
- );
251
-
252
- return newPeg;
253
- }
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertPythPrice = exports.PythClient = void 0;
4
- const client_1 = require("@pythnetwork/client");
5
- const anchor_1 = require("@project-serum/anchor");
6
- const numericConstants_1 = require("../constants/numericConstants");
7
- class PythClient {
8
- constructor(connection) {
9
- this.connection = connection;
10
- }
11
- async getPriceData(pricePublicKey) {
12
- const account = await this.connection.getAccountInfo(pricePublicKey);
13
- return (0, client_1.parsePriceData)(account.data);
14
- }
15
- async getOraclePriceData(pricePublicKey) {
16
- const accountInfo = await this.connection.getAccountInfo(pricePublicKey);
17
- return this.getOraclePriceDataFromBuffer(accountInfo.data);
18
- }
19
- async getOraclePriceDataFromBuffer(buffer) {
20
- const priceData = (0, client_1.parsePriceData)(buffer);
21
- return {
22
- price: convertPythPrice(priceData.price, priceData.exponent),
23
- slot: new anchor_1.BN(priceData.lastSlot.toString()),
24
- confidence: convertPythPrice(priceData.confidence, priceData.exponent),
25
- twap: convertPythPrice(priceData.twap.value, priceData.exponent),
26
- twapConfidence: convertPythPrice(priceData.twac.value, priceData.exponent),
27
- };
28
- }
29
- }
30
- exports.PythClient = PythClient;
31
- function convertPythPrice(price, exponent) {
32
- exponent = Math.abs(exponent);
33
- const pythPrecision = numericConstants_1.TEN.pow(new anchor_1.BN(exponent).abs());
34
- return new anchor_1.BN(price * Math.pow(10, exponent))
35
- .mul(numericConstants_1.MARK_PRICE_PRECISION)
36
- .div(pythPrecision);
37
- }
38
- exports.convertPythPrice = convertPythPrice;
39
- //# sourceMappingURL=pythClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pythClient.js","sourceRoot":"","sources":["pythClient.ts"],"names":[],"mappings":";;;AAAA,gDAAgE;AAGhE,kDAA2C;AAC3C,oEAA0E;AAE1E,MAAa,UAAU;IAGtB,YAAmB,UAAsB;QACxC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,cAAyB;QAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QACrE,OAAO,IAAA,uBAAc,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAC9B,cAAyB;QAEzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,4BAA4B,CACxC,MAAc;QAEd,MAAM,SAAS,GAAG,IAAA,uBAAc,EAAC,MAAM,CAAC,CAAC;QACzC,OAAO;YACN,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC5D,IAAI,EAAE,IAAI,WAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC3C,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC;YACtE,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC;YAChE,cAAc,EAAE,gBAAgB,CAC/B,SAAS,CAAC,IAAI,CAAC,KAAK,EACpB,SAAS,CAAC,QAAQ,CAClB;SACD,CAAC;IACH,CAAC;CACD;AAlCD,gCAkCC;AAED,SAAgB,gBAAgB,CAAC,KAAa,EAAE,QAAgB;IAC/D,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,aAAa,GAAG,sBAAG,CAAC,GAAG,CAAC,IAAI,WAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,OAAO,IAAI,WAAE,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;SAC3C,GAAG,CAAC,uCAAoB,CAAC;SACzB,GAAG,CAAC,aAAa,CAAC,CAAC;AACtB,CAAC;AAND,4CAMC"}