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,23 @@
|
|
|
1
|
+
import { ethers, BigNumber } from "ethers";
|
|
2
|
+
import AccountPoolToken from "./AccountPoolToken";
|
|
3
|
+
import InteractionsLendingPool from "./InteractionsLendingPool";
|
|
4
|
+
import { ApprovalType, PermitData } from "./interfaces";
|
|
5
|
+
import { PoolTokenType } from '../config/types';
|
|
6
|
+
export default class InteractionsPoolToken {
|
|
7
|
+
interactionsLendingPool: InteractionsLendingPool;
|
|
8
|
+
accountPoolToken: AccountPoolToken;
|
|
9
|
+
constructor(interactionsLendingPool: InteractionsLendingPool, poolTokenType: PoolTokenType);
|
|
10
|
+
getImpermaxRouter: () => import(".").default;
|
|
11
|
+
getPoolToken: () => import("./PoolToken").default;
|
|
12
|
+
getRouterContract: () => any;
|
|
13
|
+
send: (method: any, onTransactionHash: Function, value?: BigNumber) => Promise<any>;
|
|
14
|
+
isWETH(): Promise<boolean>;
|
|
15
|
+
isCollateral(): boolean;
|
|
16
|
+
getAllowance(approvalType: ApprovalType): Promise<ethers.BigNumber>;
|
|
17
|
+
approve(approvalType: ApprovalType, amount: BigNumber, onTransactionHash: Function): Promise<any>;
|
|
18
|
+
getPermitData(approvalType: ApprovalType, amount: BigNumber, deadlineArg: BigNumber | null, callBack: (permitData: PermitData) => void): Promise<void>;
|
|
19
|
+
deposit(amount: BigNumber, permitData: PermitData, onTransactionHash: Function): Promise<any>;
|
|
20
|
+
withdraw(tokens: BigNumber, permitData: PermitData, onTransactionHash: Function): Promise<any>;
|
|
21
|
+
borrow(amount: BigNumber, permitData: PermitData, onTransactionHash: Function): Promise<any>;
|
|
22
|
+
repay(amount: BigNumber, onTransactionHash: Function): Promise<any>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
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
|
+
const ethers_1 = require("ethers");
|
|
13
|
+
const interfaces_1 = require("./interfaces");
|
|
14
|
+
const types_1 = require("../config/types");
|
|
15
|
+
const weths_1 = require("../config/contracts/weths");
|
|
16
|
+
const general_1 = require("../config/general");
|
|
17
|
+
const MAX_UINT256 = ethers_1.ethers.constants.MaxUint256;
|
|
18
|
+
const EIP712DOMAIN = [
|
|
19
|
+
{ name: "name", type: "string" },
|
|
20
|
+
{ name: "version", type: "string" },
|
|
21
|
+
{ name: "chainId", type: "uint256" },
|
|
22
|
+
{ name: "verifyingContract", type: "address" },
|
|
23
|
+
];
|
|
24
|
+
const PERMIT = [
|
|
25
|
+
{ name: "owner", type: "address" },
|
|
26
|
+
{ name: "spender", type: "address" },
|
|
27
|
+
{ name: "value", type: "uint256" },
|
|
28
|
+
{ name: "nonce", type: "uint256" },
|
|
29
|
+
{ name: "deadline", type: "uint256" },
|
|
30
|
+
];
|
|
31
|
+
const TYPES = {
|
|
32
|
+
EIP712Domain: EIP712DOMAIN,
|
|
33
|
+
Permit: PERMIT,
|
|
34
|
+
BorrowPermit: PERMIT,
|
|
35
|
+
};
|
|
36
|
+
class InteractionsPoolToken {
|
|
37
|
+
constructor(interactionsLendingPool, poolTokenType) {
|
|
38
|
+
// Shortcuts
|
|
39
|
+
this.getImpermaxRouter = () => this.interactionsLendingPool.interactions.account.router;
|
|
40
|
+
this.getPoolToken = () => this.accountPoolToken.poolToken;
|
|
41
|
+
this.getRouterContract = () => this.interactionsLendingPool.accountLendingPool.lendingPool.factory.getRouter();
|
|
42
|
+
this.send = (method, onTransactionHash, value) => this.interactionsLendingPool.interactions.send(method, onTransactionHash, value);
|
|
43
|
+
this.interactionsLendingPool = interactionsLendingPool;
|
|
44
|
+
this.accountPoolToken = interactionsLendingPool.accountLendingPool.accountPoolTokens[poolTokenType];
|
|
45
|
+
}
|
|
46
|
+
isWETH() {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const token = yield this.getPoolToken().getToken();
|
|
49
|
+
return token._address.toLowerCase() == weths_1.WETH[this.getImpermaxRouter().network].toLowerCase();
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
isCollateral() {
|
|
53
|
+
return this.getPoolToken().poolTokenType == types_1.PoolTokenType.Collateral;
|
|
54
|
+
}
|
|
55
|
+
getAllowance(approvalType) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
const poolToken = yield this.getPoolToken().getPoolToken();
|
|
58
|
+
const token = yield this.getPoolToken().getToken();
|
|
59
|
+
if ((yield this.isWETH()) && approvalType == interfaces_1.ApprovalType.UNDERLYING)
|
|
60
|
+
return MAX_UINT256;
|
|
61
|
+
const { owner, spender } = this.interactionsLendingPool.getOwnerSpender();
|
|
62
|
+
const allowance = (approvalType == interfaces_1.ApprovalType.POOL_TOKEN) ? yield poolToken.methods.allowance(owner, spender).call() :
|
|
63
|
+
(approvalType == interfaces_1.ApprovalType.UNDERLYING) ? yield token.methods.allowance(owner, spender).call() :
|
|
64
|
+
(approvalType == interfaces_1.ApprovalType.BORROW) ? yield poolToken.methods.borrowAllowance(owner, spender).call() : 0;
|
|
65
|
+
return ethers_1.BigNumber.from(allowance);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
approve(approvalType, amount, onTransactionHash) {
|
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
const { spender } = this.interactionsLendingPool.getOwnerSpender();
|
|
71
|
+
const poolToken = yield this.getPoolToken().getPoolToken();
|
|
72
|
+
const token = yield this.getPoolToken().getToken();
|
|
73
|
+
let method;
|
|
74
|
+
if (approvalType == interfaces_1.ApprovalType.POOL_TOKEN)
|
|
75
|
+
method = poolToken.methods.approve(spender, amount);
|
|
76
|
+
if (approvalType == interfaces_1.ApprovalType.UNDERLYING)
|
|
77
|
+
method = token.methods.approve(spender, amount);
|
|
78
|
+
if (approvalType == interfaces_1.ApprovalType.BORROW)
|
|
79
|
+
method = poolToken.methods.borrowApprove(spender, amount);
|
|
80
|
+
return this.send(method, onTransactionHash);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
getPermitData(approvalType, amount, deadlineArg, callBack) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
if (approvalType === interfaces_1.ApprovalType.UNDERLYING && this.getPoolToken().poolTokenType != types_1.PoolTokenType.Collateral)
|
|
86
|
+
return callBack(null);
|
|
87
|
+
const { owner, spender } = this.interactionsLendingPool.getOwnerSpender();
|
|
88
|
+
const poolToken = yield this.getPoolToken().getPoolToken();
|
|
89
|
+
const token = yield this.getPoolToken().getToken();
|
|
90
|
+
const contract = approvalType == interfaces_1.ApprovalType.UNDERLYING ? token : poolToken;
|
|
91
|
+
const nonce = yield contract.methods.nonces(owner).call();
|
|
92
|
+
const name = yield contract.methods.name().call();
|
|
93
|
+
const deadline = deadlineArg ? deadlineArg : general_1.DEADLINE;
|
|
94
|
+
const data = JSON.stringify({
|
|
95
|
+
types: TYPES,
|
|
96
|
+
domain: {
|
|
97
|
+
name: name,
|
|
98
|
+
version: "1",
|
|
99
|
+
chainId: this.getImpermaxRouter().chainId,
|
|
100
|
+
verifyingContract: contract._address,
|
|
101
|
+
},
|
|
102
|
+
primaryType: approvalType == interfaces_1.ApprovalType.BORROW ? "BorrowPermit" : "Permit",
|
|
103
|
+
message: {
|
|
104
|
+
owner: owner,
|
|
105
|
+
spender: spender,
|
|
106
|
+
value: amount.toString(),
|
|
107
|
+
nonce: ethers_1.BigNumber.from(nonce).toHexString(),
|
|
108
|
+
deadline: deadline.toNumber(),
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
this.getImpermaxRouter().web3.currentProvider.send({
|
|
112
|
+
method: "eth_signTypedData_v4",
|
|
113
|
+
params: [owner, data],
|
|
114
|
+
from: owner
|
|
115
|
+
}, (err, data) => {
|
|
116
|
+
if (err) {
|
|
117
|
+
console.error(err);
|
|
118
|
+
return callBack(null);
|
|
119
|
+
}
|
|
120
|
+
const signature = data.result.substring(2);
|
|
121
|
+
const r = "0x" + signature.substring(0, 64);
|
|
122
|
+
const s = "0x" + signature.substring(64, 128);
|
|
123
|
+
let v = parseInt(signature.substring(128, 130), 16);
|
|
124
|
+
if (v == 0 || v == 1)
|
|
125
|
+
v = v + 27;
|
|
126
|
+
//console.log(v, r, s);
|
|
127
|
+
const permitData = ethers_1.ethers.utils.defaultAbiCoder.encode(['bool', 'uint8', 'bytes32', 'bytes32'], [false, v, r, s]);
|
|
128
|
+
callBack({ permitData, deadline, amount });
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
deposit(amount, permitData, onTransactionHash) {
|
|
133
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
const router = this.getRouterContract();
|
|
135
|
+
const poolToken = yield this.getPoolToken().getPoolToken();
|
|
136
|
+
const data = permitData ? permitData.permitData : '0x';
|
|
137
|
+
const deadline = permitData ? permitData.deadline : general_1.DEADLINE;
|
|
138
|
+
const account = this.accountPoolToken.getAccount();
|
|
139
|
+
if (yield this.isWETH()) {
|
|
140
|
+
return this.send(router.methods.mintETH(poolToken._address, account, deadline), onTransactionHash, amount);
|
|
141
|
+
}
|
|
142
|
+
else if (this.isCollateral()) {
|
|
143
|
+
return this.send(router.methods.mintCollateral(poolToken._address, amount, account, deadline, data), onTransactionHash);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
return this.send(router.methods.mint(poolToken._address, amount, account, deadline), onTransactionHash);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
withdraw(tokens, permitData, onTransactionHash) {
|
|
151
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
152
|
+
const router = this.getRouterContract();
|
|
153
|
+
const poolToken = yield this.getPoolToken().getPoolToken();
|
|
154
|
+
const data = permitData ? permitData.permitData : '0x';
|
|
155
|
+
const deadline = permitData ? permitData.deadline : general_1.DEADLINE;
|
|
156
|
+
const account = this.accountPoolToken.getAccount();
|
|
157
|
+
if (yield this.isWETH()) {
|
|
158
|
+
return this.send(router.methods.redeemETH(poolToken._address, tokens, account, deadline, data), onTransactionHash);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
return this.send(router.methods.redeem(poolToken._address, tokens, account, deadline, data), onTransactionHash);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
borrow(amount, permitData, onTransactionHash) {
|
|
166
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
167
|
+
const router = this.getRouterContract();
|
|
168
|
+
const borrowable = yield this.getPoolToken().getPoolToken();
|
|
169
|
+
const data = permitData ? permitData.permitData : '0x';
|
|
170
|
+
const deadline = permitData ? permitData.deadline : general_1.DEADLINE;
|
|
171
|
+
const account = this.accountPoolToken.getAccount();
|
|
172
|
+
if (yield this.isWETH()) {
|
|
173
|
+
return this.send(router.methods.borrowETH(borrowable._address, amount, account, deadline, data), onTransactionHash);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
return this.send(router.methods.borrow(borrowable._address, amount, account, deadline, data), onTransactionHash);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
repay(amount, onTransactionHash) {
|
|
181
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
182
|
+
const router = this.getRouterContract();
|
|
183
|
+
const borrowable = yield this.getPoolToken().getPoolToken();
|
|
184
|
+
const account = this.accountPoolToken.getAccount();
|
|
185
|
+
if (yield this.isWETH()) {
|
|
186
|
+
return this.send(router.methods.repayETH(borrowable._address, account, general_1.DEADLINE), onTransactionHash, amount);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
return this.send(router.methods.repay(borrowable._address, amount, account, general_1.DEADLINE), onTransactionHash);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
exports.default = InteractionsPoolToken;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { PendingRewardUI } from "./interfaces";
|
|
2
|
+
import PoolToken from "./PoolToken";
|
|
3
|
+
import ImpermaxFactory from "./ImpermaxFactory";
|
|
4
|
+
import { Contract } from "ethers";
|
|
5
|
+
import Collateral from "./Collateral";
|
|
6
|
+
import Borrowable from "./Borrowable";
|
|
7
|
+
import { Address, PoolTokenType } from '../config/types';
|
|
8
|
+
export default class LendingPool {
|
|
9
|
+
factory: ImpermaxFactory;
|
|
10
|
+
pairAddress: Address;
|
|
11
|
+
poolTokens: {
|
|
12
|
+
[PoolTokenType.Collateral]: Collateral;
|
|
13
|
+
[PoolTokenType.BorrowableA]: Borrowable;
|
|
14
|
+
[PoolTokenType.BorrowableB]: Borrowable;
|
|
15
|
+
};
|
|
16
|
+
cache: {
|
|
17
|
+
poolTokenAddresses?: Promise<{
|
|
18
|
+
[key in PoolTokenType]: Address;
|
|
19
|
+
}>;
|
|
20
|
+
isStakedLPToken?: Promise<boolean>;
|
|
21
|
+
uniswapV2Pair?: Promise<Contract>;
|
|
22
|
+
stakedLPToken?: Promise<Contract>;
|
|
23
|
+
reserves?: Promise<[number, number]>;
|
|
24
|
+
LPTotalSupply?: Promise<number>;
|
|
25
|
+
marketPrice?: Promise<number>;
|
|
26
|
+
priceDenomLP?: Promise<[number, number]>;
|
|
27
|
+
TWAPPrice?: Promise<number>;
|
|
28
|
+
pendingReward?: Promise<PendingRewardUI>;
|
|
29
|
+
reinvestBountyFactor?: Promise<number>;
|
|
30
|
+
stakedLPExchangeRate?: Promise<number>;
|
|
31
|
+
};
|
|
32
|
+
constructor(factory: ImpermaxFactory, pairAddress: Address);
|
|
33
|
+
cleanCache(): void;
|
|
34
|
+
pta: () => Borrowable;
|
|
35
|
+
ptb: () => Borrowable;
|
|
36
|
+
ptc: () => Collateral;
|
|
37
|
+
getPoolToken(poolTokenType: PoolTokenType): PoolToken;
|
|
38
|
+
getSubgraphLendingPool(): Promise<import("../subgraph/LendingPool").default>;
|
|
39
|
+
private initializePoolTokenAddresses;
|
|
40
|
+
getPoolTokenAddresses(): Promise<{
|
|
41
|
+
collateral: string;
|
|
42
|
+
borrowable0: string;
|
|
43
|
+
borrowable1: string;
|
|
44
|
+
}>;
|
|
45
|
+
private initializeIsStakedLPToken;
|
|
46
|
+
getIsStakedLPToken(): Promise<boolean>;
|
|
47
|
+
private initializeStakedLPToken;
|
|
48
|
+
getStakedLPToken(): Promise<Contract>;
|
|
49
|
+
private initializeUniswapV2Pair;
|
|
50
|
+
getUniswapV2Pair(): Promise<Contract>;
|
|
51
|
+
private initializeReserves;
|
|
52
|
+
getReserves(): Promise<[number, number]>;
|
|
53
|
+
private initializeLPTotalSupply;
|
|
54
|
+
getLPTotalSupply(): Promise<number>;
|
|
55
|
+
private initializePriceDenomLP;
|
|
56
|
+
getPriceDenomLP(): Promise<[number, number]>;
|
|
57
|
+
getMarketPriceDenomLP(): Promise<[number, number]>;
|
|
58
|
+
getMarketPrice(): Promise<number>;
|
|
59
|
+
private initializeTWAPPrice;
|
|
60
|
+
getTWAPPrice(): Promise<number>;
|
|
61
|
+
private initializeStakedLPExchangeRate;
|
|
62
|
+
getStakedLPExchangeRate(): Promise<number>;
|
|
63
|
+
private initializePendingReward;
|
|
64
|
+
getPendingReward(): Promise<PendingRewardUI>;
|
|
65
|
+
private initializeReinvestBountyFactor;
|
|
66
|
+
getReinvestBountyFactor(): Promise<number>;
|
|
67
|
+
getReinvestBounty(): Promise<number>;
|
|
68
|
+
hasFarming(): Promise<boolean>;
|
|
69
|
+
}
|
|
@@ -0,0 +1,291 @@
|
|
|
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 Collateral_1 = __importDefault(require("./Collateral"));
|
|
16
|
+
const Borrowable_1 = __importDefault(require("./Borrowable"));
|
|
17
|
+
const types_1 = require("../config/types");
|
|
18
|
+
const factories_1 = require("../config/factories");
|
|
19
|
+
class LendingPool {
|
|
20
|
+
constructor(factory, pairAddress) {
|
|
21
|
+
this.cache = {};
|
|
22
|
+
// Shortcuts
|
|
23
|
+
this.pta = () => this.poolTokens[types_1.PoolTokenType.BorrowableA];
|
|
24
|
+
this.ptb = () => this.poolTokens[types_1.PoolTokenType.BorrowableB];
|
|
25
|
+
this.ptc = () => this.poolTokens[types_1.PoolTokenType.Collateral];
|
|
26
|
+
this.factory = factory;
|
|
27
|
+
this.pairAddress = pairAddress;
|
|
28
|
+
this.poolTokens = {
|
|
29
|
+
[types_1.PoolTokenType.Collateral]: new Collateral_1.default(this, types_1.PoolTokenType.Collateral),
|
|
30
|
+
[types_1.PoolTokenType.BorrowableA]: new Borrowable_1.default(this, types_1.PoolTokenType.BorrowableA),
|
|
31
|
+
[types_1.PoolTokenType.BorrowableB]: new Borrowable_1.default(this, types_1.PoolTokenType.BorrowableB),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
cleanCache() {
|
|
35
|
+
this.cache = {};
|
|
36
|
+
this.pta().cleanCache();
|
|
37
|
+
this.ptb().cleanCache();
|
|
38
|
+
this.ptc().cleanCache();
|
|
39
|
+
}
|
|
40
|
+
getPoolToken(poolTokenType) {
|
|
41
|
+
return this.poolTokens[poolTokenType];
|
|
42
|
+
}
|
|
43
|
+
getSubgraphLendingPool() {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
return this.factory.router.subgraph.getLendingPool(this.factory.factory, this.pairAddress);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
initializePoolTokenAddresses() {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const lPool = yield this.factory.getRouter().methods.getLendingPool(this.pairAddress).call();
|
|
51
|
+
return {
|
|
52
|
+
[types_1.PoolTokenType.Collateral]: lPool.collateral,
|
|
53
|
+
[types_1.PoolTokenType.BorrowableA]: lPool.borrowableA,
|
|
54
|
+
[types_1.PoolTokenType.BorrowableB]: lPool.borrowableB,
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
getPoolTokenAddresses() {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
if (!this.cache.poolTokenAddresses)
|
|
61
|
+
this.cache.poolTokenAddresses = this.initializePoolTokenAddresses();
|
|
62
|
+
return this.cache.poolTokenAddresses;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
initializeIsStakedLPToken() {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
try {
|
|
68
|
+
return yield this.factory.getRouter().methods.isStakedLPToken(this.pairAddress).call();
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
getIsStakedLPToken() {
|
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
if (!this.cache.isStakedLPToken)
|
|
78
|
+
this.cache.isStakedLPToken = this.initializeIsStakedLPToken();
|
|
79
|
+
return this.cache.isStakedLPToken;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
initializeStakedLPToken() {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
if (!(yield this.getIsStakedLPToken()))
|
|
85
|
+
return null;
|
|
86
|
+
return this.factory.router.contractsHelper.newStakedLPToken(this.pairAddress);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
getStakedLPToken() {
|
|
90
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
if (!this.cache.stakedLPToken)
|
|
92
|
+
this.cache.stakedLPToken = this.initializeStakedLPToken();
|
|
93
|
+
return this.cache.stakedLPToken;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
initializeUniswapV2Pair() {
|
|
97
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
return this.factory.router.contractsHelper.newUniswapV2Pair((yield this.getIsStakedLPToken())
|
|
99
|
+
? yield (yield this.getStakedLPToken()).methods.underlying().call()
|
|
100
|
+
: this.pairAddress);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
getUniswapV2Pair() {
|
|
104
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
+
if (!this.cache.uniswapV2Pair)
|
|
106
|
+
this.cache.uniswapV2Pair = this.initializeUniswapV2Pair();
|
|
107
|
+
return this.cache.uniswapV2Pair;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// Reserves
|
|
111
|
+
initializeReserves() {
|
|
112
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
const uniswapV2Pair = yield this.getUniswapV2Pair();
|
|
114
|
+
const { reserve0, reserve1 } = yield uniswapV2Pair.methods.getReserves().call();
|
|
115
|
+
return [
|
|
116
|
+
yield this.pta().normalize(reserve0),
|
|
117
|
+
yield this.ptb().normalize(reserve1),
|
|
118
|
+
];
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
getReserves() {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
if (!this.cache.reserves)
|
|
124
|
+
this.cache.reserves = this.initializeReserves();
|
|
125
|
+
return this.cache.reserves;
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
// LP Total Supply
|
|
129
|
+
initializeLPTotalSupply() {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
const uniswapV2Pair = yield this.getUniswapV2Pair();
|
|
132
|
+
const totalSupply = yield uniswapV2Pair.methods.totalSupply().call();
|
|
133
|
+
return this.ptc().normalize(totalSupply);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
getLPTotalSupply() {
|
|
137
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
138
|
+
if (!this.cache.LPTotalSupply)
|
|
139
|
+
this.cache.LPTotalSupply = this.initializeLPTotalSupply();
|
|
140
|
+
return this.cache.LPTotalSupply;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
// Price Denom LP
|
|
144
|
+
initializePriceDenomLP() {
|
|
145
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
146
|
+
const collateral = yield this.ptc().getPoolToken();
|
|
147
|
+
const { price0, price1 } = yield collateral.methods.getPrices().call();
|
|
148
|
+
const decimalsA = yield this.pta().getDecimals();
|
|
149
|
+
const decimalsB = yield this.ptb().getDecimals();
|
|
150
|
+
let stakedLPExchangeRate = yield this.getStakedLPExchangeRate();
|
|
151
|
+
return [
|
|
152
|
+
price0 / 1e18 / 1e18 * Math.pow(10, decimalsA) * stakedLPExchangeRate,
|
|
153
|
+
price1 / 1e18 / 1e18 * Math.pow(10, decimalsB) * stakedLPExchangeRate
|
|
154
|
+
];
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
getPriceDenomLP() {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
if (!this.cache.priceDenomLP)
|
|
160
|
+
this.cache.priceDenomLP = this.initializePriceDenomLP();
|
|
161
|
+
return this.cache.priceDenomLP;
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
getMarketPriceDenomLP() {
|
|
165
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
166
|
+
const [reserve0, reserve1] = yield this.getReserves();
|
|
167
|
+
const totalSupply = yield this.getLPTotalSupply();
|
|
168
|
+
return [
|
|
169
|
+
totalSupply / reserve0 / 2,
|
|
170
|
+
totalSupply / reserve1 / 2,
|
|
171
|
+
];
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// Market Price
|
|
175
|
+
getMarketPrice() {
|
|
176
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
177
|
+
const [reserve0, reserve1] = yield this.getReserves();
|
|
178
|
+
return this.factory.router.priceInverted ? 1 * reserve0 / reserve1 : 1 * reserve1 / reserve0;
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
// TWAP Price
|
|
182
|
+
initializeTWAPPrice() {
|
|
183
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
184
|
+
try {
|
|
185
|
+
let price;
|
|
186
|
+
if (factories_1.SOLIDEX_FACTORIES.includes(this.factory.factory)) {
|
|
187
|
+
const collateral = yield this.ptc().getPoolToken();
|
|
188
|
+
price = yield collateral.methods.getTwapPrice112x112().call();
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
price = (yield this.factory.getSimpleUniswapOracle().methods.getResult(this.pairAddress).call()).price;
|
|
192
|
+
}
|
|
193
|
+
const decimalsA = yield this.pta().getDecimals();
|
|
194
|
+
const decimalsB = yield this.ptb().getDecimals();
|
|
195
|
+
return price / Math.pow(2, 112) * Math.pow(10, decimalsA) / Math.pow(10, decimalsB);
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
// Oracle is not initialized yet
|
|
199
|
+
return 0;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
getTWAPPrice() {
|
|
204
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
205
|
+
if (!this.cache.TWAPPrice)
|
|
206
|
+
this.cache.TWAPPrice = this.initializeTWAPPrice();
|
|
207
|
+
return !this.factory.router.priceInverted ? (yield this.cache.TWAPPrice) : 1 / (yield this.cache.TWAPPrice);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
// Exchange rate
|
|
211
|
+
initializeStakedLPExchangeRate() {
|
|
212
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
213
|
+
if (!(yield this.getIsStakedLPToken()))
|
|
214
|
+
return 1;
|
|
215
|
+
const stakedLPToken = yield this.getStakedLPToken();
|
|
216
|
+
return (yield stakedLPToken.methods.exchangeRate().call()) / 1e18;
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
getStakedLPExchangeRate() {
|
|
220
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
221
|
+
if (!this.cache.stakedLPExchangeRate)
|
|
222
|
+
this.cache.stakedLPExchangeRate = this.initializeStakedLPExchangeRate();
|
|
223
|
+
return this.cache.stakedLPExchangeRate;
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
// Pending Reward
|
|
227
|
+
initializePendingReward() {
|
|
228
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
229
|
+
const stakedLPToken = yield this.getStakedLPToken();
|
|
230
|
+
const rewardTokenAddress = yield stakedLPToken.methods.rewardsToken().call();
|
|
231
|
+
const rewardToken = this.factory.router.contractsHelper.newERC20(rewardTokenAddress);
|
|
232
|
+
const decimals = yield rewardToken.methods.decimals().call();
|
|
233
|
+
let result = {
|
|
234
|
+
amount: 0,
|
|
235
|
+
symbol: yield rewardToken.methods.symbol().call(),
|
|
236
|
+
};
|
|
237
|
+
try {
|
|
238
|
+
const pendingReward = yield stakedLPToken.methods.getReward().call();
|
|
239
|
+
result.amount = pendingReward / Math.pow(10, decimals);
|
|
240
|
+
}
|
|
241
|
+
catch (_a) {
|
|
242
|
+
try {
|
|
243
|
+
const stakingRewardsAddress = yield stakedLPToken.methods.stakingRewards().call();
|
|
244
|
+
const stakingRewards = this.factory.router.contractsHelper.newStakingRewards(stakingRewardsAddress);
|
|
245
|
+
const earned = yield stakingRewards.methods.earned(stakedLPToken._address).call();
|
|
246
|
+
result.amount = earned / Math.pow(10, decimals);
|
|
247
|
+
}
|
|
248
|
+
catch (_b) { }
|
|
249
|
+
}
|
|
250
|
+
return result;
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
getPendingReward() {
|
|
254
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
255
|
+
if (!this.cache.pendingReward)
|
|
256
|
+
this.cache.pendingReward = this.initializePendingReward();
|
|
257
|
+
return this.cache.pendingReward;
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
// Reinvest Bounty Factor
|
|
261
|
+
initializeReinvestBountyFactor() {
|
|
262
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
263
|
+
if (!(yield this.getIsStakedLPToken()))
|
|
264
|
+
return 0;
|
|
265
|
+
const stakedLPToken = yield this.getStakedLPToken();
|
|
266
|
+
return (yield stakedLPToken.methods.REINVEST_BOUNTY().call()) / 1e18;
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
getReinvestBountyFactor() {
|
|
270
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
271
|
+
if (!this.cache.reinvestBountyFactor)
|
|
272
|
+
this.cache.reinvestBountyFactor = this.initializeReinvestBountyFactor();
|
|
273
|
+
return this.cache.reinvestBountyFactor;
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
// Reinvest Bounty
|
|
277
|
+
getReinvestBounty() {
|
|
278
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
279
|
+
const pendingReward = yield this.getPendingReward();
|
|
280
|
+
const reinvestBountyFactor = yield this.getReinvestBountyFactor();
|
|
281
|
+
return pendingReward.amount * reinvestBountyFactor;
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
// Has Farming
|
|
285
|
+
hasFarming() {
|
|
286
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
287
|
+
return (yield this.pta().hasFarming()) || (yield this.ptb().hasFarming());
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
exports.default = LendingPool;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BigNumber } from "ethers";
|
|
2
|
+
import { Contract } from "./interfaces";
|
|
3
|
+
import LendingPool from "./LendingPool";
|
|
4
|
+
import { Address, PoolTokenType } from '../config/types';
|
|
5
|
+
export default abstract class PoolToken {
|
|
6
|
+
lendingPool: LendingPool;
|
|
7
|
+
poolTokenType: PoolTokenType;
|
|
8
|
+
cache: {
|
|
9
|
+
token?: Promise<Contract>;
|
|
10
|
+
poolToken?: Promise<Contract>;
|
|
11
|
+
exchangeRate?: Promise<number>;
|
|
12
|
+
totalBalance?: Promise<number>;
|
|
13
|
+
};
|
|
14
|
+
constructor(lendingPool: LendingPool, poolTokenType: PoolTokenType);
|
|
15
|
+
cleanCache(): void;
|
|
16
|
+
getContractHelper: () => import("./ContractsHelper").default;
|
|
17
|
+
getSubgraphPoolToken(): Promise<import("../subgraph/PoolToken").default>;
|
|
18
|
+
protected getPoolTokenAddressFromLendingPool(): Promise<string>;
|
|
19
|
+
abstract initializePoolToken(): Promise<Contract>;
|
|
20
|
+
getPoolToken(): Promise<any>;
|
|
21
|
+
getPoolTokenAddress(): Promise<Address>;
|
|
22
|
+
abstract initializeToken(): Promise<Contract>;
|
|
23
|
+
getToken(): Promise<any>;
|
|
24
|
+
getTokenAddress(): Promise<any>;
|
|
25
|
+
getDecimals(): Promise<number>;
|
|
26
|
+
normalize(amount: number): Promise<number>;
|
|
27
|
+
toBigNumber(amount: number): Promise<BigNumber>;
|
|
28
|
+
toNumber(amount: BigNumber): Promise<number>;
|
|
29
|
+
toTokens(amount: number): Promise<BigNumber>;
|
|
30
|
+
fromTokens(amount: BigNumber): Promise<number>;
|
|
31
|
+
private initializeTotalBalance;
|
|
32
|
+
getTotalBalance(): Promise<number>;
|
|
33
|
+
getTotalBalanceUSD(): Promise<number>;
|
|
34
|
+
protected initializeExchangeRate(): Promise<number>;
|
|
35
|
+
getExchangeRate(): Promise<number>;
|
|
36
|
+
}
|