@curvefi/llamalend-api 1.0.28 → 1.0.29
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.
|
@@ -80,6 +80,7 @@ export declare class MintMarketTemplate {
|
|
|
80
80
|
}>;
|
|
81
81
|
};
|
|
82
82
|
leverage: {
|
|
83
|
+
maxLeverage: (N?: number) => Promise<string>;
|
|
83
84
|
createLoanMaxRecv: (collateral: number | string, range: number) => Promise<{
|
|
84
85
|
maxBorrowable: string;
|
|
85
86
|
maxCollateral: string;
|
|
@@ -312,6 +313,8 @@ export declare class MintMarketTemplate {
|
|
|
312
313
|
private _leverageCreateLoan;
|
|
313
314
|
private leverageCreateLoanEstimateGas;
|
|
314
315
|
private leverageCreateLoan;
|
|
316
|
+
private _get_k_effective_BN;
|
|
317
|
+
private maxLeverage;
|
|
315
318
|
private _checkDeleverageZap;
|
|
316
319
|
private deleverageRepayStablecoins;
|
|
317
320
|
private deleverageGetRouteName;
|
|
@@ -294,6 +294,7 @@ export class MintMarketTemplate {
|
|
|
294
294
|
balances: this.walletBalances.bind(this),
|
|
295
295
|
};
|
|
296
296
|
this.leverage = {
|
|
297
|
+
maxLeverage: this.maxLeverage.bind(this),
|
|
297
298
|
createLoanMaxRecv: this.leverageCreateLoanMaxRecv.bind(this),
|
|
298
299
|
createLoanMaxRecvAllRanges: this.leverageCreateLoanMaxRecvAllRanges.bind(this),
|
|
299
300
|
createLoanCollateral: this.leverageCreateLoanCollateral.bind(this),
|
|
@@ -1594,6 +1595,32 @@ export class MintMarketTemplate {
|
|
|
1594
1595
|
return yield this._leverageCreateLoan(collateral, debt, range, slippage, false);
|
|
1595
1596
|
});
|
|
1596
1597
|
}
|
|
1598
|
+
_get_k_effective_BN(N) {
|
|
1599
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1600
|
+
// d_k_effective: uint256 = (1 - loan_discount) * sqrt((A-1)/A) / N
|
|
1601
|
+
// k_effective = d_k_effective * sum_{0..N-1}(((A-1) / A)**k)
|
|
1602
|
+
const { loan_discount } = yield this.statsParameters();
|
|
1603
|
+
console.log("loan_discount", loan_discount);
|
|
1604
|
+
const A = this.A;
|
|
1605
|
+
console.log("A", A);
|
|
1606
|
+
const A_BN = BN(A);
|
|
1607
|
+
const A_ratio_BN = A_BN.minus(1).div(A_BN);
|
|
1608
|
+
console.log("A_ratio_BN", A_ratio_BN, A_ratio_BN.toString());
|
|
1609
|
+
const d_k_effective_BN = BN(100).minus(loan_discount).div(100).times(A_ratio_BN.sqrt()).div(N);
|
|
1610
|
+
let S = BN(0);
|
|
1611
|
+
for (let n = 0; n < N; n++) {
|
|
1612
|
+
S = S.plus(A_ratio_BN.pow(n));
|
|
1613
|
+
}
|
|
1614
|
+
return d_k_effective_BN.times(S);
|
|
1615
|
+
});
|
|
1616
|
+
}
|
|
1617
|
+
maxLeverage() {
|
|
1618
|
+
return __awaiter(this, arguments, void 0, function* (N = 4) {
|
|
1619
|
+
// max_leverage = 1 / (k_effective - 1)
|
|
1620
|
+
const k_effective_BN = yield this._get_k_effective_BN(N);
|
|
1621
|
+
return BN(1).div(BN(1).minus(k_effective_BN)).toString();
|
|
1622
|
+
});
|
|
1623
|
+
}
|
|
1597
1624
|
// ---------------- DELEVERAGE REPAY ----------------
|
|
1598
1625
|
_checkDeleverageZap() {
|
|
1599
1626
|
if (this.deleverageZap === "0x0000000000000000000000000000000000000000")
|
package/package.json
CHANGED
|
@@ -90,6 +90,7 @@ export class MintMarketTemplate {
|
|
|
90
90
|
balances: (address?: string) => Promise<{ stablecoin: string, collateral: string }>,
|
|
91
91
|
};
|
|
92
92
|
leverage: {
|
|
93
|
+
maxLeverage: (N?: number) => Promise<string>,
|
|
93
94
|
createLoanMaxRecv: (collateral: number | string, range: number) => Promise<{ maxBorrowable: string, maxCollateral: string, leverage: string, routeIdx: number }>,
|
|
94
95
|
createLoanMaxRecvAllRanges: (collateral: number | string) => Promise<IDict<{ maxBorrowable: string, maxCollateral: string, leverage: string, routeIdx: number }>>,
|
|
95
96
|
createLoanCollateral: (userCollateral: number | string, debt: number | string) => Promise<{ collateral: string, leverage: string, routeIdx: number }>,
|
|
@@ -185,6 +186,7 @@ export class MintMarketTemplate {
|
|
|
185
186
|
balances: this.walletBalances.bind(this),
|
|
186
187
|
}
|
|
187
188
|
this.leverage = {
|
|
189
|
+
maxLeverage: this.maxLeverage.bind(this),
|
|
188
190
|
createLoanMaxRecv: this.leverageCreateLoanMaxRecv.bind(this),
|
|
189
191
|
createLoanMaxRecvAllRanges: this.leverageCreateLoanMaxRecvAllRanges.bind(this),
|
|
190
192
|
createLoanCollateral: this.leverageCreateLoanCollateral.bind(this),
|
|
@@ -1688,6 +1690,33 @@ export class MintMarketTemplate {
|
|
|
1688
1690
|
return await this._leverageCreateLoan(collateral, debt, range, slippage, false) as string;
|
|
1689
1691
|
}
|
|
1690
1692
|
|
|
1693
|
+
private async _get_k_effective_BN(N: number): Promise<BigNumber> {
|
|
1694
|
+
// d_k_effective: uint256 = (1 - loan_discount) * sqrt((A-1)/A) / N
|
|
1695
|
+
// k_effective = d_k_effective * sum_{0..N-1}(((A-1) / A)**k)
|
|
1696
|
+
const { loan_discount } = await this.statsParameters();
|
|
1697
|
+
console.log("loan_discount", loan_discount);
|
|
1698
|
+
const A = this.A;
|
|
1699
|
+
console.log("A", A);
|
|
1700
|
+
const A_BN = BN(A);
|
|
1701
|
+
const A_ratio_BN = A_BN.minus(1).div(A_BN);
|
|
1702
|
+
console.log("A_ratio_BN", A_ratio_BN, A_ratio_BN.toString());
|
|
1703
|
+
|
|
1704
|
+
const d_k_effective_BN = BN(100).minus(loan_discount).div(100).times(A_ratio_BN.sqrt()).div(N);
|
|
1705
|
+
let S = BN(0);
|
|
1706
|
+
for (let n = 0; n < N; n++) {
|
|
1707
|
+
S = S.plus(A_ratio_BN.pow(n))
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
return d_k_effective_BN.times(S);
|
|
1711
|
+
}
|
|
1712
|
+
|
|
1713
|
+
private async maxLeverage(N: number = 4): Promise<string> {
|
|
1714
|
+
// max_leverage = 1 / (k_effective - 1)
|
|
1715
|
+
const k_effective_BN = await this._get_k_effective_BN(N);
|
|
1716
|
+
|
|
1717
|
+
return BN(1).div(BN(1).minus(k_effective_BN)).toString()
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1691
1720
|
// ---------------- DELEVERAGE REPAY ----------------
|
|
1692
1721
|
|
|
1693
1722
|
private _checkDeleverageZap(): void {
|