@curvefi/llamalend-api 1.0.21 → 1.0.22-beta.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/.github/workflows/publish.yml +1 -0
- package/lib/external-api.d.ts +5 -4
- package/lib/external-api.js +110 -98
- package/lib/index.d.ts +138 -41
- package/lib/index.js +80 -75
- package/lib/lendMarkets/LendMarketTemplate.d.ts +3 -1
- package/lib/lendMarkets/LendMarketTemplate.js +333 -333
- package/lib/lendMarkets/lendMarketConstructor.d.ts +2 -1
- package/lib/lendMarkets/lendMarketConstructor.js +3 -4
- package/lib/llamalend.d.ts +1 -2
- package/lib/llamalend.js +4 -18
- package/lib/mintMarkets/MintMarketTemplate.d.ts +3 -1
- package/lib/mintMarkets/MintMarketTemplate.js +204 -204
- package/lib/mintMarkets/mintMarketConstructor.d.ts +2 -1
- package/lib/mintMarkets/mintMarketConstructor.js +2 -2
- package/lib/st-crvUSD.d.ts +29 -28
- package/lib/st-crvUSD.js +237 -173
- package/lib/utils.d.ts +20 -19
- package/lib/utils.js +290 -256
- package/package.json +14 -14
- package/src/external-api.ts +16 -12
- package/src/index.ts +88 -76
- package/src/lendMarkets/LendMarketTemplate.ts +348 -346
- package/src/lendMarkets/lendMarketConstructor.ts +4 -4
- package/src/llamalend.ts +35 -56
- package/src/mintMarkets/MintMarketTemplate.ts +206 -204
- package/src/mintMarkets/mintMarketConstructor.ts +3 -2
- package/src/st-crvUSD.ts +97 -96
- package/src/utils.ts +85 -82
|
@@ -9,7 +9,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import memoize from "memoizee";
|
|
11
11
|
import BigNumber from "bignumber.js";
|
|
12
|
-
import { llamalend } from "../llamalend.js";
|
|
13
12
|
import { _getAddress, parseUnits, BN, toBN, fromBN, getBalances, _ensureAllowance, ensureAllowance, hasAllowance, ensureAllowanceEstimateGas, _cutZeros, formatUnits, formatNumber, MAX_ALLOWANCE, MAX_ACTIVE_BAND, _mulBy1_3, _getUsdRate, DIGas, smartNumber, } from "../utils.js";
|
|
14
13
|
import { _getExpectedOdos, _getQuoteOdos, _assembleTxOdos, _getUserCollateral, _getMarketsData } from "../external-api.js";
|
|
15
14
|
import ERC20Abi from '../constants/abis/ERC20.json' assert { type: 'json' };
|
|
@@ -17,7 +16,7 @@ import { cacheKey, cacheStats } from "../cache/index.js";
|
|
|
17
16
|
const DAY = 86400;
|
|
18
17
|
const WEEK = 7 * DAY;
|
|
19
18
|
export class LendMarketTemplate {
|
|
20
|
-
constructor(id, marketData) {
|
|
19
|
+
constructor(id, marketData, llamalend) {
|
|
21
20
|
this.swapDataCache = {};
|
|
22
21
|
this._getMarketId = () => Number(this.id.split("-").slice(-1)[0]);
|
|
23
22
|
this._calcCrvApr = (...args_1) => __awaiter(this, [...args_1], void 0, function* (futureWorkingSupplyBN = null) {
|
|
@@ -25,26 +24,26 @@ export class LendMarketTemplate {
|
|
|
25
24
|
if (Number(totalLiquidityUSD) === 0)
|
|
26
25
|
return [0, 0];
|
|
27
26
|
let inflationRateBN, workingSupplyBN, totalSupplyBN;
|
|
28
|
-
if (llamalend.chainId !== 1) {
|
|
29
|
-
const gaugeContract = llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
30
|
-
const lpTokenContract = llamalend.contracts[this.addresses.vault].multicallContract;
|
|
31
|
-
const crvContract = llamalend.contracts[llamalend.constants.ALIASES.crv].contract;
|
|
27
|
+
if (this.llamalend.chainId !== 1) {
|
|
28
|
+
const gaugeContract = this.llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
29
|
+
const lpTokenContract = this.llamalend.contracts[this.addresses.vault].multicallContract;
|
|
30
|
+
const crvContract = this.llamalend.contracts[this.llamalend.constants.ALIASES.crv].contract;
|
|
32
31
|
const currentWeek = Math.floor(Date.now() / 1000 / WEEK);
|
|
33
|
-
[inflationRateBN, workingSupplyBN, totalSupplyBN] = (yield llamalend.multicallProvider.all([
|
|
32
|
+
[inflationRateBN, workingSupplyBN, totalSupplyBN] = (yield this.llamalend.multicallProvider.all([
|
|
34
33
|
gaugeContract.inflation_rate(currentWeek),
|
|
35
34
|
gaugeContract.working_supply(),
|
|
36
35
|
lpTokenContract.totalSupply(),
|
|
37
36
|
])).map((value) => toBN(value));
|
|
38
37
|
if (inflationRateBN.eq(0)) {
|
|
39
|
-
inflationRateBN = toBN(yield crvContract.balanceOf(this.addresses.gauge, llamalend.constantOptions)).div(WEEK);
|
|
38
|
+
inflationRateBN = toBN(yield crvContract.balanceOf(this.addresses.gauge, this.llamalend.constantOptions)).div(WEEK);
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
41
|
else {
|
|
43
|
-
const gaugeContract = llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
44
|
-
const lpTokenContract = llamalend.contracts[this.addresses.vault].multicallContract;
|
|
45
|
-
const gaugeControllerContract = llamalend.contracts[llamalend.constants.ALIASES.gauge_controller].multicallContract;
|
|
42
|
+
const gaugeContract = this.llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
43
|
+
const lpTokenContract = this.llamalend.contracts[this.addresses.vault].multicallContract;
|
|
44
|
+
const gaugeControllerContract = this.llamalend.contracts[this.llamalend.constants.ALIASES.gauge_controller].multicallContract;
|
|
46
45
|
let weightBN;
|
|
47
|
-
[inflationRateBN, weightBN, workingSupplyBN, totalSupplyBN] = (yield llamalend.multicallProvider.all([
|
|
46
|
+
[inflationRateBN, weightBN, workingSupplyBN, totalSupplyBN] = (yield this.llamalend.multicallProvider.all([
|
|
48
47
|
gaugeContract.inflation_rate(),
|
|
49
48
|
gaugeControllerContract.gauge_relative_weight(this.addresses.gauge),
|
|
50
49
|
gaugeContract.working_supply(),
|
|
@@ -59,13 +58,13 @@ export class LendMarketTemplate {
|
|
|
59
58
|
// If you added 1$ value of LP it would be 0.4$ of working LP. So your annual reward per 1$ in USD is:
|
|
60
59
|
// (annual reward per working liquidity in $) * (0.4$ of working LP)
|
|
61
60
|
const rateBN = inflationRateBN.times(31536000).div(workingSupplyBN).times(totalSupplyBN).div(Number(totalLiquidityUSD)).times(0.4);
|
|
62
|
-
const crvPrice = yield _getUsdRate(llamalend.constants.ALIASES.crv);
|
|
61
|
+
const crvPrice = yield _getUsdRate.call(this.llamalend, this.llamalend.constants.ALIASES.crv);
|
|
63
62
|
const baseApyBN = rateBN.times(crvPrice);
|
|
64
63
|
const boostedApyBN = baseApyBN.times(2.5);
|
|
65
64
|
return [baseApyBN.times(100).toNumber(), boostedApyBN.times(100).toNumber()];
|
|
66
65
|
});
|
|
67
66
|
this.vaultRewardTokens = memoize(() => __awaiter(this, void 0, void 0, function* () {
|
|
68
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS)
|
|
67
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS)
|
|
69
68
|
return [];
|
|
70
69
|
// if (useApi) {
|
|
71
70
|
// const rewards = await _getRewardsFromApi();
|
|
@@ -73,26 +72,26 @@ export class LendMarketTemplate {
|
|
|
73
72
|
// rewards[this.addresses.gauge].forEach((r) => _setContracts(r.tokenAddress, ERC20Abi));
|
|
74
73
|
// return rewards[this.addresses.gauge].map((r) => ({ token: r.tokenAddress, symbol: r.symbol, decimals: Number(r.decimals) }));
|
|
75
74
|
// }
|
|
76
|
-
const gaugeContract = llamalend.contracts[this.addresses.gauge].contract;
|
|
77
|
-
const gaugeMulticallContract = llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
78
|
-
const rewardCount = Number(llamalend.formatUnits(yield gaugeContract.reward_count(llamalend.constantOptions), 0));
|
|
75
|
+
const gaugeContract = this.llamalend.contracts[this.addresses.gauge].contract;
|
|
76
|
+
const gaugeMulticallContract = this.llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
77
|
+
const rewardCount = Number(this.llamalend.formatUnits(yield gaugeContract.reward_count(this.llamalend.constantOptions), 0));
|
|
79
78
|
const tokenCalls = [];
|
|
80
79
|
for (let i = 0; i < rewardCount; i++) {
|
|
81
80
|
tokenCalls.push(gaugeMulticallContract.reward_tokens(i));
|
|
82
81
|
}
|
|
83
|
-
const tokens = (yield llamalend.multicallProvider.all(tokenCalls))
|
|
84
|
-
.filter((addr) => addr !== llamalend.constants.ZERO_ADDRESS)
|
|
82
|
+
const tokens = (yield this.llamalend.multicallProvider.all(tokenCalls))
|
|
83
|
+
.filter((addr) => addr !== this.llamalend.constants.ZERO_ADDRESS)
|
|
85
84
|
.map((addr) => addr.toLowerCase())
|
|
86
|
-
.filter((addr) => llamalend.chainId === 1 || addr !== llamalend.constants.COINS.crv);
|
|
85
|
+
.filter((addr) => this.llamalend.chainId === 1 || addr !== this.llamalend.constants.COINS.crv);
|
|
87
86
|
const tokenInfoCalls = [];
|
|
88
87
|
for (const token of tokens) {
|
|
89
|
-
llamalend.setContract(token, ERC20Abi);
|
|
90
|
-
const tokenMulticallContract = llamalend.contracts[token].multicallContract;
|
|
88
|
+
this.llamalend.setContract(token, ERC20Abi);
|
|
89
|
+
const tokenMulticallContract = this.llamalend.contracts[token].multicallContract;
|
|
91
90
|
tokenInfoCalls.push(tokenMulticallContract.symbol(), tokenMulticallContract.decimals());
|
|
92
91
|
}
|
|
93
|
-
const tokenInfo = yield llamalend.multicallProvider.all(tokenInfoCalls);
|
|
92
|
+
const tokenInfo = yield this.llamalend.multicallProvider.all(tokenInfoCalls);
|
|
94
93
|
for (let i = 0; i < tokens.length; i++) {
|
|
95
|
-
llamalend.constants.DECIMALS[tokens[i]] = Number(tokenInfo[(i * 2) + 1]);
|
|
94
|
+
this.llamalend.constants.DECIMALS[tokens[i]] = Number(tokenInfo[(i * 2) + 1]);
|
|
96
95
|
}
|
|
97
96
|
return tokens.map((token, i) => ({ token, symbol: tokenInfo[i * 2], decimals: Number(tokenInfo[(i * 2) + 1]) }));
|
|
98
97
|
}), {
|
|
@@ -101,7 +100,7 @@ export class LendMarketTemplate {
|
|
|
101
100
|
});
|
|
102
101
|
this.vaultRewardsApr = (...args_1) => __awaiter(this, [...args_1], void 0, function* (useApi = true) {
|
|
103
102
|
if (useApi) {
|
|
104
|
-
const response = yield _getMarketsData(llamalend.constants.NETWORK_NAME);
|
|
103
|
+
const response = yield _getMarketsData(this.llamalend.constants.NETWORK_NAME);
|
|
105
104
|
const market = response.lendingVaultData.find((item) => item.address.toLowerCase() === this.addresses.vault.toLowerCase());
|
|
106
105
|
if (market) {
|
|
107
106
|
return market.gaugeRewards;
|
|
@@ -111,9 +110,9 @@ export class LendMarketTemplate {
|
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
112
|
else {
|
|
114
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS)
|
|
113
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS)
|
|
115
114
|
return [];
|
|
116
|
-
// const isDisabledChain = [1313161554].includes(llamalend.chainId); // Disable Aurora
|
|
115
|
+
// const isDisabledChain = [1313161554].includes(this.llamalend.chainId); // Disable Aurora
|
|
117
116
|
// if (useApi && !isDisabledChain) {
|
|
118
117
|
// const rewards = await _getRewardsFromApi();
|
|
119
118
|
// if (!rewards[this.addresses.gauge]) return [];
|
|
@@ -122,12 +121,12 @@ export class LendMarketTemplate {
|
|
|
122
121
|
const apy = [];
|
|
123
122
|
const rewardTokens = yield this.vaultRewardTokens();
|
|
124
123
|
for (const rewardToken of rewardTokens) {
|
|
125
|
-
const gaugeContract = llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
126
|
-
const lpTokenContract = llamalend.contracts[this.addresses.vault].multicallContract;
|
|
127
|
-
const rewardContract = llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
124
|
+
const gaugeContract = this.llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
125
|
+
const lpTokenContract = this.llamalend.contracts[this.addresses.vault].multicallContract;
|
|
126
|
+
const rewardContract = this.llamalend.contracts[this.addresses.gauge].multicallContract;
|
|
128
127
|
const totalLiquidityUSD = yield this.vaultTotalLiquidity();
|
|
129
|
-
const rewardRate = yield _getUsdRate(rewardToken.token);
|
|
130
|
-
const [rewardData, _stakedSupply, _totalSupply] = yield llamalend.multicallProvider.all([
|
|
128
|
+
const rewardRate = yield _getUsdRate.call(this.llamalend, rewardToken.token);
|
|
129
|
+
const [rewardData, _stakedSupply, _totalSupply] = yield this.llamalend.multicallProvider.all([
|
|
131
130
|
rewardContract.reward_data(rewardToken.token),
|
|
132
131
|
gaugeContract.totalSupply(),
|
|
133
132
|
lpTokenContract.totalSupply(),
|
|
@@ -135,7 +134,7 @@ export class LendMarketTemplate {
|
|
|
135
134
|
const stakedSupplyBN = toBN(_stakedSupply);
|
|
136
135
|
const totalSupplyBN = toBN(_totalSupply);
|
|
137
136
|
const inflationBN = toBN(rewardData.rate, rewardToken.decimals);
|
|
138
|
-
const periodFinish = Number(llamalend.formatUnits(rewardData.period_finish, 0)) * 1000;
|
|
137
|
+
const periodFinish = Number(this.llamalend.formatUnits(rewardData.period_finish, 0)) * 1000;
|
|
139
138
|
const baseApy = periodFinish > Date.now() ?
|
|
140
139
|
inflationBN.times(31536000).times(rewardRate).div(stakedSupplyBN).times(totalSupplyBN).div(Number(totalLiquidityUSD)) :
|
|
141
140
|
BN(0);
|
|
@@ -151,8 +150,8 @@ export class LendMarketTemplate {
|
|
|
151
150
|
});
|
|
152
151
|
// ---------------- STATS ----------------
|
|
153
152
|
this.statsParameters = memoize(() => __awaiter(this, void 0, void 0, function* () {
|
|
154
|
-
const llammaContract = llamalend.contracts[this.addresses.amm].multicallContract;
|
|
155
|
-
const controllerContract = llamalend.contracts[this.addresses.controller].multicallContract;
|
|
153
|
+
const llammaContract = this.llamalend.contracts[this.addresses.amm].multicallContract;
|
|
154
|
+
const controllerContract = this.llamalend.contracts[this.addresses.controller].multicallContract;
|
|
156
155
|
const calls = [
|
|
157
156
|
llammaContract.fee(),
|
|
158
157
|
llammaContract.admin_fee(),
|
|
@@ -161,7 +160,7 @@ export class LendMarketTemplate {
|
|
|
161
160
|
llammaContract.get_base_price(),
|
|
162
161
|
llammaContract.A(),
|
|
163
162
|
];
|
|
164
|
-
const [_fee, _admin_fee, _liquidation_discount, _loan_discount, _base_price, _A] = yield llamalend.multicallProvider.all(calls);
|
|
163
|
+
const [_fee, _admin_fee, _liquidation_discount, _loan_discount, _base_price, _A] = yield this.llamalend.multicallProvider.all(calls);
|
|
165
164
|
const A = formatUnits(_A, 0);
|
|
166
165
|
const base_price = formatUnits(_base_price);
|
|
167
166
|
const [fee, admin_fee, liquidation_discount, loan_discount] = [_fee, _admin_fee, _liquidation_discount, _loan_discount]
|
|
@@ -177,23 +176,23 @@ export class LendMarketTemplate {
|
|
|
177
176
|
_rate = cacheStats.get(cacheKey(this.addresses.amm, 'rate'));
|
|
178
177
|
}
|
|
179
178
|
else {
|
|
180
|
-
_rate = yield llamalend.contracts[this.addresses.amm].contract.rate(llamalend.constantOptions);
|
|
179
|
+
_rate = yield this.llamalend.contracts[this.addresses.amm].contract.rate(this.llamalend.constantOptions);
|
|
181
180
|
cacheStats.set(cacheKey(this.addresses.controller, 'rate'), _rate);
|
|
182
181
|
}
|
|
183
182
|
return _rate;
|
|
184
183
|
});
|
|
185
184
|
this._getFutureRate = (_dReserves, _dDebt) => __awaiter(this, void 0, void 0, function* () {
|
|
186
|
-
const mpContract = llamalend.contracts[this.addresses.monetary_policy].contract;
|
|
185
|
+
const mpContract = this.llamalend.contracts[this.addresses.monetary_policy].contract;
|
|
187
186
|
return yield mpContract.future_rate(this.addresses.controller, _dReserves, _dDebt);
|
|
188
187
|
});
|
|
189
188
|
this.statsBandsInfo = memoize(() => __awaiter(this, void 0, void 0, function* () {
|
|
190
|
-
const ammContract = llamalend.contracts[this.addresses.amm].multicallContract;
|
|
189
|
+
const ammContract = this.llamalend.contracts[this.addresses.amm].multicallContract;
|
|
191
190
|
const calls = [
|
|
192
191
|
ammContract.active_band_with_skip(),
|
|
193
192
|
ammContract.max_band(),
|
|
194
193
|
ammContract.min_band(),
|
|
195
194
|
];
|
|
196
|
-
const [activeBand, maxBand, minBand] = (yield llamalend.multicallProvider.all(calls)).map((_b) => Number(_b));
|
|
195
|
+
const [activeBand, maxBand, minBand] = (yield this.llamalend.multicallProvider.all(calls)).map((_b) => Number(_b));
|
|
197
196
|
const { borrowed, collateral } = yield this.statsBandBalances(activeBand);
|
|
198
197
|
let liquidationBand = null;
|
|
199
198
|
if (Number(borrowed) > 0 && Number(collateral) > 0)
|
|
@@ -205,7 +204,7 @@ export class LendMarketTemplate {
|
|
|
205
204
|
});
|
|
206
205
|
this.statsAmmBalances = (...args_1) => __awaiter(this, [...args_1], void 0, function* (isGetter = true, useAPI = false) {
|
|
207
206
|
if (useAPI) {
|
|
208
|
-
const response = yield _getMarketsData(llamalend.constants.NETWORK_NAME);
|
|
207
|
+
const response = yield _getMarketsData(this.llamalend.constants.NETWORK_NAME);
|
|
209
208
|
const market = response.lendingVaultData.find((item) => item.address.toLowerCase() === this.addresses.vault.toLowerCase());
|
|
210
209
|
if (market) {
|
|
211
210
|
return {
|
|
@@ -218,9 +217,9 @@ export class LendMarketTemplate {
|
|
|
218
217
|
}
|
|
219
218
|
}
|
|
220
219
|
else {
|
|
221
|
-
const borrowedContract = llamalend.contracts[this.addresses.borrowed_token].multicallContract;
|
|
222
|
-
const collateralContract = llamalend.contracts[this.addresses.collateral_token].multicallContract;
|
|
223
|
-
const ammContract = llamalend.contracts[this.addresses.amm].multicallContract;
|
|
220
|
+
const borrowedContract = this.llamalend.contracts[this.addresses.borrowed_token].multicallContract;
|
|
221
|
+
const collateralContract = this.llamalend.contracts[this.addresses.collateral_token].multicallContract;
|
|
222
|
+
const ammContract = this.llamalend.contracts[this.addresses.amm].multicallContract;
|
|
224
223
|
let _balance_x, _fee_x, _balance_y, _fee_y;
|
|
225
224
|
if (isGetter) {
|
|
226
225
|
[_balance_x, _fee_x, _balance_y, _fee_y] = [
|
|
@@ -231,7 +230,7 @@ export class LendMarketTemplate {
|
|
|
231
230
|
];
|
|
232
231
|
}
|
|
233
232
|
else {
|
|
234
|
-
[_balance_x, _fee_x, _balance_y, _fee_y] = yield llamalend.multicallProvider.all([
|
|
233
|
+
[_balance_x, _fee_x, _balance_y, _fee_y] = yield this.llamalend.multicallProvider.all([
|
|
235
234
|
borrowedContract.balanceOf(this.addresses.amm),
|
|
236
235
|
ammContract.admin_fees_x(),
|
|
237
236
|
collateralContract.balanceOf(this.addresses.amm),
|
|
@@ -250,30 +249,30 @@ export class LendMarketTemplate {
|
|
|
250
249
|
});
|
|
251
250
|
// ---------------- PRICES ----------------
|
|
252
251
|
this.A = memoize(() => __awaiter(this, void 0, void 0, function* () {
|
|
253
|
-
const _A = yield llamalend.contracts[this.addresses.amm].contract.A(llamalend.constantOptions);
|
|
252
|
+
const _A = yield this.llamalend.contracts[this.addresses.amm].contract.A(this.llamalend.constantOptions);
|
|
254
253
|
return formatUnits(_A, 0);
|
|
255
254
|
}), {
|
|
256
255
|
promise: true,
|
|
257
256
|
maxAge: 86400 * 1000, // 1d
|
|
258
257
|
});
|
|
259
258
|
this.basePrice = memoize(() => __awaiter(this, void 0, void 0, function* () {
|
|
260
|
-
const _price = yield llamalend.contracts[this.addresses.amm].contract.get_base_price(llamalend.constantOptions);
|
|
259
|
+
const _price = yield this.llamalend.contracts[this.addresses.amm].contract.get_base_price(this.llamalend.constantOptions);
|
|
261
260
|
return formatUnits(_price);
|
|
262
261
|
}), {
|
|
263
262
|
promise: true,
|
|
264
263
|
maxAge: 86400 * 1000, // 1d
|
|
265
264
|
});
|
|
266
265
|
this.oraclePrice = memoize(() => __awaiter(this, void 0, void 0, function* () {
|
|
267
|
-
const _price = yield llamalend.contracts[this.addresses.amm].contract.price_oracle(llamalend.constantOptions);
|
|
266
|
+
const _price = yield this.llamalend.contracts[this.addresses.amm].contract.price_oracle(this.llamalend.constantOptions);
|
|
268
267
|
return formatUnits(_price);
|
|
269
268
|
}), {
|
|
270
269
|
promise: true,
|
|
271
270
|
maxAge: 60 * 1000, // 1m
|
|
272
271
|
});
|
|
273
272
|
this._userState = memoize((...args_1) => __awaiter(this, [...args_1], void 0, function* (address = "") {
|
|
274
|
-
address = _getAddress(address);
|
|
275
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
276
|
-
const [_collateral, _borrowed, _debt, _N] = yield contract.user_state(address, llamalend.constantOptions);
|
|
273
|
+
address = _getAddress.call(this.llamalend, address);
|
|
274
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
275
|
+
const [_collateral, _borrowed, _debt, _N] = yield contract.user_state(address, this.llamalend.constantOptions);
|
|
277
276
|
return { _collateral, _borrowed, _debt, _N };
|
|
278
277
|
}), {
|
|
279
278
|
promise: true,
|
|
@@ -283,9 +282,9 @@ export class LendMarketTemplate {
|
|
|
283
282
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals);
|
|
284
283
|
const calls = [];
|
|
285
284
|
for (let N = this.minBands; N <= this.maxBands; N++) {
|
|
286
|
-
calls.push(llamalend.contracts[this.addresses.controller].multicallContract.max_borrowable(_collateral, N, 0));
|
|
285
|
+
calls.push(this.llamalend.contracts[this.addresses.controller].multicallContract.max_borrowable(_collateral, N, 0));
|
|
287
286
|
}
|
|
288
|
-
const _amounts = yield llamalend.multicallProvider.all(calls);
|
|
287
|
+
const _amounts = yield this.llamalend.multicallProvider.all(calls);
|
|
289
288
|
const res = {};
|
|
290
289
|
for (let N = this.minBands; N <= this.maxBands; N++) {
|
|
291
290
|
res[N] = formatUnits(_amounts[N - this.minBands], this.borrowed_token.decimals);
|
|
@@ -297,13 +296,13 @@ export class LendMarketTemplate {
|
|
|
297
296
|
});
|
|
298
297
|
// ---------------- LEVERAGE CREATE LOAN ----------------
|
|
299
298
|
this.hasLeverage = () => {
|
|
300
|
-
return llamalend.constants.ALIASES.leverage_zap !== llamalend.constants.ZERO_ADDRESS &&
|
|
301
|
-
this._getMarketId() >= Number(llamalend.constants.ALIASES["leverage_markets_start_id"]);
|
|
299
|
+
return this.llamalend.constants.ALIASES.leverage_zap !== this.llamalend.constants.ZERO_ADDRESS &&
|
|
300
|
+
this._getMarketId() >= Number(this.llamalend.constants.ALIASES["leverage_markets_start_id"]);
|
|
302
301
|
};
|
|
303
302
|
this.leverageCreateLoanMaxRecvAllRanges = memoize((userCollateral, userBorrowed) => __awaiter(this, void 0, void 0, function* () {
|
|
304
303
|
this._checkLeverageZap();
|
|
305
304
|
const _userCollateral = parseUnits(userCollateral, this.collateral_token.decimals);
|
|
306
|
-
const contract = llamalend.contracts[llamalend.constants.ALIASES.leverage_zap].multicallContract;
|
|
305
|
+
const contract = this.llamalend.contracts[this.llamalend.constants.ALIASES.leverage_zap].multicallContract;
|
|
307
306
|
const oraclePriceBand = yield this.oraclePriceBand();
|
|
308
307
|
const pAvgApproxBN = BN(yield this.calcTickPrice(oraclePriceBand)); // upper tick of oracle price band
|
|
309
308
|
let pAvgBN = null;
|
|
@@ -322,7 +321,7 @@ export class LendMarketTemplate {
|
|
|
322
321
|
const j = N - this.minBands;
|
|
323
322
|
calls.push(contract.max_borrowable(this.addresses.controller, _userEffectiveCollateral, _maxLeverageCollateral[j], N, fromBN(pBN)));
|
|
324
323
|
}
|
|
325
|
-
_maxBorrowable = (yield llamalend.multicallProvider.all(calls)).map((_mb) => _mb * BigInt(998) / BigInt(1000));
|
|
324
|
+
_maxBorrowable = (yield this.llamalend.multicallProvider.all(calls)).map((_mb) => _mb * BigInt(998) / BigInt(1000));
|
|
326
325
|
maxBorrowableBN = _maxBorrowable.map((_mb) => toBN(_mb, this.borrowed_token.decimals));
|
|
327
326
|
const deltaBN = maxBorrowableBN.map((mb, l) => mb.minus(maxBorrowablePrevBN[l]).abs().div(mb));
|
|
328
327
|
if (BigNumber.max(...deltaBN).lt(0.0005)) {
|
|
@@ -330,7 +329,7 @@ export class LendMarketTemplate {
|
|
|
330
329
|
break;
|
|
331
330
|
}
|
|
332
331
|
if (pAvgBN === null) {
|
|
333
|
-
const _y = BigInt(yield _getExpectedOdos(this.addresses.borrowed_token, this.addresses.collateral_token, _maxBorrowable[0], this.addresses.amm));
|
|
332
|
+
const _y = BigInt(yield _getExpectedOdos.call(this.llamalend, this.addresses.borrowed_token, this.addresses.collateral_token, _maxBorrowable[0], this.addresses.amm));
|
|
334
333
|
const yBN = toBN(_y, this.collateral_token.decimals);
|
|
335
334
|
pAvgBN = maxBorrowableBN[0].div(yBN);
|
|
336
335
|
}
|
|
@@ -357,9 +356,9 @@ export class LendMarketTemplate {
|
|
|
357
356
|
maxAge: 60 * 1000, // 1m
|
|
358
357
|
});
|
|
359
358
|
this._setSwapDataToCache = (inputCoinAddress, outputCoinAddress, _amount, slippage) => __awaiter(this, void 0, void 0, function* () {
|
|
360
|
-
let swapData = yield _getQuoteOdos(inputCoinAddress, outputCoinAddress, _amount, this.addresses.amm, true, slippage);
|
|
359
|
+
let swapData = yield _getQuoteOdos.call(this.llamalend, inputCoinAddress, outputCoinAddress, _amount, this.addresses.amm, true, slippage);
|
|
361
360
|
while (swapData.pathId == null) {
|
|
362
|
-
swapData = yield _getQuoteOdos(inputCoinAddress, outputCoinAddress, _amount, this.addresses.amm, true, slippage);
|
|
361
|
+
swapData = yield _getQuoteOdos.call(this.llamalend, inputCoinAddress, outputCoinAddress, _amount, this.addresses.amm, true, slippage);
|
|
363
362
|
}
|
|
364
363
|
const key = `${inputCoinAddress}-${_amount}`;
|
|
365
364
|
this.swapDataCache[key] = Object.assign(Object.assign({}, swapData), { slippage });
|
|
@@ -401,11 +400,11 @@ export class LendMarketTemplate {
|
|
|
401
400
|
throw Error(`User ${user} is already in liquidation mode`);
|
|
402
401
|
_stateDebt = _debt;
|
|
403
402
|
if (range < 0)
|
|
404
|
-
range = Number(llamalend.formatUnits(_N, 0));
|
|
403
|
+
range = Number(this.llamalend.formatUnits(_N, 0));
|
|
405
404
|
}
|
|
406
405
|
const { _futureStateCollateral } = yield this._leverageExpectedCollateral(userCollateral, userBorrowed, debt, user);
|
|
407
406
|
const _debt = _stateDebt + parseUnits(debt, this.borrowed_token.decimals);
|
|
408
|
-
return yield llamalend.contracts[this.addresses.controller].contract.calculate_debt_n1(_futureStateCollateral, _debt, range, llamalend.constantOptions);
|
|
407
|
+
return yield this.llamalend.contracts[this.addresses.controller].contract.calculate_debt_n1(_futureStateCollateral, _debt, range, this.llamalend.constantOptions);
|
|
409
408
|
}), {
|
|
410
409
|
promise: true,
|
|
411
410
|
maxAge: 60 * 1000, // 1m
|
|
@@ -415,9 +414,9 @@ export class LendMarketTemplate {
|
|
|
415
414
|
const _debt = parseUnits(debt, this.borrowed_token.decimals);
|
|
416
415
|
const calls = [];
|
|
417
416
|
for (let N = this.minBands; N <= maxN; N++) {
|
|
418
|
-
calls.push(llamalend.contracts[this.addresses.controller].multicallContract.calculate_debt_n1(_futureStateCollateral, _debt, N));
|
|
417
|
+
calls.push(this.llamalend.contracts[this.addresses.controller].multicallContract.calculate_debt_n1(_futureStateCollateral, _debt, N));
|
|
419
418
|
}
|
|
420
|
-
return yield llamalend.multicallProvider.all(calls);
|
|
419
|
+
return yield this.llamalend.multicallProvider.all(calls);
|
|
421
420
|
}), {
|
|
422
421
|
promise: true,
|
|
423
422
|
maxAge: 60 * 1000, // 1m
|
|
@@ -456,7 +455,7 @@ export class LendMarketTemplate {
|
|
|
456
455
|
};
|
|
457
456
|
});
|
|
458
457
|
this._leverageRepayBands = memoize((stateCollateral, userCollateral, userBorrowed, address) => __awaiter(this, void 0, void 0, function* () {
|
|
459
|
-
address = _getAddress(address);
|
|
458
|
+
address = _getAddress.call(this.llamalend, address);
|
|
460
459
|
if (!(yield this.leverageRepayIsAvailable(stateCollateral, userCollateral, userBorrowed, address)))
|
|
461
460
|
return [parseUnits(0, 0), parseUnits(0, 0)];
|
|
462
461
|
const _stateRepayCollateral = parseUnits(stateCollateral, this.collateral_token.decimals);
|
|
@@ -469,7 +468,7 @@ export class LendMarketTemplate {
|
|
|
469
468
|
let _n2 = parseUnits(0, 0);
|
|
470
469
|
const { _totalBorrowed: _repayExpected } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral, userBorrowed);
|
|
471
470
|
try {
|
|
472
|
-
_n1 = yield llamalend.contracts[this.addresses.controller].contract.calculate_debt_n1(_stateCollateral - _stateRepayCollateral, _stateDebt - _repayExpected, _N);
|
|
471
|
+
_n1 = yield this.llamalend.contracts[this.addresses.controller].contract.calculate_debt_n1(_stateCollateral - _stateRepayCollateral, _stateDebt - _repayExpected, _N);
|
|
473
472
|
_n2 = _n1 + (_N - BigInt(1));
|
|
474
473
|
}
|
|
475
474
|
catch (_a) {
|
|
@@ -480,6 +479,7 @@ export class LendMarketTemplate {
|
|
|
480
479
|
promise: true,
|
|
481
480
|
maxAge: 5 * 60 * 1000, // 5m
|
|
482
481
|
});
|
|
482
|
+
this.llamalend = llamalend;
|
|
483
483
|
this.id = id;
|
|
484
484
|
this.name = marketData.name;
|
|
485
485
|
this.addresses = marketData.addresses;
|
|
@@ -621,43 +621,43 @@ export class LendMarketTemplate {
|
|
|
621
621
|
// ---------------- VAULT ----------------
|
|
622
622
|
vaultMaxDeposit() {
|
|
623
623
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
624
|
-
address = _getAddress(address);
|
|
625
|
-
// const _amount = await llamalend.contracts[this.addresses.vault].contract.maxDeposit(address); TODO use maxDeposit
|
|
626
|
-
const _amount = yield llamalend.contracts[this.addresses.borrowed_token].contract.balanceOf(address);
|
|
624
|
+
address = _getAddress.call(this.llamalend, address);
|
|
625
|
+
// const _amount = await this.llamalend.contracts[this.addresses.vault].contract.maxDeposit(address); TODO use maxDeposit
|
|
626
|
+
const _amount = yield this.llamalend.contracts[this.addresses.borrowed_token].contract.balanceOf(address);
|
|
627
627
|
return formatUnits(_amount, this.borrowed_token.decimals);
|
|
628
628
|
});
|
|
629
629
|
}
|
|
630
630
|
vaultPreviewDeposit(amount) {
|
|
631
631
|
return __awaiter(this, void 0, void 0, function* () {
|
|
632
632
|
const _amount = parseUnits(amount, this.borrowed_token.decimals);
|
|
633
|
-
const _shares = yield llamalend.contracts[this.addresses.vault].contract.previewDeposit(_amount);
|
|
633
|
+
const _shares = yield this.llamalend.contracts[this.addresses.vault].contract.previewDeposit(_amount);
|
|
634
634
|
return formatUnits(_shares, 18);
|
|
635
635
|
});
|
|
636
636
|
}
|
|
637
637
|
vaultDepositIsApproved(borrowed) {
|
|
638
638
|
return __awaiter(this, void 0, void 0, function* () {
|
|
639
|
-
return yield hasAllowance([this.borrowed_token.address], [borrowed], llamalend.signerAddress, this.addresses.vault);
|
|
639
|
+
return yield hasAllowance.call(this.llamalend, [this.borrowed_token.address], [borrowed], this.llamalend.signerAddress, this.addresses.vault);
|
|
640
640
|
});
|
|
641
641
|
}
|
|
642
642
|
vaultDepositApproveEstimateGas(borrowed) {
|
|
643
643
|
return __awaiter(this, void 0, void 0, function* () {
|
|
644
|
-
return yield ensureAllowanceEstimateGas([this.borrowed_token.address], [borrowed], this.addresses.vault);
|
|
644
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.borrowed_token.address], [borrowed], this.addresses.vault);
|
|
645
645
|
});
|
|
646
646
|
}
|
|
647
647
|
vaultDepositApprove(borrowed) {
|
|
648
648
|
return __awaiter(this, void 0, void 0, function* () {
|
|
649
|
-
return yield ensureAllowance([this.borrowed_token.address], [borrowed], this.addresses.vault);
|
|
649
|
+
return yield ensureAllowance.call(this.llamalend, [this.borrowed_token.address], [borrowed], this.addresses.vault);
|
|
650
650
|
});
|
|
651
651
|
}
|
|
652
652
|
_vaultDeposit(amount_1) {
|
|
653
653
|
return __awaiter(this, arguments, void 0, function* (amount, estimateGas = false) {
|
|
654
654
|
const _amount = parseUnits(amount, this.borrowed_token.decimals);
|
|
655
|
-
const gas = yield llamalend.contracts[this.addresses.vault].contract.deposit.estimateGas(_amount, Object.assign({}, llamalend.constantOptions));
|
|
655
|
+
const gas = yield this.llamalend.contracts[this.addresses.vault].contract.deposit.estimateGas(_amount, Object.assign({}, this.llamalend.constantOptions));
|
|
656
656
|
if (estimateGas)
|
|
657
657
|
return smartNumber(gas);
|
|
658
|
-
yield llamalend.updateFeeData();
|
|
658
|
+
yield this.llamalend.updateFeeData();
|
|
659
659
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
660
|
-
return (yield llamalend.contracts[this.addresses.vault].contract.deposit(_amount, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
660
|
+
return (yield this.llamalend.contracts[this.addresses.vault].contract.deposit(_amount, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
661
661
|
});
|
|
662
662
|
}
|
|
663
663
|
vaultDepositEstimateGas(amount) {
|
|
@@ -675,44 +675,44 @@ export class LendMarketTemplate {
|
|
|
675
675
|
}
|
|
676
676
|
vaultMaxMint() {
|
|
677
677
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
678
|
-
address = _getAddress(address);
|
|
679
|
-
// const _shares = await llamalend.contracts[this.addresses.vault].contract.maxMint(address); TODO use maxMint
|
|
680
|
-
const _assetBalance = yield llamalend.contracts[this.addresses.borrowed_token].contract.balanceOf(address);
|
|
681
|
-
const _shares = yield llamalend.contracts[this.addresses.vault].contract.convertToShares(_assetBalance);
|
|
678
|
+
address = _getAddress.call(this.llamalend, address);
|
|
679
|
+
// const _shares = await this.llamalend.contracts[this.addresses.vault].contract.maxMint(address); TODO use maxMint
|
|
680
|
+
const _assetBalance = yield this.llamalend.contracts[this.addresses.borrowed_token].contract.balanceOf(address);
|
|
681
|
+
const _shares = yield this.llamalend.contracts[this.addresses.vault].contract.convertToShares(_assetBalance);
|
|
682
682
|
return formatUnits(_shares, 18);
|
|
683
683
|
});
|
|
684
684
|
}
|
|
685
685
|
vaultPreviewMint(amount) {
|
|
686
686
|
return __awaiter(this, void 0, void 0, function* () {
|
|
687
687
|
const _amount = parseUnits(amount, 18);
|
|
688
|
-
const _assets = yield llamalend.contracts[this.addresses.vault].contract.previewMint(_amount);
|
|
688
|
+
const _assets = yield this.llamalend.contracts[this.addresses.vault].contract.previewMint(_amount);
|
|
689
689
|
return formatUnits(_assets, this.borrowed_token.decimals);
|
|
690
690
|
});
|
|
691
691
|
}
|
|
692
692
|
vaultMintIsApproved(borrowed) {
|
|
693
693
|
return __awaiter(this, void 0, void 0, function* () {
|
|
694
|
-
return yield hasAllowance([this.borrowed_token.address], [borrowed], llamalend.signerAddress, this.addresses.vault);
|
|
694
|
+
return yield hasAllowance.call(this.llamalend, [this.borrowed_token.address], [borrowed], this.llamalend.signerAddress, this.addresses.vault);
|
|
695
695
|
});
|
|
696
696
|
}
|
|
697
697
|
vaultMintApproveEstimateGas(borrowed) {
|
|
698
698
|
return __awaiter(this, void 0, void 0, function* () {
|
|
699
|
-
return yield ensureAllowanceEstimateGas([this.borrowed_token.address], [borrowed], this.addresses.vault);
|
|
699
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.borrowed_token.address], [borrowed], this.addresses.vault);
|
|
700
700
|
});
|
|
701
701
|
}
|
|
702
702
|
vaultMintApprove(borrowed) {
|
|
703
703
|
return __awaiter(this, void 0, void 0, function* () {
|
|
704
|
-
return yield ensureAllowance([this.borrowed_token.address], [borrowed], this.addresses.vault);
|
|
704
|
+
return yield ensureAllowance.call(this.llamalend, [this.borrowed_token.address], [borrowed], this.addresses.vault);
|
|
705
705
|
});
|
|
706
706
|
}
|
|
707
707
|
_vaultMint(amount_1) {
|
|
708
708
|
return __awaiter(this, arguments, void 0, function* (amount, estimateGas = false) {
|
|
709
709
|
const _amount = parseUnits(amount, 18);
|
|
710
|
-
const gas = yield llamalend.contracts[this.addresses.vault].contract.mint.estimateGas(_amount, Object.assign({}, llamalend.constantOptions));
|
|
710
|
+
const gas = yield this.llamalend.contracts[this.addresses.vault].contract.mint.estimateGas(_amount, Object.assign({}, this.llamalend.constantOptions));
|
|
711
711
|
if (estimateGas)
|
|
712
712
|
return smartNumber(gas);
|
|
713
|
-
yield llamalend.updateFeeData();
|
|
713
|
+
yield this.llamalend.updateFeeData();
|
|
714
714
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
715
|
-
return (yield llamalend.contracts[this.addresses.vault].contract.mint(_amount, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
715
|
+
return (yield this.llamalend.contracts[this.addresses.vault].contract.mint(_amount, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
716
716
|
});
|
|
717
717
|
}
|
|
718
718
|
vaultMintEstimateGas(amount) {
|
|
@@ -730,27 +730,27 @@ export class LendMarketTemplate {
|
|
|
730
730
|
}
|
|
731
731
|
vaultMaxWithdraw() {
|
|
732
732
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
733
|
-
address = _getAddress(address);
|
|
734
|
-
const _assets = yield llamalend.contracts[this.addresses.vault].contract.maxWithdraw(address);
|
|
733
|
+
address = _getAddress.call(this.llamalend, address);
|
|
734
|
+
const _assets = yield this.llamalend.contracts[this.addresses.vault].contract.maxWithdraw(address);
|
|
735
735
|
return formatUnits(_assets, this.borrowed_token.decimals);
|
|
736
736
|
});
|
|
737
737
|
}
|
|
738
738
|
vaultPreviewWithdraw(amount) {
|
|
739
739
|
return __awaiter(this, void 0, void 0, function* () {
|
|
740
740
|
const _amount = parseUnits(amount, this.borrowed_token.decimals);
|
|
741
|
-
const _shares = yield llamalend.contracts[this.addresses.vault].contract.previewWithdraw(_amount);
|
|
741
|
+
const _shares = yield this.llamalend.contracts[this.addresses.vault].contract.previewWithdraw(_amount);
|
|
742
742
|
return formatUnits(_shares, 18);
|
|
743
743
|
});
|
|
744
744
|
}
|
|
745
745
|
_vaultWithdraw(amount_1) {
|
|
746
746
|
return __awaiter(this, arguments, void 0, function* (amount, estimateGas = false) {
|
|
747
747
|
const _amount = parseUnits(amount, this.borrowed_token.decimals);
|
|
748
|
-
const gas = yield llamalend.contracts[this.addresses.vault].contract.withdraw.estimateGas(_amount, Object.assign({}, llamalend.constantOptions));
|
|
748
|
+
const gas = yield this.llamalend.contracts[this.addresses.vault].contract.withdraw.estimateGas(_amount, Object.assign({}, this.llamalend.constantOptions));
|
|
749
749
|
if (estimateGas)
|
|
750
750
|
return smartNumber(gas);
|
|
751
|
-
yield llamalend.updateFeeData();
|
|
751
|
+
yield this.llamalend.updateFeeData();
|
|
752
752
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
753
|
-
return (yield llamalend.contracts[this.addresses.vault].contract.withdraw(_amount, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
753
|
+
return (yield this.llamalend.contracts[this.addresses.vault].contract.withdraw(_amount, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
754
754
|
});
|
|
755
755
|
}
|
|
756
756
|
vaultWithdrawEstimateGas(amount) {
|
|
@@ -765,27 +765,27 @@ export class LendMarketTemplate {
|
|
|
765
765
|
}
|
|
766
766
|
vaultMaxRedeem() {
|
|
767
767
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
768
|
-
address = _getAddress(address);
|
|
769
|
-
const _shares = yield llamalend.contracts[this.addresses.vault].contract.maxRedeem(address);
|
|
768
|
+
address = _getAddress.call(this.llamalend, address);
|
|
769
|
+
const _shares = yield this.llamalend.contracts[this.addresses.vault].contract.maxRedeem(address);
|
|
770
770
|
return formatUnits(_shares, 18);
|
|
771
771
|
});
|
|
772
772
|
}
|
|
773
773
|
vaultPreviewRedeem(amount) {
|
|
774
774
|
return __awaiter(this, void 0, void 0, function* () {
|
|
775
775
|
const _amount = parseUnits(amount, 18);
|
|
776
|
-
const _assets = yield llamalend.contracts[this.addresses.vault].contract.previewRedeem(_amount);
|
|
776
|
+
const _assets = yield this.llamalend.contracts[this.addresses.vault].contract.previewRedeem(_amount);
|
|
777
777
|
return formatUnits(_assets, this.borrowed_token.decimals);
|
|
778
778
|
});
|
|
779
779
|
}
|
|
780
780
|
_vaultRedeem(amount_1) {
|
|
781
781
|
return __awaiter(this, arguments, void 0, function* (amount, estimateGas = false) {
|
|
782
782
|
const _amount = parseUnits(amount, 18);
|
|
783
|
-
const gas = yield llamalend.contracts[this.addresses.vault].contract.redeem.estimateGas(_amount, Object.assign({}, llamalend.constantOptions));
|
|
783
|
+
const gas = yield this.llamalend.contracts[this.addresses.vault].contract.redeem.estimateGas(_amount, Object.assign({}, this.llamalend.constantOptions));
|
|
784
784
|
if (estimateGas)
|
|
785
785
|
return smartNumber(gas);
|
|
786
|
-
yield llamalend.updateFeeData();
|
|
786
|
+
yield this.llamalend.updateFeeData();
|
|
787
787
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
788
|
-
return (yield llamalend.contracts[this.addresses.vault].contract.redeem(_amount, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
788
|
+
return (yield this.llamalend.contracts[this.addresses.vault].contract.redeem(_amount, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
789
789
|
});
|
|
790
790
|
}
|
|
791
791
|
vaultRedeemEstimateGas(amount) {
|
|
@@ -802,96 +802,96 @@ export class LendMarketTemplate {
|
|
|
802
802
|
vaultConvertToShares(assets) {
|
|
803
803
|
return __awaiter(this, void 0, void 0, function* () {
|
|
804
804
|
const _assets = parseUnits(assets, this.borrowed_token.decimals);
|
|
805
|
-
const _shares = yield llamalend.contracts[this.addresses.vault].contract.convertToShares(_assets);
|
|
806
|
-
return llamalend.formatUnits(_shares);
|
|
805
|
+
const _shares = yield this.llamalend.contracts[this.addresses.vault].contract.convertToShares(_assets);
|
|
806
|
+
return this.llamalend.formatUnits(_shares);
|
|
807
807
|
});
|
|
808
808
|
}
|
|
809
809
|
vaultConvertToAssets(shares) {
|
|
810
810
|
return __awaiter(this, void 0, void 0, function* () {
|
|
811
811
|
const _shares = parseUnits(shares);
|
|
812
|
-
const _assets = yield llamalend.contracts[this.addresses.vault].contract.convertToAssets(_shares);
|
|
813
|
-
return llamalend.formatUnits(_assets, this.borrowed_token.decimals);
|
|
812
|
+
const _assets = yield this.llamalend.contracts[this.addresses.vault].contract.convertToAssets(_shares);
|
|
813
|
+
return this.llamalend.formatUnits(_assets, this.borrowed_token.decimals);
|
|
814
814
|
});
|
|
815
815
|
}
|
|
816
816
|
// ---------------- VAULT STAKING ----------------
|
|
817
817
|
vaultStakeIsApproved(vaultShares) {
|
|
818
818
|
return __awaiter(this, void 0, void 0, function* () {
|
|
819
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
819
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
820
820
|
throw Error(`stakeIsApproved method doesn't exist for pool ${this.name} (id: ${this.name}). There is no gauge`);
|
|
821
821
|
}
|
|
822
|
-
return yield hasAllowance([this.addresses.vault], [vaultShares], llamalend.signerAddress, this.addresses.gauge);
|
|
822
|
+
return yield hasAllowance.call(this.llamalend, [this.addresses.vault], [vaultShares], this.llamalend.signerAddress, this.addresses.gauge);
|
|
823
823
|
});
|
|
824
824
|
}
|
|
825
825
|
vaultStakeApproveEstimateGas(vaultShares) {
|
|
826
826
|
return __awaiter(this, void 0, void 0, function* () {
|
|
827
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
827
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
828
828
|
throw Error(`stakeApproveEstimateGas method doesn't exist for pool ${this.name} (id: ${this.name}). There is no gauge`);
|
|
829
829
|
}
|
|
830
|
-
return yield ensureAllowanceEstimateGas([this.addresses.vault], [vaultShares], this.addresses.gauge);
|
|
830
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.addresses.vault], [vaultShares], this.addresses.gauge);
|
|
831
831
|
});
|
|
832
832
|
}
|
|
833
833
|
vaultStakeApprove(vaultShares) {
|
|
834
834
|
return __awaiter(this, void 0, void 0, function* () {
|
|
835
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
835
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
836
836
|
throw Error(`stakeApprove method doesn't exist for pool ${this.name} (id: ${this.name}). There is no gauge`);
|
|
837
837
|
}
|
|
838
|
-
return yield ensureAllowance([this.addresses.vault], [vaultShares], this.addresses.gauge);
|
|
838
|
+
return yield ensureAllowance.call(this.llamalend, [this.addresses.vault], [vaultShares], this.addresses.gauge);
|
|
839
839
|
});
|
|
840
840
|
}
|
|
841
841
|
vaultStakeEstimateGas(vaultShares) {
|
|
842
842
|
return __awaiter(this, void 0, void 0, function* () {
|
|
843
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
843
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
844
844
|
throw Error(`stakeEstimateGas method doesn't exist for pool ${this.name} (id: ${this.name}). There is no gauge`);
|
|
845
845
|
}
|
|
846
846
|
const _vaultShares = parseUnits(vaultShares);
|
|
847
|
-
return smartNumber(yield llamalend.contracts[this.addresses.gauge].contract.deposit.estimateGas(_vaultShares, llamalend.constantOptions));
|
|
847
|
+
return smartNumber(yield this.llamalend.contracts[this.addresses.gauge].contract.deposit.estimateGas(_vaultShares, this.llamalend.constantOptions));
|
|
848
848
|
});
|
|
849
849
|
}
|
|
850
850
|
vaultStake(vaultShares) {
|
|
851
851
|
return __awaiter(this, void 0, void 0, function* () {
|
|
852
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
852
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
853
853
|
throw Error(`stake method doesn't exist for pool ${this.name} (id: ${this.name}). There is no gauge`);
|
|
854
854
|
}
|
|
855
855
|
const _vaultShares = parseUnits(vaultShares);
|
|
856
|
-
yield _ensureAllowance([this.addresses.vault], [_vaultShares], this.addresses.gauge);
|
|
857
|
-
yield llamalend.updateFeeData();
|
|
858
|
-
const gasLimit = _mulBy1_3(DIGas(yield llamalend.contracts[this.addresses.gauge].contract.deposit.estimateGas(_vaultShares, llamalend.constantOptions)));
|
|
859
|
-
return (yield llamalend.contracts[this.addresses.gauge].contract.deposit(_vaultShares, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
856
|
+
yield _ensureAllowance.call(this.llamalend, [this.addresses.vault], [_vaultShares], this.addresses.gauge);
|
|
857
|
+
yield this.llamalend.updateFeeData();
|
|
858
|
+
const gasLimit = _mulBy1_3(DIGas(yield this.llamalend.contracts[this.addresses.gauge].contract.deposit.estimateGas(_vaultShares, this.llamalend.constantOptions)));
|
|
859
|
+
return (yield this.llamalend.contracts[this.addresses.gauge].contract.deposit(_vaultShares, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
860
860
|
});
|
|
861
861
|
}
|
|
862
862
|
vaultUnstakeEstimateGas(vaultShares) {
|
|
863
863
|
return __awaiter(this, void 0, void 0, function* () {
|
|
864
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
864
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
865
865
|
throw Error(`unstakeEstimateGas method doesn't exist for pool ${this.name} (id: ${this.name}). There is no gauge`);
|
|
866
866
|
}
|
|
867
867
|
const _vaultShares = parseUnits(vaultShares);
|
|
868
|
-
return smartNumber(yield llamalend.contracts[this.addresses.gauge].contract.withdraw.estimateGas(_vaultShares, llamalend.constantOptions));
|
|
868
|
+
return smartNumber(yield this.llamalend.contracts[this.addresses.gauge].contract.withdraw.estimateGas(_vaultShares, this.llamalend.constantOptions));
|
|
869
869
|
});
|
|
870
870
|
}
|
|
871
871
|
vaultUnstake(vaultShares) {
|
|
872
872
|
return __awaiter(this, void 0, void 0, function* () {
|
|
873
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
873
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
874
874
|
throw Error(`unstake method doesn't exist for pool ${this.name} (id: ${this.name}). There is no gauge`);
|
|
875
875
|
}
|
|
876
876
|
const _vaultShares = parseUnits(vaultShares);
|
|
877
|
-
yield llamalend.updateFeeData();
|
|
878
|
-
const gasLimit = _mulBy1_3(DIGas((yield llamalend.contracts[this.addresses.gauge].contract.withdraw.estimateGas(_vaultShares, llamalend.constantOptions))));
|
|
879
|
-
return (yield llamalend.contracts[this.addresses.gauge].contract.withdraw(_vaultShares, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
877
|
+
yield this.llamalend.updateFeeData();
|
|
878
|
+
const gasLimit = _mulBy1_3(DIGas((yield this.llamalend.contracts[this.addresses.gauge].contract.withdraw.estimateGas(_vaultShares, this.llamalend.constantOptions))));
|
|
879
|
+
return (yield this.llamalend.contracts[this.addresses.gauge].contract.withdraw(_vaultShares, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
880
880
|
});
|
|
881
881
|
}
|
|
882
882
|
// ---------------- VAULT STAKING REWARDS ----------------
|
|
883
883
|
vaultRewardsOnly() {
|
|
884
|
-
if (llamalend.chainId === 2222 || llamalend.chainId === 324)
|
|
884
|
+
if (this.llamalend.chainId === 2222 || this.llamalend.chainId === 324)
|
|
885
885
|
return true; // TODO remove this for Kava and ZkSync
|
|
886
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS)
|
|
886
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS)
|
|
887
887
|
throw Error(`${this.name} doesn't have gauge`);
|
|
888
|
-
const gaugeContract = llamalend.contracts[this.addresses.gauge].contract;
|
|
888
|
+
const gaugeContract = this.llamalend.contracts[this.addresses.gauge].contract;
|
|
889
889
|
return !('inflation_rate()' in gaugeContract || 'inflation_rate(uint256)' in gaugeContract);
|
|
890
890
|
}
|
|
891
891
|
vaultTotalLiquidity() {
|
|
892
892
|
return __awaiter(this, arguments, void 0, function* (useAPI = true) {
|
|
893
893
|
const { cap } = yield this.statsCapAndAvailable(true, useAPI);
|
|
894
|
-
const price = yield _getUsdRate(this.addresses.borrowed_token);
|
|
894
|
+
const price = yield _getUsdRate.call(this.llamalend, this.addresses.borrowed_token);
|
|
895
895
|
return BN(cap).times(price).toFixed(6);
|
|
896
896
|
});
|
|
897
897
|
}
|
|
@@ -899,7 +899,7 @@ export class LendMarketTemplate {
|
|
|
899
899
|
return __awaiter(this, void 0, void 0, function* () {
|
|
900
900
|
if (this.vaultRewardsOnly())
|
|
901
901
|
throw Error(`${this.name} has Rewards-Only Gauge. Use stats.rewardsApy instead`);
|
|
902
|
-
// const isDisabledChain = [1313161554].includes(llamalend.chainId); // Disable Aurora
|
|
902
|
+
// const isDisabledChain = [1313161554].includes(this.llamalend.chainId); // Disable Aurora
|
|
903
903
|
// if (useApi && !isDisabledChain) {
|
|
904
904
|
// const crvAPYs = await _getCrvApyFromApi();
|
|
905
905
|
// const poolCrvApy = crvAPYs[this.addresses.gauge] ?? [0, 0]; // new pools might be missing
|
|
@@ -912,10 +912,10 @@ export class LendMarketTemplate {
|
|
|
912
912
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
913
913
|
if (this.vaultRewardsOnly())
|
|
914
914
|
throw Error(`${this.name} has Rewards-Only Gauge. Use claimableRewards instead`);
|
|
915
|
-
address = address || llamalend.signerAddress;
|
|
915
|
+
address = address || this.llamalend.signerAddress;
|
|
916
916
|
if (!address)
|
|
917
917
|
throw Error("Need to connect wallet or pass address into args");
|
|
918
|
-
return llamalend.formatUnits(yield llamalend.contracts[this.addresses.gauge].contract.claimable_tokens(address, llamalend.constantOptions));
|
|
918
|
+
return this.llamalend.formatUnits(yield this.llamalend.contracts[this.addresses.gauge].contract.claimable_tokens(address, this.llamalend.constantOptions));
|
|
919
919
|
});
|
|
920
920
|
}
|
|
921
921
|
_vaultClaimCrv(estimateGas) {
|
|
@@ -924,10 +924,10 @@ export class LendMarketTemplate {
|
|
|
924
924
|
throw Error(`${this.name} has Rewards-Only Gauge. Use claimRewards instead`);
|
|
925
925
|
let isOldFactory = false;
|
|
926
926
|
let contract;
|
|
927
|
-
if (llamalend.chainId !== 1) {
|
|
928
|
-
if (llamalend.constants.ALIASES.gauge_factory_old && llamalend.constants.ALIASES.gauge_factory_old !== llamalend.constants.ZERO_ADDRESS) {
|
|
929
|
-
const oldFactoryContract = llamalend.contracts[llamalend.constants.ALIASES.gauge_factory_old].contract;
|
|
930
|
-
const lpToken = yield llamalend.contracts[this.addresses.gauge].contract.lp_token();
|
|
927
|
+
if (this.llamalend.chainId !== 1) {
|
|
928
|
+
if (this.llamalend.constants.ALIASES.gauge_factory_old && this.llamalend.constants.ALIASES.gauge_factory_old !== this.llamalend.constants.ZERO_ADDRESS) {
|
|
929
|
+
const oldFactoryContract = this.llamalend.contracts[this.llamalend.constants.ALIASES.gauge_factory_old].contract;
|
|
930
|
+
const lpToken = yield this.llamalend.contracts[this.addresses.gauge].contract.lp_token();
|
|
931
931
|
const gaugeAddress = yield oldFactoryContract.get_gauge_from_lp_token(lpToken);
|
|
932
932
|
isOldFactory = gaugeAddress.toLowerCase() === this.addresses.gauge.toLowerCase();
|
|
933
933
|
if (isOldFactory) {
|
|
@@ -936,17 +936,17 @@ export class LendMarketTemplate {
|
|
|
936
936
|
}
|
|
937
937
|
}
|
|
938
938
|
if (!isOldFactory) {
|
|
939
|
-
contract = llamalend.contracts[llamalend.constants.ALIASES.minter].contract;
|
|
939
|
+
contract = this.llamalend.contracts[this.llamalend.constants.ALIASES.minter].contract;
|
|
940
940
|
}
|
|
941
941
|
if (!contract) {
|
|
942
942
|
throw Error(`${this.name} couldn't match gauge factory`);
|
|
943
943
|
}
|
|
944
|
-
const gas = yield contract.mint.estimateGas(this.addresses.gauge, llamalend.constantOptions);
|
|
944
|
+
const gas = yield contract.mint.estimateGas(this.addresses.gauge, this.llamalend.constantOptions);
|
|
945
945
|
if (estimateGas)
|
|
946
946
|
return smartNumber(gas);
|
|
947
|
-
yield llamalend.updateFeeData();
|
|
947
|
+
yield this.llamalend.updateFeeData();
|
|
948
948
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
949
|
-
return (yield contract.mint(this.addresses.gauge, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
949
|
+
return (yield contract.mint(this.addresses.gauge, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
950
950
|
});
|
|
951
951
|
}
|
|
952
952
|
vaultClaimCrvEstimateGas() {
|
|
@@ -961,21 +961,21 @@ export class LendMarketTemplate {
|
|
|
961
961
|
}
|
|
962
962
|
vaultClaimableRewards() {
|
|
963
963
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
964
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
964
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
965
965
|
throw Error(`claimableRewards method doesn't exist for pool ${this.name} (id: ${this.name}). There is no gauge`);
|
|
966
966
|
}
|
|
967
|
-
address = address || llamalend.signerAddress;
|
|
967
|
+
address = address || this.llamalend.signerAddress;
|
|
968
968
|
if (!address)
|
|
969
969
|
throw Error("Need to connect wallet or pass address into args");
|
|
970
|
-
const gaugeContract = llamalend.contracts[this.addresses.gauge].contract;
|
|
970
|
+
const gaugeContract = this.llamalend.contracts[this.addresses.gauge].contract;
|
|
971
971
|
const rewardTokens = yield this.vaultRewardTokens();
|
|
972
972
|
const rewards = [];
|
|
973
973
|
for (const rewardToken of rewardTokens) {
|
|
974
|
-
const _amount = yield gaugeContract.claimable_reward(address, rewardToken.token, llamalend.constantOptions);
|
|
974
|
+
const _amount = yield gaugeContract.claimable_reward(address, rewardToken.token, this.llamalend.constantOptions);
|
|
975
975
|
rewards.push({
|
|
976
976
|
token: rewardToken.token,
|
|
977
977
|
symbol: rewardToken.symbol,
|
|
978
|
-
amount: llamalend.formatUnits(_amount, rewardToken.decimals),
|
|
978
|
+
amount: this.llamalend.formatUnits(_amount, rewardToken.decimals),
|
|
979
979
|
});
|
|
980
980
|
}
|
|
981
981
|
return rewards;
|
|
@@ -983,18 +983,18 @@ export class LendMarketTemplate {
|
|
|
983
983
|
}
|
|
984
984
|
_vaultClaimRewards(estimateGas) {
|
|
985
985
|
return __awaiter(this, void 0, void 0, function* () {
|
|
986
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
986
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
987
987
|
throw Error(`claimRewards method doesn't exist for pool ${this.name} (id: ${this.name}). There is no gauge`);
|
|
988
988
|
}
|
|
989
|
-
const gaugeContract = llamalend.contracts[this.addresses.gauge].contract;
|
|
989
|
+
const gaugeContract = this.llamalend.contracts[this.addresses.gauge].contract;
|
|
990
990
|
if (!("claim_rewards()" in gaugeContract))
|
|
991
991
|
throw Error(`${this.name} pool doesn't have such method`);
|
|
992
|
-
const gas = yield gaugeContract.claim_rewards.estimateGas(llamalend.constantOptions);
|
|
992
|
+
const gas = yield gaugeContract.claim_rewards.estimateGas(this.llamalend.constantOptions);
|
|
993
993
|
if (estimateGas)
|
|
994
994
|
return smartNumber(gas);
|
|
995
|
-
yield llamalend.updateFeeData();
|
|
995
|
+
yield this.llamalend.updateFeeData();
|
|
996
996
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
997
|
-
return (yield gaugeContract.claim_rewards(Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
997
|
+
return (yield gaugeContract.claim_rewards(Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
998
998
|
});
|
|
999
999
|
}
|
|
1000
1000
|
vaultClaimRewardsEstimateGas() {
|
|
@@ -1010,7 +1010,7 @@ export class LendMarketTemplate {
|
|
|
1010
1010
|
statsRates() {
|
|
1011
1011
|
return __awaiter(this, arguments, void 0, function* (isGetter = true, useAPI = false) {
|
|
1012
1012
|
if (useAPI) {
|
|
1013
|
-
const response = yield _getMarketsData(llamalend.constants.NETWORK_NAME);
|
|
1013
|
+
const response = yield _getMarketsData(this.llamalend.constants.NETWORK_NAME);
|
|
1014
1014
|
const market = response.lendingVaultData.find((item) => item.address.toLowerCase() === this.addresses.vault.toLowerCase());
|
|
1015
1015
|
if (market) {
|
|
1016
1016
|
return {
|
|
@@ -1066,16 +1066,16 @@ export class LendMarketTemplate {
|
|
|
1066
1066
|
}
|
|
1067
1067
|
statsBalances() {
|
|
1068
1068
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1069
|
-
const borrowedContract = llamalend.contracts[this.borrowed_token.address].multicallContract;
|
|
1070
|
-
const collateralContract = llamalend.contracts[this.collateral_token.address].multicallContract;
|
|
1071
|
-
const ammContract = llamalend.contracts[this.addresses.amm].multicallContract;
|
|
1069
|
+
const borrowedContract = this.llamalend.contracts[this.borrowed_token.address].multicallContract;
|
|
1070
|
+
const collateralContract = this.llamalend.contracts[this.collateral_token.address].multicallContract;
|
|
1071
|
+
const ammContract = this.llamalend.contracts[this.addresses.amm].multicallContract;
|
|
1072
1072
|
const calls = [
|
|
1073
1073
|
borrowedContract.balanceOf(this.addresses.amm),
|
|
1074
1074
|
collateralContract.balanceOf(this.addresses.amm),
|
|
1075
1075
|
ammContract.admin_fees_x(),
|
|
1076
1076
|
ammContract.admin_fees_y(),
|
|
1077
1077
|
];
|
|
1078
|
-
const [_borrowedBalance, _collateralBalance, _borrowedAdminFees, _collateralAdminFees] = yield llamalend.multicallProvider.all(calls);
|
|
1078
|
+
const [_borrowedBalance, _collateralBalance, _borrowedAdminFees, _collateralAdminFees] = yield this.llamalend.multicallProvider.all(calls);
|
|
1079
1079
|
return [
|
|
1080
1080
|
formatUnits(_borrowedBalance - _borrowedAdminFees, this.borrowed_token.decimals),
|
|
1081
1081
|
formatUnits(_collateralBalance - _collateralAdminFees, this.collateral_token.decimals),
|
|
@@ -1084,10 +1084,10 @@ export class LendMarketTemplate {
|
|
|
1084
1084
|
}
|
|
1085
1085
|
statsBandBalances(n) {
|
|
1086
1086
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1087
|
-
const ammContract = llamalend.contracts[this.addresses.amm].multicallContract;
|
|
1087
|
+
const ammContract = this.llamalend.contracts[this.addresses.amm].multicallContract;
|
|
1088
1088
|
const calls = [];
|
|
1089
1089
|
calls.push(ammContract.bands_x(n), ammContract.bands_y(n));
|
|
1090
|
-
const _balances = yield llamalend.multicallProvider.all(calls);
|
|
1090
|
+
const _balances = yield this.llamalend.multicallProvider.all(calls);
|
|
1091
1091
|
// bands_x and bands_y always return amounts with 18 decimals
|
|
1092
1092
|
return {
|
|
1093
1093
|
borrowed: formatNumber(formatUnits(_balances[0]), this.borrowed_token.decimals),
|
|
@@ -1098,12 +1098,12 @@ export class LendMarketTemplate {
|
|
|
1098
1098
|
statsBandsBalances() {
|
|
1099
1099
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1100
1100
|
const { maxBand, minBand } = yield this.statsBandsInfo();
|
|
1101
|
-
const ammContract = llamalend.contracts[this.addresses.amm].multicallContract;
|
|
1101
|
+
const ammContract = this.llamalend.contracts[this.addresses.amm].multicallContract;
|
|
1102
1102
|
const calls = [];
|
|
1103
1103
|
for (let i = minBand; i <= maxBand; i++) {
|
|
1104
1104
|
calls.push(ammContract.bands_x(i), ammContract.bands_y(i));
|
|
1105
1105
|
}
|
|
1106
|
-
const _bands = yield llamalend.multicallProvider.all(calls);
|
|
1106
|
+
const _bands = yield this.llamalend.multicallProvider.all(calls);
|
|
1107
1107
|
const bands = {};
|
|
1108
1108
|
for (let i = minBand; i <= maxBand; i++) {
|
|
1109
1109
|
const _i = i - minBand;
|
|
@@ -1119,7 +1119,7 @@ export class LendMarketTemplate {
|
|
|
1119
1119
|
statsTotalDebt() {
|
|
1120
1120
|
return __awaiter(this, arguments, void 0, function* (isGetter = true, useAPI = true) {
|
|
1121
1121
|
if (useAPI) {
|
|
1122
|
-
const response = yield _getMarketsData(llamalend.constants.NETWORK_NAME);
|
|
1122
|
+
const response = yield _getMarketsData(this.llamalend.constants.NETWORK_NAME);
|
|
1123
1123
|
const market = response.lendingVaultData.find((item) => item.address.toLowerCase() === this.addresses.vault.toLowerCase());
|
|
1124
1124
|
if (market) {
|
|
1125
1125
|
return market.borrowed.total.toString();
|
|
@@ -1134,7 +1134,7 @@ export class LendMarketTemplate {
|
|
|
1134
1134
|
_debt = cacheStats.get(cacheKey(this.addresses.controller, 'total_debt'));
|
|
1135
1135
|
}
|
|
1136
1136
|
else {
|
|
1137
|
-
_debt = yield llamalend.contracts[this.addresses.controller].contract.total_debt(llamalend.constantOptions);
|
|
1137
|
+
_debt = yield this.llamalend.contracts[this.addresses.controller].contract.total_debt(this.llamalend.constantOptions);
|
|
1138
1138
|
cacheStats.set(cacheKey(this.addresses.controller, 'total_debt'), _debt);
|
|
1139
1139
|
}
|
|
1140
1140
|
return formatUnits(_debt, this.borrowed_token.decimals);
|
|
@@ -1144,7 +1144,7 @@ export class LendMarketTemplate {
|
|
|
1144
1144
|
statsCapAndAvailable() {
|
|
1145
1145
|
return __awaiter(this, arguments, void 0, function* (isGetter = true, useAPI = false) {
|
|
1146
1146
|
if (useAPI) {
|
|
1147
|
-
const response = yield _getMarketsData(llamalend.constants.NETWORK_NAME);
|
|
1147
|
+
const response = yield _getMarketsData(this.llamalend.constants.NETWORK_NAME);
|
|
1148
1148
|
const market = response.lendingVaultData.find((item) => item.address.toLowerCase() === this.addresses.vault.toLowerCase());
|
|
1149
1149
|
if (market) {
|
|
1150
1150
|
return {
|
|
@@ -1157,15 +1157,15 @@ export class LendMarketTemplate {
|
|
|
1157
1157
|
}
|
|
1158
1158
|
}
|
|
1159
1159
|
else {
|
|
1160
|
-
const vaultContract = llamalend.contracts[this.addresses.vault].multicallContract;
|
|
1161
|
-
const borrowedContract = llamalend.contracts[this.addresses.borrowed_token].multicallContract;
|
|
1160
|
+
const vaultContract = this.llamalend.contracts[this.addresses.vault].multicallContract;
|
|
1161
|
+
const borrowedContract = this.llamalend.contracts[this.addresses.borrowed_token].multicallContract;
|
|
1162
1162
|
let _cap, _available;
|
|
1163
1163
|
if (isGetter) {
|
|
1164
1164
|
_cap = cacheStats.get(cacheKey(this.addresses.vault, 'totalAssets', this.addresses.controller));
|
|
1165
1165
|
_available = cacheStats.get(cacheKey(this.addresses.borrowed_token, 'balanceOf', this.addresses.controller));
|
|
1166
1166
|
}
|
|
1167
1167
|
else {
|
|
1168
|
-
[_cap, _available] = yield llamalend.multicallProvider.all([
|
|
1168
|
+
[_cap, _available] = yield this.llamalend.multicallProvider.all([
|
|
1169
1169
|
vaultContract.totalAssets(this.addresses.controller),
|
|
1170
1170
|
borrowedContract.balanceOf(this.addresses.controller),
|
|
1171
1171
|
]);
|
|
@@ -1173,8 +1173,8 @@ export class LendMarketTemplate {
|
|
|
1173
1173
|
cacheStats.set(cacheKey(this.addresses.borrowed_token, 'balanceOf', this.addresses.controller), _available);
|
|
1174
1174
|
}
|
|
1175
1175
|
return {
|
|
1176
|
-
cap: llamalend.formatUnits(_cap, this.borrowed_token.decimals),
|
|
1177
|
-
available: llamalend.formatUnits(_available, this.borrowed_token.decimals),
|
|
1176
|
+
cap: this.llamalend.formatUnits(_cap, this.borrowed_token.decimals),
|
|
1177
|
+
available: this.llamalend.formatUnits(_available, this.borrowed_token.decimals),
|
|
1178
1178
|
};
|
|
1179
1179
|
}
|
|
1180
1180
|
});
|
|
@@ -1200,7 +1200,7 @@ export class LendMarketTemplate {
|
|
|
1200
1200
|
}
|
|
1201
1201
|
price() {
|
|
1202
1202
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1203
|
-
const _price = yield llamalend.contracts[this.addresses.amm].contract.get_p(llamalend.constantOptions);
|
|
1203
|
+
const _price = yield this.llamalend.contracts[this.addresses.amm].contract.get_p(this.llamalend.constantOptions);
|
|
1204
1204
|
return formatUnits(_price);
|
|
1205
1205
|
});
|
|
1206
1206
|
}
|
|
@@ -1228,12 +1228,12 @@ export class LendMarketTemplate {
|
|
|
1228
1228
|
// ---------------- WALLET BALANCES ----------------
|
|
1229
1229
|
walletBalances() {
|
|
1230
1230
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
1231
|
-
if (this.addresses.gauge === llamalend.constants.ZERO_ADDRESS) {
|
|
1232
|
-
const [collateral, borrowed, vaultShares] = yield getBalances([this.collateral_token.address, this.borrowed_token.address, this.addresses.vault], address);
|
|
1231
|
+
if (this.addresses.gauge === this.llamalend.constants.ZERO_ADDRESS) {
|
|
1232
|
+
const [collateral, borrowed, vaultShares] = yield getBalances.call(this.llamalend, [this.collateral_token.address, this.borrowed_token.address, this.addresses.vault], address);
|
|
1233
1233
|
return { collateral, borrowed, vaultShares, gauge: "0" };
|
|
1234
1234
|
}
|
|
1235
1235
|
else {
|
|
1236
|
-
const [collateral, borrowed, vaultShares, gauge] = yield getBalances([this.collateral_token.address, this.borrowed_token.address, this.addresses.vault, this.addresses.gauge], address);
|
|
1236
|
+
const [collateral, borrowed, vaultShares, gauge] = yield getBalances.call(this.llamalend, [this.collateral_token.address, this.borrowed_token.address, this.addresses.vault, this.addresses.gauge], address);
|
|
1237
1237
|
return { collateral, borrowed, vaultShares, gauge };
|
|
1238
1238
|
}
|
|
1239
1239
|
});
|
|
@@ -1241,8 +1241,8 @@ export class LendMarketTemplate {
|
|
|
1241
1241
|
// ---------------- USER POSITION ----------------
|
|
1242
1242
|
userLoanExists() {
|
|
1243
1243
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
1244
|
-
address = _getAddress(address);
|
|
1245
|
-
return yield llamalend.contracts[this.addresses.controller].contract.loan_exists(address, llamalend.constantOptions);
|
|
1244
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1245
|
+
return yield this.llamalend.contracts[this.addresses.controller].contract.loan_exists(address, this.llamalend.constantOptions);
|
|
1246
1246
|
});
|
|
1247
1247
|
}
|
|
1248
1248
|
userState() {
|
|
@@ -1258,16 +1258,16 @@ export class LendMarketTemplate {
|
|
|
1258
1258
|
}
|
|
1259
1259
|
userHealth() {
|
|
1260
1260
|
return __awaiter(this, arguments, void 0, function* (full = true, address = "") {
|
|
1261
|
-
address = _getAddress(address);
|
|
1262
|
-
let _health = yield llamalend.contracts[this.addresses.controller].contract.health(address, full, llamalend.constantOptions);
|
|
1261
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1262
|
+
let _health = yield this.llamalend.contracts[this.addresses.controller].contract.health(address, full, this.llamalend.constantOptions);
|
|
1263
1263
|
_health = _health * BigInt(100);
|
|
1264
1264
|
return formatUnits(_health);
|
|
1265
1265
|
});
|
|
1266
1266
|
}
|
|
1267
1267
|
_userBands(address) {
|
|
1268
1268
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1269
|
-
address = _getAddress(address);
|
|
1270
|
-
const _bands = yield llamalend.contracts[this.addresses.amm].contract.read_user_tick_numbers(address, llamalend.constantOptions);
|
|
1269
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1270
|
+
const _bands = yield this.llamalend.contracts[this.addresses.amm].contract.read_user_tick_numbers(address, this.llamalend.constantOptions);
|
|
1271
1271
|
return Array.from(_bands).reverse();
|
|
1272
1272
|
});
|
|
1273
1273
|
}
|
|
@@ -1286,20 +1286,20 @@ export class LendMarketTemplate {
|
|
|
1286
1286
|
}
|
|
1287
1287
|
userPrices() {
|
|
1288
1288
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
1289
|
-
address = _getAddress(address);
|
|
1290
|
-
const _prices = yield llamalend.contracts[this.addresses.controller].contract.user_prices(address, llamalend.constantOptions);
|
|
1289
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1290
|
+
const _prices = yield this.llamalend.contracts[this.addresses.controller].contract.user_prices(address, this.llamalend.constantOptions);
|
|
1291
1291
|
return _prices.map((_p) => formatUnits(_p)).reverse();
|
|
1292
1292
|
});
|
|
1293
1293
|
}
|
|
1294
1294
|
userLoss() {
|
|
1295
1295
|
return __awaiter(this, arguments, void 0, function* (userAddress = "") {
|
|
1296
|
-
userAddress = _getAddress(userAddress);
|
|
1296
|
+
userAddress = _getAddress.call(this.llamalend, userAddress);
|
|
1297
1297
|
const [userCollateral, _current_collateral_estimation] = yield Promise.all([
|
|
1298
|
-
_getUserCollateral(llamalend.constants.NETWORK_NAME, this.addresses.controller, userAddress),
|
|
1299
|
-
llamalend.contracts[this.addresses.amm].contract.get_y_up(userAddress),
|
|
1298
|
+
_getUserCollateral(this.llamalend.constants.NETWORK_NAME, this.addresses.controller, userAddress),
|
|
1299
|
+
this.llamalend.contracts[this.addresses.amm].contract.get_y_up(userAddress),
|
|
1300
1300
|
]);
|
|
1301
1301
|
const deposited_collateral = userCollateral.total_deposit_precise;
|
|
1302
|
-
const current_collateral_estimation = llamalend.formatUnits(_current_collateral_estimation, this.collateral_token.decimals);
|
|
1302
|
+
const current_collateral_estimation = this.llamalend.formatUnits(_current_collateral_estimation, this.collateral_token.decimals);
|
|
1303
1303
|
if (BN(deposited_collateral).lte(0)) {
|
|
1304
1304
|
return {
|
|
1305
1305
|
deposited_collateral,
|
|
@@ -1323,9 +1323,9 @@ export class LendMarketTemplate {
|
|
|
1323
1323
|
const [n2, n1] = yield this.userBands(address);
|
|
1324
1324
|
if (n1 == 0 && n2 == 0)
|
|
1325
1325
|
return {};
|
|
1326
|
-
address = _getAddress(address);
|
|
1327
|
-
const contract = llamalend.contracts[this.addresses.amm].contract;
|
|
1328
|
-
const [_borrowed, _collateral] = yield contract.get_xy(address, llamalend.constantOptions);
|
|
1326
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1327
|
+
const contract = this.llamalend.contracts[this.addresses.amm].contract;
|
|
1328
|
+
const [_borrowed, _collateral] = yield contract.get_xy(address, this.llamalend.constantOptions);
|
|
1329
1329
|
const res = {};
|
|
1330
1330
|
for (let i = n1; i <= n2; i++) {
|
|
1331
1331
|
res[i] = {
|
|
@@ -1347,8 +1347,8 @@ export class LendMarketTemplate {
|
|
|
1347
1347
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1348
1348
|
this._checkRange(range);
|
|
1349
1349
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals);
|
|
1350
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1351
|
-
return formatUnits(yield contract.max_borrowable(_collateral, range, 0, llamalend.constantOptions), this.borrowed_token.decimals);
|
|
1350
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1351
|
+
return formatUnits(yield contract.max_borrowable(_collateral, range, 0, this.llamalend.constantOptions), this.borrowed_token.decimals);
|
|
1352
1352
|
});
|
|
1353
1353
|
}
|
|
1354
1354
|
getMaxRange(collateral, debt) {
|
|
@@ -1364,22 +1364,22 @@ export class LendMarketTemplate {
|
|
|
1364
1364
|
_calcN1(_collateral, _debt, range) {
|
|
1365
1365
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1366
1366
|
this._checkRange(range);
|
|
1367
|
-
return yield llamalend.contracts[this.addresses.controller].contract.calculate_debt_n1(_collateral, _debt, range, llamalend.constantOptions);
|
|
1367
|
+
return yield this.llamalend.contracts[this.addresses.controller].contract.calculate_debt_n1(_collateral, _debt, range, this.llamalend.constantOptions);
|
|
1368
1368
|
});
|
|
1369
1369
|
}
|
|
1370
1370
|
_calcN1AllRanges(_collateral, _debt, maxN) {
|
|
1371
1371
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1372
1372
|
const calls = [];
|
|
1373
1373
|
for (let N = this.minBands; N <= maxN; N++) {
|
|
1374
|
-
calls.push(llamalend.contracts[this.addresses.controller].multicallContract.calculate_debt_n1(_collateral, _debt, N));
|
|
1374
|
+
calls.push(this.llamalend.contracts[this.addresses.controller].multicallContract.calculate_debt_n1(_collateral, _debt, N));
|
|
1375
1375
|
}
|
|
1376
|
-
return yield llamalend.multicallProvider.all(calls);
|
|
1376
|
+
return yield this.llamalend.multicallProvider.all(calls);
|
|
1377
1377
|
});
|
|
1378
1378
|
}
|
|
1379
1379
|
_getPrices(_n2, _n1) {
|
|
1380
1380
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1381
|
-
const contract = llamalend.contracts[this.addresses.amm].multicallContract;
|
|
1382
|
-
return (yield llamalend.multicallProvider.all([
|
|
1381
|
+
const contract = this.llamalend.contracts[this.addresses.amm].multicallContract;
|
|
1382
|
+
return (yield this.llamalend.multicallProvider.all([
|
|
1383
1383
|
contract.p_oracle_down(_n2),
|
|
1384
1384
|
contract.p_oracle_up(_n1),
|
|
1385
1385
|
])).map((_p) => formatUnits(_p));
|
|
@@ -1458,25 +1458,25 @@ export class LendMarketTemplate {
|
|
|
1458
1458
|
return __awaiter(this, arguments, void 0, function* (collateral, debt, range, full = true) {
|
|
1459
1459
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals);
|
|
1460
1460
|
const _debt = parseUnits(debt, this.borrowed_token.decimals);
|
|
1461
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1462
|
-
let _health = yield contract.health_calculator(llamalend.constants.ZERO_ADDRESS, _collateral, _debt, full, range, llamalend.constantOptions);
|
|
1461
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1462
|
+
let _health = yield contract.health_calculator(this.llamalend.constants.ZERO_ADDRESS, _collateral, _debt, full, range, this.llamalend.constantOptions);
|
|
1463
1463
|
_health = _health * BigInt(100);
|
|
1464
1464
|
return formatUnits(_health);
|
|
1465
1465
|
});
|
|
1466
1466
|
}
|
|
1467
1467
|
createLoanIsApproved(collateral) {
|
|
1468
1468
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1469
|
-
return yield hasAllowance([this.collateral_token.address], [collateral], llamalend.signerAddress, this.addresses.controller);
|
|
1469
|
+
return yield hasAllowance.call(this.llamalend, [this.collateral_token.address], [collateral], this.llamalend.signerAddress, this.addresses.controller);
|
|
1470
1470
|
});
|
|
1471
1471
|
}
|
|
1472
1472
|
createLoanApproveEstimateGas(collateral) {
|
|
1473
1473
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1474
|
-
return yield ensureAllowanceEstimateGas([this.collateral_token.address], [collateral], this.addresses.controller);
|
|
1474
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.collateral_token.address], [collateral], this.addresses.controller);
|
|
1475
1475
|
});
|
|
1476
1476
|
}
|
|
1477
1477
|
createLoanApprove(collateral) {
|
|
1478
1478
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1479
|
-
return yield ensureAllowance([this.collateral_token.address], [collateral], this.addresses.controller);
|
|
1479
|
+
return yield ensureAllowance.call(this.llamalend, [this.collateral_token.address], [collateral], this.addresses.controller);
|
|
1480
1480
|
});
|
|
1481
1481
|
}
|
|
1482
1482
|
_createLoan(collateral, debt, range, estimateGas) {
|
|
@@ -1486,13 +1486,13 @@ export class LendMarketTemplate {
|
|
|
1486
1486
|
this._checkRange(range);
|
|
1487
1487
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals);
|
|
1488
1488
|
const _debt = parseUnits(debt, this.borrowed_token.decimals);
|
|
1489
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1490
|
-
const gas = yield contract.create_loan.estimateGas(_collateral, _debt, range, Object.assign({}, llamalend.constantOptions));
|
|
1489
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1490
|
+
const gas = yield contract.create_loan.estimateGas(_collateral, _debt, range, Object.assign({}, this.llamalend.constantOptions));
|
|
1491
1491
|
if (estimateGas)
|
|
1492
1492
|
return smartNumber(gas);
|
|
1493
|
-
yield llamalend.updateFeeData();
|
|
1493
|
+
yield this.llamalend.updateFeeData();
|
|
1494
1494
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
1495
|
-
return (yield contract.create_loan(_collateral, _debt, range, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
1495
|
+
return (yield contract.create_loan(_collateral, _debt, range, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
1496
1496
|
});
|
|
1497
1497
|
}
|
|
1498
1498
|
createLoanEstimateGas(collateral, debt, range) {
|
|
@@ -1513,8 +1513,8 @@ export class LendMarketTemplate {
|
|
|
1513
1513
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1514
1514
|
const { _collateral: _currentCollateral, _debt: _currentDebt, _N } = yield this._userState();
|
|
1515
1515
|
const _collateral = _currentCollateral + parseUnits(collateralAmount, this.collateral_token.decimals);
|
|
1516
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1517
|
-
const _debt = yield contract.max_borrowable(_collateral, _N, _currentDebt, llamalend.constantOptions);
|
|
1516
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1517
|
+
const _debt = yield contract.max_borrowable(_collateral, _N, _currentDebt, this.llamalend.constantOptions);
|
|
1518
1518
|
return formatUnits(_debt - _currentDebt, this.borrowed_token.decimals);
|
|
1519
1519
|
});
|
|
1520
1520
|
}
|
|
@@ -1522,7 +1522,7 @@ export class LendMarketTemplate {
|
|
|
1522
1522
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1523
1523
|
const { _collateral: _currentCollateral, _debt: _currentDebt, _N } = yield this._userState();
|
|
1524
1524
|
if (_currentDebt === BigInt(0))
|
|
1525
|
-
throw Error(`Loan for ${llamalend.signerAddress} does not exist`);
|
|
1525
|
+
throw Error(`Loan for ${this.llamalend.signerAddress} does not exist`);
|
|
1526
1526
|
const _collateral = _currentCollateral + parseUnits(collateral, this.collateral_token.decimals);
|
|
1527
1527
|
const _debt = _currentDebt + parseUnits(debt, this.borrowed_token.decimals);
|
|
1528
1528
|
const _n1 = yield this._calcN1(_collateral, _debt, Number(_N));
|
|
@@ -1544,46 +1544,46 @@ export class LendMarketTemplate {
|
|
|
1544
1544
|
}
|
|
1545
1545
|
borrowMoreHealth(collateral_1, debt_1) {
|
|
1546
1546
|
return __awaiter(this, arguments, void 0, function* (collateral, debt, full = true, address = "") {
|
|
1547
|
-
address = _getAddress(address);
|
|
1547
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1548
1548
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals);
|
|
1549
1549
|
const _debt = parseUnits(debt, this.borrowed_token.decimals);
|
|
1550
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1551
|
-
let _health = yield contract.health_calculator(address, _collateral, _debt, full, 0, llamalend.constantOptions);
|
|
1550
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1551
|
+
let _health = yield contract.health_calculator(address, _collateral, _debt, full, 0, this.llamalend.constantOptions);
|
|
1552
1552
|
_health = _health * BigInt(100);
|
|
1553
1553
|
return formatUnits(_health);
|
|
1554
1554
|
});
|
|
1555
1555
|
}
|
|
1556
1556
|
borrowMoreIsApproved(collateral) {
|
|
1557
1557
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1558
|
-
return yield hasAllowance([this.addresses.collateral_token], [collateral], llamalend.signerAddress, this.addresses.controller);
|
|
1558
|
+
return yield hasAllowance.call(this.llamalend, [this.addresses.collateral_token], [collateral], this.llamalend.signerAddress, this.addresses.controller);
|
|
1559
1559
|
});
|
|
1560
1560
|
}
|
|
1561
1561
|
borrowMoreApproveEstimateGas(collateral) {
|
|
1562
1562
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1563
|
-
return yield ensureAllowanceEstimateGas([this.addresses.collateral_token], [collateral], this.addresses.controller);
|
|
1563
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.addresses.collateral_token], [collateral], this.addresses.controller);
|
|
1564
1564
|
});
|
|
1565
1565
|
}
|
|
1566
1566
|
borrowMoreApprove(collateral) {
|
|
1567
1567
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1568
|
-
return yield ensureAllowance([this.addresses.collateral_token], [collateral], this.addresses.controller);
|
|
1568
|
+
return yield ensureAllowance.call(this.llamalend, [this.addresses.collateral_token], [collateral], this.addresses.controller);
|
|
1569
1569
|
});
|
|
1570
1570
|
}
|
|
1571
1571
|
_borrowMore(collateral, debt, estimateGas) {
|
|
1572
1572
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1573
1573
|
const { borrowed, debt: currentDebt } = yield this.userState();
|
|
1574
1574
|
if (Number(currentDebt) === 0)
|
|
1575
|
-
throw Error(`Loan for ${llamalend.signerAddress} does not exist`);
|
|
1575
|
+
throw Error(`Loan for ${this.llamalend.signerAddress} does not exist`);
|
|
1576
1576
|
if (Number(borrowed) > 0)
|
|
1577
|
-
throw Error(`User ${llamalend.signerAddress} is already in liquidation mode`);
|
|
1577
|
+
throw Error(`User ${this.llamalend.signerAddress} is already in liquidation mode`);
|
|
1578
1578
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals);
|
|
1579
1579
|
const _debt = parseUnits(debt, this.borrowed_token.decimals);
|
|
1580
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1581
|
-
const gas = yield contract.borrow_more.estimateGas(_collateral, _debt, Object.assign({}, llamalend.constantOptions));
|
|
1580
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1581
|
+
const gas = yield contract.borrow_more.estimateGas(_collateral, _debt, Object.assign({}, this.llamalend.constantOptions));
|
|
1582
1582
|
if (estimateGas)
|
|
1583
1583
|
return smartNumber(gas);
|
|
1584
|
-
yield llamalend.updateFeeData();
|
|
1584
|
+
yield this.llamalend.updateFeeData();
|
|
1585
1585
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
1586
|
-
return (yield contract.borrow_more(_collateral, _debt, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
1586
|
+
return (yield contract.borrow_more(_collateral, _debt, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
1587
1587
|
});
|
|
1588
1588
|
}
|
|
1589
1589
|
borrowMoreEstimateGas(collateral, debt) {
|
|
@@ -1602,7 +1602,7 @@ export class LendMarketTemplate {
|
|
|
1602
1602
|
// ---------------- ADD COLLATERAL ----------------
|
|
1603
1603
|
_addCollateralBands(collateral_1) {
|
|
1604
1604
|
return __awaiter(this, arguments, void 0, function* (collateral, address = "") {
|
|
1605
|
-
address = _getAddress(address);
|
|
1605
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1606
1606
|
const { _collateral: _currentCollateral, _debt: _currentDebt, _N } = yield this._userState(address);
|
|
1607
1607
|
if (_currentDebt === BigInt(0))
|
|
1608
1608
|
throw Error(`Loan for ${address} does not exist`);
|
|
@@ -1626,27 +1626,27 @@ export class LendMarketTemplate {
|
|
|
1626
1626
|
}
|
|
1627
1627
|
addCollateralHealth(collateral_1) {
|
|
1628
1628
|
return __awaiter(this, arguments, void 0, function* (collateral, full = true, address = "") {
|
|
1629
|
-
address = _getAddress(address);
|
|
1629
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1630
1630
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals);
|
|
1631
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1632
|
-
let _health = yield contract.health_calculator(address, _collateral, 0, full, 0, llamalend.constantOptions);
|
|
1631
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1632
|
+
let _health = yield contract.health_calculator(address, _collateral, 0, full, 0, this.llamalend.constantOptions);
|
|
1633
1633
|
_health = _health * BigInt(100);
|
|
1634
1634
|
return formatUnits(_health);
|
|
1635
1635
|
});
|
|
1636
1636
|
}
|
|
1637
1637
|
addCollateralIsApproved(collateral) {
|
|
1638
1638
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1639
|
-
return yield hasAllowance([this.addresses.collateral_token], [collateral], llamalend.signerAddress, this.addresses.controller);
|
|
1639
|
+
return yield hasAllowance.call(this.llamalend, [this.addresses.collateral_token], [collateral], this.llamalend.signerAddress, this.addresses.controller);
|
|
1640
1640
|
});
|
|
1641
1641
|
}
|
|
1642
1642
|
addCollateralApproveEstimateGas(collateral) {
|
|
1643
1643
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1644
|
-
return yield ensureAllowanceEstimateGas([this.addresses.collateral_token], [collateral], this.addresses.controller);
|
|
1644
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.addresses.collateral_token], [collateral], this.addresses.controller);
|
|
1645
1645
|
});
|
|
1646
1646
|
}
|
|
1647
1647
|
addCollateralApprove(collateral) {
|
|
1648
1648
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1649
|
-
return yield ensureAllowance([this.addresses.collateral_token], [collateral], this.addresses.controller);
|
|
1649
|
+
return yield ensureAllowance.call(this.llamalend, [this.addresses.collateral_token], [collateral], this.addresses.controller);
|
|
1650
1650
|
});
|
|
1651
1651
|
}
|
|
1652
1652
|
_addCollateral(collateral, address, estimateGas) {
|
|
@@ -1657,18 +1657,18 @@ export class LendMarketTemplate {
|
|
|
1657
1657
|
if (Number(borrowed) > 0)
|
|
1658
1658
|
throw Error(`User ${address} is already in liquidation mode`);
|
|
1659
1659
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals);
|
|
1660
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1661
|
-
const gas = yield contract.add_collateral.estimateGas(_collateral, address, Object.assign({}, llamalend.constantOptions));
|
|
1660
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1661
|
+
const gas = yield contract.add_collateral.estimateGas(_collateral, address, Object.assign({}, this.llamalend.constantOptions));
|
|
1662
1662
|
if (estimateGas)
|
|
1663
1663
|
return smartNumber(gas);
|
|
1664
|
-
yield llamalend.updateFeeData();
|
|
1664
|
+
yield this.llamalend.updateFeeData();
|
|
1665
1665
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
1666
|
-
return (yield contract.add_collateral(_collateral, address, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
1666
|
+
return (yield contract.add_collateral(_collateral, address, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
1667
1667
|
});
|
|
1668
1668
|
}
|
|
1669
1669
|
addCollateralEstimateGas(collateral_1) {
|
|
1670
1670
|
return __awaiter(this, arguments, void 0, function* (collateral, address = "") {
|
|
1671
|
-
address = _getAddress(address);
|
|
1671
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1672
1672
|
if (!(yield this.addCollateralIsApproved(collateral)))
|
|
1673
1673
|
throw Error("Approval is needed for gas estimation");
|
|
1674
1674
|
return yield this._addCollateral(collateral, address, true);
|
|
@@ -1676,7 +1676,7 @@ export class LendMarketTemplate {
|
|
|
1676
1676
|
}
|
|
1677
1677
|
addCollateral(collateral_1) {
|
|
1678
1678
|
return __awaiter(this, arguments, void 0, function* (collateral, address = "") {
|
|
1679
|
-
address = _getAddress(address);
|
|
1679
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1680
1680
|
yield this.addCollateralApprove(collateral);
|
|
1681
1681
|
return yield this._addCollateral(collateral, address, false);
|
|
1682
1682
|
});
|
|
@@ -1685,7 +1685,7 @@ export class LendMarketTemplate {
|
|
|
1685
1685
|
maxRemovable() {
|
|
1686
1686
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1687
1687
|
const { _collateral: _currentCollateral, _debt: _currentDebt, _N } = yield this._userState();
|
|
1688
|
-
const _requiredCollateral = yield llamalend.contracts[this.addresses.controller].contract.min_collateral(_currentDebt, _N, llamalend.constantOptions);
|
|
1688
|
+
const _requiredCollateral = yield this.llamalend.contracts[this.addresses.controller].contract.min_collateral(_currentDebt, _N, this.llamalend.constantOptions);
|
|
1689
1689
|
return formatUnits(_currentCollateral - _requiredCollateral, this.collateral_token.decimals);
|
|
1690
1690
|
});
|
|
1691
1691
|
}
|
|
@@ -1693,7 +1693,7 @@ export class LendMarketTemplate {
|
|
|
1693
1693
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1694
1694
|
const { _collateral: _currentCollateral, _debt: _currentDebt, _N } = yield this._userState();
|
|
1695
1695
|
if (_currentDebt === BigInt(0))
|
|
1696
|
-
throw Error(`Loan for ${llamalend.signerAddress} does not exist`);
|
|
1696
|
+
throw Error(`Loan for ${this.llamalend.signerAddress} does not exist`);
|
|
1697
1697
|
const _collateral = _currentCollateral - parseUnits(collateral, this.collateral_token.decimals);
|
|
1698
1698
|
const _n1 = yield this._calcN1(_collateral, _currentDebt, Number(_N));
|
|
1699
1699
|
const _n2 = _n1 + _N - BigInt(1);
|
|
@@ -1714,10 +1714,10 @@ export class LendMarketTemplate {
|
|
|
1714
1714
|
}
|
|
1715
1715
|
removeCollateralHealth(collateral_1) {
|
|
1716
1716
|
return __awaiter(this, arguments, void 0, function* (collateral, full = true, address = "") {
|
|
1717
|
-
address = _getAddress(address);
|
|
1717
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1718
1718
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals) * BigInt(-1);
|
|
1719
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1720
|
-
let _health = yield contract.health_calculator(address, _collateral, 0, full, 0, llamalend.constantOptions);
|
|
1719
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1720
|
+
let _health = yield contract.health_calculator(address, _collateral, 0, full, 0, this.llamalend.constantOptions);
|
|
1721
1721
|
_health = _health * BigInt(100);
|
|
1722
1722
|
return formatUnits(_health);
|
|
1723
1723
|
});
|
|
@@ -1726,17 +1726,17 @@ export class LendMarketTemplate {
|
|
|
1726
1726
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1727
1727
|
const { borrowed, debt: currentDebt } = yield this.userState();
|
|
1728
1728
|
if (Number(currentDebt) === 0)
|
|
1729
|
-
throw Error(`Loan for ${llamalend.signerAddress} does not exist`);
|
|
1729
|
+
throw Error(`Loan for ${this.llamalend.signerAddress} does not exist`);
|
|
1730
1730
|
if (Number(borrowed) > 0)
|
|
1731
|
-
throw Error(`User ${llamalend.signerAddress} is already in liquidation mode`);
|
|
1731
|
+
throw Error(`User ${this.llamalend.signerAddress} is already in liquidation mode`);
|
|
1732
1732
|
const _collateral = parseUnits(collateral, this.collateral_token.decimals);
|
|
1733
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1734
|
-
const gas = yield contract.remove_collateral.estimateGas(_collateral, llamalend.constantOptions);
|
|
1733
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1734
|
+
const gas = yield contract.remove_collateral.estimateGas(_collateral, this.llamalend.constantOptions);
|
|
1735
1735
|
if (estimateGas)
|
|
1736
1736
|
return smartNumber(gas);
|
|
1737
|
-
yield llamalend.updateFeeData();
|
|
1737
|
+
yield this.llamalend.updateFeeData();
|
|
1738
1738
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
1739
|
-
return (yield contract.remove_collateral(_collateral, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
1739
|
+
return (yield contract.remove_collateral(_collateral, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
1740
1740
|
});
|
|
1741
1741
|
}
|
|
1742
1742
|
removeCollateralEstimateGas(collateral) {
|
|
@@ -1777,46 +1777,46 @@ export class LendMarketTemplate {
|
|
|
1777
1777
|
}
|
|
1778
1778
|
repayIsApproved(debt) {
|
|
1779
1779
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1780
|
-
return yield hasAllowance([this.borrowed_token.address], [debt], llamalend.signerAddress, this.addresses.controller);
|
|
1780
|
+
return yield hasAllowance.call(this.llamalend, [this.borrowed_token.address], [debt], this.llamalend.signerAddress, this.addresses.controller);
|
|
1781
1781
|
});
|
|
1782
1782
|
}
|
|
1783
1783
|
repayApproveEstimateGas(debt) {
|
|
1784
1784
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1785
|
-
return yield ensureAllowanceEstimateGas([this.borrowed_token.address], [debt], this.addresses.controller);
|
|
1785
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.borrowed_token.address], [debt], this.addresses.controller);
|
|
1786
1786
|
});
|
|
1787
1787
|
}
|
|
1788
1788
|
repayApprove(debt) {
|
|
1789
1789
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1790
|
-
return yield ensureAllowance([this.borrowed_token.address], [debt], this.addresses.controller);
|
|
1790
|
+
return yield ensureAllowance.call(this.llamalend, [this.borrowed_token.address], [debt], this.addresses.controller);
|
|
1791
1791
|
});
|
|
1792
1792
|
}
|
|
1793
1793
|
repayHealth(debt_1) {
|
|
1794
1794
|
return __awaiter(this, arguments, void 0, function* (debt, full = true, address = "") {
|
|
1795
|
-
address = _getAddress(address);
|
|
1795
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1796
1796
|
const _debt = parseUnits(debt) * BigInt(-1);
|
|
1797
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1798
|
-
let _health = yield contract.health_calculator(address, 0, _debt, full, 0, llamalend.constantOptions);
|
|
1797
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1798
|
+
let _health = yield contract.health_calculator(address, 0, _debt, full, 0, this.llamalend.constantOptions);
|
|
1799
1799
|
_health = _health * BigInt(100);
|
|
1800
1800
|
return formatUnits(_health);
|
|
1801
1801
|
});
|
|
1802
1802
|
}
|
|
1803
1803
|
_repay(debt, address, estimateGas) {
|
|
1804
1804
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1805
|
-
address = _getAddress(address);
|
|
1805
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1806
1806
|
const { debt: currentDebt } = yield this.userState(address);
|
|
1807
1807
|
if (Number(currentDebt) === 0)
|
|
1808
1808
|
throw Error(`Loan for ${address} does not exist`);
|
|
1809
1809
|
const _debt = parseUnits(debt);
|
|
1810
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
1810
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
1811
1811
|
const [, n1] = yield this.userBands(address);
|
|
1812
1812
|
const { borrowed } = yield this.userState(address);
|
|
1813
1813
|
const n = (BN(borrowed).gt(0)) ? MAX_ACTIVE_BAND : n1 - 1; // In liquidation mode it doesn't matter if active band moves
|
|
1814
|
-
const gas = yield contract.repay.estimateGas(_debt, address, n, llamalend.constantOptions);
|
|
1814
|
+
const gas = yield contract.repay.estimateGas(_debt, address, n, this.llamalend.constantOptions);
|
|
1815
1815
|
if (estimateGas)
|
|
1816
1816
|
return smartNumber(gas);
|
|
1817
|
-
yield llamalend.updateFeeData();
|
|
1817
|
+
yield this.llamalend.updateFeeData();
|
|
1818
1818
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
1819
|
-
return (yield contract.repay(_debt, address, n, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
1819
|
+
return (yield contract.repay(_debt, address, n, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
1820
1820
|
});
|
|
1821
1821
|
}
|
|
1822
1822
|
repayEstimateGas(debt_1) {
|
|
@@ -1835,35 +1835,35 @@ export class LendMarketTemplate {
|
|
|
1835
1835
|
// ---------------- FULL REPAY ----------------
|
|
1836
1836
|
_fullRepayAmount() {
|
|
1837
1837
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
1838
|
-
address = _getAddress(address);
|
|
1838
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1839
1839
|
const { debt } = yield this.userState(address);
|
|
1840
1840
|
return BN(debt).times(1.0001).toString();
|
|
1841
1841
|
});
|
|
1842
1842
|
}
|
|
1843
1843
|
fullRepayIsApproved() {
|
|
1844
1844
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
1845
|
-
address = _getAddress(address);
|
|
1845
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1846
1846
|
const fullRepayAmount = yield this._fullRepayAmount(address);
|
|
1847
1847
|
return yield this.repayIsApproved(fullRepayAmount);
|
|
1848
1848
|
});
|
|
1849
1849
|
}
|
|
1850
1850
|
fullRepayApproveEstimateGas() {
|
|
1851
1851
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
1852
|
-
address = _getAddress(address);
|
|
1852
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1853
1853
|
const fullRepayAmount = yield this._fullRepayAmount(address);
|
|
1854
1854
|
return yield this.repayApproveEstimateGas(fullRepayAmount);
|
|
1855
1855
|
});
|
|
1856
1856
|
}
|
|
1857
1857
|
fullRepayApprove() {
|
|
1858
1858
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
1859
|
-
address = _getAddress(address);
|
|
1859
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1860
1860
|
const fullRepayAmount = yield this._fullRepayAmount(address);
|
|
1861
1861
|
return yield this.repayApprove(fullRepayAmount);
|
|
1862
1862
|
});
|
|
1863
1863
|
}
|
|
1864
1864
|
fullRepayEstimateGas() {
|
|
1865
1865
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
1866
|
-
address = _getAddress(address);
|
|
1866
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1867
1867
|
const fullRepayAmount = yield this._fullRepayAmount(address);
|
|
1868
1868
|
if (!(yield this.repayIsApproved(fullRepayAmount)))
|
|
1869
1869
|
throw Error("Approval is needed for gas estimation");
|
|
@@ -1872,7 +1872,7 @@ export class LendMarketTemplate {
|
|
|
1872
1872
|
}
|
|
1873
1873
|
fullRepay() {
|
|
1874
1874
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
1875
|
-
address = _getAddress(address);
|
|
1875
|
+
address = _getAddress.call(this.llamalend, address);
|
|
1876
1876
|
const fullRepayAmount = yield this._fullRepayAmount(address);
|
|
1877
1877
|
yield this.repayApprove(fullRepayAmount);
|
|
1878
1878
|
return yield this._repay(fullRepayAmount, address, false);
|
|
@@ -1884,8 +1884,8 @@ export class LendMarketTemplate {
|
|
|
1884
1884
|
if (!(i === 0 && j === 1) && !(i === 1 && j === 0))
|
|
1885
1885
|
throw Error("Wrong index");
|
|
1886
1886
|
const inDecimals = this.coinDecimals[i];
|
|
1887
|
-
const contract = llamalend.contracts[this.addresses.amm].contract;
|
|
1888
|
-
const [_inAmount, _outAmount] = yield contract.get_dxdy(i, j, MAX_ALLOWANCE, llamalend.constantOptions);
|
|
1887
|
+
const contract = this.llamalend.contracts[this.addresses.amm].contract;
|
|
1888
|
+
const [_inAmount, _outAmount] = yield contract.get_dxdy(i, j, MAX_ALLOWANCE, this.llamalend.constantOptions);
|
|
1889
1889
|
if (_outAmount === BigInt(0))
|
|
1890
1890
|
return "0";
|
|
1891
1891
|
return formatUnits(_inAmount, inDecimals);
|
|
@@ -1893,7 +1893,7 @@ export class LendMarketTemplate {
|
|
|
1893
1893
|
}
|
|
1894
1894
|
_swapExpected(i, j, _amount) {
|
|
1895
1895
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1896
|
-
return yield llamalend.contracts[this.addresses.amm].contract.get_dy(i, j, _amount, llamalend.constantOptions);
|
|
1896
|
+
return yield this.llamalend.contracts[this.addresses.amm].contract.get_dy(i, j, _amount, this.llamalend.constantOptions);
|
|
1897
1897
|
});
|
|
1898
1898
|
}
|
|
1899
1899
|
swapExpected(i, j, amount) {
|
|
@@ -1912,7 +1912,7 @@ export class LendMarketTemplate {
|
|
|
1912
1912
|
throw Error("Wrong index");
|
|
1913
1913
|
const [inDecimals, outDecimals] = this.coinDecimals;
|
|
1914
1914
|
const _amount = parseUnits(outAmount, outDecimals);
|
|
1915
|
-
const _expected = yield llamalend.contracts[this.addresses.amm].contract.get_dx(i, j, _amount, llamalend.constantOptions);
|
|
1915
|
+
const _expected = yield this.llamalend.contracts[this.addresses.amm].contract.get_dx(i, j, _amount, this.llamalend.constantOptions);
|
|
1916
1916
|
return formatUnits(_expected, inDecimals);
|
|
1917
1917
|
});
|
|
1918
1918
|
}
|
|
@@ -1951,21 +1951,21 @@ export class LendMarketTemplate {
|
|
|
1951
1951
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1952
1952
|
if (i !== 0 && i !== 1)
|
|
1953
1953
|
throw Error("Wrong index");
|
|
1954
|
-
return yield hasAllowance([this.coinAddresses[i]], [amount], llamalend.signerAddress, this.addresses.amm);
|
|
1954
|
+
return yield hasAllowance.call(this.llamalend, [this.coinAddresses[i]], [amount], this.llamalend.signerAddress, this.addresses.amm);
|
|
1955
1955
|
});
|
|
1956
1956
|
}
|
|
1957
1957
|
swapApproveEstimateGas(i, amount) {
|
|
1958
1958
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1959
1959
|
if (i !== 0 && i !== 1)
|
|
1960
1960
|
throw Error("Wrong index");
|
|
1961
|
-
return yield ensureAllowanceEstimateGas([this.coinAddresses[i]], [amount], this.addresses.amm);
|
|
1961
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.coinAddresses[i]], [amount], this.addresses.amm);
|
|
1962
1962
|
});
|
|
1963
1963
|
}
|
|
1964
1964
|
swapApprove(i, amount) {
|
|
1965
1965
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1966
1966
|
if (i !== 0 && i !== 1)
|
|
1967
1967
|
throw Error("Wrong index");
|
|
1968
|
-
return yield ensureAllowance([this.coinAddresses[i]], [amount], this.addresses.amm);
|
|
1968
|
+
return yield ensureAllowance.call(this.llamalend, [this.coinAddresses[i]], [amount], this.addresses.amm);
|
|
1969
1969
|
});
|
|
1970
1970
|
}
|
|
1971
1971
|
_swap(i, j, amount, slippage, estimateGas) {
|
|
@@ -1977,13 +1977,13 @@ export class LendMarketTemplate {
|
|
|
1977
1977
|
const _expected = yield this._swapExpected(i, j, _amount);
|
|
1978
1978
|
const minRecvAmountBN = toBN(_expected, outDecimals).times(100 - slippage).div(100);
|
|
1979
1979
|
const _minRecvAmount = fromBN(minRecvAmountBN, outDecimals);
|
|
1980
|
-
const contract = llamalend.contracts[this.addresses.amm].contract;
|
|
1981
|
-
const gas = yield contract.exchange.estimateGas(i, j, _amount, _minRecvAmount, llamalend.constantOptions);
|
|
1980
|
+
const contract = this.llamalend.contracts[this.addresses.amm].contract;
|
|
1981
|
+
const gas = yield contract.exchange.estimateGas(i, j, _amount, _minRecvAmount, this.llamalend.constantOptions);
|
|
1982
1982
|
if (estimateGas)
|
|
1983
1983
|
return smartNumber(gas);
|
|
1984
|
-
yield llamalend.updateFeeData();
|
|
1984
|
+
yield this.llamalend.updateFeeData();
|
|
1985
1985
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
1986
|
-
return (yield contract.exchange(i, j, _amount, _minRecvAmount, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
1986
|
+
return (yield contract.exchange(i, j, _amount, _minRecvAmount, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
1987
1987
|
});
|
|
1988
1988
|
}
|
|
1989
1989
|
swapEstimateGas(i_1, j_1, amount_1) {
|
|
@@ -2002,27 +2002,27 @@ export class LendMarketTemplate {
|
|
|
2002
2002
|
// ---------------- LIQUIDATE ----------------
|
|
2003
2003
|
tokensToLiquidate() {
|
|
2004
2004
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
2005
|
-
address = _getAddress(address);
|
|
2006
|
-
const _tokens = yield llamalend.contracts[this.addresses.controller].contract.tokens_to_liquidate(address, llamalend.constantOptions);
|
|
2005
|
+
address = _getAddress.call(this.llamalend, address);
|
|
2006
|
+
const _tokens = yield this.llamalend.contracts[this.addresses.controller].contract.tokens_to_liquidate(address, this.llamalend.constantOptions);
|
|
2007
2007
|
return formatUnits(_tokens, this.borrowed_token.decimals);
|
|
2008
2008
|
});
|
|
2009
2009
|
}
|
|
2010
2010
|
liquidateIsApproved() {
|
|
2011
2011
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
2012
2012
|
const tokensToLiquidate = yield this.tokensToLiquidate(address);
|
|
2013
|
-
return yield hasAllowance([this.addresses.borrowed_token], [tokensToLiquidate], llamalend.signerAddress, this.addresses.controller);
|
|
2013
|
+
return yield hasAllowance.call(this.llamalend, [this.addresses.borrowed_token], [tokensToLiquidate], this.llamalend.signerAddress, this.addresses.controller);
|
|
2014
2014
|
});
|
|
2015
2015
|
}
|
|
2016
2016
|
liquidateApproveEstimateGas() {
|
|
2017
2017
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
2018
2018
|
const tokensToLiquidate = yield this.tokensToLiquidate(address);
|
|
2019
|
-
return yield ensureAllowanceEstimateGas([this.addresses.borrowed_token], [tokensToLiquidate], this.addresses.controller);
|
|
2019
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.addresses.borrowed_token], [tokensToLiquidate], this.addresses.controller);
|
|
2020
2020
|
});
|
|
2021
2021
|
}
|
|
2022
2022
|
liquidateApprove() {
|
|
2023
2023
|
return __awaiter(this, arguments, void 0, function* (address = "") {
|
|
2024
2024
|
const tokensToLiquidate = yield this.tokensToLiquidate(address);
|
|
2025
|
-
return yield ensureAllowance([this.addresses.borrowed_token], [tokensToLiquidate], this.addresses.controller);
|
|
2025
|
+
return yield ensureAllowance.call(this.llamalend, [this.addresses.borrowed_token], [tokensToLiquidate], this.addresses.controller);
|
|
2026
2026
|
});
|
|
2027
2027
|
}
|
|
2028
2028
|
_liquidate(address, slippage, estimateGas) {
|
|
@@ -2038,13 +2038,13 @@ export class LendMarketTemplate {
|
|
|
2038
2038
|
throw Error(`User ${address} is not in liquidation mode`);
|
|
2039
2039
|
const minAmountBN = BN(borrowed).times(100 - slippage).div(100);
|
|
2040
2040
|
const _minAmount = fromBN(minAmountBN);
|
|
2041
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
2042
|
-
const gas = (yield contract.liquidate.estimateGas(address, _minAmount, llamalend.constantOptions));
|
|
2041
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
2042
|
+
const gas = (yield contract.liquidate.estimateGas(address, _minAmount, this.llamalend.constantOptions));
|
|
2043
2043
|
if (estimateGas)
|
|
2044
2044
|
return smartNumber(gas);
|
|
2045
|
-
yield llamalend.updateFeeData();
|
|
2045
|
+
yield this.llamalend.updateFeeData();
|
|
2046
2046
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
2047
|
-
return (yield contract.liquidate(address, _minAmount, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
2047
|
+
return (yield contract.liquidate(address, _minAmount, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
2048
2048
|
});
|
|
2049
2049
|
}
|
|
2050
2050
|
liquidateEstimateGas(address_1) {
|
|
@@ -2080,13 +2080,13 @@ export class LendMarketTemplate {
|
|
|
2080
2080
|
return __awaiter(this, arguments, void 0, function* (slippage = 0.1) {
|
|
2081
2081
|
if (!(yield this.selfLiquidateIsApproved()))
|
|
2082
2082
|
throw Error("Approval is needed for gas estimation");
|
|
2083
|
-
return yield this._liquidate(llamalend.signerAddress, slippage, true);
|
|
2083
|
+
return yield this._liquidate(this.llamalend.signerAddress, slippage, true);
|
|
2084
2084
|
});
|
|
2085
2085
|
}
|
|
2086
2086
|
selfLiquidate() {
|
|
2087
2087
|
return __awaiter(this, arguments, void 0, function* (slippage = 0.1) {
|
|
2088
2088
|
yield this.selfLiquidateApprove();
|
|
2089
|
-
return yield this._liquidate(llamalend.signerAddress, slippage, false);
|
|
2089
|
+
return yield this._liquidate(this.llamalend.signerAddress, slippage, false);
|
|
2090
2090
|
});
|
|
2091
2091
|
}
|
|
2092
2092
|
_checkLeverageZap() {
|
|
@@ -2130,7 +2130,7 @@ export class LendMarketTemplate {
|
|
|
2130
2130
|
let maxBorrowableBN = BN(0);
|
|
2131
2131
|
let _userEffectiveCollateral = BigInt(0);
|
|
2132
2132
|
let _maxLeverageCollateral = BigInt(0);
|
|
2133
|
-
const contract = llamalend.contracts[llamalend.constants.ALIASES.leverage_zap].contract;
|
|
2133
|
+
const contract = this.llamalend.contracts[this.llamalend.constants.ALIASES.leverage_zap].contract;
|
|
2134
2134
|
for (let i = 0; i < 5; i++) {
|
|
2135
2135
|
maxBorrowablePrevBN = maxBorrowableBN;
|
|
2136
2136
|
_userEffectiveCollateral = _userCollateral + fromBN(BN(userBorrowed).div(pAvgBN), this.collateral_token.decimals);
|
|
@@ -2144,7 +2144,7 @@ export class LendMarketTemplate {
|
|
|
2144
2144
|
break;
|
|
2145
2145
|
}
|
|
2146
2146
|
// additionalCollateral = (userBorrowed / p) + leverageCollateral
|
|
2147
|
-
const _maxAdditionalCollateral = BigInt(yield _getExpectedOdos(this.addresses.borrowed_token, this.addresses.collateral_token, _maxBorrowable + _userBorrowed, this.addresses.amm));
|
|
2147
|
+
const _maxAdditionalCollateral = BigInt(yield _getExpectedOdos.call(this.llamalend, this.addresses.borrowed_token, this.addresses.collateral_token, _maxBorrowable + _userBorrowed, this.addresses.amm));
|
|
2148
2148
|
pAvgBN = maxBorrowableBN.plus(userBorrowed).div(toBN(_maxAdditionalCollateral, this.collateral_token.decimals));
|
|
2149
2149
|
_maxLeverageCollateral = _maxAdditionalCollateral - fromBN(BN(userBorrowed).div(pAvgBN), this.collateral_token.decimals);
|
|
2150
2150
|
}
|
|
@@ -2271,7 +2271,7 @@ export class LendMarketTemplate {
|
|
|
2271
2271
|
});
|
|
2272
2272
|
}
|
|
2273
2273
|
_leverageHealth(userCollateral_1, userBorrowed_1, dDebt_1, range_1, full_1) {
|
|
2274
|
-
return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, dDebt, range, full, user = llamalend.constants.ZERO_ADDRESS) {
|
|
2274
|
+
return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, dDebt, range, full, user = this.llamalend.constants.ZERO_ADDRESS) {
|
|
2275
2275
|
if (range > 0)
|
|
2276
2276
|
this._checkRange(range);
|
|
2277
2277
|
const { _totalCollateral } = yield this._leverageExpectedCollateral(userCollateral, userBorrowed, dDebt, user);
|
|
@@ -2279,10 +2279,10 @@ export class LendMarketTemplate {
|
|
|
2279
2279
|
if (_borrowed > BigInt(0))
|
|
2280
2280
|
throw Error(`User ${user} is already in liquidation mode`);
|
|
2281
2281
|
if (range < 0)
|
|
2282
|
-
range = Number(llamalend.formatUnits(_N, 0));
|
|
2282
|
+
range = Number(this.llamalend.formatUnits(_N, 0));
|
|
2283
2283
|
const _dDebt = parseUnits(dDebt, this.borrowed_token.decimals);
|
|
2284
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
2285
|
-
let _health = yield contract.health_calculator(user, _totalCollateral, _dDebt, full, range, llamalend.constantOptions);
|
|
2284
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
2285
|
+
let _health = yield contract.health_calculator(user, _totalCollateral, _dDebt, full, range, this.llamalend.constantOptions);
|
|
2286
2286
|
_health = _health * BigInt(100);
|
|
2287
2287
|
return formatUnits(_health);
|
|
2288
2288
|
});
|
|
@@ -2296,16 +2296,16 @@ export class LendMarketTemplate {
|
|
|
2296
2296
|
leverageCreateLoanIsApproved(userCollateral, userBorrowed) {
|
|
2297
2297
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2298
2298
|
this._checkLeverageZap();
|
|
2299
|
-
const collateralAllowance = yield hasAllowance([this.collateral_token.address], [userCollateral], llamalend.signerAddress, this.addresses.controller);
|
|
2300
|
-
const borrowedAllowance = yield hasAllowance([this.borrowed_token.address], [userBorrowed], llamalend.signerAddress, llamalend.constants.ALIASES.leverage_zap);
|
|
2299
|
+
const collateralAllowance = yield hasAllowance.call(this.llamalend, [this.collateral_token.address], [userCollateral], this.llamalend.signerAddress, this.addresses.controller);
|
|
2300
|
+
const borrowedAllowance = yield hasAllowance.call(this.llamalend, [this.borrowed_token.address], [userBorrowed], this.llamalend.signerAddress, this.llamalend.constants.ALIASES.leverage_zap);
|
|
2301
2301
|
return collateralAllowance && borrowedAllowance;
|
|
2302
2302
|
});
|
|
2303
2303
|
}
|
|
2304
2304
|
leverageCreateLoanApproveEstimateGas(userCollateral, userBorrowed) {
|
|
2305
2305
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2306
2306
|
this._checkLeverageZap();
|
|
2307
|
-
const collateralGas = yield ensureAllowanceEstimateGas([this.collateral_token.address], [userCollateral], this.addresses.controller);
|
|
2308
|
-
const borrowedGas = yield ensureAllowanceEstimateGas([this.borrowed_token.address], [userBorrowed], llamalend.constants.ALIASES.leverage_zap);
|
|
2307
|
+
const collateralGas = yield ensureAllowanceEstimateGas.call(this.llamalend, [this.collateral_token.address], [userCollateral], this.addresses.controller);
|
|
2308
|
+
const borrowedGas = yield ensureAllowanceEstimateGas.call(this.llamalend, [this.borrowed_token.address], [userBorrowed], this.llamalend.constants.ALIASES.leverage_zap);
|
|
2309
2309
|
if (Array.isArray(collateralGas) && Array.isArray(borrowedGas)) {
|
|
2310
2310
|
return [collateralGas[0] + borrowedGas[0], collateralGas[1] + borrowedGas[1]];
|
|
2311
2311
|
}
|
|
@@ -2317,8 +2317,8 @@ export class LendMarketTemplate {
|
|
|
2317
2317
|
leverageCreateLoanApprove(userCollateral, userBorrowed) {
|
|
2318
2318
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2319
2319
|
this._checkLeverageZap();
|
|
2320
|
-
const collateralApproveTx = yield ensureAllowance([this.collateral_token.address], [userCollateral], this.addresses.controller);
|
|
2321
|
-
const borrowedApproveTx = yield ensureAllowance([this.borrowed_token.address], [userBorrowed], llamalend.constants.ALIASES.leverage_zap);
|
|
2320
|
+
const collateralApproveTx = yield ensureAllowance.call(this.llamalend, [this.collateral_token.address], [userCollateral], this.addresses.controller);
|
|
2321
|
+
const borrowedApproveTx = yield ensureAllowance.call(this.llamalend, [this.borrowed_token.address], [userBorrowed], this.llamalend.constants.ALIASES.leverage_zap);
|
|
2322
2322
|
return [...collateralApproveTx, ...borrowedApproveTx];
|
|
2323
2323
|
});
|
|
2324
2324
|
}
|
|
@@ -2341,14 +2341,14 @@ export class LendMarketTemplate {
|
|
|
2341
2341
|
const swapData = this._getSwapDataFromCache(this.addresses.borrowed_token, _debt + _userBorrowed);
|
|
2342
2342
|
if (slippage !== swapData.slippage)
|
|
2343
2343
|
throw Error(`You must call leverage.createLoanExpectedCollateral() with slippage=${slippage} first`);
|
|
2344
|
-
const calldata = yield _assembleTxOdos(swapData.pathId);
|
|
2345
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
2346
|
-
const gas = yield contract.create_loan_extended.estimateGas(_userCollateral, _debt, range, llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userBorrowed], calldata, Object.assign({}, llamalend.constantOptions));
|
|
2344
|
+
const calldata = yield _assembleTxOdos.call(this.llamalend, swapData.pathId);
|
|
2345
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
2346
|
+
const gas = yield contract.create_loan_extended.estimateGas(_userCollateral, _debt, range, this.llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userBorrowed], calldata, Object.assign({}, this.llamalend.constantOptions));
|
|
2347
2347
|
if (estimateGas)
|
|
2348
2348
|
return smartNumber(gas);
|
|
2349
|
-
yield llamalend.updateFeeData();
|
|
2349
|
+
yield this.llamalend.updateFeeData();
|
|
2350
2350
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
2351
|
-
return (yield contract.create_loan_extended(_userCollateral, _debt, range, llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userBorrowed], calldata, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
2351
|
+
return (yield contract.create_loan_extended(_userCollateral, _debt, range, this.llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userBorrowed], calldata, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
2352
2352
|
});
|
|
2353
2353
|
}
|
|
2354
2354
|
leverageCreateLoanEstimateGas(userCollateral_1, userBorrowed_1, debt_1, range_1) {
|
|
@@ -2371,13 +2371,13 @@ export class LendMarketTemplate {
|
|
|
2371
2371
|
return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, address = "") {
|
|
2372
2372
|
// max_borrowable = userCollateral / (1 / (k_effective * max_p_base) - 1 / p_avg)
|
|
2373
2373
|
this._checkLeverageZap();
|
|
2374
|
-
address = _getAddress(address);
|
|
2374
|
+
address = _getAddress.call(this.llamalend, address);
|
|
2375
2375
|
const { _collateral: _stateCollateral, _borrowed: _stateBorrowed, _debt: _stateDebt, _N } = yield this._userState(address);
|
|
2376
2376
|
if (_stateBorrowed > BigInt(0))
|
|
2377
2377
|
throw Error(`User ${address} is already in liquidation mode`);
|
|
2378
2378
|
const _userCollateral = parseUnits(userCollateral, this.collateral_token.decimals);
|
|
2379
|
-
const controllerContract = llamalend.contracts[this.addresses.controller].contract;
|
|
2380
|
-
const _borrowedFromStateCollateral = (yield controllerContract.max_borrowable(_stateCollateral, _N, _stateDebt, llamalend.constantOptions)) - _stateDebt;
|
|
2379
|
+
const controllerContract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
2380
|
+
const _borrowedFromStateCollateral = (yield controllerContract.max_borrowable(_stateCollateral, _N, _stateDebt, this.llamalend.constantOptions)) - _stateDebt;
|
|
2381
2381
|
const _userBorrowed = _borrowedFromStateCollateral + parseUnits(userBorrowed, this.borrowed_token.decimals);
|
|
2382
2382
|
userBorrowed = formatUnits(_userBorrowed, this.borrowed_token.decimals);
|
|
2383
2383
|
const oraclePriceBand = yield this.oraclePriceBand();
|
|
@@ -2386,7 +2386,7 @@ export class LendMarketTemplate {
|
|
|
2386
2386
|
let maxBorrowableBN = BN(0);
|
|
2387
2387
|
let _userEffectiveCollateral = BigInt(0);
|
|
2388
2388
|
let _maxLeverageCollateral = BigInt(0);
|
|
2389
|
-
const contract = llamalend.contracts[llamalend.constants.ALIASES.leverage_zap].contract;
|
|
2389
|
+
const contract = this.llamalend.contracts[this.llamalend.constants.ALIASES.leverage_zap].contract;
|
|
2390
2390
|
for (let i = 0; i < 5; i++) {
|
|
2391
2391
|
maxBorrowablePrevBN = maxBorrowableBN;
|
|
2392
2392
|
_userEffectiveCollateral = _userCollateral + fromBN(BN(userBorrowed).div(pAvgBN), this.collateral_token.decimals);
|
|
@@ -2400,14 +2400,14 @@ export class LendMarketTemplate {
|
|
|
2400
2400
|
break;
|
|
2401
2401
|
}
|
|
2402
2402
|
// additionalCollateral = (userBorrowed / p) + leverageCollateral
|
|
2403
|
-
const _maxAdditionalCollateral = BigInt(yield _getExpectedOdos(this.addresses.borrowed_token, this.addresses.collateral_token, _maxBorrowable + _userBorrowed, this.addresses.amm));
|
|
2403
|
+
const _maxAdditionalCollateral = BigInt(yield _getExpectedOdos.call(this.llamalend, this.addresses.borrowed_token, this.addresses.collateral_token, _maxBorrowable + _userBorrowed, this.addresses.amm));
|
|
2404
2404
|
pAvgBN = maxBorrowableBN.plus(userBorrowed).div(toBN(_maxAdditionalCollateral, this.collateral_token.decimals));
|
|
2405
2405
|
_maxLeverageCollateral = _maxAdditionalCollateral - fromBN(BN(userBorrowed).div(pAvgBN), this.collateral_token.decimals);
|
|
2406
2406
|
}
|
|
2407
2407
|
if (maxBorrowableBN.eq(0))
|
|
2408
2408
|
_userEffectiveCollateral = BigInt(0);
|
|
2409
2409
|
const _maxTotalCollateral = _userEffectiveCollateral + _maxLeverageCollateral;
|
|
2410
|
-
let _maxBorrowable = (yield controllerContract.max_borrowable(_stateCollateral + _maxTotalCollateral, _N, _stateDebt, llamalend.constantOptions)) - _stateDebt;
|
|
2410
|
+
let _maxBorrowable = (yield controllerContract.max_borrowable(_stateCollateral + _maxTotalCollateral, _N, _stateDebt, this.llamalend.constantOptions)) - _stateDebt;
|
|
2411
2411
|
_maxBorrowable = _maxBorrowable * BigInt(998) / BigInt(1000);
|
|
2412
2412
|
return {
|
|
2413
2413
|
maxDebt: formatUnits(_maxBorrowable, this.borrowed_token.decimals),
|
|
@@ -2422,7 +2422,7 @@ export class LendMarketTemplate {
|
|
|
2422
2422
|
leverageBorrowMoreExpectedCollateral(userCollateral_1, userBorrowed_1, dDebt_1) {
|
|
2423
2423
|
return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, dDebt, slippage = 0.1, address = "") {
|
|
2424
2424
|
this._checkLeverageZap();
|
|
2425
|
-
address = _getAddress(address);
|
|
2425
|
+
address = _getAddress.call(this.llamalend, address);
|
|
2426
2426
|
const _dDebt = parseUnits(dDebt, this.borrowed_token.decimals);
|
|
2427
2427
|
const _userBorrowed = parseUnits(userBorrowed, this.borrowed_token.decimals);
|
|
2428
2428
|
yield this._setSwapDataToCache(this.addresses.borrowed_token, this.addresses.collateral_token, _dDebt + _userBorrowed, slippage);
|
|
@@ -2446,7 +2446,7 @@ export class LendMarketTemplate {
|
|
|
2446
2446
|
}
|
|
2447
2447
|
leverageBorrowMoreBands(userCollateral_1, userBorrowed_1, dDebt_1) {
|
|
2448
2448
|
return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, dDebt, address = "") {
|
|
2449
|
-
address = _getAddress(address);
|
|
2449
|
+
address = _getAddress.call(this.llamalend, address);
|
|
2450
2450
|
this._checkLeverageZap();
|
|
2451
2451
|
const [_n2, _n1] = yield this._leverageBands(userCollateral, userBorrowed, dDebt, -1, address);
|
|
2452
2452
|
return [Number(_n2), Number(_n1)];
|
|
@@ -2454,7 +2454,7 @@ export class LendMarketTemplate {
|
|
|
2454
2454
|
}
|
|
2455
2455
|
leverageBorrowMorePrices(userCollateral_1, userBorrowed_1, dDebt_1) {
|
|
2456
2456
|
return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, dDebt, address = "") {
|
|
2457
|
-
address = _getAddress(address);
|
|
2457
|
+
address = _getAddress.call(this.llamalend, address);
|
|
2458
2458
|
this._checkLeverageZap();
|
|
2459
2459
|
const [_n2, _n1] = yield this._leverageBands(userCollateral, userBorrowed, dDebt, -1, address);
|
|
2460
2460
|
return yield this._getPrices(_n2, _n1);
|
|
@@ -2463,7 +2463,7 @@ export class LendMarketTemplate {
|
|
|
2463
2463
|
leverageBorrowMoreHealth(userCollateral_1, userBorrowed_1, dDebt_1) {
|
|
2464
2464
|
return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, dDebt, full = true, address = "") {
|
|
2465
2465
|
this._checkLeverageZap();
|
|
2466
|
-
address = _getAddress(address);
|
|
2466
|
+
address = _getAddress.call(this.llamalend, address);
|
|
2467
2467
|
return yield this._leverageHealth(userCollateral, userBorrowed, dDebt, -1, full, address);
|
|
2468
2468
|
});
|
|
2469
2469
|
}
|
|
@@ -2485,14 +2485,14 @@ export class LendMarketTemplate {
|
|
|
2485
2485
|
const swapData = this._getSwapDataFromCache(this.addresses.borrowed_token, _debt + _userBorrowed);
|
|
2486
2486
|
if (slippage !== swapData.slippage)
|
|
2487
2487
|
throw Error(`You must call leverage.borrowMoreExpectedCollateral() with slippage=${slippage} first`);
|
|
2488
|
-
const calldata = yield _assembleTxOdos(swapData.pathId);
|
|
2489
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
2490
|
-
const gas = yield contract.borrow_more_extended.estimateGas(_userCollateral, _debt, llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userBorrowed], calldata, Object.assign({}, llamalend.constantOptions));
|
|
2488
|
+
const calldata = yield _assembleTxOdos.call(this.llamalend, swapData.pathId);
|
|
2489
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
2490
|
+
const gas = yield contract.borrow_more_extended.estimateGas(_userCollateral, _debt, this.llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userBorrowed], calldata, Object.assign({}, this.llamalend.constantOptions));
|
|
2491
2491
|
if (estimateGas)
|
|
2492
2492
|
return smartNumber(gas);
|
|
2493
|
-
yield llamalend.updateFeeData();
|
|
2493
|
+
yield this.llamalend.updateFeeData();
|
|
2494
2494
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
2495
|
-
return (yield contract.borrow_more_extended(_userCollateral, _debt, llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userBorrowed], calldata, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
2495
|
+
return (yield contract.borrow_more_extended(_userCollateral, _debt, this.llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userBorrowed], calldata, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
2496
2496
|
});
|
|
2497
2497
|
}
|
|
2498
2498
|
leverageBorrowMoreEstimateGas(userCollateral_1, userBorrowed_1, debt_1) {
|
|
@@ -2526,7 +2526,7 @@ export class LendMarketTemplate {
|
|
|
2526
2526
|
leverageRepayIsFull(stateCollateral_1, userCollateral_1, userBorrowed_1) {
|
|
2527
2527
|
return __awaiter(this, arguments, void 0, function* (stateCollateral, userCollateral, userBorrowed, address = "") {
|
|
2528
2528
|
this._checkLeverageZap();
|
|
2529
|
-
address = _getAddress(address);
|
|
2529
|
+
address = _getAddress.call(this.llamalend, address);
|
|
2530
2530
|
const { _borrowed: _stateBorrowed, _debt } = yield this._userState(address);
|
|
2531
2531
|
const { _totalBorrowed } = this._leverageRepayExpectedBorrowed(stateCollateral, userCollateral, userBorrowed);
|
|
2532
2532
|
return _stateBorrowed + _totalBorrowed > _debt;
|
|
@@ -2539,7 +2539,7 @@ export class LendMarketTemplate {
|
|
|
2539
2539
|
// 2. If user is underwater (stablecoin > 0), only full repayment is available:
|
|
2540
2540
|
// await this.deleverageRepayStablecoins(deleverageCollateral) + stablecoin > debt
|
|
2541
2541
|
this._checkLeverageZap();
|
|
2542
|
-
address = _getAddress(address);
|
|
2542
|
+
address = _getAddress.call(this.llamalend, address);
|
|
2543
2543
|
const { collateral, borrowed, debt } = yield this.userState(address);
|
|
2544
2544
|
// Loan does not exist
|
|
2545
2545
|
if (BN(debt).eq(0))
|
|
@@ -2570,7 +2570,7 @@ export class LendMarketTemplate {
|
|
|
2570
2570
|
leverageRepayHealth(stateCollateral_1, userCollateral_1, userBorrowed_1) {
|
|
2571
2571
|
return __awaiter(this, arguments, void 0, function* (stateCollateral, userCollateral, userBorrowed, full = true, address = "") {
|
|
2572
2572
|
this._checkLeverageZap();
|
|
2573
|
-
address = _getAddress(address);
|
|
2573
|
+
address = _getAddress.call(this.llamalend, address);
|
|
2574
2574
|
const { _borrowed: _stateBorrowed, _debt, _N } = yield this._userState(address);
|
|
2575
2575
|
if (_stateBorrowed > BigInt(0))
|
|
2576
2576
|
return "0.0";
|
|
@@ -2581,28 +2581,28 @@ export class LendMarketTemplate {
|
|
|
2581
2581
|
const _dDebt = _totalBorrowed * BigInt(-1);
|
|
2582
2582
|
if (_debt + _dDebt <= BigInt(0))
|
|
2583
2583
|
return "0.0";
|
|
2584
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
2585
|
-
let _health = yield contract.health_calculator(address, _dCollateral, _dDebt, full, _N, llamalend.constantOptions);
|
|
2584
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
2585
|
+
let _health = yield contract.health_calculator(address, _dCollateral, _dDebt, full, _N, this.llamalend.constantOptions);
|
|
2586
2586
|
_health = _health * BigInt(100);
|
|
2587
|
-
return llamalend.formatUnits(_health);
|
|
2587
|
+
return this.llamalend.formatUnits(_health);
|
|
2588
2588
|
});
|
|
2589
2589
|
}
|
|
2590
2590
|
leverageRepayIsApproved(userCollateral, userBorrowed) {
|
|
2591
2591
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2592
2592
|
this._checkLeverageZap();
|
|
2593
|
-
return yield hasAllowance([this.collateral_token.address, this.borrowed_token.address], [userCollateral, userBorrowed], llamalend.signerAddress, llamalend.constants.ALIASES.leverage_zap);
|
|
2593
|
+
return yield hasAllowance.call(this.llamalend, [this.collateral_token.address, this.borrowed_token.address], [userCollateral, userBorrowed], this.llamalend.signerAddress, this.llamalend.constants.ALIASES.leverage_zap);
|
|
2594
2594
|
});
|
|
2595
2595
|
}
|
|
2596
2596
|
leverageRepayApproveEstimateGas(userCollateral, userBorrowed) {
|
|
2597
2597
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2598
2598
|
this._checkLeverageZap();
|
|
2599
|
-
return yield ensureAllowanceEstimateGas([this.collateral_token.address, this.borrowed_token.address], [userCollateral, userBorrowed], llamalend.constants.ALIASES.leverage_zap);
|
|
2599
|
+
return yield ensureAllowanceEstimateGas.call(this.llamalend, [this.collateral_token.address, this.borrowed_token.address], [userCollateral, userBorrowed], this.llamalend.constants.ALIASES.leverage_zap);
|
|
2600
2600
|
});
|
|
2601
2601
|
}
|
|
2602
2602
|
leverageRepayApprove(userCollateral, userBorrowed) {
|
|
2603
2603
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2604
2604
|
this._checkLeverageZap();
|
|
2605
|
-
return yield ensureAllowance([this.collateral_token.address, this.borrowed_token.address], [userCollateral, userBorrowed], llamalend.constants.ALIASES.leverage_zap);
|
|
2605
|
+
return yield ensureAllowance.call(this.llamalend, [this.collateral_token.address, this.borrowed_token.address], [userCollateral, userBorrowed], this.llamalend.constants.ALIASES.leverage_zap);
|
|
2606
2606
|
});
|
|
2607
2607
|
}
|
|
2608
2608
|
leverageRepayRouteImage(stateCollateral, userCollateral) {
|
|
@@ -2625,16 +2625,16 @@ export class LendMarketTemplate {
|
|
|
2625
2625
|
const swapData = this._getSwapDataFromCache(this.addresses.collateral_token, _stateCollateral + _userCollateral);
|
|
2626
2626
|
if (slippage !== swapData.slippage)
|
|
2627
2627
|
throw Error(`You must call leverage.repayExpectedBorrowed() with slippage=${slippage} first`);
|
|
2628
|
-
calldata = yield _assembleTxOdos(swapData.pathId);
|
|
2628
|
+
calldata = yield _assembleTxOdos.call(this.llamalend, swapData.pathId);
|
|
2629
2629
|
}
|
|
2630
2630
|
console.log('params', [0, parseUnits(this._getMarketId(), 0), _userCollateral, _userBorrowed], calldata);
|
|
2631
|
-
const contract = llamalend.contracts[this.addresses.controller].contract;
|
|
2632
|
-
const gas = yield contract.repay_extended.estimateGas(llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userCollateral, _userBorrowed], calldata);
|
|
2631
|
+
const contract = this.llamalend.contracts[this.addresses.controller].contract;
|
|
2632
|
+
const gas = yield contract.repay_extended.estimateGas(this.llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userCollateral, _userBorrowed], calldata);
|
|
2633
2633
|
if (estimateGas)
|
|
2634
2634
|
return smartNumber(gas);
|
|
2635
|
-
yield llamalend.updateFeeData();
|
|
2635
|
+
yield this.llamalend.updateFeeData();
|
|
2636
2636
|
const gasLimit = _mulBy1_3(DIGas(gas));
|
|
2637
|
-
return (yield contract.repay_extended(llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userCollateral, _userBorrowed], calldata, Object.assign(Object.assign({}, llamalend.options), { gasLimit }))).hash;
|
|
2637
|
+
return (yield contract.repay_extended(this.llamalend.constants.ALIASES.leverage_zap, [0, parseUnits(this._getMarketId(), 0), _userCollateral, _userBorrowed], calldata, Object.assign(Object.assign({}, this.llamalend.options), { gasLimit }))).hash;
|
|
2638
2638
|
});
|
|
2639
2639
|
}
|
|
2640
2640
|
leverageRepayEstimateGas(stateCollateral_1, userCollateral_1, userBorrowed_1) {
|
|
@@ -2654,9 +2654,9 @@ export class LendMarketTemplate {
|
|
|
2654
2654
|
}
|
|
2655
2655
|
currentLeverage() {
|
|
2656
2656
|
return __awaiter(this, arguments, void 0, function* (userAddress = '') {
|
|
2657
|
-
userAddress = _getAddress(userAddress);
|
|
2657
|
+
userAddress = _getAddress.call(this.llamalend, userAddress);
|
|
2658
2658
|
const [userCollateral, { collateral }] = yield Promise.all([
|
|
2659
|
-
_getUserCollateral(llamalend.constants.NETWORK_NAME, this.addresses.controller, userAddress),
|
|
2659
|
+
_getUserCollateral(this.llamalend.constants.NETWORK_NAME, this.addresses.controller, userAddress),
|
|
2660
2660
|
this.userState(userAddress),
|
|
2661
2661
|
]);
|
|
2662
2662
|
const total_deposit_from_user = userCollateral.total_deposit_from_user_precise;
|
|
@@ -2665,24 +2665,24 @@ export class LendMarketTemplate {
|
|
|
2665
2665
|
}
|
|
2666
2666
|
currentPnL() {
|
|
2667
2667
|
return __awaiter(this, arguments, void 0, function* (userAddress = '') {
|
|
2668
|
-
userAddress = _getAddress(userAddress);
|
|
2668
|
+
userAddress = _getAddress.call(this.llamalend, userAddress);
|
|
2669
2669
|
const calls = [
|
|
2670
|
-
llamalend.contracts[this.addresses.controller].multicallContract.user_state(userAddress, llamalend.constantOptions),
|
|
2671
|
-
llamalend.contracts[this.addresses.amm].multicallContract.price_oracle(userAddress),
|
|
2670
|
+
this.llamalend.contracts[this.addresses.controller].multicallContract.user_state(userAddress, this.llamalend.constantOptions),
|
|
2671
|
+
this.llamalend.contracts[this.addresses.amm].multicallContract.price_oracle(userAddress),
|
|
2672
2672
|
];
|
|
2673
|
-
const [userState, oraclePrice] = yield llamalend.multicallProvider.all(calls);
|
|
2673
|
+
const [userState, oraclePrice] = yield this.llamalend.multicallProvider.all(calls);
|
|
2674
2674
|
if (!(userState || oraclePrice)) {
|
|
2675
2675
|
throw new Error('Multicall error');
|
|
2676
2676
|
}
|
|
2677
2677
|
const debt = userState[2];
|
|
2678
|
-
const userCollateral = yield _getUserCollateral(llamalend.constants.NETWORK_NAME, this.addresses.controller, userAddress);
|
|
2678
|
+
const userCollateral = yield _getUserCollateral(this.llamalend.constants.NETWORK_NAME, this.addresses.controller, userAddress);
|
|
2679
2679
|
const totalDepositUsdValueFull = userCollateral.total_deposit_usd_value;
|
|
2680
2680
|
const totalDepositUsdValueUser = userCollateral.total_deposit_from_user_usd_value;
|
|
2681
2681
|
const totalBorrowed = userCollateral.total_borrowed;
|
|
2682
|
-
const oraclePriceFormatted = llamalend.formatUnits(oraclePrice, 18);
|
|
2683
|
-
const debtFormatted = llamalend.formatUnits(debt, 18);
|
|
2682
|
+
const oraclePriceFormatted = this.llamalend.formatUnits(oraclePrice, 18);
|
|
2683
|
+
const debtFormatted = this.llamalend.formatUnits(debt, 18);
|
|
2684
2684
|
const { _collateral: AmmCollateral, _borrowed: AmmBorrowed } = yield this._userState(userAddress);
|
|
2685
|
-
const [AmmCollateralFormatted, AmmBorrowedFormatted] = [llamalend.formatUnits(AmmCollateral, this.collateral_token.decimals), llamalend.formatUnits(AmmBorrowed, this.borrowed_token.decimals)];
|
|
2685
|
+
const [AmmCollateralFormatted, AmmBorrowedFormatted] = [this.llamalend.formatUnits(AmmCollateral, this.collateral_token.decimals), this.llamalend.formatUnits(AmmBorrowed, this.borrowed_token.decimals)];
|
|
2686
2686
|
const a = BN(AmmCollateralFormatted).times(oraclePriceFormatted);
|
|
2687
2687
|
const b = BN(totalBorrowed).minus(debtFormatted);
|
|
2688
2688
|
const currentPosition = a.plus(AmmBorrowedFormatted).plus(b);
|