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.
Files changed (209) hide show
  1. package/lib/esm/abis/ImpermaxABI.d.ts +2 -0
  2. package/lib/esm/abis/ImpermaxABI.js +3 -0
  3. package/lib/esm/abis/contracts/ClaimAggregator.json +2015 -0
  4. package/lib/esm/abis/contracts/IBorrowable.json +13207 -0
  5. package/lib/esm/abis/contracts/IClaimable.json +406 -0
  6. package/lib/esm/abis/contracts/ICollateral.json +8952 -0
  7. package/lib/esm/abis/contracts/IERC20.json +2376 -0
  8. package/lib/esm/abis/contracts/IFactory.json +3660 -0
  9. package/lib/esm/abis/contracts/IFarmingPool.json +3584 -0
  10. package/lib/esm/abis/contracts/IMerkleDistributor.json +1134 -0
  11. package/lib/esm/abis/contracts/IRouter02.json +7283 -0
  12. package/lib/esm/abis/contracts/ISimpleUniswapOracle.json +1469 -0
  13. package/lib/esm/abis/contracts/IStakedLPToken.json +7309 -0
  14. package/lib/esm/abis/contracts/IStakingRewards.json +1036 -0
  15. package/lib/esm/abis/contracts/IUniswapV2Factory.json +1690 -0
  16. package/lib/esm/abis/contracts/IUniswapV2Pair.json +6761 -0
  17. package/lib/esm/abis/contracts/ImpermaxChef.json +20945 -0
  18. package/lib/esm/config/amms.d.ts +25 -0
  19. package/lib/esm/config/amms.js +196 -0
  20. package/lib/esm/config/contracts/claim-aggregators.d.ts +2 -0
  21. package/lib/esm/config/contracts/claim-aggregators.js +18 -0
  22. package/lib/esm/config/contracts/impermax-chef.d.ts +2 -0
  23. package/lib/esm/config/contracts/impermax-chef.js +18 -0
  24. package/lib/esm/config/contracts/imxes.d.ts +2 -0
  25. package/lib/esm/config/contracts/imxes.js +18 -0
  26. package/lib/esm/config/contracts/merkle-distributors.d.ts +4 -0
  27. package/lib/esm/config/contracts/merkle-distributors.js +13 -0
  28. package/lib/esm/config/contracts/routers.d.ts +2 -0
  29. package/lib/esm/config/contracts/routers.js +38 -0
  30. package/lib/esm/config/contracts/simple-uniswap-oracles.d.ts +2 -0
  31. package/lib/esm/config/contracts/simple-uniswap-oracles.js +35 -0
  32. package/lib/esm/config/contracts/weths.d.ts +2 -0
  33. package/lib/esm/config/contracts/weths.js +19 -0
  34. package/lib/esm/config/debank-ids.d.ts +2 -0
  35. package/lib/esm/config/debank-ids.js +17 -0
  36. package/lib/esm/config/endpoints/merkle-distributors.d.ts +4 -0
  37. package/lib/esm/config/endpoints/merkle-distributors.js +13 -0
  38. package/lib/esm/config/eth.d.ts +3 -0
  39. package/lib/esm/config/eth.js +32 -0
  40. package/lib/esm/config/factories.d.ts +6 -0
  41. package/lib/esm/config/factories.js +24 -0
  42. package/lib/esm/config/farms.d.ts +59 -0
  43. package/lib/esm/config/farms.js +114 -0
  44. package/lib/esm/config/general.d.ts +3 -0
  45. package/lib/esm/config/general.js +8 -0
  46. package/lib/esm/config/subgraphs.d.ts +5 -0
  47. package/lib/esm/config/subgraphs.js +68 -0
  48. package/lib/esm/config/types.d.ts +67 -0
  49. package/lib/esm/config/types.js +54 -0
  50. package/lib/esm/impermax-router/Account.d.ts +31 -0
  51. package/lib/esm/impermax-router/Account.js +154 -0
  52. package/lib/esm/impermax-router/AccountBorrowable.d.ts +22 -0
  53. package/lib/esm/impermax-router/AccountBorrowable.js +141 -0
  54. package/lib/esm/impermax-router/AccountCollateral.d.ts +11 -0
  55. package/lib/esm/impermax-router/AccountCollateral.js +63 -0
  56. package/lib/esm/impermax-router/AccountLendingPool.d.ts +57 -0
  57. package/lib/esm/impermax-router/AccountLendingPool.js +266 -0
  58. package/lib/esm/impermax-router/AccountPoolToken.d.ts +29 -0
  59. package/lib/esm/impermax-router/AccountPoolToken.js +89 -0
  60. package/lib/esm/impermax-router/Borrowable.d.ts +27 -0
  61. package/lib/esm/impermax-router/Borrowable.js +128 -0
  62. package/lib/esm/impermax-router/Collateral.d.ts +9 -0
  63. package/lib/esm/impermax-router/Collateral.js +45 -0
  64. package/lib/esm/impermax-router/ContractsHelper.d.ts +28 -0
  65. package/lib/esm/impermax-router/ContractsHelper.js +50 -0
  66. package/lib/esm/impermax-router/ImpermaxFactory.d.ts +15 -0
  67. package/lib/esm/impermax-router/ImpermaxFactory.js +42 -0
  68. package/lib/esm/impermax-router/Interactions.d.ts +16 -0
  69. package/lib/esm/impermax-router/Interactions.js +105 -0
  70. package/lib/esm/impermax-router/InteractionsLendingPool.d.ts +43 -0
  71. package/lib/esm/impermax-router/InteractionsLendingPool.js +124 -0
  72. package/lib/esm/impermax-router/InteractionsPoolToken.d.ts +23 -0
  73. package/lib/esm/impermax-router/InteractionsPoolToken.js +194 -0
  74. package/lib/esm/impermax-router/LendingPool.d.ts +69 -0
  75. package/lib/esm/impermax-router/LendingPool.js +291 -0
  76. package/lib/esm/impermax-router/PoolToken.d.ts +36 -0
  77. package/lib/esm/impermax-router/PoolToken.js +140 -0
  78. package/lib/esm/impermax-router/index.d.ts +20 -0
  79. package/lib/esm/impermax-router/index.js +34 -0
  80. package/lib/esm/impermax-router/interfaces.d.ts +218 -0
  81. package/lib/esm/impermax-router/interfaces.js +15 -0
  82. package/{index.ts → lib/esm/index.d.ts} +1 -3
  83. package/lib/esm/index.js +10 -0
  84. package/lib/esm/subgraph/Account.d.ts +18 -0
  85. package/lib/esm/subgraph/Account.js +111 -0
  86. package/lib/esm/subgraph/AccountLendingPool.d.ts +19 -0
  87. package/lib/esm/subgraph/AccountLendingPool.js +71 -0
  88. package/lib/esm/subgraph/AccountPoolToken.d.ts +14 -0
  89. package/lib/esm/subgraph/AccountPoolToken.js +75 -0
  90. package/lib/esm/subgraph/LendingPool.d.ts +38 -0
  91. package/lib/esm/subgraph/LendingPool.js +204 -0
  92. package/lib/esm/subgraph/PoolToken.d.ts +64 -0
  93. package/lib/esm/subgraph/PoolToken.js +462 -0
  94. package/lib/esm/subgraph/PriceHelper.d.ts +21 -0
  95. package/lib/esm/subgraph/PriceHelper.js +166 -0
  96. package/lib/esm/subgraph/SolidexHelper.d.ts +16 -0
  97. package/lib/esm/subgraph/SolidexHelper.js +58 -0
  98. package/lib/esm/subgraph/index.d.ts +73 -0
  99. package/lib/esm/subgraph/index.js +185 -0
  100. package/lib/esm/subgraph/initializer.d.ts +34 -0
  101. package/lib/esm/subgraph/initializer.js +517 -0
  102. package/lib/esm/subgraph/query.d.ts +10 -0
  103. package/lib/esm/subgraph/query.js +229 -0
  104. package/lib/esm/utils/ether-utils.d.ts +5 -0
  105. package/lib/esm/utils/ether-utils.js +26 -0
  106. package/lib/esm/utils/index.d.ts +3 -0
  107. package/lib/esm/utils/index.js +16 -0
  108. package/package.json +9 -3
  109. package/.idea/impermax-sdk.iml +0 -12
  110. package/.idea/misc.xml +0 -6
  111. package/.idea/modules.xml +0 -8
  112. package/.idea/workspace.xml +0 -642
  113. package/abis/ImpermaxABI.ts +0 -3
  114. package/abis/contracts/BAllowance.json +0 -4735
  115. package/abis/contracts/BDeployer.json +0 -1195
  116. package/abis/contracts/BInterestRateModel.json +0 -10796
  117. package/abis/contracts/BSetter.json +0 -6219
  118. package/abis/contracts/BStorage.json +0 -2613
  119. package/abis/contracts/Borrowable.json +0 -19937
  120. package/abis/contracts/CDeployer.json +0 -1104
  121. package/abis/contracts/CSetter.json +0 -5094
  122. package/abis/contracts/CStorage.json +0 -516
  123. package/abis/contracts/ClaimAggregator.json +0 -2015
  124. package/abis/contracts/Collateral.json +0 -21615
  125. package/abis/contracts/ERC20.json +0 -819
  126. package/abis/contracts/Factory.json +0 -21986
  127. package/abis/contracts/FarmingPool.json +0 -8601
  128. package/abis/contracts/IBDeployer.json +0 -351
  129. package/abis/contracts/IBorrowTracker.json +0 -346
  130. package/abis/contracts/IBorrowable.json +0 -13207
  131. package/abis/contracts/ICDeployer.json +0 -294
  132. package/abis/contracts/IClaimable.json +0 -406
  133. package/abis/contracts/ICollateral.json +0 -8952
  134. package/abis/contracts/IERC20.json +0 -2376
  135. package/abis/contracts/IFactory.json +0 -3660
  136. package/abis/contracts/IFarmingPool.json +0 -3584
  137. package/abis/contracts/IImpermaxCallee.json +0 -679
  138. package/abis/contracts/IMerkleDistributor.json +0 -1134
  139. package/abis/contracts/IPoolToken.json +0 -5343
  140. package/abis/contracts/IRouter01.json +0 -6891
  141. package/abis/contracts/IRouter02.json +0 -7283
  142. package/abis/contracts/ISimpleUniswapOracle.json +0 -1469
  143. package/abis/contracts/IStakedLPToken.json +0 -7309
  144. package/abis/contracts/IStakingRewards.json +0 -1036
  145. package/abis/contracts/IUniswapV2Callee.json +0 -403
  146. package/abis/contracts/IUniswapV2ERC20.json +0 -3155
  147. package/abis/contracts/IUniswapV2Factory.json +0 -1690
  148. package/abis/contracts/IUniswapV2Pair.json +0 -6761
  149. package/abis/contracts/IWETH.json +0 -561
  150. package/abis/contracts/ImpermaxChef.json +0 -20945
  151. package/abis/contracts/ImpermaxERC20.json +0 -12095
  152. package/abis/contracts/Math.json +0 -1966
  153. package/abis/contracts/MockERC20.json +0 -8884
  154. package/abis/contracts/PoolToken.json +0 -10784
  155. package/abis/contracts/Router01.json +0 -43963
  156. package/abis/contracts/SafeMath.json +0 -6828
  157. package/abis/contracts/SimpleUniswapOracle.json +0 -9640
  158. package/abis/contracts/TransferHelper.json +0 -4875
  159. package/abis/contracts/UQ112x112.json +0 -1201
  160. package/abis/contracts/UniswapV2ERC20.json +0 -10969
  161. package/abis/contracts/UniswapV2Factory.json +0 -5521
  162. package/abis/contracts/UniswapV2Library.json +0 -13789
  163. package/abis/contracts/UniswapV2Pair.json +0 -30782
  164. package/abis/contracts/WETH9.json +0 -6613
  165. package/config/amms.ts +0 -199
  166. package/config/contracts/claim-aggregators.ts +0 -16
  167. package/config/contracts/impermax-chef.ts +0 -16
  168. package/config/contracts/imxes.ts +0 -16
  169. package/config/contracts/merkle-distributors.ts +0 -13
  170. package/config/contracts/routers.ts +0 -36
  171. package/config/contracts/simple-uniswap-oracles.ts +0 -33
  172. package/config/contracts/weths.ts +0 -18
  173. package/config/debank-ids.ts +0 -15
  174. package/config/endpoints/merkle-distributors.ts +0 -13
  175. package/config/eth.ts +0 -32
  176. package/config/factories.ts +0 -26
  177. package/config/farms.ts +0 -119
  178. package/config/general.ts +0 -8
  179. package/config/subgraphs.ts +0 -69
  180. package/config/types.ts +0 -81
  181. package/impermax-router/Account.ts +0 -123
  182. package/impermax-router/AccountBorrowable.ts +0 -110
  183. package/impermax-router/AccountCollateral.ts +0 -40
  184. package/impermax-router/AccountLendingPool.ts +0 -231
  185. package/impermax-router/AccountPoolToken.ts +0 -76
  186. package/impermax-router/Borrowable.ts +0 -86
  187. package/impermax-router/Collateral.ts +0 -26
  188. package/impermax-router/ContractsHelper.ts +0 -64
  189. package/impermax-router/ImpermaxFactory.ts +0 -47
  190. package/impermax-router/Interactions.ts +0 -94
  191. package/impermax-router/InteractionsLendingPool.ts +0 -129
  192. package/impermax-router/InteractionsPoolToken.ts +0 -187
  193. package/impermax-router/LendingPool.ts +0 -256
  194. package/impermax-router/PoolToken.ts +0 -112
  195. package/impermax-router/index.ts +0 -49
  196. package/impermax-router/interfaces.ts +0 -233
  197. package/subgraph/Account.ts +0 -93
  198. package/subgraph/AccountLendingPool.ts +0 -60
  199. package/subgraph/AccountPoolToken.ts +0 -60
  200. package/subgraph/LendingPool.ts +0 -179
  201. package/subgraph/PoolToken.ts +0 -381
  202. package/subgraph/PriceHelper.ts +0 -150
  203. package/subgraph/SolidexHelper.ts +0 -54
  204. package/subgraph/index.ts +0 -166
  205. package/subgraph/initializer.ts +0 -509
  206. package/subgraph/query.ts +0 -224
  207. package/tsconfig.json +0 -16
  208. package/utils/ether-utils.ts +0 -22
  209. 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
+ }