@exponent-labs/market-math 0.1.8 → 0.9.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.
- package/build/bisect.js +1 -2
- package/build/bisect.js.map +1 -1
- package/build/index.d.ts +43 -8
- package/build/index.js +103 -40
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +110 -19
package/build/bisect.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.bisectSearch2 =
|
|
3
|
+
exports.bisectSearch2 = bisectSearch2;
|
|
4
4
|
function bisectSearch2(func, lo, hi, epsilon = 0.0001, maxIterations = 2000) {
|
|
5
5
|
if (lo > hi) {
|
|
6
6
|
throw new Error("lo must be less than hi");
|
|
@@ -32,5 +32,4 @@ function bisectSearch2(func, lo, hi, epsilon = 0.0001, maxIterations = 2000) {
|
|
|
32
32
|
// If we've reached max iterations, return the last calculated midpoint
|
|
33
33
|
return mid;
|
|
34
34
|
}
|
|
35
|
-
exports.bisectSearch2 = bisectSearch2;
|
|
36
35
|
//# sourceMappingURL=bisect.js.map
|
package/build/bisect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bisect.js","sourceRoot":"","sources":["../src/bisect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bisect.js","sourceRoot":"","sources":["../src/bisect.ts"],"names":[],"mappings":";;AAAA,sCA0CC;AA1CD,SAAgB,aAAa,CAC3B,IAA2B,EAC3B,EAAU,EACV,EAAU,EACV,UAAkB,MAAM,EACxB,gBAAwB,IAAI;IAE5B,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA,CAAC,kCAAkC;IAE1D,qDAAqD;IACrD,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,iCAAiC;IACjC,OAAO,UAAU,GAAG,aAAa,EAAE,CAAC;QAClC,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QAExB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAA,CAAC,0CAA0C;QACvD,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,6CAA6C;YAC7C,EAAE,GAAG,GAAG,CAAA;QACV,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,EAAE,GAAG,GAAG,CAAA;QACV,CAAC;QAED,UAAU,EAAE,CAAA;IACd,CAAC;IAED,uEAAuE;IACvE,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
package/build/index.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export declare function findRateAnchor({ currentRateScalar, lastLnImpliedRate, s
|
|
|
36
36
|
/** Calculate fee on asset */
|
|
37
37
|
export declare function tradeFee(netTraderAsset: number, currentFeeRate: number): number;
|
|
38
38
|
/** Calculate result of trading pt */
|
|
39
|
-
export declare function tradePt({ liquidityPt, liquidityAsset, currentRateScalar, currentRateAnchor, currentFeeRate, netTraderPt, syExchangeRate, feeTreasurySyBps, isCurrentFlashSwap, }: {
|
|
39
|
+
export declare function tradePt({ liquidityPt, liquidityAsset, currentRateScalar, currentRateAnchor, currentFeeRate, netTraderPt, syExchangeRate, feeTreasurySyBps, isCurrentFlashSwap, skipFees, }: {
|
|
40
40
|
liquidityPt: number;
|
|
41
41
|
liquidityAsset: number;
|
|
42
42
|
currentRateScalar: number;
|
|
@@ -46,6 +46,7 @@ export declare function tradePt({ liquidityPt, liquidityAsset, currentRateScalar
|
|
|
46
46
|
syExchangeRate: number;
|
|
47
47
|
feeTreasurySyBps: number;
|
|
48
48
|
isCurrentFlashSwap?: boolean;
|
|
49
|
+
skipFees?: boolean;
|
|
49
50
|
}): TradeResult;
|
|
50
51
|
export interface LiquidityAdd {
|
|
51
52
|
syIn: number;
|
|
@@ -135,7 +136,16 @@ export declare class MarketCalculator {
|
|
|
135
136
|
* If the trade is impossible, return null
|
|
136
137
|
* This can happen if there is not enough liquidity to sell YT for the amount of asset desired
|
|
137
138
|
*/
|
|
138
|
-
simSellYt(ytIn: number): {
|
|
139
|
+
simSellYt(ytIn: number, skipFees?: boolean): {
|
|
140
|
+
assetOut: number;
|
|
141
|
+
feeInAsset: number;
|
|
142
|
+
newMarketCalculator: MarketCalculator;
|
|
143
|
+
} | null;
|
|
144
|
+
/**
|
|
145
|
+
* @param ytIn - YT amount in lamports
|
|
146
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
147
|
+
*/
|
|
148
|
+
simSellYtWithImpliedApy(ytIn: number, impliedApy: number, skipFees?: boolean): {
|
|
139
149
|
assetOut: number;
|
|
140
150
|
feeInAsset: number;
|
|
141
151
|
newMarketCalculator: MarketCalculator;
|
|
@@ -143,10 +153,27 @@ export declare class MarketCalculator {
|
|
|
143
153
|
/** Calculate the amount of asset out for selling YT */
|
|
144
154
|
estimateYtInForExactBaseOut(assetOut: number): number | null;
|
|
145
155
|
/** Calculate the amount of asset to pay for buying YT */
|
|
146
|
-
calcBuyYt(ytOut: number): number | null;
|
|
156
|
+
calcBuyYt(ytOut: number, skipFees?: boolean): number | null;
|
|
147
157
|
/** Calculate the trade result for trading PT */
|
|
148
|
-
calcTradePt(netTraderPt: number, isCurrentFlashSwap?: boolean): CalculatorTradeResult;
|
|
158
|
+
calcTradePt(netTraderPt: number, isCurrentFlashSwap?: boolean, skipFees?: boolean): CalculatorTradeResult;
|
|
149
159
|
estimateNetPtForExactNetAsset(netTraderAsset: number): number | null;
|
|
160
|
+
/**
|
|
161
|
+
* @param netAssetIn - Net asset in lamports. Trade direction:
|
|
162
|
+
* - Positive: selling PT for underlying asset
|
|
163
|
+
* - Negative: buying PT with underlying asset
|
|
164
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
165
|
+
*/
|
|
166
|
+
estimateNetPtForExactNetAssetWithImpliedApy(netAssetIn: number, impliedApy: number, skipFees?: boolean): number | null;
|
|
167
|
+
/**
|
|
168
|
+
* @param ptAmount - Amount of PT to sell in lamports
|
|
169
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
170
|
+
*/
|
|
171
|
+
estimateAssetOutForPtInWithImpliedApy(ptAmount: number, impliedApy: number, skipFees?: boolean): number | null;
|
|
172
|
+
/**
|
|
173
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
174
|
+
* @returns A new MarketCalculator instance with the implied APY
|
|
175
|
+
*/
|
|
176
|
+
withImpliedApy(impliedApy: number): MarketCalculator;
|
|
150
177
|
simulateClassicLpWithdraw({ lpAmount }: {
|
|
151
178
|
lpAmount: number;
|
|
152
179
|
}): {
|
|
@@ -159,8 +186,16 @@ export declare class MarketCalculator {
|
|
|
159
186
|
assetOut: number;
|
|
160
187
|
};
|
|
161
188
|
/** Deprecated - bad name - use estimateNetPtForExactNetAsset */
|
|
162
|
-
calcExactPtForNetAsset(netTraderAsset: number): number | null;
|
|
163
|
-
estimateYtOutForExactAssetIn(assetIn: number): {
|
|
189
|
+
calcExactPtForNetAsset(netTraderAsset: number, skipFees?: boolean): number | null;
|
|
190
|
+
estimateYtOutForExactAssetIn(assetIn: number, skipFees?: boolean): {
|
|
191
|
+
ytOut: number;
|
|
192
|
+
feeInAsset: number;
|
|
193
|
+
} | null;
|
|
194
|
+
/**
|
|
195
|
+
* @param assetIn - Asset amount in lamports
|
|
196
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
197
|
+
*/
|
|
198
|
+
estimateYtOutForExactAssetInWithImpliedApy(assetIn: number, impliedApy: number, skipFees?: boolean): {
|
|
164
199
|
ytOut: number;
|
|
165
200
|
feeInAsset: number;
|
|
166
201
|
} | null;
|
|
@@ -207,8 +242,8 @@ export interface CalculatorTradeResult {
|
|
|
207
242
|
treasuryFeeAmount: number;
|
|
208
243
|
newMarketCalculator: MarketCalculator;
|
|
209
244
|
}
|
|
210
|
-
export declare function calcExactPtForNetAsset(c: MarketCalculator, netTraderAsset: number): number | null;
|
|
211
|
-
export declare function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: number): number | null;
|
|
245
|
+
export declare function calcExactPtForNetAsset(c: MarketCalculator, netTraderAsset: number, skipFees?: boolean): number | null;
|
|
246
|
+
export declare function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: number, skipFees?: boolean): number | null;
|
|
212
247
|
export declare function calcYieldExposureWithAssetIn(c: MarketCalculator, assetIn: number): number;
|
|
213
248
|
export declare function calcWithdrawLiquidity(c: MarketCalculator, lpAmount: number): {
|
|
214
249
|
syOut: number;
|
package/build/index.js
CHANGED
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.MarketCalculator = void 0;
|
|
4
|
+
exports.logit = logit;
|
|
5
|
+
exports.findRateScalarRoot = findRateScalarRoot;
|
|
6
|
+
exports.exchangeRate = exchangeRate;
|
|
7
|
+
exports.feeRate = feeRate;
|
|
8
|
+
exports.currentRateScalar = currentRateScalar;
|
|
9
|
+
exports.currentLnImpliedRate = currentLnImpliedRate;
|
|
10
|
+
exports.exchangeRateFromLnImpliedRate = exchangeRateFromLnImpliedRate;
|
|
11
|
+
exports.findRateAnchor = findRateAnchor;
|
|
12
|
+
exports.tradeFee = tradeFee;
|
|
13
|
+
exports.tradePt = tradePt;
|
|
14
|
+
exports.lpOutForTokensIn = lpOutForTokensIn;
|
|
15
|
+
exports.calcExactPtForNetAsset = calcExactPtForNetAsset;
|
|
16
|
+
exports.estimateYtOutForExactAssetIn = estimateYtOutForExactAssetIn;
|
|
17
|
+
exports.calcYieldExposureWithAssetIn = calcYieldExposureWithAssetIn;
|
|
18
|
+
exports.calcWithdrawLiquidity = calcWithdrawLiquidity;
|
|
19
|
+
exports.calcWithdrawLiquidityToBase = calcWithdrawLiquidityToBase;
|
|
20
|
+
exports.calcMaxYtOutForPriceImpact = calcMaxYtOutForPriceImpact;
|
|
21
|
+
exports.calcBalancedDeposit = calcBalancedDeposit;
|
|
22
|
+
exports.simulateWrapperProvideLiquidityBase = simulateWrapperProvideLiquidityBase;
|
|
4
23
|
const bisect_1 = require("./bisect");
|
|
5
24
|
const SECONDS_YEAR = 31536000;
|
|
6
25
|
function normalizedTimeRemaining(secondsRemaining) {
|
|
@@ -19,7 +38,6 @@ function logit(p) {
|
|
|
19
38
|
// clamp logit to 0 at the lower end
|
|
20
39
|
return Math.log(p / (1 - p));
|
|
21
40
|
}
|
|
22
|
-
exports.logit = logit;
|
|
23
41
|
/** Estimate an appropriate rate scalar root for the market */
|
|
24
42
|
function findRateScalarRoot(rateExpected, rateMax, tailWidth = 0.1) {
|
|
25
43
|
if (tailWidth < 0 || tailWidth > 0.49) {
|
|
@@ -31,7 +49,6 @@ function findRateScalarRoot(rateExpected, rateMax, tailWidth = 0.1) {
|
|
|
31
49
|
const b = scale / (rateExpected - 1);
|
|
32
50
|
return Math.min(a, b);
|
|
33
51
|
}
|
|
34
|
-
exports.findRateScalarRoot = findRateScalarRoot;
|
|
35
52
|
/** Exchange rate of asset into PT */
|
|
36
53
|
function exchangeRate({ proportionPt, rateScalar, rateAnchor, }) {
|
|
37
54
|
// first get logit value over proportion
|
|
@@ -39,12 +56,10 @@ function exchangeRate({ proportionPt, rateScalar, rateAnchor, }) {
|
|
|
39
56
|
// scale proportion down by rateScalar and shift by rateAnchor
|
|
40
57
|
return logitPt / rateScalar + rateAnchor;
|
|
41
58
|
}
|
|
42
|
-
exports.exchangeRate = exchangeRate;
|
|
43
59
|
function feeRate({ lnFeeRateRoot, secondsRemaining, }) {
|
|
44
60
|
const lnFeeRate = lnFeeRateRoot * normalizedTimeRemaining(secondsRemaining);
|
|
45
61
|
return Math.exp(lnFeeRate);
|
|
46
62
|
}
|
|
47
|
-
exports.feeRate = feeRate;
|
|
48
63
|
function currentRateScalar({ rateScalarRoot, secondsRemaining, }) {
|
|
49
64
|
if (secondsRemaining <= 0) {
|
|
50
65
|
return Infinity;
|
|
@@ -52,18 +67,15 @@ function currentRateScalar({ rateScalarRoot, secondsRemaining, }) {
|
|
|
52
67
|
const normalTimeRemaining = normalizedTimeRemaining(secondsRemaining);
|
|
53
68
|
return rateScalarRoot / normalTimeRemaining;
|
|
54
69
|
}
|
|
55
|
-
exports.currentRateScalar = currentRateScalar;
|
|
56
70
|
/** Calculate the ln of the current implied rate */
|
|
57
71
|
function currentLnImpliedRate({ exchangeRate, secondsRemaining, }) {
|
|
58
72
|
return Math.log(exchangeRate) / normalizedTimeRemaining(secondsRemaining);
|
|
59
73
|
}
|
|
60
|
-
exports.currentLnImpliedRate = currentLnImpliedRate;
|
|
61
74
|
/** Calculate exchange rate from the lnImpliedRate */
|
|
62
75
|
function exchangeRateFromLnImpliedRate({ lnImpliedRate, secondsRemaining, }) {
|
|
63
76
|
const rate = lnImpliedRate * normalizedTimeRemaining(secondsRemaining);
|
|
64
77
|
return Math.exp(rate);
|
|
65
78
|
}
|
|
66
|
-
exports.exchangeRateFromLnImpliedRate = exchangeRateFromLnImpliedRate;
|
|
67
79
|
/** Find the rate anchor that preserves the implied rate */
|
|
68
80
|
function findRateAnchor({ currentRateScalar, lastLnImpliedRate, secondsRemaining, liquidityAsset, liquidityPt, }) {
|
|
69
81
|
const newExchangeRate = exchangeRateFromLnImpliedRate({ lnImpliedRate: lastLnImpliedRate, secondsRemaining });
|
|
@@ -73,7 +85,6 @@ function findRateAnchor({ currentRateScalar, lastLnImpliedRate, secondsRemaining
|
|
|
73
85
|
// anchor = exchangeRate - p / scalar
|
|
74
86
|
return newExchangeRate - p / currentRateScalar;
|
|
75
87
|
}
|
|
76
|
-
exports.findRateAnchor = findRateAnchor;
|
|
77
88
|
/** Calculate fee on asset */
|
|
78
89
|
function tradeFee(netTraderAsset, currentFeeRate) {
|
|
79
90
|
if (currentFeeRate < 1) {
|
|
@@ -91,9 +102,8 @@ function tradeFee(netTraderAsset, currentFeeRate) {
|
|
|
91
102
|
}
|
|
92
103
|
return 0;
|
|
93
104
|
}
|
|
94
|
-
exports.tradeFee = tradeFee;
|
|
95
105
|
/** Calculate result of trading pt */
|
|
96
|
-
function tradePt({ liquidityPt, liquidityAsset, currentRateScalar, currentRateAnchor, currentFeeRate, netTraderPt, syExchangeRate, feeTreasurySyBps, isCurrentFlashSwap = false, }) {
|
|
106
|
+
function tradePt({ liquidityPt, liquidityAsset, currentRateScalar, currentRateAnchor, currentFeeRate, netTraderPt, syExchangeRate, feeTreasurySyBps, isCurrentFlashSwap = false, skipFees = false, }) {
|
|
97
107
|
// if netTradePt is positive, the trader is *buying* pt
|
|
98
108
|
const newPt = liquidityPt - netTraderPt;
|
|
99
109
|
const proportionPt = newPt / (liquidityPt + liquidityAsset);
|
|
@@ -111,7 +121,7 @@ function tradePt({ liquidityPt, liquidityAsset, currentRateScalar, currentRateAn
|
|
|
111
121
|
const ytValue = (1 - 1 / rate) * Math.abs(netTraderPt);
|
|
112
122
|
// Use ytValue for fee calculation during flash swaps, otherwise use preFeeNetTraderAsset
|
|
113
123
|
const feeBase = isCurrentFlashSwap ? ytValue : preFeeNetTraderAsset;
|
|
114
|
-
const feeAsset = tradeFee(feeBase, currentFeeRate);
|
|
124
|
+
const feeAsset = skipFees ? 0 : tradeFee(feeBase, currentFeeRate);
|
|
115
125
|
// if netTraderAsset is negative, the user is buying PT
|
|
116
126
|
// and the fee is positive, meaning they pay more asset
|
|
117
127
|
// subtracting the fee from the negative netPreFeeTraderAsset increases its magnitude
|
|
@@ -129,7 +139,6 @@ function tradePt({ liquidityPt, liquidityAsset, currentRateScalar, currentRateAn
|
|
|
129
139
|
treasuryFeeAmount,
|
|
130
140
|
};
|
|
131
141
|
}
|
|
132
|
-
exports.tradePt = tradePt;
|
|
133
142
|
function lpOutForTokensIn({ syIntent, ptIntent, lpSupply, syLiquidity, ptLiquidity, }) {
|
|
134
143
|
const lpFromPt = (ptIntent * lpSupply) / ptLiquidity;
|
|
135
144
|
const lpFromSy = (syIntent * lpSupply) / syLiquidity;
|
|
@@ -150,7 +159,6 @@ function lpOutForTokensIn({ syIntent, ptIntent, lpSupply, syLiquidity, ptLiquidi
|
|
|
150
159
|
};
|
|
151
160
|
}
|
|
152
161
|
}
|
|
153
|
-
exports.lpOutForTokensIn = lpOutForTokensIn;
|
|
154
162
|
class MarketCalculator {
|
|
155
163
|
state;
|
|
156
164
|
constructor(state) {
|
|
@@ -271,7 +279,7 @@ class MarketCalculator {
|
|
|
271
279
|
* If the trade is impossible, return null
|
|
272
280
|
* This can happen if there is not enough liquidity to sell YT for the amount of asset desired
|
|
273
281
|
*/
|
|
274
|
-
simSellYt(ytIn) {
|
|
282
|
+
simSellYt(ytIn, skipFees = false) {
|
|
275
283
|
try {
|
|
276
284
|
// first, clone the market calculator, so as not to modify the original
|
|
277
285
|
const mc = this.clone();
|
|
@@ -282,7 +290,7 @@ class MarketCalculator {
|
|
|
282
290
|
throw new Error("not enough PT liquidity to borrow for the flash swap");
|
|
283
291
|
}
|
|
284
292
|
// buy back PT with SY
|
|
285
|
-
const tradeRes = mc.calcTradePt(ytIn, true);
|
|
293
|
+
const tradeRes = mc.calcTradePt(ytIn, true, skipFees);
|
|
286
294
|
// negate the result to get the amount of asset spent
|
|
287
295
|
const assetSpend = -tradeRes.netTraderAsset;
|
|
288
296
|
// capture the mutated market calculator
|
|
@@ -310,6 +318,14 @@ class MarketCalculator {
|
|
|
310
318
|
return null;
|
|
311
319
|
}
|
|
312
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* @param ytIn - YT amount in lamports
|
|
323
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
324
|
+
*/
|
|
325
|
+
simSellYtWithImpliedApy(ytIn, impliedApy, skipFees = false) {
|
|
326
|
+
const impliedCalculator = this.withImpliedApy(impliedApy);
|
|
327
|
+
return impliedCalculator.simSellYt(ytIn, skipFees);
|
|
328
|
+
}
|
|
313
329
|
/** Calculate the amount of asset out for selling YT */
|
|
314
330
|
estimateYtInForExactBaseOut(assetOut) {
|
|
315
331
|
// find an amount of asset out that would balance the equation
|
|
@@ -332,7 +348,7 @@ class MarketCalculator {
|
|
|
332
348
|
return (0, bisect_1.bisectSearch2)(fn, lo, hi, 0.0000001);
|
|
333
349
|
}
|
|
334
350
|
/** Calculate the amount of asset to pay for buying YT */
|
|
335
|
-
calcBuyYt(ytOut) {
|
|
351
|
+
calcBuyYt(ytOut, skipFees = false) {
|
|
336
352
|
// flash swap for buying YT with assetIn
|
|
337
353
|
const fn = (assetIn) => {
|
|
338
354
|
const syIn = assetIn / this.currentSyExchangeRate;
|
|
@@ -357,7 +373,7 @@ class MarketCalculator {
|
|
|
357
373
|
}
|
|
358
374
|
// sell PT to the market for SY
|
|
359
375
|
// the trader sells exactly as much PT as they want to buy YT
|
|
360
|
-
const tradeRes = newMarketCalculator.calcTradePt(-ytOut, true);
|
|
376
|
+
const tradeRes = newMarketCalculator.calcTradePt(-ytOut, true, skipFees);
|
|
361
377
|
// The amount of asset returned plus the initial asset in must equal
|
|
362
378
|
// the amount of asset borrowed
|
|
363
379
|
const returnedAsset = tradeRes.netTraderAsset;
|
|
@@ -370,7 +386,7 @@ class MarketCalculator {
|
|
|
370
386
|
return assetIn;
|
|
371
387
|
}
|
|
372
388
|
/** Calculate the trade result for trading PT */
|
|
373
|
-
calcTradePt(netTraderPt, isCurrentFlashSwap = false) {
|
|
389
|
+
calcTradePt(netTraderPt, isCurrentFlashSwap = false, skipFees = false) {
|
|
374
390
|
const currentRateAnchor = this.findRateAnchor();
|
|
375
391
|
const currentFeeRate = this.feeRate;
|
|
376
392
|
const currentRateScalar = this.rateScalar;
|
|
@@ -384,6 +400,7 @@ class MarketCalculator {
|
|
|
384
400
|
syExchangeRate: this.currentSyExchangeRate,
|
|
385
401
|
feeTreasurySyBps: this.state.feeTreasurySyBps,
|
|
386
402
|
isCurrentFlashSwap,
|
|
403
|
+
skipFees,
|
|
387
404
|
});
|
|
388
405
|
const newLiquidityPt = this.liquidityPt - netTraderPt;
|
|
389
406
|
const newLiquidityAsset = this.liquidityAsset - res.netTraderAsset;
|
|
@@ -423,6 +440,52 @@ class MarketCalculator {
|
|
|
423
440
|
estimateNetPtForExactNetAsset(netTraderAsset) {
|
|
424
441
|
return this.calcExactPtForNetAsset(netTraderAsset);
|
|
425
442
|
}
|
|
443
|
+
/**
|
|
444
|
+
* @param netAssetIn - Net asset in lamports. Trade direction:
|
|
445
|
+
* - Positive: selling PT for underlying asset
|
|
446
|
+
* - Negative: buying PT with underlying asset
|
|
447
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
448
|
+
*/
|
|
449
|
+
estimateNetPtForExactNetAssetWithImpliedApy(netAssetIn, impliedApy, skipFees = false) {
|
|
450
|
+
const impliedCalculator = this.withImpliedApy(impliedApy);
|
|
451
|
+
return impliedCalculator.calcExactPtForNetAsset(netAssetIn, skipFees);
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* @param ptAmount - Amount of PT to sell in lamports
|
|
455
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
456
|
+
*/
|
|
457
|
+
estimateAssetOutForPtInWithImpliedApy(ptAmount, impliedApy, skipFees = false) {
|
|
458
|
+
const impliedCalculator = this.withImpliedApy(impliedApy);
|
|
459
|
+
try {
|
|
460
|
+
const tradeResult = impliedCalculator.calcTradePt(-ptAmount, false, skipFees);
|
|
461
|
+
return tradeResult.netTraderAsset;
|
|
462
|
+
}
|
|
463
|
+
catch (error) {
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
469
|
+
* @returns A new MarketCalculator instance with the implied APY
|
|
470
|
+
*/
|
|
471
|
+
withImpliedApy(impliedApy) {
|
|
472
|
+
// Calculate what ptPriceInAsset would give us the target APY
|
|
473
|
+
const yearSeconds = 365 * 24 * 3600;
|
|
474
|
+
const rateMultiplier = yearSeconds / this.secondsRemaining;
|
|
475
|
+
const targetPtPriceInAsset = rateMultiplier / (impliedApy + rateMultiplier);
|
|
476
|
+
// Convert ptPriceInAsset to exchangeRate (asset to PT)
|
|
477
|
+
// ptPriceInAsset = 1 / exchangeRate, so exchangeRate = 1 / ptPriceInAsset
|
|
478
|
+
const targetExchangeRate = 1 / targetPtPriceInAsset;
|
|
479
|
+
const targetLnImpliedRate = currentLnImpliedRate({
|
|
480
|
+
exchangeRate: targetExchangeRate,
|
|
481
|
+
secondsRemaining: this.secondsRemaining,
|
|
482
|
+
});
|
|
483
|
+
const newState = {
|
|
484
|
+
...this.state,
|
|
485
|
+
lastLnImpliedRate: targetLnImpliedRate,
|
|
486
|
+
};
|
|
487
|
+
return new MarketCalculator(newState);
|
|
488
|
+
}
|
|
426
489
|
simulateClassicLpWithdraw({ lpAmount }) {
|
|
427
490
|
const ptInPool = this.state.liquidityPt;
|
|
428
491
|
const syInPool = this.state.liquiditySy;
|
|
@@ -448,17 +511,17 @@ class MarketCalculator {
|
|
|
448
511
|
};
|
|
449
512
|
}
|
|
450
513
|
/** Deprecated - bad name - use estimateNetPtForExactNetAsset */
|
|
451
|
-
calcExactPtForNetAsset(netTraderAsset) {
|
|
514
|
+
calcExactPtForNetAsset(netTraderAsset, skipFees = false) {
|
|
452
515
|
if (netTraderAsset === 0) {
|
|
453
516
|
return 0;
|
|
454
517
|
}
|
|
455
|
-
return calcExactPtForNetAsset(this, netTraderAsset);
|
|
518
|
+
return calcExactPtForNetAsset(this, netTraderAsset, skipFees);
|
|
456
519
|
}
|
|
457
|
-
estimateYtOutForExactAssetIn(assetIn) {
|
|
520
|
+
estimateYtOutForExactAssetIn(assetIn, skipFees = false) {
|
|
458
521
|
if (assetIn === 0) {
|
|
459
522
|
return { ytOut: 0, feeInAsset: 0 };
|
|
460
523
|
}
|
|
461
|
-
const ytOut = estimateYtOutForExactAssetIn(this, assetIn);
|
|
524
|
+
const ytOut = estimateYtOutForExactAssetIn(this, assetIn, skipFees);
|
|
462
525
|
const syIn = assetIn / this.currentSyExchangeRate;
|
|
463
526
|
const targetSy = ytOut / this.currentSyExchangeRate;
|
|
464
527
|
const syToBorrow = targetSy - syIn;
|
|
@@ -466,6 +529,14 @@ class MarketCalculator {
|
|
|
466
529
|
const feeInAsset = tradeFee((1 - 1 / this.exchangeRate) * syToBorrowInAsset, this.feeRate);
|
|
467
530
|
return { ytOut, feeInAsset };
|
|
468
531
|
}
|
|
532
|
+
/**
|
|
533
|
+
* @param assetIn - Asset amount in lamports
|
|
534
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
535
|
+
*/
|
|
536
|
+
estimateYtOutForExactAssetInWithImpliedApy(assetIn, impliedApy, skipFees = false) {
|
|
537
|
+
const impliedCalculator = this.withImpliedApy(impliedApy);
|
|
538
|
+
return impliedCalculator.estimateYtOutForExactAssetIn(assetIn, skipFees);
|
|
539
|
+
}
|
|
469
540
|
exchangeRateFromLnImpliedRate(lnImpliedRate) {
|
|
470
541
|
return exchangeRateFromLnImpliedRate({
|
|
471
542
|
lnImpliedRate,
|
|
@@ -587,22 +658,21 @@ class MarketCalculator {
|
|
|
587
658
|
}
|
|
588
659
|
}
|
|
589
660
|
exports.MarketCalculator = MarketCalculator;
|
|
590
|
-
function calcExactPtForNetAsset(c, netTraderAsset) {
|
|
661
|
+
function calcExactPtForNetAsset(c, netTraderAsset, skipFees = false) {
|
|
591
662
|
const isBuyPt = netTraderAsset < 0;
|
|
592
663
|
if (isBuyPt) {
|
|
593
664
|
// negate netTraderAsset, because it is negative
|
|
594
665
|
// the search function expects a positive assetIn
|
|
595
|
-
return estimatePtOutForExactAssetIn(c, -netTraderAsset);
|
|
666
|
+
return estimatePtOutForExactAssetIn(c, -netTraderAsset, skipFees);
|
|
596
667
|
}
|
|
597
668
|
else {
|
|
598
|
-
return estimatePtInForExactAssetOut(c, netTraderAsset);
|
|
669
|
+
return estimatePtInForExactAssetOut(c, netTraderAsset, skipFees);
|
|
599
670
|
}
|
|
600
671
|
}
|
|
601
|
-
|
|
602
|
-
function estimatePtOutForExactAssetIn(c, assetIn) {
|
|
672
|
+
function estimatePtOutForExactAssetIn(c, assetIn, skipFees = false) {
|
|
603
673
|
const fn = (pt) => {
|
|
604
674
|
try {
|
|
605
|
-
const res = c.calcTradePt(pt, false);
|
|
675
|
+
const res = c.calcTradePt(pt, false, skipFees);
|
|
606
676
|
const assetSpend = -res.netTraderAsset;
|
|
607
677
|
return assetSpend - assetIn;
|
|
608
678
|
}
|
|
@@ -616,10 +686,10 @@ function estimatePtOutForExactAssetIn(c, assetIn) {
|
|
|
616
686
|
const hi = c.liquidityPt * 0.9999999;
|
|
617
687
|
return (0, bisect_1.bisectSearch2)(fn, lo, hi, 0.0000001);
|
|
618
688
|
}
|
|
619
|
-
function estimatePtInForExactAssetOut(c, assetOut) {
|
|
689
|
+
function estimatePtInForExactAssetOut(c, assetOut, skipFees = false) {
|
|
620
690
|
const fn = (pt) => {
|
|
621
691
|
// negate PT to signal that the trader is selling PT
|
|
622
|
-
const res = c.calcTradePt(-pt, false);
|
|
692
|
+
const res = c.calcTradePt(-pt, false, skipFees);
|
|
623
693
|
// for very large sales of PT in, the trade will fail by returning 0 asset
|
|
624
694
|
// signal this by returning a high value
|
|
625
695
|
if (res.netTraderPt < 0 && res.netTraderAsset === 0) {
|
|
@@ -634,7 +704,7 @@ function estimatePtInForExactAssetOut(c, assetOut) {
|
|
|
634
704
|
const hi = pricePtInAsset * assetOut * 2;
|
|
635
705
|
return (0, bisect_1.bisectSearch2)(fn, lo, hi, 0.0000001);
|
|
636
706
|
}
|
|
637
|
-
function estimateYtOutForExactAssetIn(c, assetIn) {
|
|
707
|
+
function estimateYtOutForExactAssetIn(c, assetIn, skipFees = false) {
|
|
638
708
|
const ytToAssetExchangeRate = Math.min(1 - 1 / c.exchangeRate, 1);
|
|
639
709
|
let lo = 0;
|
|
640
710
|
let hi = assetIn / ytToAssetExchangeRate;
|
|
@@ -649,7 +719,7 @@ function estimateYtOutForExactAssetIn(c, assetIn) {
|
|
|
649
719
|
let bestDiff = Infinity;
|
|
650
720
|
while (iterations < MAX_ITERATIONS) {
|
|
651
721
|
const mid = (lo + hi) / 2;
|
|
652
|
-
const assetInForYtOut = c.calcBuyYt(mid);
|
|
722
|
+
const assetInForYtOut = c.calcBuyYt(mid, skipFees);
|
|
653
723
|
const syIn = assetIn / c.currentSyExchangeRate;
|
|
654
724
|
const targetSy = mid / c.currentSyExchangeRate;
|
|
655
725
|
const syToBorrow = targetSy - syIn;
|
|
@@ -688,19 +758,16 @@ function estimateYtOutForExactAssetIn(c, assetIn) {
|
|
|
688
758
|
console.log("Failed to converge after", MAX_ITERATIONS, "iterations, returning best approximation:", bestApproximation);
|
|
689
759
|
return bestApproximation;
|
|
690
760
|
}
|
|
691
|
-
exports.estimateYtOutForExactAssetIn = estimateYtOutForExactAssetIn;
|
|
692
761
|
function calcYieldExposureWithAssetIn(c, assetIn) {
|
|
693
762
|
const amountSy = assetIn / c.currentSyExchangeRate;
|
|
694
763
|
const toStrip = (amountSy * c.liquidityPt) / (c.currentSyExchangeRate * c.liquiditySy + c.liquidityPt);
|
|
695
764
|
return toStrip;
|
|
696
765
|
}
|
|
697
|
-
exports.calcYieldExposureWithAssetIn = calcYieldExposureWithAssetIn;
|
|
698
766
|
function calcWithdrawLiquidity(c, lpAmount) {
|
|
699
767
|
const syOut = (c.liquiditySy * lpAmount) / Number(c.state.lpTokenSupply);
|
|
700
768
|
const ptOut = (c.liquidityPt * lpAmount) / Number(c.state.lpTokenSupply);
|
|
701
769
|
return { syOut, ptOut };
|
|
702
770
|
}
|
|
703
|
-
exports.calcWithdrawLiquidity = calcWithdrawLiquidity;
|
|
704
771
|
function calcWithdrawLiquidityToBase(c, lpAmount) {
|
|
705
772
|
const { syOut, ptOut } = calcWithdrawLiquidity(c, lpAmount);
|
|
706
773
|
const ptForAsset = c.calcTradePt(-ptOut, false).netTraderAsset;
|
|
@@ -708,7 +775,6 @@ function calcWithdrawLiquidityToBase(c, lpAmount) {
|
|
|
708
775
|
const assetOut = assetForSy + ptForAsset;
|
|
709
776
|
return { assetOut, assetForSy, ptOut };
|
|
710
777
|
}
|
|
711
|
-
exports.calcWithdrawLiquidityToBase = calcWithdrawLiquidityToBase;
|
|
712
778
|
/** Calculate the maximum amount of YT that can be purchased while keeping price impact under maxPriceImpactPercentage
|
|
713
779
|
* @param maxPriceImpactPercentage - The maximum allowed price impact as a percentage (e.g. 1 = 1%)
|
|
714
780
|
* @returns The maximum amount of YT that can be purchased, or null if no valid amount found
|
|
@@ -747,7 +813,6 @@ function calcMaxYtOutForPriceImpact(c, maxPriceImpactPercentage) {
|
|
|
747
813
|
const maxPtToSell = Math.min(Math.abs(maxPtFromPriceImpact), maxPtFromLiquidity);
|
|
748
814
|
return maxPtToSell > 0 ? maxPtToSell : null;
|
|
749
815
|
}
|
|
750
|
-
exports.calcMaxYtOutForPriceImpact = calcMaxYtOutForPriceImpact;
|
|
751
816
|
/**
|
|
752
817
|
* Calculate the balanced deposit amounts for liquidity provisioning.
|
|
753
818
|
* Given a total amount of SY (converted from base tokens), this function
|
|
@@ -817,7 +882,6 @@ function calcBalancedDeposit(c, totalSy) {
|
|
|
817
882
|
syRemainder: depositSY,
|
|
818
883
|
};
|
|
819
884
|
}
|
|
820
|
-
exports.calcBalancedDeposit = calcBalancedDeposit;
|
|
821
885
|
/** Calculate the amount of LP tokens that will be received for a wrapper_provide_liquidity_base deposit
|
|
822
886
|
* @param marketCalculator - The market calculator instance
|
|
823
887
|
* @param baseAmount - The amount of base tokens being deposited (will be converted to SY using exchange rate)
|
|
@@ -886,5 +950,4 @@ function simulateWrapperProvideLiquidityBase(marketCalculator, baseAmount) {
|
|
|
886
950
|
return null;
|
|
887
951
|
}
|
|
888
952
|
}
|
|
889
|
-
exports.simulateWrapperProvideLiquidityBase = simulateWrapperProvideLiquidityBase;
|
|
890
953
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -158,6 +158,7 @@ export function tradePt({
|
|
|
158
158
|
syExchangeRate,
|
|
159
159
|
feeTreasurySyBps,
|
|
160
160
|
isCurrentFlashSwap = false,
|
|
161
|
+
skipFees = false,
|
|
161
162
|
}: {
|
|
162
163
|
liquidityPt: number
|
|
163
164
|
liquidityAsset: number
|
|
@@ -168,6 +169,7 @@ export function tradePt({
|
|
|
168
169
|
syExchangeRate: number
|
|
169
170
|
feeTreasurySyBps: number
|
|
170
171
|
isCurrentFlashSwap?: boolean
|
|
172
|
+
skipFees?: boolean
|
|
171
173
|
}): TradeResult {
|
|
172
174
|
// if netTradePt is positive, the trader is *buying* pt
|
|
173
175
|
const newPt = liquidityPt - netTraderPt
|
|
@@ -190,7 +192,8 @@ export function tradePt({
|
|
|
190
192
|
|
|
191
193
|
// Use ytValue for fee calculation during flash swaps, otherwise use preFeeNetTraderAsset
|
|
192
194
|
const feeBase = isCurrentFlashSwap ? ytValue : preFeeNetTraderAsset
|
|
193
|
-
|
|
195
|
+
|
|
196
|
+
const feeAsset = skipFees ? 0 : tradeFee(feeBase, currentFeeRate)
|
|
194
197
|
|
|
195
198
|
// if netTraderAsset is negative, the user is buying PT
|
|
196
199
|
// and the fee is positive, meaning they pay more asset
|
|
@@ -429,7 +432,7 @@ export class MarketCalculator {
|
|
|
429
432
|
* If the trade is impossible, return null
|
|
430
433
|
* This can happen if there is not enough liquidity to sell YT for the amount of asset desired
|
|
431
434
|
*/
|
|
432
|
-
simSellYt(ytIn: number): { assetOut: number; feeInAsset: number; newMarketCalculator: MarketCalculator } | null {
|
|
435
|
+
simSellYt(ytIn: number, skipFees: boolean = false): { assetOut: number; feeInAsset: number; newMarketCalculator: MarketCalculator } | null {
|
|
433
436
|
try {
|
|
434
437
|
// first, clone the market calculator, so as not to modify the original
|
|
435
438
|
const mc = this.clone()
|
|
@@ -444,7 +447,7 @@ export class MarketCalculator {
|
|
|
444
447
|
}
|
|
445
448
|
|
|
446
449
|
// buy back PT with SY
|
|
447
|
-
const tradeRes = mc.calcTradePt(ytIn, true)
|
|
450
|
+
const tradeRes = mc.calcTradePt(ytIn, true, skipFees)
|
|
448
451
|
|
|
449
452
|
// negate the result to get the amount of asset spent
|
|
450
453
|
const assetSpend = -tradeRes.netTraderAsset
|
|
@@ -481,6 +484,19 @@ export class MarketCalculator {
|
|
|
481
484
|
}
|
|
482
485
|
}
|
|
483
486
|
|
|
487
|
+
/**
|
|
488
|
+
* @param ytIn - YT amount in lamports
|
|
489
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
490
|
+
*/
|
|
491
|
+
simSellYtWithImpliedApy(
|
|
492
|
+
ytIn: number,
|
|
493
|
+
impliedApy: number,
|
|
494
|
+
skipFees: boolean = false,
|
|
495
|
+
): { assetOut: number; feeInAsset: number; newMarketCalculator: MarketCalculator } | null {
|
|
496
|
+
const impliedCalculator = this.withImpliedApy(impliedApy)
|
|
497
|
+
return impliedCalculator.simSellYt(ytIn, skipFees)
|
|
498
|
+
}
|
|
499
|
+
|
|
484
500
|
/** Calculate the amount of asset out for selling YT */
|
|
485
501
|
estimateYtInForExactBaseOut(assetOut: number): number | null {
|
|
486
502
|
// find an amount of asset out that would balance the equation
|
|
@@ -509,7 +525,7 @@ export class MarketCalculator {
|
|
|
509
525
|
}
|
|
510
526
|
|
|
511
527
|
/** Calculate the amount of asset to pay for buying YT */
|
|
512
|
-
calcBuyYt(ytOut: number): number | null {
|
|
528
|
+
calcBuyYt(ytOut: number, skipFees: boolean = false): number | null {
|
|
513
529
|
// flash swap for buying YT with assetIn
|
|
514
530
|
const fn = (assetIn: number) => {
|
|
515
531
|
const syIn = assetIn / this.currentSyExchangeRate
|
|
@@ -540,7 +556,7 @@ export class MarketCalculator {
|
|
|
540
556
|
|
|
541
557
|
// sell PT to the market for SY
|
|
542
558
|
// the trader sells exactly as much PT as they want to buy YT
|
|
543
|
-
const tradeRes = newMarketCalculator.calcTradePt(-ytOut, true)
|
|
559
|
+
const tradeRes = newMarketCalculator.calcTradePt(-ytOut, true, skipFees)
|
|
544
560
|
|
|
545
561
|
// The amount of asset returned plus the initial asset in must equal
|
|
546
562
|
// the amount of asset borrowed
|
|
@@ -559,7 +575,11 @@ export class MarketCalculator {
|
|
|
559
575
|
}
|
|
560
576
|
|
|
561
577
|
/** Calculate the trade result for trading PT */
|
|
562
|
-
calcTradePt(
|
|
578
|
+
calcTradePt(
|
|
579
|
+
netTraderPt: number,
|
|
580
|
+
isCurrentFlashSwap: boolean = false,
|
|
581
|
+
skipFees: boolean = false,
|
|
582
|
+
): CalculatorTradeResult {
|
|
563
583
|
const currentRateAnchor = this.findRateAnchor()
|
|
564
584
|
const currentFeeRate = this.feeRate
|
|
565
585
|
const currentRateScalar = this.rateScalar
|
|
@@ -573,6 +593,7 @@ export class MarketCalculator {
|
|
|
573
593
|
syExchangeRate: this.currentSyExchangeRate,
|
|
574
594
|
feeTreasurySyBps: this.state.feeTreasurySyBps,
|
|
575
595
|
isCurrentFlashSwap,
|
|
596
|
+
skipFees,
|
|
576
597
|
})
|
|
577
598
|
|
|
578
599
|
const newLiquidityPt = this.liquidityPt - netTraderPt
|
|
@@ -620,6 +641,63 @@ export class MarketCalculator {
|
|
|
620
641
|
return this.calcExactPtForNetAsset(netTraderAsset)
|
|
621
642
|
}
|
|
622
643
|
|
|
644
|
+
/**
|
|
645
|
+
* @param netAssetIn - Net asset in lamports. Trade direction:
|
|
646
|
+
* - Positive: selling PT for underlying asset
|
|
647
|
+
* - Negative: buying PT with underlying asset
|
|
648
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
649
|
+
*/
|
|
650
|
+
estimateNetPtForExactNetAssetWithImpliedApy(
|
|
651
|
+
netAssetIn: number,
|
|
652
|
+
impliedApy: number,
|
|
653
|
+
skipFees: boolean = false,
|
|
654
|
+
): number | null {
|
|
655
|
+
const impliedCalculator = this.withImpliedApy(impliedApy)
|
|
656
|
+
return impliedCalculator.calcExactPtForNetAsset(netAssetIn, skipFees)
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/**
|
|
660
|
+
* @param ptAmount - Amount of PT to sell in lamports
|
|
661
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
662
|
+
*/
|
|
663
|
+
estimateAssetOutForPtInWithImpliedApy(ptAmount: number, impliedApy: number, skipFees: boolean = false): number | null {
|
|
664
|
+
const impliedCalculator = this.withImpliedApy(impliedApy)
|
|
665
|
+
|
|
666
|
+
try {
|
|
667
|
+
const tradeResult = impliedCalculator.calcTradePt(-ptAmount, false, skipFees)
|
|
668
|
+
return tradeResult.netTraderAsset
|
|
669
|
+
} catch (error) {
|
|
670
|
+
return null
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
/**
|
|
675
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
676
|
+
* @returns A new MarketCalculator instance with the implied APY
|
|
677
|
+
*/
|
|
678
|
+
withImpliedApy(impliedApy: number): MarketCalculator {
|
|
679
|
+
// Calculate what ptPriceInAsset would give us the target APY
|
|
680
|
+
const yearSeconds = 365 * 24 * 3600
|
|
681
|
+
const rateMultiplier = yearSeconds / this.secondsRemaining
|
|
682
|
+
const targetPtPriceInAsset = rateMultiplier / (impliedApy + rateMultiplier)
|
|
683
|
+
|
|
684
|
+
// Convert ptPriceInAsset to exchangeRate (asset to PT)
|
|
685
|
+
// ptPriceInAsset = 1 / exchangeRate, so exchangeRate = 1 / ptPriceInAsset
|
|
686
|
+
const targetExchangeRate = 1 / targetPtPriceInAsset
|
|
687
|
+
|
|
688
|
+
const targetLnImpliedRate = currentLnImpliedRate({
|
|
689
|
+
exchangeRate: targetExchangeRate,
|
|
690
|
+
secondsRemaining: this.secondsRemaining,
|
|
691
|
+
})
|
|
692
|
+
|
|
693
|
+
const newState = {
|
|
694
|
+
...this.state,
|
|
695
|
+
lastLnImpliedRate: targetLnImpliedRate,
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
return new MarketCalculator(newState)
|
|
699
|
+
}
|
|
700
|
+
|
|
623
701
|
simulateClassicLpWithdraw({ lpAmount }: { lpAmount: number }): {
|
|
624
702
|
assetOut: number
|
|
625
703
|
ptOut: number
|
|
@@ -659,18 +737,18 @@ export class MarketCalculator {
|
|
|
659
737
|
}
|
|
660
738
|
|
|
661
739
|
/** Deprecated - bad name - use estimateNetPtForExactNetAsset */
|
|
662
|
-
calcExactPtForNetAsset(netTraderAsset: number): number | null {
|
|
740
|
+
calcExactPtForNetAsset(netTraderAsset: number, skipFees: boolean = false): number | null {
|
|
663
741
|
if (netTraderAsset === 0) {
|
|
664
742
|
return 0
|
|
665
743
|
}
|
|
666
|
-
return calcExactPtForNetAsset(this, netTraderAsset)
|
|
744
|
+
return calcExactPtForNetAsset(this, netTraderAsset, skipFees)
|
|
667
745
|
}
|
|
668
746
|
|
|
669
|
-
estimateYtOutForExactAssetIn(assetIn: number): { ytOut: number; feeInAsset: number } | null {
|
|
747
|
+
estimateYtOutForExactAssetIn(assetIn: number, skipFees: boolean = false): { ytOut: number; feeInAsset: number } | null {
|
|
670
748
|
if (assetIn === 0) {
|
|
671
749
|
return { ytOut: 0, feeInAsset: 0 }
|
|
672
750
|
}
|
|
673
|
-
const ytOut = estimateYtOutForExactAssetIn(this, assetIn)
|
|
751
|
+
const ytOut = estimateYtOutForExactAssetIn(this, assetIn, skipFees)
|
|
674
752
|
|
|
675
753
|
const syIn = assetIn / this.currentSyExchangeRate
|
|
676
754
|
const targetSy = ytOut / this.currentSyExchangeRate
|
|
@@ -681,6 +759,19 @@ export class MarketCalculator {
|
|
|
681
759
|
return { ytOut, feeInAsset }
|
|
682
760
|
}
|
|
683
761
|
|
|
762
|
+
/**
|
|
763
|
+
* @param assetIn - Asset amount in lamports
|
|
764
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
765
|
+
*/
|
|
766
|
+
estimateYtOutForExactAssetInWithImpliedApy(
|
|
767
|
+
assetIn: number,
|
|
768
|
+
impliedApy: number,
|
|
769
|
+
skipFees: boolean = false,
|
|
770
|
+
): { ytOut: number; feeInAsset: number } | null {
|
|
771
|
+
const impliedCalculator = this.withImpliedApy(impliedApy)
|
|
772
|
+
return impliedCalculator.estimateYtOutForExactAssetIn(assetIn, skipFees)
|
|
773
|
+
}
|
|
774
|
+
|
|
684
775
|
exchangeRateFromLnImpliedRate(lnImpliedRate: number): number {
|
|
685
776
|
return exchangeRateFromLnImpliedRate({
|
|
686
777
|
lnImpliedRate,
|
|
@@ -838,21 +929,21 @@ export interface CalculatorTradeResult {
|
|
|
838
929
|
newMarketCalculator: MarketCalculator
|
|
839
930
|
}
|
|
840
931
|
|
|
841
|
-
export function calcExactPtForNetAsset(c: MarketCalculator, netTraderAsset: number): number | null {
|
|
932
|
+
export function calcExactPtForNetAsset(c: MarketCalculator, netTraderAsset: number, skipFees: boolean = false): number | null {
|
|
842
933
|
const isBuyPt = netTraderAsset < 0
|
|
843
934
|
if (isBuyPt) {
|
|
844
935
|
// negate netTraderAsset, because it is negative
|
|
845
936
|
// the search function expects a positive assetIn
|
|
846
|
-
return estimatePtOutForExactAssetIn(c, -netTraderAsset)
|
|
937
|
+
return estimatePtOutForExactAssetIn(c, -netTraderAsset, skipFees)
|
|
847
938
|
} else {
|
|
848
|
-
return estimatePtInForExactAssetOut(c, netTraderAsset)
|
|
939
|
+
return estimatePtInForExactAssetOut(c, netTraderAsset, skipFees)
|
|
849
940
|
}
|
|
850
941
|
}
|
|
851
942
|
|
|
852
|
-
function estimatePtOutForExactAssetIn(c: MarketCalculator, assetIn: number): number | null {
|
|
943
|
+
function estimatePtOutForExactAssetIn(c: MarketCalculator, assetIn: number, skipFees: boolean = false): number | null {
|
|
853
944
|
const fn = (pt: number) => {
|
|
854
945
|
try {
|
|
855
|
-
const res = c.calcTradePt(pt, false)
|
|
946
|
+
const res = c.calcTradePt(pt, false, skipFees)
|
|
856
947
|
const assetSpend = -res.netTraderAsset
|
|
857
948
|
return assetSpend - assetIn
|
|
858
949
|
} catch {
|
|
@@ -866,10 +957,10 @@ function estimatePtOutForExactAssetIn(c: MarketCalculator, assetIn: number): num
|
|
|
866
957
|
return bisectSearch2(fn, lo, hi, 0.0000001)
|
|
867
958
|
}
|
|
868
959
|
|
|
869
|
-
function estimatePtInForExactAssetOut(c: MarketCalculator, assetOut: number): number | null {
|
|
960
|
+
function estimatePtInForExactAssetOut(c: MarketCalculator, assetOut: number, skipFees: boolean = false): number | null {
|
|
870
961
|
const fn = (pt: number) => {
|
|
871
962
|
// negate PT to signal that the trader is selling PT
|
|
872
|
-
const res = c.calcTradePt(-pt, false)
|
|
963
|
+
const res = c.calcTradePt(-pt, false, skipFees)
|
|
873
964
|
|
|
874
965
|
// for very large sales of PT in, the trade will fail by returning 0 asset
|
|
875
966
|
// signal this by returning a high value
|
|
@@ -887,7 +978,7 @@ function estimatePtInForExactAssetOut(c: MarketCalculator, assetOut: number): nu
|
|
|
887
978
|
return bisectSearch2(fn, lo, hi, 0.0000001)
|
|
888
979
|
}
|
|
889
980
|
|
|
890
|
-
export function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: number): number | null {
|
|
981
|
+
export function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: number, skipFees: boolean = false): number | null {
|
|
891
982
|
const ytToAssetExchangeRate = Math.min(1 - 1 / c.exchangeRate, 1)
|
|
892
983
|
let lo = 0
|
|
893
984
|
let hi = assetIn / ytToAssetExchangeRate
|
|
@@ -905,7 +996,7 @@ export function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: numbe
|
|
|
905
996
|
|
|
906
997
|
while (iterations < MAX_ITERATIONS) {
|
|
907
998
|
const mid = (lo + hi) / 2
|
|
908
|
-
const assetInForYtOut = c.calcBuyYt(mid)
|
|
999
|
+
const assetInForYtOut = c.calcBuyYt(mid, skipFees)
|
|
909
1000
|
|
|
910
1001
|
const syIn = assetIn / c.currentSyExchangeRate
|
|
911
1002
|
const targetSy = mid / c.currentSyExchangeRate
|