impermax-sdk 1.2.60 → 1.2.62
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/config/contracts/impermax-config-manager.js +1 -1
- package/lib/config/subgraphs.js +2 -2
- package/lib/offchain/offchainPriceHelper.js +2 -0
- package/lib/offchain/query.js +247 -247
- package/package.json +1 -1
- package/lib/offchain/account/lendingPool/borrowable.d.ts +0 -14
- package/lib/offchain/account/lendingPool/borrowable.js +0 -73
- package/lib/offchain/account/lendingPool/collateral.d.ts +0 -12
- package/lib/offchain/account/lendingPool/collateral.js +0 -42
- package/lib/offchain/account/lendingVault.d.ts +0 -11
- package/lib/offchain/account/lendingVault.js +0 -38
- package/lib/offchain/account/poolToken.d.ts +0 -6
- package/lib/offchain/account/poolToken.js +0 -21
- package/lib/offchain/initializer.d.ts +0 -32
- package/lib/offchain/initializer.js +0 -627
- package/lib/offchain/lendingPool/borrowable.d.ts +0 -55
- package/lib/offchain/lendingPool/borrowable.js +0 -351
- package/lib/offchain/lendingPool/collateral.d.ts +0 -17
- package/lib/offchain/lendingPool/collateral.js +0 -72
- package/lib/offchain/lendingVault.d.ts +0 -22
- package/lib/offchain/lendingVault.js +0 -115
- package/lib/offchain/poolToken.d.ts +0 -20
- package/lib/offchain/poolToken.js +0 -120
- package/lib/offchain/priceHelper.d.ts +0 -21
- package/lib/offchain/priceHelper.js +0 -195
- package/lib/offchain/solidexHelper.d.ts +0 -16
- package/lib/offchain/solidexHelper.js +0 -58
- package/lib/offchain/types.d.ts +0 -150
- package/lib/offchain/types.js +0 -3
- package/lib/onchain/account/interactions/index.d.ts +0 -28
- package/lib/onchain/account/interactions/index.js +0 -158
- package/lib/onchain/account/interactions/lendingPool/borrowable.d.ts +0 -16
- package/lib/onchain/account/interactions/lendingPool/borrowable.js +0 -49
- package/lib/onchain/account/interactions/lendingPool/collateral.d.ts +0 -15
- package/lib/onchain/account/interactions/lendingPool/collateral.js +0 -33
- package/lib/onchain/account/interactions/lendingPool/index.d.ts +0 -41
- package/lib/onchain/account/interactions/lendingPool/index.js +0 -120
- package/lib/onchain/account/interactions/lendingVault.d.ts +0 -10
- package/lib/onchain/account/interactions/lendingVault.js +0 -12
- package/lib/onchain/account/interactions/poolToken.d.ts +0 -33
- package/lib/onchain/account/interactions/poolToken.js +0 -180
- package/lib/onchain/account/lendingPool/borrowable.d.ts +0 -29
- package/lib/onchain/account/lendingPool/borrowable.js +0 -135
- package/lib/onchain/account/lendingPool/collateral.d.ts +0 -15
- package/lib/onchain/account/lendingPool/collateral.js +0 -66
- package/lib/onchain/account/lendingVault.d.ts +0 -10
- package/lib/onchain/account/lendingVault.js +0 -35
- package/lib/onchain/account/poolToken.d.ts +0 -24
- package/lib/onchain/account/poolToken.js +0 -84
- package/lib/onchain/contractsHelper.d.ts +0 -29
- package/lib/onchain/contractsHelper.js +0 -52
- package/lib/onchain/impermaxFactory/lendingPool/borrowable.d.ts +0 -36
- package/lib/onchain/impermaxFactory/lendingPool/borrowable.js +0 -153
- package/lib/onchain/impermaxFactory/lendingPool/collateral.d.ts +0 -17
- package/lib/onchain/impermaxFactory/lendingPool/collateral.js +0 -59
- package/lib/onchain/interactions/lendingPool/borrowable.d.ts +0 -14
- package/lib/onchain/interactions/lendingPool/borrowable.js +0 -47
- package/lib/onchain/interactions/lendingPool/collateral.d.ts +0 -13
- package/lib/onchain/interactions/lendingPool/collateral.js +0 -31
- package/lib/onchain/interactions/lendingVault.d.ts +0 -8
- package/lib/onchain/interactions/lendingVault.js +0 -15
- package/lib/onchain/interactions/poolToken.d.ts +0 -31
- package/lib/onchain/interactions/poolToken.js +0 -181
- package/lib/onchain/lendingVault.d.ts +0 -17
- package/lib/onchain/lendingVault.js +0 -56
- package/lib/onchain/poolToken.d.ts +0 -32
- package/lib/onchain/poolToken.js +0 -121
- package/lib/onchain/types.d.ts +0 -45
- package/lib/onchain/types.js +0 -14
- package/lib/utils/price-from-reserves.d.ts +0 -2
- package/lib/utils/price-from-reserves.js +0 -19
|
@@ -1,180 +0,0 @@
|
|
|
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 types_1 = require("../../types");
|
|
14
|
-
const types_2 = 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 PoolToken {
|
|
37
|
-
constructor() {
|
|
38
|
-
this.getOnchain = () => this.getInteractions().account.router;
|
|
39
|
-
this.getPoolToken = () => this.accountPoolToken.poolToken;
|
|
40
|
-
}
|
|
41
|
-
send(method, onTransactionHash, value) {
|
|
42
|
-
return this.getInteractions().send(method, onTransactionHash, value);
|
|
43
|
-
}
|
|
44
|
-
//send = this.getInteractions().send;
|
|
45
|
-
getOwnerSpender() {
|
|
46
|
-
return {
|
|
47
|
-
owner: this.getAccountAddress(),
|
|
48
|
-
spender: this.getRouterContract()._address,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
isWETH() {
|
|
52
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
-
const token = yield this.getPoolToken().getToken();
|
|
54
|
-
return token._address.toLowerCase() == weths_1.WETH[this.getOnchain().network].toLowerCase();
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
getAllowance(approvalType) {
|
|
58
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
const poolToken = yield this.getPoolToken().getPoolToken();
|
|
60
|
-
const token = yield this.getPoolToken().getToken();
|
|
61
|
-
if ((yield this.isWETH()) && approvalType == types_1.ApprovalType.UNDERLYING)
|
|
62
|
-
return MAX_UINT256;
|
|
63
|
-
const { owner, spender } = this.getOwnerSpender();
|
|
64
|
-
const allowance = (approvalType == types_1.ApprovalType.POOL_TOKEN) ? yield poolToken.methods.allowance(owner, spender).call() :
|
|
65
|
-
(approvalType == types_1.ApprovalType.UNDERLYING) ? yield token.methods.allowance(owner, spender).call() :
|
|
66
|
-
(approvalType == types_1.ApprovalType.BORROW) ? yield poolToken.methods.borrowAllowance(owner, spender).call() : 0;
|
|
67
|
-
return ethers_1.BigNumber.from(allowance);
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
approve(approvalType, amount, onTransactionHash) {
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
const { spender } = this.getOwnerSpender();
|
|
73
|
-
const poolToken = yield this.getPoolToken().getPoolToken();
|
|
74
|
-
const token = yield this.getPoolToken().getToken();
|
|
75
|
-
let method;
|
|
76
|
-
if (approvalType == types_1.ApprovalType.POOL_TOKEN)
|
|
77
|
-
method = poolToken.methods.approve(spender, amount);
|
|
78
|
-
if (approvalType == types_1.ApprovalType.UNDERLYING)
|
|
79
|
-
method = token.methods.approve(spender, amount);
|
|
80
|
-
if (approvalType == types_1.ApprovalType.BORROW)
|
|
81
|
-
method = poolToken.methods.borrowApprove(spender, amount);
|
|
82
|
-
return this.send(method, onTransactionHash);
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
getPermitData(approvalType, amount, deadlineArg, callBack) {
|
|
86
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
-
if (approvalType === types_1.ApprovalType.UNDERLYING && this.getPoolToken().poolTokenType != types_2.PoolTokenType.Collateral)
|
|
88
|
-
return callBack(null);
|
|
89
|
-
const { owner, spender } = this.getOwnerSpender();
|
|
90
|
-
const poolToken = yield this.getPoolToken().getPoolToken();
|
|
91
|
-
const token = yield this.getPoolToken().getToken();
|
|
92
|
-
const contract = approvalType == types_1.ApprovalType.UNDERLYING ? token : poolToken;
|
|
93
|
-
const nonce = yield contract.methods.nonces(owner).call();
|
|
94
|
-
const name = yield contract.methods.name().call();
|
|
95
|
-
const deadline = deadlineArg ? deadlineArg : general_1.DEADLINE;
|
|
96
|
-
const data = JSON.stringify({
|
|
97
|
-
types: TYPES,
|
|
98
|
-
domain: {
|
|
99
|
-
name: name,
|
|
100
|
-
version: "1",
|
|
101
|
-
chainId: this.getOnchain().chainId,
|
|
102
|
-
verifyingContract: contract._address,
|
|
103
|
-
},
|
|
104
|
-
primaryType: approvalType == types_1.ApprovalType.BORROW ? "BorrowPermit" : "Permit",
|
|
105
|
-
message: {
|
|
106
|
-
owner: owner,
|
|
107
|
-
spender: spender,
|
|
108
|
-
value: amount.toString(),
|
|
109
|
-
nonce: ethers_1.BigNumber.from(nonce).toHexString(),
|
|
110
|
-
deadline: deadline.toNumber(),
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
this.getOnchain().web3.currentProvider.send({
|
|
114
|
-
method: "eth_signTypedData_v4",
|
|
115
|
-
params: [owner, data],
|
|
116
|
-
from: owner
|
|
117
|
-
}, (err, data) => {
|
|
118
|
-
if (err) {
|
|
119
|
-
console.error(err);
|
|
120
|
-
return callBack(null);
|
|
121
|
-
}
|
|
122
|
-
const signature = data.result.substring(2);
|
|
123
|
-
const r = "0x" + signature.substring(0, 64);
|
|
124
|
-
const s = "0x" + signature.substring(64, 128);
|
|
125
|
-
let v = parseInt(signature.substring(128, 130), 16);
|
|
126
|
-
if (v == 0 || v == 1)
|
|
127
|
-
v = v + 27;
|
|
128
|
-
//console.log(v, r, s);
|
|
129
|
-
const permitData = ethers_1.ethers.utils.defaultAbiCoder.encode(['bool', 'uint8', 'bytes32', 'bytes32'], [false, v, r, s]);
|
|
130
|
-
callBack({ permitData, deadline, amount });
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
getSendData(permitData) {
|
|
135
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
-
return {
|
|
137
|
-
router: this.getRouterContract(),
|
|
138
|
-
ptAddress: (yield this.getPoolToken().getPoolToken())._address,
|
|
139
|
-
account: this.accountPoolToken.getAccountAddress(),
|
|
140
|
-
data: permitData ? permitData.permitData : '0x',
|
|
141
|
-
deadline: permitData ? permitData.deadline : general_1.DEADLINE,
|
|
142
|
-
};
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
mintETH(amount, permitData, onTransactionHash) {
|
|
146
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
-
const { router, ptAddress, account, deadline } = yield this.getSendData(permitData);
|
|
148
|
-
return this.send(router.methods.mintETH(ptAddress, account, deadline), onTransactionHash, amount);
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
mint(amount, permitData, onTransactionHash) {
|
|
152
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
153
|
-
const { router, ptAddress, account, deadline } = yield this.getSendData(permitData);
|
|
154
|
-
return this.send(router.methods.mint(ptAddress, amount, account, deadline), onTransactionHash);
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
;
|
|
158
|
-
deposit(amount, permitData, onTransactionHash) {
|
|
159
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
160
|
-
if (yield this.isWETH()) {
|
|
161
|
-
return this.mintETH(amount, permitData, onTransactionHash);
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
return this.mint(amount, permitData, onTransactionHash);
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
withdraw(tokens, permitData, onTransactionHash) {
|
|
169
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
170
|
-
const { router, ptAddress, account, data, deadline } = yield this.getSendData(permitData);
|
|
171
|
-
if (yield this.isWETH()) {
|
|
172
|
-
return this.send(router.methods.redeemETH(ptAddress, tokens, account, deadline, data), onTransactionHash);
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
return this.send(router.methods.redeem(ptAddress, tokens, account, deadline, data), onTransactionHash);
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
exports.default = PoolToken;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { PoolTokenType } from '../../../config/types';
|
|
2
|
-
import LendingPool from './index';
|
|
3
|
-
import * as onchain from '../../index';
|
|
4
|
-
import PoolToken from '../poolToken';
|
|
5
|
-
export default class Borrowable extends PoolToken {
|
|
6
|
-
accountLendingPool: LendingPool;
|
|
7
|
-
poolToken: onchain.impermaxFactory.lendingPool.Borrowable;
|
|
8
|
-
borrowableCache: {
|
|
9
|
-
borrowed?: Promise<number>;
|
|
10
|
-
farmingShares?: Promise<number>;
|
|
11
|
-
availableFarmingReward?: Promise<number>;
|
|
12
|
-
availableRewarderReward?: Promise<number>;
|
|
13
|
-
};
|
|
14
|
-
constructor(accountLendingPool: LendingPool, poolTokenType: PoolTokenType);
|
|
15
|
-
cleanCache(): void;
|
|
16
|
-
getSupplyAPR: () => Promise<number>;
|
|
17
|
-
getBorrowRate: () => Promise<number>;
|
|
18
|
-
getAccrualTimestamp: () => Promise<number>;
|
|
19
|
-
private initializeBorrowed;
|
|
20
|
-
getBorrowed(): Promise<number>;
|
|
21
|
-
getBorrowedUSD(): Promise<number>;
|
|
22
|
-
getMaxBorrowable(): Promise<number>;
|
|
23
|
-
private initializeFarmingShares;
|
|
24
|
-
getFarmingShares(): Promise<number>;
|
|
25
|
-
private initializeAvailableFarmingReward;
|
|
26
|
-
getAvailableFarmingReward(): Promise<number>;
|
|
27
|
-
private initializeAvailableRewarderReward;
|
|
28
|
-
getAvailableRewarderReward(): Promise<number>;
|
|
29
|
-
}
|
|
@@ -1,135 +0,0 @@
|
|
|
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 types_1 = require("../../types");
|
|
16
|
-
const types_2 = require("../../../config/types");
|
|
17
|
-
const poolToken_1 = __importDefault(require("../poolToken"));
|
|
18
|
-
class Borrowable extends poolToken_1.default {
|
|
19
|
-
constructor(accountLendingPool, poolTokenType) {
|
|
20
|
-
super();
|
|
21
|
-
this.borrowableCache = {};
|
|
22
|
-
// Shortcuts
|
|
23
|
-
this.getSupplyAPR = () => __awaiter(this, void 0, void 0, function* () { return (yield this.onchainPoolToken.getOffchainPoolToken()).getSupplyAPR(); });
|
|
24
|
-
this.getBorrowRate = () => __awaiter(this, void 0, void 0, function* () { return (yield this.onchainPoolToken.getOffchainPoolToken()).getBorrowRate(); });
|
|
25
|
-
this.getAccrualTimestamp = () => __awaiter(this, void 0, void 0, function* () { return (yield this.onchainPoolToken.getOffchainPoolToken()).getAccrualTimestamp(); });
|
|
26
|
-
this.accountLendingPool = accountLendingPool;
|
|
27
|
-
this.account = accountLendingPool.account;
|
|
28
|
-
this.poolToken = accountLendingPool.lendingPool.poolTokens[poolTokenType];
|
|
29
|
-
}
|
|
30
|
-
cleanCache() {
|
|
31
|
-
super.cleanCache();
|
|
32
|
-
this.borrowableCache = {};
|
|
33
|
-
}
|
|
34
|
-
// Borrowed
|
|
35
|
-
initializeBorrowed() {
|
|
36
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
-
const borrowable = yield this.onchainPoolToken.getPoolToken();
|
|
38
|
-
const balance = yield borrowable.methods.borrowBalance(this.getAccountAddress()).call();
|
|
39
|
-
const storedAmount = yield yield this.onchainPoolToken.normalize(balance);
|
|
40
|
-
const accrualTimestamp = yield this.getAccrualTimestamp();
|
|
41
|
-
const borrowRate = yield this.getBorrowRate();
|
|
42
|
-
return storedAmount * (1 + (Date.now() / 1000 - accrualTimestamp) * borrowRate);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
getBorrowed() {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
if (!this.borrowableCache.borrowed)
|
|
48
|
-
this.borrowableCache.borrowed = this.initializeBorrowed();
|
|
49
|
-
return this.borrowableCache.borrowed;
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
getBorrowedUSD() {
|
|
53
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
const borrowed = yield this.getBorrowed();
|
|
55
|
-
const tokenPrice = yield this.getTokenPriceAccurate();
|
|
56
|
-
return borrowed * tokenPrice;
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
// Max OffchainBorrowable
|
|
60
|
-
getMaxBorrowable() {
|
|
61
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
const availableCash = yield this.onchainPoolToken.getTotalBalance();
|
|
63
|
-
const { valueCollateral, valueA, valueB } = yield this.lendingPool.getValues(types_1.NO_CHANGES);
|
|
64
|
-
const [valueBorrowed, valueOther] = this.onchainPoolToken.poolTokenType == types_2.PoolTokenType.BorrowableA ? [valueA, valueB] : [valueB, valueA];
|
|
65
|
-
const safetyMargin = (yield this.lendingPool.getSafetyMargin()) * this.getUiMargin();
|
|
66
|
-
const liquidationPenalty = yield this.lendingPool.getLiquidationPenalty();
|
|
67
|
-
const actualCollateral = valueCollateral / liquidationPenalty;
|
|
68
|
-
const totalValueBorrowable1 = (actualCollateral * Math.sqrt(safetyMargin) - valueOther) / safetyMargin;
|
|
69
|
-
const totalValueBorrowable2 = (actualCollateral / Math.sqrt(safetyMargin) - valueOther) * safetyMargin;
|
|
70
|
-
const maxValueBorrowable = Math.min(totalValueBorrowable1, totalValueBorrowable2) - valueBorrowed;
|
|
71
|
-
const price = yield this.onchainPoolToken.getMarketPriceDenomLP();
|
|
72
|
-
return Math.max(0, Math.min(availableCash, maxValueBorrowable / price));
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
// Farming Shares
|
|
76
|
-
initializeFarmingShares() {
|
|
77
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
if (!(yield this.onchainPoolToken.hasImpermaxChef()))
|
|
79
|
-
return 0;
|
|
80
|
-
return (yield this.onchainPoolToken.getImpermaxChef().methods.userInfo(yield this.onchainPoolToken.getPoolTokenAddress(), this.getAccountAddress()).call()).shares;
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
getFarmingShares() {
|
|
84
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
-
if (!this.borrowableCache.farmingShares)
|
|
86
|
-
this.borrowableCache.farmingShares = this.initializeFarmingShares();
|
|
87
|
-
return this.borrowableCache.farmingShares;
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
// Available Reward
|
|
91
|
-
initializeAvailableFarmingReward() {
|
|
92
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
if (!(yield this.onchainPoolToken.hasImpermaxChef()))
|
|
94
|
-
return 0;
|
|
95
|
-
const borrowableAddress = yield this.onchainPoolToken.getPoolTokenAddress();
|
|
96
|
-
try {
|
|
97
|
-
return (yield this.onchainPoolToken.getImpermaxChef().methods.pendingReward(borrowableAddress, this.getAccountAddress()).call()) / 1e18;
|
|
98
|
-
}
|
|
99
|
-
catch (_a) {
|
|
100
|
-
console.log("Warning: pending reward negative");
|
|
101
|
-
return 0;
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
getAvailableFarmingReward() {
|
|
106
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
-
if (!this.borrowableCache.availableFarmingReward)
|
|
108
|
-
this.borrowableCache.availableFarmingReward = this.initializeAvailableFarmingReward();
|
|
109
|
-
return this.borrowableCache.availableFarmingReward;
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
initializeAvailableRewarderReward() {
|
|
113
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
-
if (!(yield this.onchainPoolToken.hasRewarder()))
|
|
115
|
-
return 0;
|
|
116
|
-
const borrowableAddress = yield this.onchainPoolToken.getPoolTokenAddress();
|
|
117
|
-
const rewarder = yield this.onchainPoolToken.getRewarder();
|
|
118
|
-
try {
|
|
119
|
-
return (yield rewarder.methods.pendingReward(borrowableAddress, this.getAccountAddress()).call()) / 1e18;
|
|
120
|
-
}
|
|
121
|
-
catch (_a) {
|
|
122
|
-
console.log("Warning: pending reward negative");
|
|
123
|
-
return 0;
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
getAvailableRewarderReward() {
|
|
128
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
if (!this.borrowableCache.availableRewarderReward)
|
|
130
|
-
this.borrowableCache.availableRewarderReward = this.initializeAvailableRewarderReward();
|
|
131
|
-
return this.borrowableCache.availableRewarderReward;
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
exports.default = Borrowable;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import LendingPool from './index';
|
|
2
|
-
import { PoolTokenType } from '../../../config/types';
|
|
3
|
-
import * as onchain from '../../index';
|
|
4
|
-
import PoolToken from '../poolToken';
|
|
5
|
-
export default class Collateral extends PoolToken {
|
|
6
|
-
accountLendingPool: LendingPool;
|
|
7
|
-
poolToken: onchain.impermaxFactory.lendingPool.Collateral;
|
|
8
|
-
collateralCache: {};
|
|
9
|
-
constructor(accountLendingPool: LendingPool, poolTokenType: PoolTokenType);
|
|
10
|
-
cleanCache(): void;
|
|
11
|
-
fixStakedLPExchangeRate(n: Promise<number>): Promise<number>;
|
|
12
|
-
getAvailableBalanceUSD(): Promise<number>;
|
|
13
|
-
getDepositedUSD(): Promise<number>;
|
|
14
|
-
getMaxWithdrawable(): Promise<number>;
|
|
15
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
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 types_1 = require("../../types");
|
|
16
|
-
const poolToken_1 = __importDefault(require("../poolToken"));
|
|
17
|
-
class Collateral extends poolToken_1.default {
|
|
18
|
-
constructor(accountLendingPool, poolTokenType) {
|
|
19
|
-
super();
|
|
20
|
-
this.collateralCache = {};
|
|
21
|
-
this.accountLendingPool = accountLendingPool;
|
|
22
|
-
this.account = accountLendingPool.account;
|
|
23
|
-
this.poolToken = accountLendingPool.lendingPool.poolTokens[poolTokenType];
|
|
24
|
-
}
|
|
25
|
-
cleanCache() {
|
|
26
|
-
super.cleanCache();
|
|
27
|
-
this.collateralCache = {};
|
|
28
|
-
}
|
|
29
|
-
fixStakedLPExchangeRate(n) {
|
|
30
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
-
const stakedLPExchangeRate = yield this.onchainPoolToken.lendingPool.getStakedLPExchangeRate();
|
|
32
|
-
return (yield n) / stakedLPExchangeRate;
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
getAvailableBalanceUSD() {
|
|
36
|
-
const _super = Object.create(null, {
|
|
37
|
-
getAvailableBalanceUSD: { get: () => super.getAvailableBalanceUSD }
|
|
38
|
-
});
|
|
39
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
-
return this.fixStakedLPExchangeRate(_super.getAvailableBalanceUSD.call(this));
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
getDepositedUSD() {
|
|
44
|
-
const _super = Object.create(null, {
|
|
45
|
-
getDepositedUSD: { get: () => super.getDepositedUSD }
|
|
46
|
-
});
|
|
47
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
return this.fixStakedLPExchangeRate(_super.getDepositedUSD.call(this));
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
// Max Withdrawable
|
|
52
|
-
getMaxWithdrawable() {
|
|
53
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
const deposited = yield this.getDeposited();
|
|
55
|
-
const availableCash = yield this.onchainPoolToken.getTotalBalance();
|
|
56
|
-
const { valueCollateral, valueA, valueB } = yield this.lendingPool.getValues(types_1.NO_CHANGES);
|
|
57
|
-
const safetyMargin = (yield this.lendingPool.getSafetyMargin()) * this.getUiMargin();
|
|
58
|
-
const liquidationPenalty = yield this.lendingPool.getLiquidationPenalty();
|
|
59
|
-
const actualCollateral = valueCollateral / liquidationPenalty;
|
|
60
|
-
const maxWithdrawable1 = (actualCollateral - (valueA + valueB * safetyMargin) / Math.sqrt(safetyMargin)) * liquidationPenalty;
|
|
61
|
-
const maxWithdrawable2 = (actualCollateral - (valueB + valueA * safetyMargin) / Math.sqrt(safetyMargin)) * liquidationPenalty;
|
|
62
|
-
return Math.max(0, Math.min(deposited, availableCash, maxWithdrawable1, maxWithdrawable2) / this.getDust());
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
exports.default = Collateral;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import Account from "./";
|
|
2
|
-
import PoolToken from './poolToken';
|
|
3
|
-
import * as onchain from '../index';
|
|
4
|
-
export default class LendingVault extends PoolToken {
|
|
5
|
-
poolToken: onchain.LendingVault;
|
|
6
|
-
lendingVaultCache: {};
|
|
7
|
-
constructor(account: Account, lendingVault: onchain.LendingVault);
|
|
8
|
-
cleanCache(): void;
|
|
9
|
-
getMaxWithdrawable(): Promise<number>;
|
|
10
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
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
|
-
class LendingVault extends poolToken_1.default {
|
|
17
|
-
constructor(account, lendingVault) {
|
|
18
|
-
super();
|
|
19
|
-
this.lendingVaultCache = {};
|
|
20
|
-
this.account = account;
|
|
21
|
-
this.poolToken = lendingVault;
|
|
22
|
-
}
|
|
23
|
-
cleanCache() {
|
|
24
|
-
this.cache = {};
|
|
25
|
-
this.lendingVaultCache = {};
|
|
26
|
-
}
|
|
27
|
-
// OnchainInteractions
|
|
28
|
-
getMaxWithdrawable() {
|
|
29
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
-
return Math.min(yield this.getDeposited(), yield this.onchainPoolToken.getAvailableLiquidity()) / this.getDust();
|
|
31
|
-
// TODO remove dust?
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.default = LendingVault;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import Account from './';
|
|
2
|
-
import * as onchain from '../index';
|
|
3
|
-
export default abstract class PoolToken {
|
|
4
|
-
account: Account;
|
|
5
|
-
poolToken: onchain.PoolToken;
|
|
6
|
-
cache: {
|
|
7
|
-
availableBalance?: Promise<number>;
|
|
8
|
-
deposited?: Promise<number>;
|
|
9
|
-
};
|
|
10
|
-
cleanCache(): void;
|
|
11
|
-
getAccount: () => string;
|
|
12
|
-
getNetwrok: () => import("../..").Networks;
|
|
13
|
-
getEth: () => any;
|
|
14
|
-
getDust: () => number;
|
|
15
|
-
getUiMargin: () => number;
|
|
16
|
-
getTokenPriceAccurate: () => Promise<number>;
|
|
17
|
-
private initializeAvailableBalance;
|
|
18
|
-
getAvailableBalance(): Promise<number>;
|
|
19
|
-
getAvailableBalanceUSD(): Promise<number>;
|
|
20
|
-
private initializeDeposited;
|
|
21
|
-
getDeposited(): Promise<number>;
|
|
22
|
-
getDepositedUSD(): Promise<number>;
|
|
23
|
-
getMaxWithdrawable(): Promise<number>;
|
|
24
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
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 weths_1 = require("../../config/contracts/weths");
|
|
13
|
-
class PoolToken {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.cache = {};
|
|
16
|
-
// Shortcuts
|
|
17
|
-
this.getAccount = () => this.account.account;
|
|
18
|
-
this.getNetwrok = () => this.account.onchain.network;
|
|
19
|
-
this.getEth = () => this.account.onchain.web3.eth;
|
|
20
|
-
this.getDust = () => this.account.onchain.dust;
|
|
21
|
-
this.getUiMargin = () => this.account.onchain.uiMargin;
|
|
22
|
-
this.getTokenPriceAccurate = () => __awaiter(this, void 0, void 0, function* () { return (yield this.onchainPoolToken.getOffchainPoolToken()).getTokenPriceAccurate(); });
|
|
23
|
-
}
|
|
24
|
-
cleanCache() {
|
|
25
|
-
this.cache = {};
|
|
26
|
-
}
|
|
27
|
-
// Available Balance
|
|
28
|
-
initializeAvailableBalance() {
|
|
29
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
-
const token = yield this.onchainPoolToken.getToken();
|
|
31
|
-
if (token._address.toLowerCase() == weths_1.WETH[this.getNetwork()].toLowerCase()) {
|
|
32
|
-
return (yield this.getEth().getBalance(this.getAccountAddress())) / 1e18 / this.getDust();
|
|
33
|
-
}
|
|
34
|
-
const balance = yield token.methods.balanceOf(this.getAccountAddress()).call();
|
|
35
|
-
return (yield this.onchainPoolToken.normalize(balance)) / this.getDust();
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
getAvailableBalance() {
|
|
39
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
-
if (!this.cache.availableBalance)
|
|
41
|
-
this.cache.availableBalance = this.initializeAvailableBalance();
|
|
42
|
-
return this.cache.availableBalance;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
getAvailableBalanceUSD() {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
const availableBalance = yield this.getAvailableBalance();
|
|
48
|
-
const tokenPrice = yield this.getTokenPriceAccurate();
|
|
49
|
-
return availableBalance * tokenPrice;
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
// Deposited
|
|
53
|
-
initializeDeposited() {
|
|
54
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
-
const poolToken = yield this.onchainPoolToken.getPoolToken();
|
|
56
|
-
const exchangeRate = yield this.onchainPoolToken.getExchangeRate();
|
|
57
|
-
const balance = yield poolToken.methods.balanceOf(this.getAccountAddress()).call();
|
|
58
|
-
return (yield this.onchainPoolToken.normalize(balance)) * exchangeRate;
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
getDeposited() {
|
|
62
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
-
if (!this.cache.deposited)
|
|
64
|
-
this.cache.deposited = this.initializeDeposited();
|
|
65
|
-
return this.cache.deposited;
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
getDepositedUSD() {
|
|
69
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
const deposited = yield this.getDeposited();
|
|
71
|
-
const tokenPrice = yield this.getTokenPriceAccurate();
|
|
72
|
-
return deposited * tokenPrice;
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
// Max Withdrawable
|
|
76
|
-
getMaxWithdrawable() {
|
|
77
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
const deposited = yield this.getDeposited();
|
|
79
|
-
const availableCash = yield this.onchainPoolToken.getTotalBalance();
|
|
80
|
-
return Math.min(deposited, availableCash) / this.getDust();
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
exports.default = PoolToken;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Contract } from "./types";
|
|
2
|
-
import OnChain from "./index";
|
|
3
|
-
import { Address } from '../config/types';
|
|
4
|
-
export default class ContractsHelper {
|
|
5
|
-
router: OnChain;
|
|
6
|
-
impermaxChef: Contract;
|
|
7
|
-
merkleDistributorIbex: Contract;
|
|
8
|
-
merkleDistributorIbex2: Contract;
|
|
9
|
-
merkleDistributorEth: Contract;
|
|
10
|
-
claimAggregator: Contract;
|
|
11
|
-
constructor(router: OnChain);
|
|
12
|
-
newContract: (abi: any, address: Address) => any;
|
|
13
|
-
newRouter: (address: Address) => any;
|
|
14
|
-
newFactory: (address: Address) => any;
|
|
15
|
-
newSimpleUniswapOracle: (address: Address) => any;
|
|
16
|
-
newUniswapV2Pair: (address: Address) => any;
|
|
17
|
-
newUniswapV2Factory: (address: Address) => any;
|
|
18
|
-
newERC20: (address: Address) => any;
|
|
19
|
-
newCollateral: (address: Address) => any;
|
|
20
|
-
newBorrowable: (address: Address) => any;
|
|
21
|
-
newStakedLPToken: (address: Address) => any;
|
|
22
|
-
newMerkleDistributor: (address: Address) => any;
|
|
23
|
-
newFarmingPool: (address: Address) => any;
|
|
24
|
-
newClaimAggregator: (address: Address) => any;
|
|
25
|
-
newClaimable: (address: Address) => any;
|
|
26
|
-
newStakingRewards: (address: Address) => any;
|
|
27
|
-
newImpermaxChef: (address: Address) => any;
|
|
28
|
-
newLendingVault: (address: Address) => any;
|
|
29
|
-
}
|