impermax-sdk 1.0.1 → 1.0.2
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/lib/esm/abis/ImpermaxABI.d.ts +2 -0
- package/lib/esm/abis/ImpermaxABI.js +3 -0
- package/lib/esm/abis/contracts/ClaimAggregator.json +2015 -0
- package/lib/esm/abis/contracts/IBorrowable.json +13207 -0
- package/lib/esm/abis/contracts/IClaimable.json +406 -0
- package/lib/esm/abis/contracts/ICollateral.json +8952 -0
- package/lib/esm/abis/contracts/IERC20.json +2376 -0
- package/lib/esm/abis/contracts/IFactory.json +3660 -0
- package/lib/esm/abis/contracts/IFarmingPool.json +3584 -0
- package/lib/esm/abis/contracts/IMerkleDistributor.json +1134 -0
- package/lib/esm/abis/contracts/IRouter02.json +7283 -0
- package/lib/esm/abis/contracts/ISimpleUniswapOracle.json +1469 -0
- package/lib/esm/abis/contracts/IStakedLPToken.json +7309 -0
- package/lib/esm/abis/contracts/IStakingRewards.json +1036 -0
- package/lib/esm/abis/contracts/IUniswapV2Factory.json +1690 -0
- package/lib/esm/abis/contracts/IUniswapV2Pair.json +6761 -0
- package/lib/esm/abis/contracts/ImpermaxChef.json +20945 -0
- package/lib/esm/config/amms.d.ts +25 -0
- package/lib/esm/config/amms.js +196 -0
- package/lib/esm/config/contracts/claim-aggregators.d.ts +2 -0
- package/lib/esm/config/contracts/claim-aggregators.js +18 -0
- package/lib/esm/config/contracts/impermax-chef.d.ts +2 -0
- package/lib/esm/config/contracts/impermax-chef.js +18 -0
- package/lib/esm/config/contracts/imxes.d.ts +2 -0
- package/lib/esm/config/contracts/imxes.js +18 -0
- package/lib/esm/config/contracts/merkle-distributors.d.ts +4 -0
- package/lib/esm/config/contracts/merkle-distributors.js +13 -0
- package/lib/esm/config/contracts/routers.d.ts +2 -0
- package/lib/esm/config/contracts/routers.js +38 -0
- package/lib/esm/config/contracts/simple-uniswap-oracles.d.ts +2 -0
- package/lib/esm/config/contracts/simple-uniswap-oracles.js +35 -0
- package/lib/esm/config/contracts/weths.d.ts +2 -0
- package/lib/esm/config/contracts/weths.js +19 -0
- package/lib/esm/config/debank-ids.d.ts +2 -0
- package/lib/esm/config/debank-ids.js +17 -0
- package/lib/esm/config/endpoints/merkle-distributors.d.ts +4 -0
- package/lib/esm/config/endpoints/merkle-distributors.js +13 -0
- package/lib/esm/config/eth.d.ts +3 -0
- package/lib/esm/config/eth.js +32 -0
- package/lib/esm/config/factories.d.ts +6 -0
- package/lib/esm/config/factories.js +24 -0
- package/lib/esm/config/farms.d.ts +59 -0
- package/lib/esm/config/farms.js +114 -0
- package/lib/esm/config/general.d.ts +3 -0
- package/lib/esm/config/general.js +8 -0
- package/lib/esm/config/subgraphs.d.ts +5 -0
- package/lib/esm/config/subgraphs.js +68 -0
- package/lib/esm/config/types.d.ts +67 -0
- package/lib/esm/config/types.js +54 -0
- package/lib/esm/impermax-router/Account.d.ts +31 -0
- package/lib/esm/impermax-router/Account.js +154 -0
- package/lib/esm/impermax-router/AccountBorrowable.d.ts +22 -0
- package/lib/esm/impermax-router/AccountBorrowable.js +141 -0
- package/lib/esm/impermax-router/AccountCollateral.d.ts +11 -0
- package/lib/esm/impermax-router/AccountCollateral.js +63 -0
- package/lib/esm/impermax-router/AccountLendingPool.d.ts +57 -0
- package/lib/esm/impermax-router/AccountLendingPool.js +266 -0
- package/lib/esm/impermax-router/AccountPoolToken.d.ts +29 -0
- package/lib/esm/impermax-router/AccountPoolToken.js +89 -0
- package/lib/esm/impermax-router/Borrowable.d.ts +27 -0
- package/lib/esm/impermax-router/Borrowable.js +128 -0
- package/lib/esm/impermax-router/Collateral.d.ts +9 -0
- package/lib/esm/impermax-router/Collateral.js +45 -0
- package/lib/esm/impermax-router/ContractsHelper.d.ts +28 -0
- package/lib/esm/impermax-router/ContractsHelper.js +50 -0
- package/lib/esm/impermax-router/ImpermaxFactory.d.ts +15 -0
- package/lib/esm/impermax-router/ImpermaxFactory.js +42 -0
- package/lib/esm/impermax-router/Interactions.d.ts +16 -0
- package/lib/esm/impermax-router/Interactions.js +105 -0
- package/lib/esm/impermax-router/InteractionsLendingPool.d.ts +43 -0
- package/lib/esm/impermax-router/InteractionsLendingPool.js +124 -0
- package/lib/esm/impermax-router/InteractionsPoolToken.d.ts +23 -0
- package/lib/esm/impermax-router/InteractionsPoolToken.js +194 -0
- package/lib/esm/impermax-router/LendingPool.d.ts +69 -0
- package/lib/esm/impermax-router/LendingPool.js +291 -0
- package/lib/esm/impermax-router/PoolToken.d.ts +36 -0
- package/lib/esm/impermax-router/PoolToken.js +140 -0
- package/lib/esm/impermax-router/index.d.ts +20 -0
- package/lib/esm/impermax-router/index.js +34 -0
- package/lib/esm/impermax-router/interfaces.d.ts +218 -0
- package/lib/esm/impermax-router/interfaces.js +15 -0
- package/{index.ts → lib/esm/index.d.ts} +1 -3
- package/lib/esm/index.js +10 -0
- package/lib/esm/subgraph/Account.d.ts +18 -0
- package/lib/esm/subgraph/Account.js +111 -0
- package/lib/esm/subgraph/AccountLendingPool.d.ts +19 -0
- package/lib/esm/subgraph/AccountLendingPool.js +71 -0
- package/lib/esm/subgraph/AccountPoolToken.d.ts +14 -0
- package/lib/esm/subgraph/AccountPoolToken.js +75 -0
- package/lib/esm/subgraph/LendingPool.d.ts +38 -0
- package/lib/esm/subgraph/LendingPool.js +204 -0
- package/lib/esm/subgraph/PoolToken.d.ts +64 -0
- package/lib/esm/subgraph/PoolToken.js +462 -0
- package/lib/esm/subgraph/PriceHelper.d.ts +21 -0
- package/lib/esm/subgraph/PriceHelper.js +166 -0
- package/lib/esm/subgraph/SolidexHelper.d.ts +16 -0
- package/lib/esm/subgraph/SolidexHelper.js +58 -0
- package/lib/esm/subgraph/index.d.ts +73 -0
- package/lib/esm/subgraph/index.js +185 -0
- package/lib/esm/subgraph/initializer.d.ts +34 -0
- package/lib/esm/subgraph/initializer.js +517 -0
- package/lib/esm/subgraph/query.d.ts +10 -0
- package/lib/esm/subgraph/query.js +229 -0
- package/lib/esm/utils/ether-utils.d.ts +5 -0
- package/lib/esm/utils/ether-utils.js +26 -0
- package/lib/esm/utils/index.d.ts +3 -0
- package/lib/esm/utils/index.js +16 -0
- package/package.json +9 -3
- package/.idea/impermax-sdk.iml +0 -12
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/workspace.xml +0 -642
- package/abis/ImpermaxABI.ts +0 -3
- package/abis/contracts/BAllowance.json +0 -4735
- package/abis/contracts/BDeployer.json +0 -1195
- package/abis/contracts/BInterestRateModel.json +0 -10796
- package/abis/contracts/BSetter.json +0 -6219
- package/abis/contracts/BStorage.json +0 -2613
- package/abis/contracts/Borrowable.json +0 -19937
- package/abis/contracts/CDeployer.json +0 -1104
- package/abis/contracts/CSetter.json +0 -5094
- package/abis/contracts/CStorage.json +0 -516
- package/abis/contracts/ClaimAggregator.json +0 -2015
- package/abis/contracts/Collateral.json +0 -21615
- package/abis/contracts/ERC20.json +0 -819
- package/abis/contracts/Factory.json +0 -21986
- package/abis/contracts/FarmingPool.json +0 -8601
- package/abis/contracts/IBDeployer.json +0 -351
- package/abis/contracts/IBorrowTracker.json +0 -346
- package/abis/contracts/IBorrowable.json +0 -13207
- package/abis/contracts/ICDeployer.json +0 -294
- package/abis/contracts/IClaimable.json +0 -406
- package/abis/contracts/ICollateral.json +0 -8952
- package/abis/contracts/IERC20.json +0 -2376
- package/abis/contracts/IFactory.json +0 -3660
- package/abis/contracts/IFarmingPool.json +0 -3584
- package/abis/contracts/IImpermaxCallee.json +0 -679
- package/abis/contracts/IMerkleDistributor.json +0 -1134
- package/abis/contracts/IPoolToken.json +0 -5343
- package/abis/contracts/IRouter01.json +0 -6891
- package/abis/contracts/IRouter02.json +0 -7283
- package/abis/contracts/ISimpleUniswapOracle.json +0 -1469
- package/abis/contracts/IStakedLPToken.json +0 -7309
- package/abis/contracts/IStakingRewards.json +0 -1036
- package/abis/contracts/IUniswapV2Callee.json +0 -403
- package/abis/contracts/IUniswapV2ERC20.json +0 -3155
- package/abis/contracts/IUniswapV2Factory.json +0 -1690
- package/abis/contracts/IUniswapV2Pair.json +0 -6761
- package/abis/contracts/IWETH.json +0 -561
- package/abis/contracts/ImpermaxChef.json +0 -20945
- package/abis/contracts/ImpermaxERC20.json +0 -12095
- package/abis/contracts/Math.json +0 -1966
- package/abis/contracts/MockERC20.json +0 -8884
- package/abis/contracts/PoolToken.json +0 -10784
- package/abis/contracts/Router01.json +0 -43963
- package/abis/contracts/SafeMath.json +0 -6828
- package/abis/contracts/SimpleUniswapOracle.json +0 -9640
- package/abis/contracts/TransferHelper.json +0 -4875
- package/abis/contracts/UQ112x112.json +0 -1201
- package/abis/contracts/UniswapV2ERC20.json +0 -10969
- package/abis/contracts/UniswapV2Factory.json +0 -5521
- package/abis/contracts/UniswapV2Library.json +0 -13789
- package/abis/contracts/UniswapV2Pair.json +0 -30782
- package/abis/contracts/WETH9.json +0 -6613
- package/config/amms.ts +0 -199
- package/config/contracts/claim-aggregators.ts +0 -16
- package/config/contracts/impermax-chef.ts +0 -16
- package/config/contracts/imxes.ts +0 -16
- package/config/contracts/merkle-distributors.ts +0 -13
- package/config/contracts/routers.ts +0 -36
- package/config/contracts/simple-uniswap-oracles.ts +0 -33
- package/config/contracts/weths.ts +0 -18
- package/config/debank-ids.ts +0 -15
- package/config/endpoints/merkle-distributors.ts +0 -13
- package/config/eth.ts +0 -32
- package/config/factories.ts +0 -26
- package/config/farms.ts +0 -119
- package/config/general.ts +0 -8
- package/config/subgraphs.ts +0 -69
- package/config/types.ts +0 -81
- package/impermax-router/Account.ts +0 -123
- package/impermax-router/AccountBorrowable.ts +0 -110
- package/impermax-router/AccountCollateral.ts +0 -40
- package/impermax-router/AccountLendingPool.ts +0 -231
- package/impermax-router/AccountPoolToken.ts +0 -76
- package/impermax-router/Borrowable.ts +0 -86
- package/impermax-router/Collateral.ts +0 -26
- package/impermax-router/ContractsHelper.ts +0 -64
- package/impermax-router/ImpermaxFactory.ts +0 -47
- package/impermax-router/Interactions.ts +0 -94
- package/impermax-router/InteractionsLendingPool.ts +0 -129
- package/impermax-router/InteractionsPoolToken.ts +0 -187
- package/impermax-router/LendingPool.ts +0 -256
- package/impermax-router/PoolToken.ts +0 -112
- package/impermax-router/index.ts +0 -49
- package/impermax-router/interfaces.ts +0 -233
- package/subgraph/Account.ts +0 -93
- package/subgraph/AccountLendingPool.ts +0 -60
- package/subgraph/AccountPoolToken.ts +0 -60
- package/subgraph/LendingPool.ts +0 -179
- package/subgraph/PoolToken.ts +0 -381
- package/subgraph/PriceHelper.ts +0 -150
- package/subgraph/SolidexHelper.ts +0 -54
- package/subgraph/index.ts +0 -166
- package/subgraph/initializer.ts +0 -509
- package/subgraph/query.ts +0 -224
- package/tsconfig.json +0 -16
- package/utils/ether-utils.ts +0 -22
- package/utils/index.ts +0 -12
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
class AccountPoolToken {
|
|
13
|
+
constructor(accountLendingPool, poolTokenType) {
|
|
14
|
+
this.accountLendingPool = accountLendingPool;
|
|
15
|
+
this.poolToken = accountLendingPool.lendingPool.poolTokens[poolTokenType];
|
|
16
|
+
}
|
|
17
|
+
getBorrowPosition() {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
const userData = yield this.accountLendingPool.getUserData();
|
|
20
|
+
if (!userData)
|
|
21
|
+
return null;
|
|
22
|
+
const borrowPositions = userData.borrowPositions[this.poolToken.lendingPool.pairAddress];
|
|
23
|
+
if (!borrowPositions)
|
|
24
|
+
return null;
|
|
25
|
+
return borrowPositions[this.poolToken.poolTokenType];
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
getSupplyPosition() {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
const userData = yield this.accountLendingPool.getUserData();
|
|
31
|
+
if (!userData)
|
|
32
|
+
return null;
|
|
33
|
+
const supplyPositions = userData.supplyPositions[this.poolToken.lendingPool.pairAddress];
|
|
34
|
+
if (!supplyPositions)
|
|
35
|
+
return null;
|
|
36
|
+
return supplyPositions[this.poolToken.poolTokenType];
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
getBorrowedAmount() {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const borrowPosition = yield this.getBorrowPosition();
|
|
42
|
+
const borrowIndex = yield this.poolToken.getBorrowIndex();
|
|
43
|
+
if (!borrowPosition)
|
|
44
|
+
return 0;
|
|
45
|
+
const borrowBalance = parseFloat(borrowPosition.borrowBalance);
|
|
46
|
+
const userBorrowIndex = parseFloat(borrowPosition.borrowIndex);
|
|
47
|
+
return borrowBalance * borrowIndex / userBorrowIndex;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
getBorrowedValue() {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
const tokenPrice = yield this.poolToken.getTokenPriceAccurate();
|
|
53
|
+
const borrowedAmount = yield this.getBorrowedAmount();
|
|
54
|
+
return borrowedAmount * tokenPrice;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
getSuppliedAmount() {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
const supplyPosition = yield this.getSupplyPosition();
|
|
60
|
+
if (!supplyPosition)
|
|
61
|
+
return 0;
|
|
62
|
+
const exchangeRate = yield this.poolToken.getExchangeRate();
|
|
63
|
+
const supplyBalance = parseFloat(supplyPosition.balance);
|
|
64
|
+
return supplyBalance * exchangeRate;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
getSuppliedValue() {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
const tokenPrice = yield this.poolToken.getTokenPriceAccurate();
|
|
70
|
+
const suppliedAmount = yield this.getSuppliedAmount();
|
|
71
|
+
return suppliedAmount * tokenPrice;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.default = AccountPoolToken;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { LendingPoolData, LendingPoolPastData } from "../impermax-router/interfaces";
|
|
2
|
+
import Subgraph from "./index";
|
|
3
|
+
import PoolToken from "./PoolToken";
|
|
4
|
+
import { Address, Amms, Factory, PoolTokenType } from '../config/types';
|
|
5
|
+
import { Farms } from '../config/farms';
|
|
6
|
+
export default class LendingPool {
|
|
7
|
+
subgraph: Subgraph;
|
|
8
|
+
factory: Factory;
|
|
9
|
+
pairAddress: Address;
|
|
10
|
+
poolTokens: {
|
|
11
|
+
[key in PoolTokenType]?: PoolToken;
|
|
12
|
+
};
|
|
13
|
+
constructor(subgraph: Subgraph, factory: Factory, pairAddress: Address);
|
|
14
|
+
getPoolToken(poolTokenType: PoolTokenType): PoolToken;
|
|
15
|
+
getLendingPoolData(): Promise<LendingPoolData>;
|
|
16
|
+
getSafetyMargin(): Promise<number>;
|
|
17
|
+
getLiquidationIncentive(): Promise<number>;
|
|
18
|
+
getLiquidationFee(): Promise<number>;
|
|
19
|
+
getLiquidationPenalty(): Promise<number>;
|
|
20
|
+
getUniswapAPR(): Promise<number>;
|
|
21
|
+
isStakedLPToken(): Promise<boolean>;
|
|
22
|
+
getStakedLPExchangeRate(): Promise<number>;
|
|
23
|
+
getStakingRewards(): Promise<Array<{
|
|
24
|
+
APR: number;
|
|
25
|
+
symbol: string;
|
|
26
|
+
}>>;
|
|
27
|
+
getStakingAPR(): Promise<number>;
|
|
28
|
+
getShownLeverage(): Promise<number>;
|
|
29
|
+
getLendingPoolDataPast24h(): Promise<LendingPoolPastData>;
|
|
30
|
+
getLendingPoolDataPast7d(): Promise<LendingPoolPastData>;
|
|
31
|
+
getAmm(): Promise<Amms>;
|
|
32
|
+
getFarm(): Promise<Farms>;
|
|
33
|
+
private calculateCollateralPrice;
|
|
34
|
+
getCollateralPrice(fast?: boolean): Promise<number>;
|
|
35
|
+
getUnderlyingLPPrice(fast?: boolean): Promise<number>;
|
|
36
|
+
getKinkMultiplier(): 2 | 5;
|
|
37
|
+
getTotalBorrowsUSD(): Promise<number>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const PoolToken_1 = __importDefault(require("./PoolToken"));
|
|
16
|
+
const utils_1 = require("../utils");
|
|
17
|
+
const types_1 = require("../config/types");
|
|
18
|
+
const amms_1 = require("../config/amms");
|
|
19
|
+
const factories_1 = require("../config/factories");
|
|
20
|
+
const farms_1 = require("../config/farms");
|
|
21
|
+
class LendingPool {
|
|
22
|
+
constructor(subgraph, factory, pairAddress) {
|
|
23
|
+
this.subgraph = subgraph;
|
|
24
|
+
this.factory = factory;
|
|
25
|
+
this.pairAddress = pairAddress;
|
|
26
|
+
this.poolTokens = {};
|
|
27
|
+
this.poolTokens[types_1.PoolTokenType.Collateral] = new PoolToken_1.default(this, types_1.PoolTokenType.Collateral);
|
|
28
|
+
this.poolTokens[types_1.PoolTokenType.BorrowableA] = new PoolToken_1.default(this, types_1.PoolTokenType.BorrowableA);
|
|
29
|
+
this.poolTokens[types_1.PoolTokenType.BorrowableB] = new PoolToken_1.default(this, types_1.PoolTokenType.BorrowableB);
|
|
30
|
+
}
|
|
31
|
+
getPoolToken(poolTokenType) {
|
|
32
|
+
return this.poolTokens[poolTokenType];
|
|
33
|
+
}
|
|
34
|
+
// Subgraph calls
|
|
35
|
+
getLendingPoolData() {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
return this.subgraph.getLendingPoolData(this.factory, this.pairAddress);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// Safety Margin
|
|
41
|
+
getSafetyMargin() {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
44
|
+
return parseFloat(lendingPoolData[types_1.PoolTokenType.Collateral].safetyMargin);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// Liquidation Penalty
|
|
48
|
+
getLiquidationIncentive() {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
51
|
+
return parseFloat(lendingPoolData[types_1.PoolTokenType.Collateral].liquidationIncentive);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
getLiquidationFee() {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
57
|
+
const liquidationFee = lendingPoolData[types_1.PoolTokenType.Collateral].liquidationFee;
|
|
58
|
+
return liquidationFee ? parseFloat(liquidationFee) : 0;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
getLiquidationPenalty() {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
return (yield this.getLiquidationIncentive()) + (yield this.getLiquidationFee());
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Uniswap APR
|
|
67
|
+
getUniswapAPR() {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
70
|
+
return lendingPoolData.pair.uniswapAPR;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// Staking
|
|
74
|
+
isStakedLPToken() {
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
77
|
+
return lendingPoolData.pair.isStakedLPToken;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
getStakedLPExchangeRate() {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
83
|
+
return parseFloat(lendingPoolData.pair.exchangeRate);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
getStakingRewards() {
|
|
87
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
const farm = yield this.getFarm();
|
|
89
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
90
|
+
if (farm === farms_1.Farms.solidex || farm === farms_1.Farms.solidexB || farm === farms_1.Farms.solidexUSDC || farm === farms_1.Farms.solidexUSDCB) {
|
|
91
|
+
const solidexLPDetails = yield this.subgraph.solidexHelper.getSolidexLPDetails();
|
|
92
|
+
const result = solidexLPDetails[lendingPoolData.pair.uniswapV2PairAddress];
|
|
93
|
+
if (result)
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
const FINISH_DELAY = 3600 * 24 * 1;
|
|
97
|
+
const rewards = [];
|
|
98
|
+
const stakedTotalSupply = parseFloat(lendingPoolData.pair.stakedTotalSupply);
|
|
99
|
+
const underlyingLPPrice = yield this.getUnderlyingLPPrice(true);
|
|
100
|
+
for (const reward of lendingPoolData.pair.rewards) {
|
|
101
|
+
const multiplier = farm === farms_1.Farms.traderJoeV2 ? 0.5 : 1;
|
|
102
|
+
const periodFinish = parseInt(reward.periodFinish);
|
|
103
|
+
if ((new Date).getTime() / 1000 - FINISH_DELAY > periodFinish && periodFinish !== 0)
|
|
104
|
+
continue;
|
|
105
|
+
let rewardRate = parseFloat(reward.rewardRate);
|
|
106
|
+
if (farm == farms_1.Farms.traderJoeV4)
|
|
107
|
+
rewardRate = rewardRate * 0.45;
|
|
108
|
+
const rewardPrice = yield this.subgraph.priceHelper.getDebankTokenPrice(reward.rewardsToken.id);
|
|
109
|
+
rewards.push({
|
|
110
|
+
APR: (0, utils_1.toAPR)((rewardPrice * rewardRate) / (stakedTotalSupply * underlyingLPPrice) * multiplier),
|
|
111
|
+
symbol: reward.rewardsToken.symbol,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return rewards;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
getStakingAPR() {
|
|
118
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
const rewards = yield this.getStakingRewards();
|
|
120
|
+
let APR = 0;
|
|
121
|
+
for (const reward of rewards) {
|
|
122
|
+
APR += reward.APR;
|
|
123
|
+
}
|
|
124
|
+
return APR;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
//Shown Leverage
|
|
128
|
+
getShownLeverage() {
|
|
129
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
const safetyMargin = yield this.getSafetyMargin();
|
|
131
|
+
if (safetyMargin < 1.25)
|
|
132
|
+
return 20;
|
|
133
|
+
if (safetyMargin < 1.51)
|
|
134
|
+
return 10;
|
|
135
|
+
if (safetyMargin < 2.01)
|
|
136
|
+
return 5;
|
|
137
|
+
return 3;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// Past Data
|
|
141
|
+
getLendingPoolDataPast24h() {
|
|
142
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
143
|
+
return (yield this.getLendingPoolData()).past24h;
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
getLendingPoolDataPast7d() {
|
|
147
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
+
return (yield this.getLendingPoolData()).past7d;
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
// Amms and farms
|
|
152
|
+
getAmm() {
|
|
153
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
154
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
155
|
+
return (0, amms_1.getAmmByFactory)(this.subgraph.network, lendingPoolData.pair.uniswapV2Factory);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
getFarm() {
|
|
159
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
160
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
161
|
+
return (0, farms_1.getFarmByStakedLPFactory)(this.subgraph.network, lendingPoolData.pair.factory);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
// getCollateralPrice -> returns the price of the collateral, not necessarily of the underlying LP
|
|
165
|
+
calculateCollateralPrice(reserve0, reserve1, totalSupply, price0, price1) {
|
|
166
|
+
if (totalSupply === 0)
|
|
167
|
+
return 0;
|
|
168
|
+
const reserve0USD = reserve0 * price0;
|
|
169
|
+
const reserve1USD = reserve1 * price1;
|
|
170
|
+
// adjust reserves taking the latest price passed as parameters
|
|
171
|
+
const adjustedReserveUSD = Math.sqrt(reserve0USD * reserve1USD) * 2;
|
|
172
|
+
return adjustedReserveUSD / totalSupply;
|
|
173
|
+
}
|
|
174
|
+
getCollateralPrice(fast = true) {
|
|
175
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
176
|
+
const lendingPoolData = yield this.getLendingPoolData();
|
|
177
|
+
return this.calculateCollateralPrice(parseFloat(lendingPoolData.pair.reserve0), parseFloat(lendingPoolData.pair.reserve1), parseFloat(lendingPoolData.pair.totalSupply), fast ?
|
|
178
|
+
yield this.poolTokens[types_1.PoolTokenType.BorrowableA].getTokenPriceFast() :
|
|
179
|
+
yield this.poolTokens[types_1.PoolTokenType.BorrowableA].getTokenPriceAccurate(), fast ?
|
|
180
|
+
yield this.poolTokens[types_1.PoolTokenType.BorrowableB].getTokenPriceFast() :
|
|
181
|
+
yield this.poolTokens[types_1.PoolTokenType.BorrowableB].getTokenPriceAccurate());
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
getUnderlyingLPPrice(fast = true) {
|
|
185
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
186
|
+
return (yield this.getCollateralPrice(fast)) / (yield this.getStakedLPExchangeRate());
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
// Kink Multiplier
|
|
190
|
+
getKinkMultiplier() {
|
|
191
|
+
if (factories_1.OLD_KINK_MULTIPLIER_FACTORIES.includes(this.factory))
|
|
192
|
+
return 5;
|
|
193
|
+
return 2;
|
|
194
|
+
}
|
|
195
|
+
// Stats
|
|
196
|
+
getTotalBorrowsUSD() {
|
|
197
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
198
|
+
const totalBorrowsUSDA = yield this.poolTokens[types_1.PoolTokenType.BorrowableA].getTotalBorrowsUSD();
|
|
199
|
+
const totalBorrowsUSDB = yield this.poolTokens[types_1.PoolTokenType.BorrowableB].getTotalBorrowsUSD();
|
|
200
|
+
return totalBorrowsUSDA + totalBorrowsUSDB;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
exports.default = LendingPool;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { PoolTokenData, BorrowablePastData } from "../impermax-router/interfaces";
|
|
2
|
+
import LendingPool from "./LendingPool";
|
|
3
|
+
import { Address, PoolTokenType } from '../config/types';
|
|
4
|
+
export default class PoolToken {
|
|
5
|
+
lendingPool: LendingPool;
|
|
6
|
+
poolTokenType: PoolTokenType;
|
|
7
|
+
constructor(lendingPool: LendingPool, poolTokenType: PoolTokenType);
|
|
8
|
+
getPoolTokenData(): Promise<PoolTokenData>;
|
|
9
|
+
private getPoolTokenParam;
|
|
10
|
+
private getPoolTokenParamFloat;
|
|
11
|
+
private getUnderlyingParam;
|
|
12
|
+
getName(): Promise<string>;
|
|
13
|
+
getSymbol(): Promise<string>;
|
|
14
|
+
getDecimals(): Promise<number>;
|
|
15
|
+
getExchangeRate(): Promise<number>;
|
|
16
|
+
getUnderlyingAddress(): Promise<Address>;
|
|
17
|
+
getTotalBalance(): Promise<number>;
|
|
18
|
+
getTotalBalanceUSD(): Promise<number>;
|
|
19
|
+
getReserveFactor(): Promise<number>;
|
|
20
|
+
getKinkBorrowRate(): Promise<number>;
|
|
21
|
+
getKinkUtilizationRate(): Promise<number>;
|
|
22
|
+
getBorrowIndex(): Promise<number>;
|
|
23
|
+
getAccrualTimestamp(): Promise<number>;
|
|
24
|
+
getTotalBorrows(): Promise<number>;
|
|
25
|
+
getCurrentTotalBorrows(): Promise<number>;
|
|
26
|
+
getTotalBorrowsUSD(): Promise<number>;
|
|
27
|
+
getBorrowRate(): Promise<number>;
|
|
28
|
+
getBorrowAPR(): Promise<number>;
|
|
29
|
+
getNextBorrowRate(borrowAmount: number): Promise<number>;
|
|
30
|
+
getNextBorrowAPR(borrowAmount: number): Promise<number>;
|
|
31
|
+
getSupply(): Promise<number>;
|
|
32
|
+
getCurrentSupply(): Promise<number>;
|
|
33
|
+
getSupplyUSD(): Promise<number>;
|
|
34
|
+
getUtilizationRate(): Promise<number>;
|
|
35
|
+
getSupplyRate(): Promise<number>;
|
|
36
|
+
getSupplyAPR(): Promise<number>;
|
|
37
|
+
getNextSupplyRate(supplyAmount: number): Promise<number>;
|
|
38
|
+
getNextSupplyAPR(supplyAmount: number): Promise<number>;
|
|
39
|
+
getFarmingRewardsRate(): Promise<Array<{
|
|
40
|
+
rewardToken: string;
|
|
41
|
+
rewardRate: number;
|
|
42
|
+
}>>;
|
|
43
|
+
getFarmingRewards(): Promise<Array<{
|
|
44
|
+
APR: number;
|
|
45
|
+
symbol: string;
|
|
46
|
+
}>>;
|
|
47
|
+
getNextFarmingRewards(borrowAmount: number): Promise<Array<{
|
|
48
|
+
APR: number;
|
|
49
|
+
symbol: string;
|
|
50
|
+
}>>;
|
|
51
|
+
getFarmingAPR(): Promise<number>;
|
|
52
|
+
getNextFarmingAPR(borrowAmount: number): Promise<number>;
|
|
53
|
+
getPoolTokenDataPast24h(): Promise<BorrowablePastData>;
|
|
54
|
+
getPoolTokenDataPast7d(): Promise<BorrowablePastData>;
|
|
55
|
+
private getAverageBorrowAPR;
|
|
56
|
+
getAverage24hBorrowAPR(): Promise<number>;
|
|
57
|
+
getAverage7dBorrowAPR(): Promise<number>;
|
|
58
|
+
private getAverageSupplyAPR;
|
|
59
|
+
getAverage24hSupplyAPR(): Promise<number>;
|
|
60
|
+
getAverage7dSupplyAPR(): Promise<number>;
|
|
61
|
+
calculateCollateralPrice(reserve0: number, reserve1: number, totalSupply: number, price0: number, price1: number): number;
|
|
62
|
+
getTokenPriceFast(fallback?: boolean): Promise<number>;
|
|
63
|
+
getTokenPriceAccurate(): Promise<number>;
|
|
64
|
+
}
|