@exponent-labs/market-math 0.1.7 → 0.9.0
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/index.d.ts +48 -8
- package/build/index.js +111 -38
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +150 -38
package/build/index.d.ts
CHANGED
|
@@ -36,14 +36,17 @@ 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, 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;
|
|
43
43
|
currentRateAnchor: number;
|
|
44
44
|
currentFeeRate: number;
|
|
45
45
|
netTraderPt: number;
|
|
46
|
+
syExchangeRate: number;
|
|
47
|
+
feeTreasurySyBps: number;
|
|
46
48
|
isCurrentFlashSwap?: boolean;
|
|
49
|
+
skipFees?: boolean;
|
|
47
50
|
}): TradeResult;
|
|
48
51
|
export interface LiquidityAdd {
|
|
49
52
|
syIn: number;
|
|
@@ -66,6 +69,7 @@ export interface TradeResult {
|
|
|
66
69
|
feeAsset: number;
|
|
67
70
|
netTraderAsset: number;
|
|
68
71
|
netTraderPt: number;
|
|
72
|
+
treasuryFeeAmount: number;
|
|
69
73
|
}
|
|
70
74
|
export interface MarketMathState {
|
|
71
75
|
liquiditySy: number;
|
|
@@ -132,7 +136,16 @@ export declare class MarketCalculator {
|
|
|
132
136
|
* If the trade is impossible, return null
|
|
133
137
|
* This can happen if there is not enough liquidity to sell YT for the amount of asset desired
|
|
134
138
|
*/
|
|
135
|
-
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): {
|
|
136
149
|
assetOut: number;
|
|
137
150
|
feeInAsset: number;
|
|
138
151
|
newMarketCalculator: MarketCalculator;
|
|
@@ -140,10 +153,27 @@ export declare class MarketCalculator {
|
|
|
140
153
|
/** Calculate the amount of asset out for selling YT */
|
|
141
154
|
estimateYtInForExactBaseOut(assetOut: number): number | null;
|
|
142
155
|
/** Calculate the amount of asset to pay for buying YT */
|
|
143
|
-
calcBuyYt(ytOut: number): number | null;
|
|
156
|
+
calcBuyYt(ytOut: number, skipFees?: boolean): number | null;
|
|
144
157
|
/** Calculate the trade result for trading PT */
|
|
145
|
-
calcTradePt(netTraderPt: number, isCurrentFlashSwap?: boolean): CalculatorTradeResult;
|
|
158
|
+
calcTradePt(netTraderPt: number, isCurrentFlashSwap?: boolean, skipFees?: boolean): CalculatorTradeResult;
|
|
146
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;
|
|
147
177
|
simulateClassicLpWithdraw({ lpAmount }: {
|
|
148
178
|
lpAmount: number;
|
|
149
179
|
}): {
|
|
@@ -156,8 +186,16 @@ export declare class MarketCalculator {
|
|
|
156
186
|
assetOut: number;
|
|
157
187
|
};
|
|
158
188
|
/** Deprecated - bad name - use estimateNetPtForExactNetAsset */
|
|
159
|
-
calcExactPtForNetAsset(netTraderAsset: number): number | null;
|
|
160
|
-
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): {
|
|
161
199
|
ytOut: number;
|
|
162
200
|
feeInAsset: number;
|
|
163
201
|
} | null;
|
|
@@ -201,10 +239,11 @@ export interface CalculatorTradeResult {
|
|
|
201
239
|
feeAsset: number;
|
|
202
240
|
netTraderAsset: number;
|
|
203
241
|
netTraderPt: number;
|
|
242
|
+
treasuryFeeAmount: number;
|
|
204
243
|
newMarketCalculator: MarketCalculator;
|
|
205
244
|
}
|
|
206
|
-
export declare function calcExactPtForNetAsset(c: MarketCalculator, netTraderAsset: number): number | null;
|
|
207
|
-
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;
|
|
208
247
|
export declare function calcYieldExposureWithAssetIn(c: MarketCalculator, assetIn: number): number;
|
|
209
248
|
export declare function calcWithdrawLiquidity(c: MarketCalculator, lpAmount: number): {
|
|
210
249
|
syOut: number;
|
|
@@ -247,6 +286,7 @@ export declare function simulateWrapperProvideLiquidityBase(marketCalculator: Ma
|
|
|
247
286
|
lpOut: number;
|
|
248
287
|
ptTradePrice: number;
|
|
249
288
|
feeAsset: number;
|
|
289
|
+
treasuryFeeAmount: number;
|
|
250
290
|
assetSpendOnTrade: number;
|
|
251
291
|
assetDeposited: number;
|
|
252
292
|
ptToBuy: number;
|
package/build/index.js
CHANGED
|
@@ -93,7 +93,7 @@ function tradeFee(netTraderAsset, currentFeeRate) {
|
|
|
93
93
|
}
|
|
94
94
|
exports.tradeFee = tradeFee;
|
|
95
95
|
/** Calculate result of trading pt */
|
|
96
|
-
function tradePt({ liquidityPt, liquidityAsset, currentRateScalar, currentRateAnchor, currentFeeRate, netTraderPt, isCurrentFlashSwap = false, }) {
|
|
96
|
+
function tradePt({ liquidityPt, liquidityAsset, currentRateScalar, currentRateAnchor, currentFeeRate, netTraderPt, syExchangeRate, feeTreasurySyBps, isCurrentFlashSwap = false, skipFees = false, }) {
|
|
97
97
|
// if netTradePt is positive, the trader is *buying* pt
|
|
98
98
|
const newPt = liquidityPt - netTraderPt;
|
|
99
99
|
const proportionPt = newPt / (liquidityPt + liquidityAsset);
|
|
@@ -111,17 +111,22 @@ function tradePt({ liquidityPt, liquidityAsset, currentRateScalar, currentRateAn
|
|
|
111
111
|
const ytValue = (1 - 1 / rate) * Math.abs(netTraderPt);
|
|
112
112
|
// Use ytValue for fee calculation during flash swaps, otherwise use preFeeNetTraderAsset
|
|
113
113
|
const feeBase = isCurrentFlashSwap ? ytValue : preFeeNetTraderAsset;
|
|
114
|
-
const feeAsset = tradeFee(feeBase, currentFeeRate);
|
|
114
|
+
const feeAsset = skipFees ? 0 : tradeFee(feeBase, currentFeeRate);
|
|
115
115
|
// if netTraderAsset is negative, the user is buying PT
|
|
116
116
|
// and the fee is positive, meaning they pay more asset
|
|
117
117
|
// subtracting the fee from the negative netPreFeeTraderAsset increases its magnitude
|
|
118
118
|
// if netTraderAsset is positive, the user is selling PT
|
|
119
119
|
// and the fee is positive, meaning they receive less asset
|
|
120
120
|
const netTraderAsset = preFeeNetTraderAsset - feeAsset;
|
|
121
|
+
// Convert fee to SY units (matching Rust: sy_fee_from_asset_fee)
|
|
122
|
+
const syFee = Math.floor(feeAsset / syExchangeRate);
|
|
123
|
+
// Calculate treasury fee amount (matching Rust implementation)
|
|
124
|
+
const treasuryFeeAmount = Math.floor((syFee * feeTreasurySyBps) / 10_000);
|
|
121
125
|
return {
|
|
122
126
|
feeAsset,
|
|
123
127
|
netTraderAsset,
|
|
124
128
|
netTraderPt,
|
|
129
|
+
treasuryFeeAmount,
|
|
125
130
|
};
|
|
126
131
|
}
|
|
127
132
|
exports.tradePt = tradePt;
|
|
@@ -266,7 +271,7 @@ class MarketCalculator {
|
|
|
266
271
|
* If the trade is impossible, return null
|
|
267
272
|
* This can happen if there is not enough liquidity to sell YT for the amount of asset desired
|
|
268
273
|
*/
|
|
269
|
-
simSellYt(ytIn) {
|
|
274
|
+
simSellYt(ytIn, skipFees = false) {
|
|
270
275
|
try {
|
|
271
276
|
// first, clone the market calculator, so as not to modify the original
|
|
272
277
|
const mc = this.clone();
|
|
@@ -277,7 +282,7 @@ class MarketCalculator {
|
|
|
277
282
|
throw new Error("not enough PT liquidity to borrow for the flash swap");
|
|
278
283
|
}
|
|
279
284
|
// buy back PT with SY
|
|
280
|
-
const tradeRes = mc.calcTradePt(ytIn, true);
|
|
285
|
+
const tradeRes = mc.calcTradePt(ytIn, true, skipFees);
|
|
281
286
|
// negate the result to get the amount of asset spent
|
|
282
287
|
const assetSpend = -tradeRes.netTraderAsset;
|
|
283
288
|
// capture the mutated market calculator
|
|
@@ -305,6 +310,14 @@ class MarketCalculator {
|
|
|
305
310
|
return null;
|
|
306
311
|
}
|
|
307
312
|
}
|
|
313
|
+
/**
|
|
314
|
+
* @param ytIn - YT amount in lamports
|
|
315
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
316
|
+
*/
|
|
317
|
+
simSellYtWithImpliedApy(ytIn, impliedApy, skipFees = false) {
|
|
318
|
+
const impliedCalculator = this.withImpliedApy(impliedApy);
|
|
319
|
+
return impliedCalculator.simSellYt(ytIn, skipFees);
|
|
320
|
+
}
|
|
308
321
|
/** Calculate the amount of asset out for selling YT */
|
|
309
322
|
estimateYtInForExactBaseOut(assetOut) {
|
|
310
323
|
// find an amount of asset out that would balance the equation
|
|
@@ -327,7 +340,7 @@ class MarketCalculator {
|
|
|
327
340
|
return (0, bisect_1.bisectSearch2)(fn, lo, hi, 0.0000001);
|
|
328
341
|
}
|
|
329
342
|
/** Calculate the amount of asset to pay for buying YT */
|
|
330
|
-
calcBuyYt(ytOut) {
|
|
343
|
+
calcBuyYt(ytOut, skipFees = false) {
|
|
331
344
|
// flash swap for buying YT with assetIn
|
|
332
345
|
const fn = (assetIn) => {
|
|
333
346
|
const syIn = assetIn / this.currentSyExchangeRate;
|
|
@@ -352,7 +365,7 @@ class MarketCalculator {
|
|
|
352
365
|
}
|
|
353
366
|
// sell PT to the market for SY
|
|
354
367
|
// the trader sells exactly as much PT as they want to buy YT
|
|
355
|
-
const tradeRes = newMarketCalculator.calcTradePt(-ytOut, true);
|
|
368
|
+
const tradeRes = newMarketCalculator.calcTradePt(-ytOut, true, skipFees);
|
|
356
369
|
// The amount of asset returned plus the initial asset in must equal
|
|
357
370
|
// the amount of asset borrowed
|
|
358
371
|
const returnedAsset = tradeRes.netTraderAsset;
|
|
@@ -365,7 +378,7 @@ class MarketCalculator {
|
|
|
365
378
|
return assetIn;
|
|
366
379
|
}
|
|
367
380
|
/** Calculate the trade result for trading PT */
|
|
368
|
-
calcTradePt(netTraderPt, isCurrentFlashSwap = false) {
|
|
381
|
+
calcTradePt(netTraderPt, isCurrentFlashSwap = false, skipFees = false) {
|
|
369
382
|
const currentRateAnchor = this.findRateAnchor();
|
|
370
383
|
const currentFeeRate = this.feeRate;
|
|
371
384
|
const currentRateScalar = this.rateScalar;
|
|
@@ -376,11 +389,19 @@ class MarketCalculator {
|
|
|
376
389
|
currentRateAnchor,
|
|
377
390
|
currentFeeRate,
|
|
378
391
|
netTraderPt,
|
|
392
|
+
syExchangeRate: this.currentSyExchangeRate,
|
|
393
|
+
feeTreasurySyBps: this.state.feeTreasurySyBps,
|
|
379
394
|
isCurrentFlashSwap,
|
|
395
|
+
skipFees,
|
|
380
396
|
});
|
|
381
397
|
const newLiquidityPt = this.liquidityPt - netTraderPt;
|
|
382
398
|
const newLiquidityAsset = this.liquidityAsset - res.netTraderAsset;
|
|
383
|
-
|
|
399
|
+
// Deduct treasury fee from SY balance (matching Rust: self.dec_sy_balance(treasury_fee_amount))
|
|
400
|
+
const newLiquiditySy = newLiquidityAsset / this.currentSyExchangeRate - res.treasuryFeeAmount;
|
|
401
|
+
// Calculate exchange rate and ln implied rate AFTER treasury fee deduction
|
|
402
|
+
// (matching Rust: uses self.asset_balance() after dec_sy_balance)
|
|
403
|
+
const newLiquidityAssetAfterFee = newLiquiditySy * this.currentSyExchangeRate;
|
|
404
|
+
const newProportionPt = proportionPt({ pt: newLiquidityPt, asset: newLiquidityAssetAfterFee });
|
|
384
405
|
const newExchangeRate = exchangeRate({
|
|
385
406
|
proportionPt: newProportionPt,
|
|
386
407
|
rateScalar: currentRateScalar,
|
|
@@ -392,7 +413,7 @@ class MarketCalculator {
|
|
|
392
413
|
});
|
|
393
414
|
const newMarketCalculator = new MarketCalculator({
|
|
394
415
|
liquidityPt: newLiquidityPt,
|
|
395
|
-
liquiditySy:
|
|
416
|
+
liquiditySy: newLiquiditySy,
|
|
396
417
|
currentSyExchangeRate: this.currentSyExchangeRate,
|
|
397
418
|
lnFeeRateRoot: this.state.lnFeeRateRoot,
|
|
398
419
|
secondsRemaining: this.secondsRemaining,
|
|
@@ -411,6 +432,52 @@ class MarketCalculator {
|
|
|
411
432
|
estimateNetPtForExactNetAsset(netTraderAsset) {
|
|
412
433
|
return this.calcExactPtForNetAsset(netTraderAsset);
|
|
413
434
|
}
|
|
435
|
+
/**
|
|
436
|
+
* @param netAssetIn - Net asset in lamports. Trade direction:
|
|
437
|
+
* - Positive: selling PT for underlying asset
|
|
438
|
+
* - Negative: buying PT with underlying asset
|
|
439
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
440
|
+
*/
|
|
441
|
+
estimateNetPtForExactNetAssetWithImpliedApy(netAssetIn, impliedApy, skipFees = false) {
|
|
442
|
+
const impliedCalculator = this.withImpliedApy(impliedApy);
|
|
443
|
+
return impliedCalculator.calcExactPtForNetAsset(netAssetIn, skipFees);
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* @param ptAmount - Amount of PT to sell in lamports
|
|
447
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
448
|
+
*/
|
|
449
|
+
estimateAssetOutForPtInWithImpliedApy(ptAmount, impliedApy, skipFees = false) {
|
|
450
|
+
const impliedCalculator = this.withImpliedApy(impliedApy);
|
|
451
|
+
try {
|
|
452
|
+
const tradeResult = impliedCalculator.calcTradePt(-ptAmount, false, skipFees);
|
|
453
|
+
return tradeResult.netTraderAsset;
|
|
454
|
+
}
|
|
455
|
+
catch (error) {
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
461
|
+
* @returns A new MarketCalculator instance with the implied APY
|
|
462
|
+
*/
|
|
463
|
+
withImpliedApy(impliedApy) {
|
|
464
|
+
// Calculate what ptPriceInAsset would give us the target APY
|
|
465
|
+
const yearSeconds = 365 * 24 * 3600;
|
|
466
|
+
const rateMultiplier = yearSeconds / this.secondsRemaining;
|
|
467
|
+
const targetPtPriceInAsset = rateMultiplier / (impliedApy + rateMultiplier);
|
|
468
|
+
// Convert ptPriceInAsset to exchangeRate (asset to PT)
|
|
469
|
+
// ptPriceInAsset = 1 / exchangeRate, so exchangeRate = 1 / ptPriceInAsset
|
|
470
|
+
const targetExchangeRate = 1 / targetPtPriceInAsset;
|
|
471
|
+
const targetLnImpliedRate = currentLnImpliedRate({
|
|
472
|
+
exchangeRate: targetExchangeRate,
|
|
473
|
+
secondsRemaining: this.secondsRemaining,
|
|
474
|
+
});
|
|
475
|
+
const newState = {
|
|
476
|
+
...this.state,
|
|
477
|
+
lastLnImpliedRate: targetLnImpliedRate,
|
|
478
|
+
};
|
|
479
|
+
return new MarketCalculator(newState);
|
|
480
|
+
}
|
|
414
481
|
simulateClassicLpWithdraw({ lpAmount }) {
|
|
415
482
|
const ptInPool = this.state.liquidityPt;
|
|
416
483
|
const syInPool = this.state.liquiditySy;
|
|
@@ -436,17 +503,17 @@ class MarketCalculator {
|
|
|
436
503
|
};
|
|
437
504
|
}
|
|
438
505
|
/** Deprecated - bad name - use estimateNetPtForExactNetAsset */
|
|
439
|
-
calcExactPtForNetAsset(netTraderAsset) {
|
|
506
|
+
calcExactPtForNetAsset(netTraderAsset, skipFees = false) {
|
|
440
507
|
if (netTraderAsset === 0) {
|
|
441
508
|
return 0;
|
|
442
509
|
}
|
|
443
|
-
return calcExactPtForNetAsset(this, netTraderAsset);
|
|
510
|
+
return calcExactPtForNetAsset(this, netTraderAsset, skipFees);
|
|
444
511
|
}
|
|
445
|
-
estimateYtOutForExactAssetIn(assetIn) {
|
|
512
|
+
estimateYtOutForExactAssetIn(assetIn, skipFees = false) {
|
|
446
513
|
if (assetIn === 0) {
|
|
447
514
|
return { ytOut: 0, feeInAsset: 0 };
|
|
448
515
|
}
|
|
449
|
-
const ytOut = estimateYtOutForExactAssetIn(this, assetIn);
|
|
516
|
+
const ytOut = estimateYtOutForExactAssetIn(this, assetIn, skipFees);
|
|
450
517
|
const syIn = assetIn / this.currentSyExchangeRate;
|
|
451
518
|
const targetSy = ytOut / this.currentSyExchangeRate;
|
|
452
519
|
const syToBorrow = targetSy - syIn;
|
|
@@ -454,6 +521,14 @@ class MarketCalculator {
|
|
|
454
521
|
const feeInAsset = tradeFee((1 - 1 / this.exchangeRate) * syToBorrowInAsset, this.feeRate);
|
|
455
522
|
return { ytOut, feeInAsset };
|
|
456
523
|
}
|
|
524
|
+
/**
|
|
525
|
+
* @param assetIn - Asset amount in lamports
|
|
526
|
+
* @param impliedApy - Implied APY as a decimal (e.g., 0.08 for 8%)
|
|
527
|
+
*/
|
|
528
|
+
estimateYtOutForExactAssetInWithImpliedApy(assetIn, impliedApy, skipFees = false) {
|
|
529
|
+
const impliedCalculator = this.withImpliedApy(impliedApy);
|
|
530
|
+
return impliedCalculator.estimateYtOutForExactAssetIn(assetIn, skipFees);
|
|
531
|
+
}
|
|
457
532
|
exchangeRateFromLnImpliedRate(lnImpliedRate) {
|
|
458
533
|
return exchangeRateFromLnImpliedRate({
|
|
459
534
|
lnImpliedRate,
|
|
@@ -575,22 +650,22 @@ class MarketCalculator {
|
|
|
575
650
|
}
|
|
576
651
|
}
|
|
577
652
|
exports.MarketCalculator = MarketCalculator;
|
|
578
|
-
function calcExactPtForNetAsset(c, netTraderAsset) {
|
|
653
|
+
function calcExactPtForNetAsset(c, netTraderAsset, skipFees = false) {
|
|
579
654
|
const isBuyPt = netTraderAsset < 0;
|
|
580
655
|
if (isBuyPt) {
|
|
581
656
|
// negate netTraderAsset, because it is negative
|
|
582
657
|
// the search function expects a positive assetIn
|
|
583
|
-
return estimatePtOutForExactAssetIn(c, -netTraderAsset);
|
|
658
|
+
return estimatePtOutForExactAssetIn(c, -netTraderAsset, skipFees);
|
|
584
659
|
}
|
|
585
660
|
else {
|
|
586
|
-
return estimatePtInForExactAssetOut(c, netTraderAsset);
|
|
661
|
+
return estimatePtInForExactAssetOut(c, netTraderAsset, skipFees);
|
|
587
662
|
}
|
|
588
663
|
}
|
|
589
664
|
exports.calcExactPtForNetAsset = calcExactPtForNetAsset;
|
|
590
|
-
function estimatePtOutForExactAssetIn(c, assetIn) {
|
|
665
|
+
function estimatePtOutForExactAssetIn(c, assetIn, skipFees = false) {
|
|
591
666
|
const fn = (pt) => {
|
|
592
667
|
try {
|
|
593
|
-
const res = c.calcTradePt(pt, false);
|
|
668
|
+
const res = c.calcTradePt(pt, false, skipFees);
|
|
594
669
|
const assetSpend = -res.netTraderAsset;
|
|
595
670
|
return assetSpend - assetIn;
|
|
596
671
|
}
|
|
@@ -604,10 +679,10 @@ function estimatePtOutForExactAssetIn(c, assetIn) {
|
|
|
604
679
|
const hi = c.liquidityPt * 0.9999999;
|
|
605
680
|
return (0, bisect_1.bisectSearch2)(fn, lo, hi, 0.0000001);
|
|
606
681
|
}
|
|
607
|
-
function estimatePtInForExactAssetOut(c, assetOut) {
|
|
682
|
+
function estimatePtInForExactAssetOut(c, assetOut, skipFees = false) {
|
|
608
683
|
const fn = (pt) => {
|
|
609
684
|
// negate PT to signal that the trader is selling PT
|
|
610
|
-
const res = c.calcTradePt(-pt, false);
|
|
685
|
+
const res = c.calcTradePt(-pt, false, skipFees);
|
|
611
686
|
// for very large sales of PT in, the trade will fail by returning 0 asset
|
|
612
687
|
// signal this by returning a high value
|
|
613
688
|
if (res.netTraderPt < 0 && res.netTraderAsset === 0) {
|
|
@@ -622,11 +697,13 @@ function estimatePtInForExactAssetOut(c, assetOut) {
|
|
|
622
697
|
const hi = pricePtInAsset * assetOut * 2;
|
|
623
698
|
return (0, bisect_1.bisectSearch2)(fn, lo, hi, 0.0000001);
|
|
624
699
|
}
|
|
625
|
-
function estimateYtOutForExactAssetIn(c, assetIn) {
|
|
700
|
+
function estimateYtOutForExactAssetIn(c, assetIn, skipFees = false) {
|
|
626
701
|
const ytToAssetExchangeRate = Math.min(1 - 1 / c.exchangeRate, 1);
|
|
627
702
|
let lo = 0;
|
|
628
703
|
let hi = assetIn / ytToAssetExchangeRate;
|
|
629
|
-
|
|
704
|
+
if (typeof window !== "undefined") {
|
|
705
|
+
console.log("Starting search with bounds:", { lo, hi, assetIn });
|
|
706
|
+
}
|
|
630
707
|
// Manual binary search with detailed logging
|
|
631
708
|
let iterations = 0;
|
|
632
709
|
const MAX_ITERATIONS = 100;
|
|
@@ -635,22 +712,16 @@ function estimateYtOutForExactAssetIn(c, assetIn) {
|
|
|
635
712
|
let bestDiff = Infinity;
|
|
636
713
|
while (iterations < MAX_ITERATIONS) {
|
|
637
714
|
const mid = (lo + hi) / 2;
|
|
638
|
-
const assetInForYtOut = c.calcBuyYt(mid);
|
|
715
|
+
const assetInForYtOut = c.calcBuyYt(mid, skipFees);
|
|
639
716
|
const syIn = assetIn / c.currentSyExchangeRate;
|
|
640
717
|
const targetSy = mid / c.currentSyExchangeRate;
|
|
641
718
|
const syToBorrow = targetSy - syIn;
|
|
642
|
-
if (syToBorrow + c.calcTradePt(-mid, false).netTraderAsset
|
|
643
|
-
|
|
719
|
+
if (syToBorrow + c.calcTradePt(-mid, false).netTraderAsset / c.currentSyExchangeRate > c.liquiditySy) {
|
|
720
|
+
if (typeof window !== "undefined") {
|
|
721
|
+
console.error("Not enough liquidity - required SY exceeds available SY");
|
|
722
|
+
}
|
|
644
723
|
return null;
|
|
645
724
|
}
|
|
646
|
-
console.log("Iteration", iterations, {
|
|
647
|
-
lo,
|
|
648
|
-
hi,
|
|
649
|
-
mid,
|
|
650
|
-
assetInForYtOut,
|
|
651
|
-
targetAssetIn: assetIn,
|
|
652
|
-
diff: assetInForYtOut ? assetInForYtOut - assetIn : "null",
|
|
653
|
-
});
|
|
654
725
|
// Track best approximation
|
|
655
726
|
if (assetInForYtOut !== null) {
|
|
656
727
|
const currentDiff = Math.abs(assetInForYtOut - assetIn);
|
|
@@ -661,7 +732,9 @@ function estimateYtOutForExactAssetIn(c, assetIn) {
|
|
|
661
732
|
}
|
|
662
733
|
// If we found an exact match or we're close enough
|
|
663
734
|
if (assetInForYtOut !== null && Math.abs(assetInForYtOut - assetIn) < EPSILON) {
|
|
664
|
-
|
|
735
|
+
if (typeof window !== "undefined") {
|
|
736
|
+
console.log("Found solution:", { ytOut: mid, assetIn: assetInForYtOut });
|
|
737
|
+
}
|
|
665
738
|
return mid;
|
|
666
739
|
}
|
|
667
740
|
// If calcBuyYt returns null or the asset amount is too high,
|
|
@@ -775,11 +848,9 @@ function calcBalancedDeposit(c, totalSy) {
|
|
|
775
848
|
const syDeposit = totalSy - costInSY;
|
|
776
849
|
if (syDeposit <= 0)
|
|
777
850
|
return Infinity;
|
|
778
|
-
//
|
|
779
|
-
// fee_treasury_sy_bps is in basis points (10000 = 100%)
|
|
780
|
-
const feeInSY = (tradeResult.feeAsset * c.state.feeTreasurySyBps) / 10000 / c.currentSyExchangeRate;
|
|
851
|
+
// Treasury fee is already deducted in tradeResult.newMarketCalculator.liquiditySy
|
|
781
852
|
const newLiquidityPt = tradeResult.newMarketCalculator.liquidityPt;
|
|
782
|
-
const newLiquiditySy = tradeResult.newMarketCalculator.liquiditySy
|
|
853
|
+
const newLiquiditySy = tradeResult.newMarketCalculator.liquiditySy;
|
|
783
854
|
const newRatio = newLiquidityPt / newLiquiditySy;
|
|
784
855
|
return pt / syDeposit - newRatio;
|
|
785
856
|
}
|
|
@@ -834,6 +905,7 @@ function simulateWrapperProvideLiquidityBase(marketCalculator, baseAmount) {
|
|
|
834
905
|
lpOut: lpResult.lpOut,
|
|
835
906
|
ptTradePrice: 0,
|
|
836
907
|
feeAsset: 0,
|
|
908
|
+
treasuryFeeAmount: 0,
|
|
837
909
|
assetSpendOnTrade: 0,
|
|
838
910
|
assetDeposited: 0,
|
|
839
911
|
ptToBuy: 0,
|
|
@@ -864,6 +936,7 @@ function simulateWrapperProvideLiquidityBase(marketCalculator, baseAmount) {
|
|
|
864
936
|
lpOut: lpResult.lpOut,
|
|
865
937
|
ptTradePrice,
|
|
866
938
|
feeAsset: ptTradeResult.feeAsset,
|
|
939
|
+
treasuryFeeAmount: ptTradeResult.treasuryFeeAmount,
|
|
867
940
|
assetSpendOnTrade: -ptTradeResult.netTraderAsset,
|
|
868
941
|
assetDeposited: baseAmount + ptTradeResult.netTraderAsset,
|
|
869
942
|
ptToBuy: balancedAmounts.ptToBuy,
|
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
|
@@ -155,7 +155,10 @@ export function tradePt({
|
|
|
155
155
|
currentRateAnchor,
|
|
156
156
|
currentFeeRate,
|
|
157
157
|
netTraderPt,
|
|
158
|
+
syExchangeRate,
|
|
159
|
+
feeTreasurySyBps,
|
|
158
160
|
isCurrentFlashSwap = false,
|
|
161
|
+
skipFees = false,
|
|
159
162
|
}: {
|
|
160
163
|
liquidityPt: number
|
|
161
164
|
liquidityAsset: number
|
|
@@ -163,7 +166,10 @@ export function tradePt({
|
|
|
163
166
|
currentRateAnchor: number
|
|
164
167
|
currentFeeRate: number
|
|
165
168
|
netTraderPt: number
|
|
169
|
+
syExchangeRate: number
|
|
170
|
+
feeTreasurySyBps: number
|
|
166
171
|
isCurrentFlashSwap?: boolean
|
|
172
|
+
skipFees?: boolean
|
|
167
173
|
}): TradeResult {
|
|
168
174
|
// if netTradePt is positive, the trader is *buying* pt
|
|
169
175
|
const newPt = liquidityPt - netTraderPt
|
|
@@ -186,7 +192,8 @@ export function tradePt({
|
|
|
186
192
|
|
|
187
193
|
// Use ytValue for fee calculation during flash swaps, otherwise use preFeeNetTraderAsset
|
|
188
194
|
const feeBase = isCurrentFlashSwap ? ytValue : preFeeNetTraderAsset
|
|
189
|
-
|
|
195
|
+
|
|
196
|
+
const feeAsset = skipFees ? 0 : tradeFee(feeBase, currentFeeRate)
|
|
190
197
|
|
|
191
198
|
// if netTraderAsset is negative, the user is buying PT
|
|
192
199
|
// and the fee is positive, meaning they pay more asset
|
|
@@ -196,10 +203,17 @@ export function tradePt({
|
|
|
196
203
|
// and the fee is positive, meaning they receive less asset
|
|
197
204
|
const netTraderAsset = preFeeNetTraderAsset - feeAsset
|
|
198
205
|
|
|
206
|
+
// Convert fee to SY units (matching Rust: sy_fee_from_asset_fee)
|
|
207
|
+
const syFee = Math.floor(feeAsset / syExchangeRate)
|
|
208
|
+
|
|
209
|
+
// Calculate treasury fee amount (matching Rust implementation)
|
|
210
|
+
const treasuryFeeAmount = Math.floor((syFee * feeTreasurySyBps) / 10_000)
|
|
211
|
+
|
|
199
212
|
return {
|
|
200
213
|
feeAsset,
|
|
201
214
|
netTraderAsset,
|
|
202
215
|
netTraderPt,
|
|
216
|
+
treasuryFeeAmount,
|
|
203
217
|
}
|
|
204
218
|
}
|
|
205
219
|
|
|
@@ -253,6 +267,7 @@ export interface TradeResult {
|
|
|
253
267
|
feeAsset: number
|
|
254
268
|
netTraderAsset: number
|
|
255
269
|
netTraderPt: number
|
|
270
|
+
treasuryFeeAmount: number
|
|
256
271
|
}
|
|
257
272
|
|
|
258
273
|
export interface MarketMathState {
|
|
@@ -417,7 +432,7 @@ export class MarketCalculator {
|
|
|
417
432
|
* If the trade is impossible, return null
|
|
418
433
|
* This can happen if there is not enough liquidity to sell YT for the amount of asset desired
|
|
419
434
|
*/
|
|
420
|
-
simSellYt(ytIn: number): { assetOut: number; feeInAsset: number; newMarketCalculator: MarketCalculator } | null {
|
|
435
|
+
simSellYt(ytIn: number, skipFees: boolean = false): { assetOut: number; feeInAsset: number; newMarketCalculator: MarketCalculator } | null {
|
|
421
436
|
try {
|
|
422
437
|
// first, clone the market calculator, so as not to modify the original
|
|
423
438
|
const mc = this.clone()
|
|
@@ -432,7 +447,7 @@ export class MarketCalculator {
|
|
|
432
447
|
}
|
|
433
448
|
|
|
434
449
|
// buy back PT with SY
|
|
435
|
-
const tradeRes = mc.calcTradePt(ytIn, true)
|
|
450
|
+
const tradeRes = mc.calcTradePt(ytIn, true, skipFees)
|
|
436
451
|
|
|
437
452
|
// negate the result to get the amount of asset spent
|
|
438
453
|
const assetSpend = -tradeRes.netTraderAsset
|
|
@@ -469,6 +484,19 @@ export class MarketCalculator {
|
|
|
469
484
|
}
|
|
470
485
|
}
|
|
471
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
|
+
|
|
472
500
|
/** Calculate the amount of asset out for selling YT */
|
|
473
501
|
estimateYtInForExactBaseOut(assetOut: number): number | null {
|
|
474
502
|
// find an amount of asset out that would balance the equation
|
|
@@ -497,7 +525,7 @@ export class MarketCalculator {
|
|
|
497
525
|
}
|
|
498
526
|
|
|
499
527
|
/** Calculate the amount of asset to pay for buying YT */
|
|
500
|
-
calcBuyYt(ytOut: number): number | null {
|
|
528
|
+
calcBuyYt(ytOut: number, skipFees: boolean = false): number | null {
|
|
501
529
|
// flash swap for buying YT with assetIn
|
|
502
530
|
const fn = (assetIn: number) => {
|
|
503
531
|
const syIn = assetIn / this.currentSyExchangeRate
|
|
@@ -528,7 +556,7 @@ export class MarketCalculator {
|
|
|
528
556
|
|
|
529
557
|
// sell PT to the market for SY
|
|
530
558
|
// the trader sells exactly as much PT as they want to buy YT
|
|
531
|
-
const tradeRes = newMarketCalculator.calcTradePt(-ytOut, true)
|
|
559
|
+
const tradeRes = newMarketCalculator.calcTradePt(-ytOut, true, skipFees)
|
|
532
560
|
|
|
533
561
|
// The amount of asset returned plus the initial asset in must equal
|
|
534
562
|
// the amount of asset borrowed
|
|
@@ -547,7 +575,11 @@ export class MarketCalculator {
|
|
|
547
575
|
}
|
|
548
576
|
|
|
549
577
|
/** Calculate the trade result for trading PT */
|
|
550
|
-
calcTradePt(
|
|
578
|
+
calcTradePt(
|
|
579
|
+
netTraderPt: number,
|
|
580
|
+
isCurrentFlashSwap: boolean = false,
|
|
581
|
+
skipFees: boolean = false,
|
|
582
|
+
): CalculatorTradeResult {
|
|
551
583
|
const currentRateAnchor = this.findRateAnchor()
|
|
552
584
|
const currentFeeRate = this.feeRate
|
|
553
585
|
const currentRateScalar = this.rateScalar
|
|
@@ -558,12 +590,23 @@ export class MarketCalculator {
|
|
|
558
590
|
currentRateAnchor,
|
|
559
591
|
currentFeeRate,
|
|
560
592
|
netTraderPt,
|
|
593
|
+
syExchangeRate: this.currentSyExchangeRate,
|
|
594
|
+
feeTreasurySyBps: this.state.feeTreasurySyBps,
|
|
561
595
|
isCurrentFlashSwap,
|
|
596
|
+
skipFees,
|
|
562
597
|
})
|
|
563
598
|
|
|
564
599
|
const newLiquidityPt = this.liquidityPt - netTraderPt
|
|
565
600
|
const newLiquidityAsset = this.liquidityAsset - res.netTraderAsset
|
|
566
|
-
|
|
601
|
+
|
|
602
|
+
// Deduct treasury fee from SY balance (matching Rust: self.dec_sy_balance(treasury_fee_amount))
|
|
603
|
+
const newLiquiditySy = newLiquidityAsset / this.currentSyExchangeRate - res.treasuryFeeAmount
|
|
604
|
+
|
|
605
|
+
// Calculate exchange rate and ln implied rate AFTER treasury fee deduction
|
|
606
|
+
// (matching Rust: uses self.asset_balance() after dec_sy_balance)
|
|
607
|
+
const newLiquidityAssetAfterFee = newLiquiditySy * this.currentSyExchangeRate
|
|
608
|
+
|
|
609
|
+
const newProportionPt = proportionPt({ pt: newLiquidityPt, asset: newLiquidityAssetAfterFee })
|
|
567
610
|
const newExchangeRate = exchangeRate({
|
|
568
611
|
proportionPt: newProportionPt,
|
|
569
612
|
rateScalar: currentRateScalar,
|
|
@@ -576,7 +619,7 @@ export class MarketCalculator {
|
|
|
576
619
|
|
|
577
620
|
const newMarketCalculator = new MarketCalculator({
|
|
578
621
|
liquidityPt: newLiquidityPt,
|
|
579
|
-
liquiditySy:
|
|
622
|
+
liquiditySy: newLiquiditySy,
|
|
580
623
|
currentSyExchangeRate: this.currentSyExchangeRate,
|
|
581
624
|
lnFeeRateRoot: this.state.lnFeeRateRoot,
|
|
582
625
|
secondsRemaining: this.secondsRemaining,
|
|
@@ -598,6 +641,63 @@ export class MarketCalculator {
|
|
|
598
641
|
return this.calcExactPtForNetAsset(netTraderAsset)
|
|
599
642
|
}
|
|
600
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
|
+
|
|
601
701
|
simulateClassicLpWithdraw({ lpAmount }: { lpAmount: number }): {
|
|
602
702
|
assetOut: number
|
|
603
703
|
ptOut: number
|
|
@@ -637,18 +737,18 @@ export class MarketCalculator {
|
|
|
637
737
|
}
|
|
638
738
|
|
|
639
739
|
/** Deprecated - bad name - use estimateNetPtForExactNetAsset */
|
|
640
|
-
calcExactPtForNetAsset(netTraderAsset: number): number | null {
|
|
740
|
+
calcExactPtForNetAsset(netTraderAsset: number, skipFees: boolean = false): number | null {
|
|
641
741
|
if (netTraderAsset === 0) {
|
|
642
742
|
return 0
|
|
643
743
|
}
|
|
644
|
-
return calcExactPtForNetAsset(this, netTraderAsset)
|
|
744
|
+
return calcExactPtForNetAsset(this, netTraderAsset, skipFees)
|
|
645
745
|
}
|
|
646
746
|
|
|
647
|
-
estimateYtOutForExactAssetIn(assetIn: number): { ytOut: number; feeInAsset: number } | null {
|
|
747
|
+
estimateYtOutForExactAssetIn(assetIn: number, skipFees: boolean = false): { ytOut: number; feeInAsset: number } | null {
|
|
648
748
|
if (assetIn === 0) {
|
|
649
749
|
return { ytOut: 0, feeInAsset: 0 }
|
|
650
750
|
}
|
|
651
|
-
const ytOut = estimateYtOutForExactAssetIn(this, assetIn)
|
|
751
|
+
const ytOut = estimateYtOutForExactAssetIn(this, assetIn, skipFees)
|
|
652
752
|
|
|
653
753
|
const syIn = assetIn / this.currentSyExchangeRate
|
|
654
754
|
const targetSy = ytOut / this.currentSyExchangeRate
|
|
@@ -659,6 +759,19 @@ export class MarketCalculator {
|
|
|
659
759
|
return { ytOut, feeInAsset }
|
|
660
760
|
}
|
|
661
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
|
+
|
|
662
775
|
exchangeRateFromLnImpliedRate(lnImpliedRate: number): number {
|
|
663
776
|
return exchangeRateFromLnImpliedRate({
|
|
664
777
|
lnImpliedRate,
|
|
@@ -812,24 +925,25 @@ export interface CalculatorTradeResult {
|
|
|
812
925
|
feeAsset: number
|
|
813
926
|
netTraderAsset: number
|
|
814
927
|
netTraderPt: number
|
|
928
|
+
treasuryFeeAmount: number
|
|
815
929
|
newMarketCalculator: MarketCalculator
|
|
816
930
|
}
|
|
817
931
|
|
|
818
|
-
export function calcExactPtForNetAsset(c: MarketCalculator, netTraderAsset: number): number | null {
|
|
932
|
+
export function calcExactPtForNetAsset(c: MarketCalculator, netTraderAsset: number, skipFees: boolean = false): number | null {
|
|
819
933
|
const isBuyPt = netTraderAsset < 0
|
|
820
934
|
if (isBuyPt) {
|
|
821
935
|
// negate netTraderAsset, because it is negative
|
|
822
936
|
// the search function expects a positive assetIn
|
|
823
|
-
return estimatePtOutForExactAssetIn(c, -netTraderAsset)
|
|
937
|
+
return estimatePtOutForExactAssetIn(c, -netTraderAsset, skipFees)
|
|
824
938
|
} else {
|
|
825
|
-
return estimatePtInForExactAssetOut(c, netTraderAsset)
|
|
939
|
+
return estimatePtInForExactAssetOut(c, netTraderAsset, skipFees)
|
|
826
940
|
}
|
|
827
941
|
}
|
|
828
942
|
|
|
829
|
-
function estimatePtOutForExactAssetIn(c: MarketCalculator, assetIn: number): number | null {
|
|
943
|
+
function estimatePtOutForExactAssetIn(c: MarketCalculator, assetIn: number, skipFees: boolean = false): number | null {
|
|
830
944
|
const fn = (pt: number) => {
|
|
831
945
|
try {
|
|
832
|
-
const res = c.calcTradePt(pt, false)
|
|
946
|
+
const res = c.calcTradePt(pt, false, skipFees)
|
|
833
947
|
const assetSpend = -res.netTraderAsset
|
|
834
948
|
return assetSpend - assetIn
|
|
835
949
|
} catch {
|
|
@@ -843,10 +957,10 @@ function estimatePtOutForExactAssetIn(c: MarketCalculator, assetIn: number): num
|
|
|
843
957
|
return bisectSearch2(fn, lo, hi, 0.0000001)
|
|
844
958
|
}
|
|
845
959
|
|
|
846
|
-
function estimatePtInForExactAssetOut(c: MarketCalculator, assetOut: number): number | null {
|
|
960
|
+
function estimatePtInForExactAssetOut(c: MarketCalculator, assetOut: number, skipFees: boolean = false): number | null {
|
|
847
961
|
const fn = (pt: number) => {
|
|
848
962
|
// negate PT to signal that the trader is selling PT
|
|
849
|
-
const res = c.calcTradePt(-pt, false)
|
|
963
|
+
const res = c.calcTradePt(-pt, false, skipFees)
|
|
850
964
|
|
|
851
965
|
// for very large sales of PT in, the trade will fail by returning 0 asset
|
|
852
966
|
// signal this by returning a high value
|
|
@@ -864,11 +978,13 @@ function estimatePtInForExactAssetOut(c: MarketCalculator, assetOut: number): nu
|
|
|
864
978
|
return bisectSearch2(fn, lo, hi, 0.0000001)
|
|
865
979
|
}
|
|
866
980
|
|
|
867
|
-
export function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: number): number | null {
|
|
981
|
+
export function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: number, skipFees: boolean = false): number | null {
|
|
868
982
|
const ytToAssetExchangeRate = Math.min(1 - 1 / c.exchangeRate, 1)
|
|
869
983
|
let lo = 0
|
|
870
984
|
let hi = assetIn / ytToAssetExchangeRate
|
|
871
|
-
|
|
985
|
+
if (typeof window !== "undefined") {
|
|
986
|
+
console.log("Starting search with bounds:", { lo, hi, assetIn })
|
|
987
|
+
}
|
|
872
988
|
|
|
873
989
|
// Manual binary search with detailed logging
|
|
874
990
|
let iterations = 0
|
|
@@ -880,26 +996,19 @@ export function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: numbe
|
|
|
880
996
|
|
|
881
997
|
while (iterations < MAX_ITERATIONS) {
|
|
882
998
|
const mid = (lo + hi) / 2
|
|
883
|
-
const assetInForYtOut = c.calcBuyYt(mid)
|
|
999
|
+
const assetInForYtOut = c.calcBuyYt(mid, skipFees)
|
|
884
1000
|
|
|
885
1001
|
const syIn = assetIn / c.currentSyExchangeRate
|
|
886
1002
|
const targetSy = mid / c.currentSyExchangeRate
|
|
887
1003
|
const syToBorrow = targetSy - syIn
|
|
888
1004
|
|
|
889
|
-
if (syToBorrow + c.calcTradePt(-mid, false).netTraderAsset
|
|
890
|
-
|
|
1005
|
+
if (syToBorrow + c.calcTradePt(-mid, false).netTraderAsset / c.currentSyExchangeRate > c.liquiditySy) {
|
|
1006
|
+
if (typeof window !== "undefined") {
|
|
1007
|
+
console.error("Not enough liquidity - required SY exceeds available SY")
|
|
1008
|
+
}
|
|
891
1009
|
return null
|
|
892
1010
|
}
|
|
893
1011
|
|
|
894
|
-
console.log("Iteration", iterations, {
|
|
895
|
-
lo,
|
|
896
|
-
hi,
|
|
897
|
-
mid,
|
|
898
|
-
assetInForYtOut,
|
|
899
|
-
targetAssetIn: assetIn,
|
|
900
|
-
diff: assetInForYtOut ? assetInForYtOut - assetIn : "null",
|
|
901
|
-
})
|
|
902
|
-
|
|
903
1012
|
// Track best approximation
|
|
904
1013
|
if (assetInForYtOut !== null) {
|
|
905
1014
|
const currentDiff = Math.abs(assetInForYtOut - assetIn)
|
|
@@ -911,7 +1020,9 @@ export function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: numbe
|
|
|
911
1020
|
|
|
912
1021
|
// If we found an exact match or we're close enough
|
|
913
1022
|
if (assetInForYtOut !== null && Math.abs(assetInForYtOut - assetIn) < EPSILON) {
|
|
914
|
-
|
|
1023
|
+
if (typeof window !== "undefined") {
|
|
1024
|
+
console.log("Found solution:", { ytOut: mid, assetIn: assetInForYtOut })
|
|
1025
|
+
}
|
|
915
1026
|
return mid
|
|
916
1027
|
}
|
|
917
1028
|
|
|
@@ -1045,11 +1156,9 @@ export function calcBalancedDeposit(c: MarketCalculator, totalSy: number): { ptT
|
|
|
1045
1156
|
const syDeposit = totalSy - costInSY
|
|
1046
1157
|
if (syDeposit <= 0) return Infinity
|
|
1047
1158
|
|
|
1048
|
-
//
|
|
1049
|
-
// fee_treasury_sy_bps is in basis points (10000 = 100%)
|
|
1050
|
-
const feeInSY = (tradeResult.feeAsset * c.state.feeTreasurySyBps) / 10000 / c.currentSyExchangeRate
|
|
1159
|
+
// Treasury fee is already deducted in tradeResult.newMarketCalculator.liquiditySy
|
|
1051
1160
|
const newLiquidityPt = tradeResult.newMarketCalculator.liquidityPt
|
|
1052
|
-
const newLiquiditySy = tradeResult.newMarketCalculator.liquiditySy
|
|
1161
|
+
const newLiquiditySy = tradeResult.newMarketCalculator.liquiditySy
|
|
1053
1162
|
const newRatio = newLiquidityPt / newLiquiditySy
|
|
1054
1163
|
return pt / syDeposit - newRatio
|
|
1055
1164
|
}
|
|
@@ -1094,6 +1203,7 @@ export function simulateWrapperProvideLiquidityBase(
|
|
|
1094
1203
|
lpOut: number
|
|
1095
1204
|
ptTradePrice: number
|
|
1096
1205
|
feeAsset: number
|
|
1206
|
+
treasuryFeeAmount: number
|
|
1097
1207
|
assetSpendOnTrade: number
|
|
1098
1208
|
assetDeposited: number
|
|
1099
1209
|
ptToBuy: number
|
|
@@ -1121,6 +1231,7 @@ export function simulateWrapperProvideLiquidityBase(
|
|
|
1121
1231
|
lpOut: lpResult.lpOut,
|
|
1122
1232
|
ptTradePrice: 0,
|
|
1123
1233
|
feeAsset: 0,
|
|
1234
|
+
treasuryFeeAmount: 0,
|
|
1124
1235
|
assetSpendOnTrade: 0,
|
|
1125
1236
|
assetDeposited: 0,
|
|
1126
1237
|
ptToBuy: 0,
|
|
@@ -1158,6 +1269,7 @@ export function simulateWrapperProvideLiquidityBase(
|
|
|
1158
1269
|
lpOut: lpResult.lpOut,
|
|
1159
1270
|
ptTradePrice,
|
|
1160
1271
|
feeAsset: ptTradeResult.feeAsset,
|
|
1272
|
+
treasuryFeeAmount: ptTradeResult.treasuryFeeAmount,
|
|
1161
1273
|
assetSpendOnTrade: -ptTradeResult.netTraderAsset,
|
|
1162
1274
|
assetDeposited: baseAmount + ptTradeResult.netTraderAsset,
|
|
1163
1275
|
ptToBuy: balancedAmounts.ptToBuy,
|