@curvefi/llamalend-api 1.0.22-beta.1 → 1.0.22
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/README.md +346 -0
- package/lib/llamalend.js +2 -2
- package/lib/mintMarkets/MintMarketTemplate.d.ts +21 -4
- package/lib/mintMarkets/MintMarketTemplate.js +52 -0
- package/lib/mintMarkets/interfaces/leverage.d.ts +90 -0
- package/lib/mintMarkets/interfaces/leverage.js +1 -0
- package/lib/mintMarkets/modules/index.d.ts +1 -0
- package/lib/mintMarkets/modules/index.js +1 -0
- package/lib/mintMarkets/modules/leverageV2.d.ts +131 -0
- package/lib/mintMarkets/modules/leverageV2.js +788 -0
- package/package.json +1 -1
- package/src/llamalend.ts +2 -2
- package/src/mintMarkets/MintMarketTemplate.ts +67 -4
- package/src/mintMarkets/interfaces/leverage.ts +104 -0
- package/src/mintMarkets/modules/index.ts +1 -0
- package/src/mintMarkets/modules/leverageV2.ts +932 -0
package/README.md
CHANGED
|
@@ -1976,4 +1976,350 @@ import llamalend from "@curvefi/llamalend-api";
|
|
|
1976
1976
|
// '344': { stablecoin: '0.0', collateral: '0.206573194768962407' }
|
|
1977
1977
|
// }
|
|
1978
1978
|
})()
|
|
1979
|
+
```
|
|
1980
|
+
|
|
1981
|
+
### LeverageV2 (createLoan, borrowMore, repay) for mintMarket
|
|
1982
|
+
```ts
|
|
1983
|
+
(async () => {
|
|
1984
|
+
await llamalend.init('JsonRpc', {}, {});
|
|
1985
|
+
|
|
1986
|
+
const mintMarket = llamalend.getMintMarket('cbbtc');
|
|
1987
|
+
console.log(await mintMarket.wallet.balances());
|
|
1988
|
+
// {
|
|
1989
|
+
// collateral: '100.0',
|
|
1990
|
+
// borrowed: '2000000.0',
|
|
1991
|
+
// vaultShares: '0.0',
|
|
1992
|
+
// gauge: '0'
|
|
1993
|
+
// }
|
|
1994
|
+
|
|
1995
|
+
|
|
1996
|
+
// - Create Loan -
|
|
1997
|
+
|
|
1998
|
+
// Creates leveraged position (userCollateral + collateralFromUserBorrowed + leverage_collateral)
|
|
1999
|
+
// ^
|
|
2000
|
+
// |
|
|
2001
|
+
// userCollateral | debt debt + userBorrowed
|
|
2002
|
+
// user ---> controller ----> leverage_zap ----> router
|
|
2003
|
+
// | ^ | ^ ^ |
|
|
2004
|
+
// | |__________________| | |___________________|
|
|
2005
|
+
// | leverageCollateral + collateralFromUserBorrowed
|
|
2006
|
+
// |_____________________________________|
|
|
2007
|
+
// userBorrowed
|
|
2008
|
+
|
|
2009
|
+
let userCollateral = 1;
|
|
2010
|
+
let userBorrowed = 1000;
|
|
2011
|
+
let debt = 2000;
|
|
2012
|
+
const range = 10;
|
|
2013
|
+
const slippage = 0.5; // %
|
|
2014
|
+
await mintMarket.leverageV2.maxLeverage(range);
|
|
2015
|
+
// 7.4728229145282742179
|
|
2016
|
+
await mintMarket.leverageV2.createLoanMaxRecv(userCollateral, userBorrowed, range);
|
|
2017
|
+
// {
|
|
2018
|
+
// maxDebt: '26089.494406081862861214',
|
|
2019
|
+
// maxTotalCollateral: '9.539182089833411347',
|
|
2020
|
+
// userCollateral: '1',
|
|
2021
|
+
// collateralFromUserBorrowed: '0.315221168834966496',
|
|
2022
|
+
// collateralFromMaxDebt: '8.223960920998444851',
|
|
2023
|
+
// maxLeverage: '7.25291100528992828612',
|
|
2024
|
+
// avgPrice: '3172.3757757003568790858'
|
|
2025
|
+
// }
|
|
2026
|
+
await mintMarket.leverageV2.createLoanExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
|
|
2027
|
+
// {
|
|
2028
|
+
// totalCollateral: '1.946422996710829',
|
|
2029
|
+
// userCollateral: '1.0',
|
|
2030
|
+
// collateralFromUserBorrowed: '0.315474332236942984',
|
|
2031
|
+
// collateralFromDebt: '0.630948664473886',
|
|
2032
|
+
// leverage: '1.4796358613861877'
|
|
2033
|
+
// avgPrice: '3169.8299919022623523421'
|
|
2034
|
+
// }
|
|
2035
|
+
await mintMarket.leverageV2.createLoanPriceImpact(userBorrowed, debt);
|
|
2036
|
+
// 0.08944411854377342 %
|
|
2037
|
+
await mintMarket.leverageV2.createLoanMaxRange(userCollateral, userBorrowed, debt);
|
|
2038
|
+
// 50
|
|
2039
|
+
await mintMarket.leverageV2.createLoanBands(userCollateral, userBorrowed, debt, range);
|
|
2040
|
+
// [ 76, 67 ]
|
|
2041
|
+
await mintMarket.leverageV2.createLoanPrices(userCollateral, userBorrowed, debt, range);
|
|
2042
|
+
// [ '1027.977701011670136614', '1187.061409925215211173' ]
|
|
2043
|
+
await mintMarket.leverageV2.createLoanHealth(userCollateral, userBorrowed, debt, range);
|
|
2044
|
+
// 195.8994783042570637
|
|
2045
|
+
await mintMarket.leverageV2.createLoanHealth(userCollateral, userBorrowed, debt, range, false);
|
|
2046
|
+
// 3.2780908310686365
|
|
2047
|
+
await mintMarket.leverageV2.createLoanIsApproved(userCollateral, userBorrowed);
|
|
2048
|
+
// false
|
|
2049
|
+
await mintMarket.leverageV2.createLoanApprove(userCollateral, userBorrowed);
|
|
2050
|
+
// [
|
|
2051
|
+
// '0xd5491d9f1e9d8ac84b03867494e35b25efad151c597d2fa4211d7bf5d540c98e',
|
|
2052
|
+
// '0x93565f37ec5be902a824714a30bddc25cf9cd9ed39b4c0e8de61fab44af5bc8c'
|
|
2053
|
+
// ]
|
|
2054
|
+
await mintMarket.leverageV2.createLoanRouteImage(userBorrowed, debt);
|
|
2055
|
+
// 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
|
|
2056
|
+
|
|
2057
|
+
|
|
2058
|
+
// You must call mintMarket.leverageV2.createLoanExpectedCollateral() with the same args before
|
|
2059
|
+
await mintMarket.leverageV2.createLoan(userCollateral, userBorrowed, debt, range);
|
|
2060
|
+
// 0xeb1b7a92bcb02598f00dc8bbfe8fa3a554e7a2b1ca764e0ee45e2bf583edf731
|
|
2061
|
+
|
|
2062
|
+
await mintMarket.wallet.balances();
|
|
2063
|
+
// {
|
|
2064
|
+
// collateral: '99.0',
|
|
2065
|
+
// borrowed: '599000.0',
|
|
2066
|
+
// vaultShares: '1400000000.0',
|
|
2067
|
+
// gauge: '0'
|
|
2068
|
+
// }
|
|
2069
|
+
await mintMarket.userState();
|
|
2070
|
+
// {
|
|
2071
|
+
// collateral: '1.945616160868693648',
|
|
2072
|
+
// borrowed: '0.0',
|
|
2073
|
+
// debt: '2000.0',
|
|
2074
|
+
// N: '10'
|
|
2075
|
+
// }
|
|
2076
|
+
await mintMarket.userBands();
|
|
2077
|
+
// [ 76, 67 ]
|
|
2078
|
+
await mintMarket.userPrices();
|
|
2079
|
+
// [ '1027.977718614028011906', '1187.061430251609195098' ]
|
|
2080
|
+
await mintMarket.userHealth();
|
|
2081
|
+
// 195.8372633833293605
|
|
2082
|
+
await mintMarket.userHealth(false);
|
|
2083
|
+
// 3.2518122092914609
|
|
2084
|
+
|
|
2085
|
+
|
|
2086
|
+
// - Borrow More -
|
|
2087
|
+
|
|
2088
|
+
// Updates leveraged position (dCollateral = userCollateral + collateralFromUserBorrowed + leverageCollateral)
|
|
2089
|
+
// ^
|
|
2090
|
+
// |
|
|
2091
|
+
// userCollateral | dDebt dDebt + userBorrowed
|
|
2092
|
+
// user ---> controller ----> leverage_zap ----> router
|
|
2093
|
+
// | ^ | ^ ^ |
|
|
2094
|
+
// | |__________________| | |___________________|
|
|
2095
|
+
// | leverageCollateral + collateralFromUSerBorrowed
|
|
2096
|
+
// |_____________________________________|
|
|
2097
|
+
// userBorrowed
|
|
2098
|
+
|
|
2099
|
+
userCollateral = 2;
|
|
2100
|
+
userBorrowed = 2000;
|
|
2101
|
+
debt = 10000;
|
|
2102
|
+
await mintMarket.leverageV2.borrowMoreMaxRecv(userCollateral, userBorrowed);
|
|
2103
|
+
// {
|
|
2104
|
+
// maxDebt: '76182.8497941193262889',
|
|
2105
|
+
// maxTotalCollateral: '26.639775583730298462',
|
|
2106
|
+
// userCollateral: '2',
|
|
2107
|
+
// collateralFromUserBorrowed: '1.677318306610359627',
|
|
2108
|
+
// collateralFromMaxDebt: '22.962457277119938834',
|
|
2109
|
+
// avgPrice: '3172.55402418338331369083'
|
|
2110
|
+
// }
|
|
2111
|
+
await mintMarket.leverageV2.borrowMoreExpectedCollateral(userCollateral, userBorrowed, debt, slippage);
|
|
2112
|
+
// {
|
|
2113
|
+
// totalCollateral: '5.783452104143246413',
|
|
2114
|
+
// userCollateral: '2.0',
|
|
2115
|
+
// collateralFromUserBorrowed: '0.630575350690541071',
|
|
2116
|
+
// collateralFromDebt: '3.152876753452705342'
|
|
2117
|
+
// avgPrice: '3171.70659749038129067231'
|
|
2118
|
+
// }
|
|
2119
|
+
await mintMarket.leverageV2.borrowMorePriceImpact(userBorrowed, debt);
|
|
2120
|
+
// 0.010784277354269765 %
|
|
2121
|
+
await mintMarket.leverageV2.borrowMoreBands(userCollateral, userBorrowed, debt);
|
|
2122
|
+
// [ 47, 38 ]
|
|
2123
|
+
await mintMarket.leverageV2.borrowMorePrices(userCollateral, userBorrowed, debt);
|
|
2124
|
+
// [ '1560.282474721398939216', '1801.742501325928269008' ]
|
|
2125
|
+
await mintMarket.leverageV2.borrowMoreHealth(userCollateral, userBorrowed, debt, true);
|
|
2126
|
+
// 91.6798951784708552
|
|
2127
|
+
await mintMarket.leverageV2.borrowMoreHealth(userCollateral, userBorrowed, debt, false);
|
|
2128
|
+
// 3.7614279042995641
|
|
2129
|
+
await mintMarket.leverageV2.borrowMoreIsApproved(userCollateral, userBorrowed);
|
|
2130
|
+
// true
|
|
2131
|
+
await mintMarket.leverageV2.borrowMoreApprove(userCollateral, userBorrowed);
|
|
2132
|
+
// []
|
|
2133
|
+
await mintMarket.leverageV2.borrowMoreRouteImage(userBorrowed, debt);
|
|
2134
|
+
// 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
|
|
2135
|
+
|
|
2136
|
+
// You must call mintMarket.leverageV2.borrowMoreExpectedCollateral() with the same args before
|
|
2137
|
+
await mintMarket.leverageV2.borrowMore(userCollateral, userBorrowed, debt, slippage);
|
|
2138
|
+
// 0x6357dd6ea7250d7adb2344cd9295f8255fd8fbbe85f00120fbcd1ebf139e057c
|
|
2139
|
+
|
|
2140
|
+
await mintMarket.wallet.balances();
|
|
2141
|
+
// {
|
|
2142
|
+
// collateral: '97.0',
|
|
2143
|
+
// borrowed: '597000.0',
|
|
2144
|
+
// vaultShares: '1400000000.0',
|
|
2145
|
+
// gauge: '0'
|
|
2146
|
+
// }
|
|
2147
|
+
await mintMarket.userState();
|
|
2148
|
+
// {
|
|
2149
|
+
// collateral: '7.727839965845165558',
|
|
2150
|
+
// borrowed: '0.0',
|
|
2151
|
+
// debt: '12000.000010193901375446',
|
|
2152
|
+
// N: '10'
|
|
2153
|
+
// }
|
|
2154
|
+
await mintMarket.userBands();
|
|
2155
|
+
// [ 47, 38 ]
|
|
2156
|
+
await mintMarket.userPrices();
|
|
2157
|
+
// [ '1560.28248267408177179', '1801.742510509320950242' ]
|
|
2158
|
+
await mintMarket.userHealth();
|
|
2159
|
+
// 91.6519475547753288
|
|
2160
|
+
await lendMarket.userHealth(false);
|
|
2161
|
+
// 3.7449386373872907
|
|
2162
|
+
|
|
2163
|
+
|
|
2164
|
+
// - Repay -
|
|
2165
|
+
|
|
2166
|
+
|
|
2167
|
+
// Deleveraged position (-dDebt = borrowedFromStateCollateral + borrowedFromUSerCollateral + userBorrowed)
|
|
2168
|
+
// ^
|
|
2169
|
+
// | userCollateral
|
|
2170
|
+
// user ___|__________________________
|
|
2171
|
+
// | |
|
|
2172
|
+
// | | stateCollateral ↓ userCollateral + stateCollateral
|
|
2173
|
+
// | controller --> leverage_zap --> router
|
|
2174
|
+
// | ^ | ^ ^ |
|
|
2175
|
+
// | |______________________| | |___________________|
|
|
2176
|
+
// | | borrowedFromStateCollateral
|
|
2177
|
+
// |________________________________| +
|
|
2178
|
+
// userBorrowed borrowedFromUSerCollateral
|
|
2179
|
+
|
|
2180
|
+
const stateCollateral = 2;
|
|
2181
|
+
userCollateral = 1;
|
|
2182
|
+
userBorrowed = 1500;
|
|
2183
|
+
await mintMarket.leverageV2.repayExpectedBorrowed(stateCollateral, userCollateral, userBorrowed, slippage);
|
|
2184
|
+
// {
|
|
2185
|
+
// totalBorrowed: '10998.882838599741571472',
|
|
2186
|
+
// borrowedFromStateCollateral: '6332.588559066494374648',
|
|
2187
|
+
// borrowedFromUserCollateral: '3166.294279533247196824',
|
|
2188
|
+
// userBorrowed: '1500'
|
|
2189
|
+
// avgPrice: '3166.29427953324743125312'
|
|
2190
|
+
// }
|
|
2191
|
+
|
|
2192
|
+
await mintMarket.leverageV2.repayPriceImpact(stateCollateral, userCollateral);
|
|
2193
|
+
// 0.013150142802201724 %
|
|
2194
|
+
await mintMarket.leverageV2.repayIsFull(stateCollateral, userCollateral, userBorrowed);
|
|
2195
|
+
// false
|
|
2196
|
+
await mintMarket.leverageV2.repayIsAvailable(stateCollateral, userCollateral, userBorrowed);
|
|
2197
|
+
// true
|
|
2198
|
+
await mintMarket.leverageV2.repayBands(stateCollateral, userCollateral, userBorrowed);
|
|
2199
|
+
// [ 199, 190 ]
|
|
2200
|
+
await mintMarket.leverageV2.repayPrices(stateCollateral, userCollateral, userBorrowed);
|
|
2201
|
+
// [ '175.130965754280721633', '202.233191367561902757' ]
|
|
2202
|
+
await mintMarket.leverageV2.repayHealth(stateCollateral, userCollateral, userBorrowed, true);
|
|
2203
|
+
// 1699.6097751079226865
|
|
2204
|
+
await mintMarket.leverageV2.repayHealth(stateCollateral, userCollateral, userBorrowed, false);
|
|
2205
|
+
// 3.4560086962806991
|
|
2206
|
+
await mintMarket.leverageV2.repayIsApproved(userCollateral, userBorrowed);
|
|
2207
|
+
// false
|
|
2208
|
+
await mintMarket.leverageV2.repayApprove(userCollateral, userBorrowed);
|
|
2209
|
+
// ['0xd8a8d3b3f67395e1a4f4d4f95b041edcaf1c9f7bab5eb8a8a767467678295498']
|
|
2210
|
+
await mintMarket.leverageV2.repayRouteImage(stateCollateral, userCollateral);
|
|
2211
|
+
// 'data:image/svg+xml;base64,PHN2ZyBpZD0ic2Fua2V5UGFyZW50U3ZnIiB4bWxucz...'
|
|
2212
|
+
|
|
2213
|
+
// You must call mintMarket.leverageV2.repayExpectedBorrowed() with the same args before
|
|
2214
|
+
await mintMarket.leverageV2.repay(stateCollateral, userCollateral, userBorrowed, slippage);
|
|
2215
|
+
// 0xe48a97fef1c54180a2c7d104d210a95ac1a516fdd22109682179f1582da23a82
|
|
2216
|
+
|
|
2217
|
+
await mintMarket.wallet.balances();
|
|
2218
|
+
// {
|
|
2219
|
+
// collateral: '96.0',
|
|
2220
|
+
// borrowed: '595500.0',
|
|
2221
|
+
// vaultShares: '1400000000.0',
|
|
2222
|
+
// gauge: '0'
|
|
2223
|
+
// }
|
|
2224
|
+
await mintMarket.userState();
|
|
2225
|
+
// {
|
|
2226
|
+
// collateral: '5.727839965845165558',
|
|
2227
|
+
// borrowed: '0.0',
|
|
2228
|
+
// debt: '992.083214663467727334',
|
|
2229
|
+
// N: '10'
|
|
2230
|
+
// }
|
|
2231
|
+
await mintMarket.userBands();
|
|
2232
|
+
// [ 199, 190 ]
|
|
2233
|
+
await mintMarket.userPrices();
|
|
2234
|
+
// [ '175.13096689602455189', '202.233192685995210783' ]
|
|
2235
|
+
await mintMarket.userHealth();
|
|
2236
|
+
// 1716.0249924305707883
|
|
2237
|
+
await mintMarket.userHealth(false);
|
|
2238
|
+
// 3.6389352509210336
|
|
2239
|
+
})()
|
|
2240
|
+
```
|
|
2241
|
+
|
|
2242
|
+
### Leverage createLoan all ranges methods for mintMarket
|
|
2243
|
+
```ts
|
|
2244
|
+
await llamalend.init('JsonRpc', {}, {}, API_KEY_1INCH);
|
|
2245
|
+
|
|
2246
|
+
const mintMarket = llamalend.getMintMarket('cbbtc');
|
|
2247
|
+
|
|
2248
|
+
const userCollateral = 1;
|
|
2249
|
+
const userBorrowed = 1000;
|
|
2250
|
+
const debt = 2000;
|
|
2251
|
+
await mintMarket.leverageV2.createLoanMaxRecvAllRanges(userCollateral, userBorrowed);
|
|
2252
|
+
// {
|
|
2253
|
+
// '4': {
|
|
2254
|
+
// maxDebt: '37916.338071504823875251',
|
|
2255
|
+
// maxTotalCollateral: '13.286983617364703479',
|
|
2256
|
+
// userCollateral: '1',
|
|
2257
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
2258
|
+
// collateralFromMaxDebt: '11.971255462398308199',
|
|
2259
|
+
// maxLeverage: '10.09857816541446843865',
|
|
2260
|
+
// avgPrice: '3167.28167656266072703689'
|
|
2261
|
+
// },
|
|
2262
|
+
// '5': {
|
|
2263
|
+
// maxDebt: '35363.440522143354729759',
|
|
2264
|
+
// maxTotalCollateral: '12.480961984286574804',
|
|
2265
|
+
// userCollateral: '1',
|
|
2266
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
2267
|
+
// collateralFromMaxDebt: '11.165233829320179524',
|
|
2268
|
+
// maxLeverage: '9.48597317551918486951',
|
|
2269
|
+
// avgPrice: '3167.28167656266072703689'
|
|
2270
|
+
// },
|
|
2271
|
+
// '6': {
|
|
2272
|
+
// maxDebt: '33122.824118147617102062',
|
|
2273
|
+
// maxTotalCollateral: '11.773536301065561222',
|
|
2274
|
+
// userCollateral: '1',
|
|
2275
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
2276
|
+
// collateralFromMaxDebt: '10.457808146099165942',
|
|
2277
|
+
// maxLeverage: '8.94830459971897955699',
|
|
2278
|
+
// avgPrice: '3167.28167656266072703689'
|
|
2279
|
+
// },
|
|
2280
|
+
// '7': {
|
|
2281
|
+
// maxDebt: '31140.555201395785060968',
|
|
2282
|
+
// maxTotalCollateral: '11.147678193332270290',
|
|
2283
|
+
// userCollateral: '1',
|
|
2284
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
2285
|
+
// collateralFromMaxDebt: '9.831950038365875010',
|
|
2286
|
+
// maxLeverage: '8.47263027035929823721',
|
|
2287
|
+
// avgPrice: '3167.28167656266072703689'
|
|
2288
|
+
// },
|
|
2289
|
+
//
|
|
2290
|
+
// ...
|
|
2291
|
+
//
|
|
2292
|
+
// '50': {
|
|
2293
|
+
// maxDebt: '8122.705063645852013929',
|
|
2294
|
+
// maxTotalCollateral: '3.880294838047496482',
|
|
2295
|
+
// userCollateral: '1',
|
|
2296
|
+
// collateralFromUserBorrowed: '0.315728154966395280',
|
|
2297
|
+
// collateralFromMaxDebt: '2.564566683081101202',
|
|
2298
|
+
// maxLeverage: '2.94916151440614435181',
|
|
2299
|
+
// avgPrice: '3167.28167656266072703689'
|
|
2300
|
+
// }
|
|
2301
|
+
|
|
2302
|
+
await mintMarket.leverageV2.createLoanBandsAllRanges(userCollateral, userBorrowed, debt);
|
|
2303
|
+
// {
|
|
2304
|
+
// '4': [ 73, 70 ],
|
|
2305
|
+
// '5': [ 73, 69 ],
|
|
2306
|
+
// '6': [ 74, 69 ],
|
|
2307
|
+
// '7': [ 74, 68 ],
|
|
2308
|
+
//
|
|
2309
|
+
// ...
|
|
2310
|
+
//
|
|
2311
|
+
// '50': [ 97, 48 ]
|
|
2312
|
+
// }
|
|
2313
|
+
|
|
2314
|
+
await mintMarket.leverageV2.createLoanPricesAllRanges(userCollateral, userBorrowed, debt);
|
|
2315
|
+
// {
|
|
2316
|
+
// '4': [ '1073.323292757532604807', '1136.910693647788699808' ],
|
|
2317
|
+
// '5': [ '1073.323292757532604807', '1153.387660222394333133' ],
|
|
2318
|
+
// '6': [ '1057.990102860996424743', '1153.387660222394333133' ],
|
|
2319
|
+
// '7': [ '1057.990102860996424743', '1170.103423414023236507' ],
|
|
2320
|
+
//
|
|
2321
|
+
// ...
|
|
2322
|
+
//
|
|
2323
|
+
// '50': [ '759.898822708156242647', '1560.282492846180089068' ]
|
|
2324
|
+
// }
|
|
1979
2325
|
```
|
package/lib/llamalend.js
CHANGED
|
@@ -455,7 +455,7 @@ class Llamalend {
|
|
|
455
455
|
}
|
|
456
456
|
const network = yield this.provider.getNetwork();
|
|
457
457
|
this.chainId = Number(network.chainId) === 133 || Number(network.chainId) === 31337 ? 1 : Number(network.chainId);
|
|
458
|
-
console.log("CURVE-
|
|
458
|
+
console.log("CURVE-LLAMALEND-JS IS CONNECTED TO NETWORK:", { name: network.name.toUpperCase(), chainId: Number(this.chainId) });
|
|
459
459
|
if (this.chainId === 42161) {
|
|
460
460
|
this.constantOptions = { gasLimit: 1125899906842624 }; // https://arbiscan.io/chart/gaslimit
|
|
461
461
|
}
|
|
@@ -584,7 +584,7 @@ class Llamalend {
|
|
|
584
584
|
controller_address: controllers[i],
|
|
585
585
|
monetary_policy_address,
|
|
586
586
|
collateral_address: is_eth ? "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" : collaterals[i],
|
|
587
|
-
leverage_zap:
|
|
587
|
+
leverage_zap: this.constants.ALIASES.leverage_zap,
|
|
588
588
|
deleverage_zap: "0x0000000000000000000000000000000000000000",
|
|
589
589
|
collateral_symbol: is_eth ? "ETH" : collateral_symbol,
|
|
590
590
|
collateral_decimals,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import memoize from "memoizee";
|
|
2
2
|
import type { Llamalend } from "../llamalend.js";
|
|
3
3
|
import { IDict, TGas } from "../interfaces";
|
|
4
|
+
import { ILeverageV2 } from "./interfaces/leverage.js";
|
|
4
5
|
export declare class MintMarketTemplate {
|
|
5
6
|
private llamalend;
|
|
6
7
|
id: string;
|
|
@@ -112,6 +113,7 @@ export declare class MintMarketTemplate {
|
|
|
112
113
|
createLoan: (collateral: number | string, debt: number | string, range: number, slippage?: number) => Promise<TGas>;
|
|
113
114
|
};
|
|
114
115
|
};
|
|
116
|
+
leverageV2: ILeverageV2;
|
|
115
117
|
deleverage: {
|
|
116
118
|
repayStablecoins: (collateral: number | string) => Promise<{
|
|
117
119
|
stablecoins: string;
|
|
@@ -130,7 +132,21 @@ export declare class MintMarketTemplate {
|
|
|
130
132
|
};
|
|
131
133
|
};
|
|
132
134
|
constructor(id: string, llamalend: Llamalend);
|
|
133
|
-
|
|
135
|
+
statsParameters: (() => Promise<{
|
|
136
|
+
fee: string;
|
|
137
|
+
admin_fee: string;
|
|
138
|
+
rate: string;
|
|
139
|
+
future_rate: string;
|
|
140
|
+
liquidation_discount: string;
|
|
141
|
+
loan_discount: string;
|
|
142
|
+
}>) & memoize.Memoized<() => Promise<{
|
|
143
|
+
fee: string;
|
|
144
|
+
admin_fee: string;
|
|
145
|
+
rate: string;
|
|
146
|
+
future_rate: string;
|
|
147
|
+
liquidation_discount: string;
|
|
148
|
+
loan_discount: string;
|
|
149
|
+
}>>;
|
|
134
150
|
private statsBalances;
|
|
135
151
|
private statsMaxMinBands;
|
|
136
152
|
private statsActiveBand;
|
|
@@ -176,7 +192,7 @@ export declare class MintMarketTemplate {
|
|
|
176
192
|
calcBandPrices(n: number): Promise<[string, string]>;
|
|
177
193
|
calcRangePct(range: number): string;
|
|
178
194
|
private walletBalances;
|
|
179
|
-
|
|
195
|
+
_checkRange(range: number): void;
|
|
180
196
|
createLoanMaxRecv(collateral: number | string, range: number): Promise<string>;
|
|
181
197
|
createLoanMaxRecvAllRanges: ((collateral: number | string) => Promise<{
|
|
182
198
|
[index: number]: string;
|
|
@@ -186,8 +202,8 @@ export declare class MintMarketTemplate {
|
|
|
186
202
|
getMaxRange(collateral: number | string, debt: number | string): Promise<number>;
|
|
187
203
|
private _calcN1;
|
|
188
204
|
private _calcN1AllRanges;
|
|
189
|
-
|
|
190
|
-
|
|
205
|
+
_getPrices(_n2: bigint, _n1: bigint): Promise<string[]>;
|
|
206
|
+
_calcPrices(_n2: bigint, _n1: bigint): Promise<[string, string]>;
|
|
191
207
|
private _createLoanBands;
|
|
192
208
|
private _createLoanBandsAllRanges;
|
|
193
209
|
createLoanBands(collateral: number | string, debt: number | string, range: number): Promise<[number, number]>;
|
|
@@ -309,4 +325,5 @@ export declare class MintMarketTemplate {
|
|
|
309
325
|
private _deleverageRepay;
|
|
310
326
|
private deleverageRepayEstimateGas;
|
|
311
327
|
private deleverageRepay;
|
|
328
|
+
getLlamalend(): Llamalend;
|
|
312
329
|
}
|
|
@@ -11,6 +11,7 @@ import memoize from "memoizee";
|
|
|
11
11
|
import BigNumber from "bignumber.js";
|
|
12
12
|
import { _getAddress, parseUnits, BN, toBN, fromBN, getBalances, ensureAllowance, hasAllowance, ensureAllowanceEstimateGas, isEth, _cutZeros, formatUnits, smartNumber, MAX_ALLOWANCE, MAX_ACTIVE_BAND, _mulBy1_3, DIGas, } from "../utils";
|
|
13
13
|
import { _getUserCollateralCrvUsd } from "../external-api.js";
|
|
14
|
+
import { LeverageV2Module } from "./modules";
|
|
14
15
|
export class MintMarketTemplate {
|
|
15
16
|
constructor(id, llamalend) {
|
|
16
17
|
var _a;
|
|
@@ -312,6 +313,54 @@ export class MintMarketTemplate {
|
|
|
312
313
|
createLoan: this.leverageCreateLoanEstimateGas.bind(this),
|
|
313
314
|
},
|
|
314
315
|
};
|
|
316
|
+
const leverageV2 = new LeverageV2Module(this);
|
|
317
|
+
this.leverageV2 = {
|
|
318
|
+
hasLeverage: leverageV2.hasLeverage,
|
|
319
|
+
maxLeverage: leverageV2.maxLeverage,
|
|
320
|
+
createLoanMaxRecv: leverageV2.leverageCreateLoanMaxRecv,
|
|
321
|
+
createLoanMaxRecvAllRanges: leverageV2.leverageCreateLoanMaxRecvAllRanges,
|
|
322
|
+
createLoanExpectedCollateral: leverageV2.leverageCreateLoanExpectedCollateral,
|
|
323
|
+
createLoanPriceImpact: leverageV2.leverageCreateLoanPriceImpact,
|
|
324
|
+
createLoanMaxRange: leverageV2.leverageCreateLoanMaxRange,
|
|
325
|
+
createLoanBands: leverageV2.leverageCreateLoanBands,
|
|
326
|
+
createLoanBandsAllRanges: leverageV2.leverageCreateLoanBandsAllRanges,
|
|
327
|
+
createLoanPrices: leverageV2.leverageCreateLoanPrices,
|
|
328
|
+
createLoanPricesAllRanges: leverageV2.leverageCreateLoanPricesAllRanges,
|
|
329
|
+
createLoanHealth: leverageV2.leverageCreateLoanHealth,
|
|
330
|
+
createLoanIsApproved: leverageV2.leverageCreateLoanIsApproved,
|
|
331
|
+
createLoanApprove: leverageV2.leverageCreateLoanApprove,
|
|
332
|
+
createLoanRouteImage: leverageV2.leverageCreateLoanRouteImage,
|
|
333
|
+
createLoan: leverageV2.leverageCreateLoan,
|
|
334
|
+
borrowMoreMaxRecv: leverageV2.leverageBorrowMoreMaxRecv,
|
|
335
|
+
borrowMoreExpectedCollateral: leverageV2.leverageBorrowMoreExpectedCollateral,
|
|
336
|
+
borrowMorePriceImpact: leverageV2.leverageBorrowMorePriceImpact,
|
|
337
|
+
borrowMoreBands: leverageV2.leverageBorrowMoreBands,
|
|
338
|
+
borrowMorePrices: leverageV2.leverageBorrowMorePrices,
|
|
339
|
+
borrowMoreHealth: leverageV2.leverageBorrowMoreHealth,
|
|
340
|
+
borrowMoreIsApproved: leverageV2.leverageCreateLoanIsApproved,
|
|
341
|
+
borrowMoreApprove: leverageV2.leverageCreateLoanApprove,
|
|
342
|
+
borrowMoreRouteImage: leverageV2.leverageBorrowMoreRouteImage,
|
|
343
|
+
borrowMore: leverageV2.leverageBorrowMore,
|
|
344
|
+
repayExpectedBorrowed: leverageV2.leverageRepayExpectedBorrowed,
|
|
345
|
+
repayPriceImpact: leverageV2.leverageRepayPriceImpact,
|
|
346
|
+
repayIsFull: leverageV2.leverageRepayIsFull,
|
|
347
|
+
repayIsAvailable: leverageV2.leverageRepayIsAvailable,
|
|
348
|
+
repayBands: leverageV2.leverageRepayBands,
|
|
349
|
+
repayPrices: leverageV2.leverageRepayPrices,
|
|
350
|
+
repayHealth: leverageV2.leverageRepayHealth,
|
|
351
|
+
repayIsApproved: leverageV2.leverageRepayIsApproved,
|
|
352
|
+
repayApprove: leverageV2.leverageRepayApprove,
|
|
353
|
+
repayRouteImage: leverageV2.leverageRepayRouteImage,
|
|
354
|
+
repay: leverageV2.leverageRepay,
|
|
355
|
+
estimateGas: {
|
|
356
|
+
createLoanApprove: leverageV2.leverageCreateLoanApproveEstimateGas,
|
|
357
|
+
createLoan: leverageV2.leverageCreateLoanEstimateGas,
|
|
358
|
+
borrowMoreApprove: leverageV2.leverageCreateLoanApproveEstimateGas,
|
|
359
|
+
borrowMore: leverageV2.leverageBorrowMoreEstimateGas,
|
|
360
|
+
repayApprove: leverageV2.leverageRepayApproveEstimateGas,
|
|
361
|
+
repay: leverageV2.leverageRepayEstimateGas,
|
|
362
|
+
},
|
|
363
|
+
};
|
|
315
364
|
this.deleverage = {
|
|
316
365
|
repayStablecoins: this.deleverageRepayStablecoins.bind(this),
|
|
317
366
|
getRouteName: this.deleverageGetRouteName.bind(this),
|
|
@@ -1668,4 +1717,7 @@ export class MintMarketTemplate {
|
|
|
1668
1717
|
return yield this._deleverageRepay(collateral, slippage, false);
|
|
1669
1718
|
});
|
|
1670
1719
|
}
|
|
1720
|
+
getLlamalend() {
|
|
1721
|
+
return this.llamalend;
|
|
1722
|
+
}
|
|
1671
1723
|
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { IDict, TAmount, TGas } from "../../interfaces";
|
|
2
|
+
export interface ILeverageV2 {
|
|
3
|
+
hasLeverage: () => boolean;
|
|
4
|
+
maxLeverage: (N: number) => Promise<string>;
|
|
5
|
+
createLoanMaxRecv: (userCollateral: TAmount, userBorrowed: TAmount, range: number) => Promise<{
|
|
6
|
+
maxDebt: string;
|
|
7
|
+
maxTotalCollateral: string;
|
|
8
|
+
userCollateral: string;
|
|
9
|
+
collateralFromUserBorrowed: string;
|
|
10
|
+
collateralFromMaxDebt: string;
|
|
11
|
+
maxLeverage: string;
|
|
12
|
+
avgPrice: string;
|
|
13
|
+
}>;
|
|
14
|
+
createLoanMaxRecvAllRanges: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<IDict<{
|
|
15
|
+
maxDebt: string;
|
|
16
|
+
maxTotalCollateral: string;
|
|
17
|
+
userCollateral: string;
|
|
18
|
+
collateralFromUserBorrowed: string;
|
|
19
|
+
collateralFromMaxDebt: string;
|
|
20
|
+
maxLeverage: string;
|
|
21
|
+
avgPrice: string;
|
|
22
|
+
}>>;
|
|
23
|
+
createLoanExpectedCollateral: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<{
|
|
24
|
+
totalCollateral: string;
|
|
25
|
+
userCollateral: string;
|
|
26
|
+
collateralFromUserBorrowed: string;
|
|
27
|
+
collateralFromDebt: string;
|
|
28
|
+
leverage: string;
|
|
29
|
+
avgPrice: string;
|
|
30
|
+
}>;
|
|
31
|
+
createLoanPriceImpact: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
|
|
32
|
+
createLoanMaxRange: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<number>;
|
|
33
|
+
createLoanBands: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number) => Promise<[number, number]>;
|
|
34
|
+
createLoanBandsAllRanges: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<IDict<[number, number] | null>>;
|
|
35
|
+
createLoanPrices: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number) => Promise<string[]>;
|
|
36
|
+
createLoanPricesAllRanges: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount) => Promise<IDict<[string, string] | null>>;
|
|
37
|
+
createLoanHealth: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, full?: boolean) => Promise<string>;
|
|
38
|
+
createLoanIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>;
|
|
39
|
+
createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
|
|
40
|
+
createLoanRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
|
|
41
|
+
createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<string>;
|
|
42
|
+
borrowMoreMaxRecv: (userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<{
|
|
43
|
+
maxDebt: string;
|
|
44
|
+
maxTotalCollateral: string;
|
|
45
|
+
userCollateral: string;
|
|
46
|
+
collateralFromUserBorrowed: string;
|
|
47
|
+
collateralFromMaxDebt: string;
|
|
48
|
+
avgPrice: string;
|
|
49
|
+
}>;
|
|
50
|
+
borrowMoreExpectedCollateral: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, slippage?: number, address?: string) => Promise<{
|
|
51
|
+
totalCollateral: string;
|
|
52
|
+
userCollateral: string;
|
|
53
|
+
collateralFromUserBorrowed: string;
|
|
54
|
+
collateralFromDebt: string;
|
|
55
|
+
avgPrice: string;
|
|
56
|
+
}>;
|
|
57
|
+
borrowMorePriceImpact: (userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<string>;
|
|
58
|
+
borrowMoreBands: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<[number, number]>;
|
|
59
|
+
borrowMorePrices: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, address?: string) => Promise<string[]>;
|
|
60
|
+
borrowMoreHealth: (userCollateral: TAmount, userBorrowed: TAmount, dDebt: TAmount, full?: boolean, address?: string) => Promise<string>;
|
|
61
|
+
borrowMoreIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>;
|
|
62
|
+
borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
|
|
63
|
+
borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
|
|
64
|
+
borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>;
|
|
65
|
+
repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
|
|
66
|
+
totalBorrowed: string;
|
|
67
|
+
borrowedFromStateCollateral: string;
|
|
68
|
+
borrowedFromUserCollateral: string;
|
|
69
|
+
userBorrowed: string;
|
|
70
|
+
avgPrice: string;
|
|
71
|
+
}>;
|
|
72
|
+
repayPriceImpact: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
|
|
73
|
+
repayIsFull: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<boolean>;
|
|
74
|
+
repayIsAvailable: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<boolean>;
|
|
75
|
+
repayBands: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<[number, number]>;
|
|
76
|
+
repayPrices: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, address?: string) => Promise<string[]>;
|
|
77
|
+
repayHealth: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, full?: boolean, address?: string) => Promise<string>;
|
|
78
|
+
repayIsApproved: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<boolean>;
|
|
79
|
+
repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
|
|
80
|
+
repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
|
|
81
|
+
repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>;
|
|
82
|
+
estimateGas: {
|
|
83
|
+
createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
|
|
84
|
+
createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<number>;
|
|
85
|
+
borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
|
|
86
|
+
borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<number>;
|
|
87
|
+
repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
|
|
88
|
+
repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<number>;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LeverageV2Module } from './leverageV2.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LeverageV2Module } from './leverageV2.js';
|