impermax-sdk 2.1.264 → 2.1.266
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/index.d.ts +2 -1
- package/lib/index.js +3 -1
- package/lib/offchain/lendingPool/offchainBorrowable.d.ts +2 -17
- package/lib/offchain/lendingPool/offchainBorrowable.js +13 -110
- package/lib/onchain/impermaxFactory/lendingPool/onchainBorrowable.d.ts +2 -0
- package/lib/onchain/impermaxFactory/lendingPool/onchainBorrowable.js +3 -0
- package/lib/utils/{borrowable → borrowableEntity}/index.d.ts +9 -5
- package/lib/utils/{borrowable → borrowableEntity}/index.js +19 -6
- package/package.json +1 -1
package/lib/index.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ import { MAX_TICK, MIN_TICK, formatPriceSqrtX96, uniV3TickToPrice } from "./util
|
|
|
48
48
|
import UniswapV3Position from './utils/position/uniswapV3';
|
|
49
49
|
import UniswapV2Position from './utils/position/uniswapV2';
|
|
50
50
|
import Position from './utils/position/interface';
|
|
51
|
+
import { BorrowableEntity } from './utils/borrowableEntity';
|
|
51
52
|
import OffchainLendingPoolV2 from './offchain/lendingPool/offchainLendingPoolV2';
|
|
52
53
|
import OffchainBorrowableV2 from './offchain/lendingPool/offchainBorrowableV2';
|
|
53
54
|
import OffchainCollateralV2 from './offchain/lendingPool/offchainCollateralV2';
|
|
@@ -65,4 +66,4 @@ import { OnchainNftlpUniswapV3 } from './onchain/impermaxFactory/lendingPool/nft
|
|
|
65
66
|
import OnchainNftlp from './onchain/impermaxFactory/lendingPool/nftlp';
|
|
66
67
|
import OnchainAccountNftlp from './onchain/account/lendingPool/nftlp';
|
|
67
68
|
import OffchainAccountBorrowableV3 from './offchain/account/lendingPool/offchainAccountBorrowableV3';
|
|
68
|
-
export { offchain, OffchainMultichain, Offchain, OffchainPoolToken, OffchainLendingPool, OffchainCollateral, OffchainBorrowable, OffchainLendingPoolV2, OffchainCollateralV2, OffchainBorrowableV2, OffchainLendingPoolV3, OffchainCollateralV3, OffchainBorrowableV3, OffchainNftlp, OffchainNftlpUniswapV3, OffchainVault, OffchainLeveragedVault, OffchainLendingVault, OffchainHedgedVault, OffchainConfigManager, OffchainPairConfig, OffchainProposal, OffchainMultichainAccount, OffchainAccount, OffchainAccountPoolToken, OffchainAccountLendingPool, OffchainAccountCollateral, OffchainAccountBorrowable, OffchainAccountLendingPoolV2, OffchainAccountCollateralV2, OffchainAccountBorrowableV2, OffchainAccountLendingPoolV3, OffchainAccountCollateralV3, OffchainAccountBorrowableV3, OffchainAccountNftlp, OffchainAccountNftlpUniswapV3, OffchainLeveragedPosition, OffchainAccountVault, OffchainPriceHelper, OffchainSolidexHelper, PoolTokenData, BorrowableData, CollateralData, BorrowablePastData, TokenData, RewardData, PairData, FarmingPoolData, LendingPoolPastData, LendingPoolData, CollateralPosition, SupplyPosition, BorrowPosition, UserData, TvlData, XimxData, LendingVaultData, VaultPosition, PairConfigData, ProposalData, ProposalMetadata, VaultRisk, VaultType, onchain, Onchain, OnchainImpermaxFactory, OnchainImpermaxFactoryV2, OnchainImpermaxFactoryV3, OnchainPoolToken, OnchainLendingPool, OnchainBorrowable, OnchainCollateral, OnchainLendingPoolV2, OnchainBorrowableV2, OnchainCollateralV2, OnchainLendingPoolV3, OnchainBorrowableV3, OnchainCollateralV3, OnchainNftlp, OnchainNftlpUniswapV3, OnchainLendingVault, OnchainConfigManager, OnchainProposal, OnchainPairConfig, OnchainAccount, OnchainAccountPoolToken, OnchainAccountLendingPool, OnchainAccountBorrowable, OnchainAccountCollateral, OnchainAccountLendingPoolV2, OnchainAccountBorrowableV2, OnchainAccountCollateralV2, OnchainAccountLendingPoolV3, OnchainAccountBorrowableV3, OnchainAccountCollateralV3, OnchainAccountNftlp, OnchainAccountNftlpUniswapV3, OnchainAccountLendingVault, OnchainContractsHelper, OnchainInteractions, OnchainInteractionsPoolToken, OnchainInteractionsLendingPool, OnchainInteractionsCollateral, OnchainInteractionsBorrowable, OnchainInteractionsLendingPoolV2, OnchainInteractionsCollateralV2, OnchainInteractionsBorrowableV2, OnchainInteractionsLendingPoolV3, OnchainInteractionsCollateralV3, OnchainInteractionsBorrowableV3, OnchainInteractionsNftlp, OnchainInteractionsNftlpUniswapV3, OnchainInteractionsLendingVault, OnchainInteractionsConfigManager, Contract, ApprovalType, PermitData, OnchainConfig, Changes, NO_CHANGES, Values, AirdropData, PendingRewardUI, CollateralConfig, BorrowableV2Config, BorrowableV3Config, PairConfig, CLAIM_AGGREGATOR, IMPERMAX_CHEF, IMX, IMPERMAX_FACTORY, getNetworkFactories, getFactoryByAddress, LENDING_VAULT_WATCHER, MERKLE_DISTRIBUTOR_IBEX, MERKLE_DISTRIBUTOR_IBEX_2, MERKLE_DISTRIBUTOR_ETH, ROUTER, SIMPLE_UNISWAP_ORACLE, WETH, MERKLE_URL_ETH, MERKLE_URL_IBEX, MERKLE_URL_IBEX_2, hrAmms, AMM_FACTORY, getAmmByFactory, AMM_SUBGRAPH_URLS, ADD_LIQUIDITY_URLS, AMM_LP_FEE, DEBANK_IDS, ETH_SYMBOL, ETH_NAME, SOLIDEX_FACTORIES, BORROW_FEE_FACTORIES, OLD_KINK_MULTIPLIER_FACTORIES, LIQUIDATION_FEE_FACTORIES, V2_FACTORIES, Farms, hrFarms, FarmIndex, STAKED_LP_FACTORY, getFarmByStakedLPFactory, NOT_SYNCED, DEADLINE, ZERO, APPROVE_AMOUNT, IMPERMAX_SUBGRAPH_URL, IMPERMAX_CHEF_SUBGRAPH_URL, BLOCKS_SUBGRAPH_URL, XIMX_SUBGRAPH_URL, Networks, Factory, Extension, PoolTokenType, Amms, Address, NetworkIndex, FactoryIndex, AddressIndex, NetworkFactoryIndex, LendingPoolIndex, AmmIndex, DistributorDetails, ProposalState, WhitelistState, VaultListOrderBy, VaultListParams, LendingPoolListOrderBy, LendingPoolListParams, SortDirection, LendingPoolVersion, PositionType, AccountPosition, PermitType, Permits, Permit, Borrowable, decimalToBalance, MAX_TICK, MIN_TICK, formatPriceSqrtX96, uniV3TickToPrice, isV3Factory, UniswapV3Position, UniswapV2Position, Position, };
|
|
69
|
+
export { offchain, OffchainMultichain, Offchain, OffchainPoolToken, OffchainLendingPool, OffchainCollateral, OffchainBorrowable, OffchainLendingPoolV2, OffchainCollateralV2, OffchainBorrowableV2, OffchainLendingPoolV3, OffchainCollateralV3, OffchainBorrowableV3, OffchainNftlp, OffchainNftlpUniswapV3, OffchainVault, OffchainLeveragedVault, OffchainLendingVault, OffchainHedgedVault, OffchainConfigManager, OffchainPairConfig, OffchainProposal, OffchainMultichainAccount, OffchainAccount, OffchainAccountPoolToken, OffchainAccountLendingPool, OffchainAccountCollateral, OffchainAccountBorrowable, OffchainAccountLendingPoolV2, OffchainAccountCollateralV2, OffchainAccountBorrowableV2, OffchainAccountLendingPoolV3, OffchainAccountCollateralV3, OffchainAccountBorrowableV3, OffchainAccountNftlp, OffchainAccountNftlpUniswapV3, OffchainLeveragedPosition, OffchainAccountVault, OffchainPriceHelper, OffchainSolidexHelper, PoolTokenData, BorrowableData, CollateralData, BorrowablePastData, TokenData, RewardData, PairData, FarmingPoolData, LendingPoolPastData, LendingPoolData, CollateralPosition, SupplyPosition, BorrowPosition, UserData, TvlData, XimxData, LendingVaultData, VaultPosition, PairConfigData, ProposalData, ProposalMetadata, VaultRisk, VaultType, onchain, Onchain, OnchainImpermaxFactory, OnchainImpermaxFactoryV2, OnchainImpermaxFactoryV3, OnchainPoolToken, OnchainLendingPool, OnchainBorrowable, OnchainCollateral, OnchainLendingPoolV2, OnchainBorrowableV2, OnchainCollateralV2, OnchainLendingPoolV3, OnchainBorrowableV3, OnchainCollateralV3, OnchainNftlp, OnchainNftlpUniswapV3, OnchainLendingVault, OnchainConfigManager, OnchainProposal, OnchainPairConfig, OnchainAccount, OnchainAccountPoolToken, OnchainAccountLendingPool, OnchainAccountBorrowable, OnchainAccountCollateral, OnchainAccountLendingPoolV2, OnchainAccountBorrowableV2, OnchainAccountCollateralV2, OnchainAccountLendingPoolV3, OnchainAccountBorrowableV3, OnchainAccountCollateralV3, OnchainAccountNftlp, OnchainAccountNftlpUniswapV3, OnchainAccountLendingVault, OnchainContractsHelper, OnchainInteractions, OnchainInteractionsPoolToken, OnchainInteractionsLendingPool, OnchainInteractionsCollateral, OnchainInteractionsBorrowable, OnchainInteractionsLendingPoolV2, OnchainInteractionsCollateralV2, OnchainInteractionsBorrowableV2, OnchainInteractionsLendingPoolV3, OnchainInteractionsCollateralV3, OnchainInteractionsBorrowableV3, OnchainInteractionsNftlp, OnchainInteractionsNftlpUniswapV3, OnchainInteractionsLendingVault, OnchainInteractionsConfigManager, Contract, ApprovalType, PermitData, OnchainConfig, Changes, NO_CHANGES, Values, AirdropData, PendingRewardUI, CollateralConfig, BorrowableV2Config, BorrowableV3Config, PairConfig, CLAIM_AGGREGATOR, IMPERMAX_CHEF, IMX, IMPERMAX_FACTORY, getNetworkFactories, getFactoryByAddress, LENDING_VAULT_WATCHER, MERKLE_DISTRIBUTOR_IBEX, MERKLE_DISTRIBUTOR_IBEX_2, MERKLE_DISTRIBUTOR_ETH, ROUTER, SIMPLE_UNISWAP_ORACLE, WETH, MERKLE_URL_ETH, MERKLE_URL_IBEX, MERKLE_URL_IBEX_2, hrAmms, AMM_FACTORY, getAmmByFactory, AMM_SUBGRAPH_URLS, ADD_LIQUIDITY_URLS, AMM_LP_FEE, DEBANK_IDS, ETH_SYMBOL, ETH_NAME, SOLIDEX_FACTORIES, BORROW_FEE_FACTORIES, OLD_KINK_MULTIPLIER_FACTORIES, LIQUIDATION_FEE_FACTORIES, V2_FACTORIES, Farms, hrFarms, FarmIndex, STAKED_LP_FACTORY, getFarmByStakedLPFactory, NOT_SYNCED, DEADLINE, ZERO, APPROVE_AMOUNT, IMPERMAX_SUBGRAPH_URL, IMPERMAX_CHEF_SUBGRAPH_URL, BLOCKS_SUBGRAPH_URL, XIMX_SUBGRAPH_URL, Networks, Factory, Extension, PoolTokenType, Amms, Address, NetworkIndex, FactoryIndex, AddressIndex, NetworkFactoryIndex, LendingPoolIndex, AmmIndex, DistributorDetails, ProposalState, WhitelistState, VaultListOrderBy, VaultListParams, LendingPoolListOrderBy, LendingPoolListParams, SortDirection, LendingPoolVersion, PositionType, AccountPosition, PermitType, Permits, Permit, Borrowable, decimalToBalance, MAX_TICK, MIN_TICK, formatPriceSqrtX96, uniV3TickToPrice, isV3Factory, UniswapV3Position, UniswapV2Position, Position, BorrowableEntity, };
|
package/lib/index.js
CHANGED
|
@@ -29,7 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
exports.OnchainBorrowable = exports.OnchainLendingPool = exports.OnchainPoolToken = exports.OnchainImpermaxFactoryV3 = exports.OnchainImpermaxFactoryV2 = exports.OnchainImpermaxFactory = exports.Onchain = exports.onchain = exports.VaultType = exports.VaultRisk = exports.OffchainSolidexHelper = exports.OffchainPriceHelper = exports.OffchainAccountVault = exports.OffchainLeveragedPosition = exports.OffchainAccountNftlpUniswapV3 = exports.OffchainAccountNftlp = exports.OffchainAccountBorrowableV3 = exports.OffchainAccountCollateralV3 = exports.OffchainAccountLendingPoolV3 = exports.OffchainAccountBorrowableV2 = exports.OffchainAccountCollateralV2 = exports.OffchainAccountLendingPoolV2 = exports.OffchainAccountBorrowable = exports.OffchainAccountCollateral = exports.OffchainAccountLendingPool = exports.OffchainAccountPoolToken = exports.OffchainAccount = exports.OffchainMultichainAccount = exports.OffchainProposal = exports.OffchainPairConfig = exports.OffchainConfigManager = exports.OffchainHedgedVault = exports.OffchainLendingVault = exports.OffchainLeveragedVault = exports.OffchainVault = exports.OffchainNftlpUniswapV3 = exports.OffchainNftlp = exports.OffchainBorrowableV3 = exports.OffchainCollateralV3 = exports.OffchainLendingPoolV3 = exports.OffchainBorrowableV2 = exports.OffchainCollateralV2 = exports.OffchainLendingPoolV2 = exports.OffchainBorrowable = exports.OffchainCollateral = exports.OffchainLendingPool = exports.OffchainPoolToken = exports.Offchain = exports.OffchainMultichain = exports.offchain = void 0;
|
|
30
30
|
exports.getNetworkFactories = exports.IMPERMAX_FACTORY = exports.IMX = exports.IMPERMAX_CHEF = exports.CLAIM_AGGREGATOR = exports.NO_CHANGES = exports.ApprovalType = exports.OnchainInteractionsConfigManager = exports.OnchainInteractionsLendingVault = exports.OnchainInteractionsNftlpUniswapV3 = exports.OnchainInteractionsNftlp = exports.OnchainInteractionsBorrowableV3 = exports.OnchainInteractionsCollateralV3 = exports.OnchainInteractionsLendingPoolV3 = exports.OnchainInteractionsBorrowableV2 = exports.OnchainInteractionsCollateralV2 = exports.OnchainInteractionsLendingPoolV2 = exports.OnchainInteractionsBorrowable = exports.OnchainInteractionsCollateral = exports.OnchainInteractionsLendingPool = exports.OnchainInteractionsPoolToken = exports.OnchainInteractions = exports.OnchainContractsHelper = exports.OnchainAccountLendingVault = exports.OnchainAccountNftlpUniswapV3 = exports.OnchainAccountNftlp = exports.OnchainAccountCollateralV3 = exports.OnchainAccountBorrowableV3 = exports.OnchainAccountLendingPoolV3 = exports.OnchainAccountCollateralV2 = exports.OnchainAccountBorrowableV2 = exports.OnchainAccountLendingPoolV2 = exports.OnchainAccountCollateral = exports.OnchainAccountBorrowable = exports.OnchainAccountLendingPool = exports.OnchainAccountPoolToken = exports.OnchainAccount = exports.OnchainPairConfig = exports.OnchainProposal = exports.OnchainConfigManager = exports.OnchainLendingVault = exports.OnchainNftlpUniswapV3 = exports.OnchainNftlp = exports.OnchainCollateralV3 = exports.OnchainBorrowableV3 = exports.OnchainLendingPoolV3 = exports.OnchainCollateralV2 = exports.OnchainBorrowableV2 = exports.OnchainLendingPoolV2 = exports.OnchainCollateral = void 0;
|
|
31
31
|
exports.PermitType = exports.PositionType = exports.LendingPoolVersion = exports.SortDirection = exports.LendingPoolListOrderBy = exports.VaultListOrderBy = exports.WhitelistState = exports.ProposalState = exports.Amms = exports.PoolTokenType = exports.Extension = exports.Factory = exports.Networks = exports.XIMX_SUBGRAPH_URL = exports.BLOCKS_SUBGRAPH_URL = exports.IMPERMAX_CHEF_SUBGRAPH_URL = exports.IMPERMAX_SUBGRAPH_URL = exports.APPROVE_AMOUNT = exports.ZERO = exports.DEADLINE = exports.NOT_SYNCED = exports.getFarmByStakedLPFactory = exports.STAKED_LP_FACTORY = exports.hrFarms = exports.Farms = exports.V2_FACTORIES = exports.LIQUIDATION_FEE_FACTORIES = exports.OLD_KINK_MULTIPLIER_FACTORIES = exports.BORROW_FEE_FACTORIES = exports.SOLIDEX_FACTORIES = exports.ETH_NAME = exports.ETH_SYMBOL = exports.DEBANK_IDS = exports.AMM_LP_FEE = exports.ADD_LIQUIDITY_URLS = exports.AMM_SUBGRAPH_URLS = exports.getAmmByFactory = exports.AMM_FACTORY = exports.hrAmms = exports.MERKLE_URL_IBEX_2 = exports.MERKLE_URL_IBEX = exports.MERKLE_URL_ETH = exports.WETH = exports.SIMPLE_UNISWAP_ORACLE = exports.ROUTER = exports.MERKLE_DISTRIBUTOR_ETH = exports.MERKLE_DISTRIBUTOR_IBEX_2 = exports.MERKLE_DISTRIBUTOR_IBEX = exports.LENDING_VAULT_WATCHER = exports.getFactoryByAddress = void 0;
|
|
32
|
-
exports.UniswapV2Position = exports.UniswapV3Position = exports.isV3Factory = exports.uniV3TickToPrice = exports.formatPriceSqrtX96 = exports.MIN_TICK = exports.MAX_TICK = exports.decimalToBalance = exports.Borrowable = void 0;
|
|
32
|
+
exports.BorrowableEntity = exports.UniswapV2Position = exports.UniswapV3Position = exports.isV3Factory = exports.uniV3TickToPrice = exports.formatPriceSqrtX96 = exports.MIN_TICK = exports.MAX_TICK = exports.decimalToBalance = exports.Borrowable = void 0;
|
|
33
33
|
const offchain_1 = __importStar(require("./offchain"));
|
|
34
34
|
exports.Offchain = offchain_1.default;
|
|
35
35
|
Object.defineProperty(exports, "OffchainAccount", { enumerable: true, get: function () { return offchain_1.OffchainAccount; } });
|
|
@@ -223,6 +223,8 @@ const uniswapV3_1 = __importDefault(require("./utils/position/uniswapV3"));
|
|
|
223
223
|
exports.UniswapV3Position = uniswapV3_1.default;
|
|
224
224
|
const uniswapV2_1 = __importDefault(require("./utils/position/uniswapV2"));
|
|
225
225
|
exports.UniswapV2Position = uniswapV2_1.default;
|
|
226
|
+
const borrowableEntity_1 = require("./utils/borrowableEntity");
|
|
227
|
+
Object.defineProperty(exports, "BorrowableEntity", { enumerable: true, get: function () { return borrowableEntity_1.BorrowableEntity; } });
|
|
226
228
|
const offchainLendingPoolV2_1 = __importDefault(require("./offchain/lendingPool/offchainLendingPoolV2"));
|
|
227
229
|
exports.OffchainLendingPoolV2 = offchainLendingPoolV2_1.default;
|
|
228
230
|
const offchainBorrowableV2_1 = __importDefault(require("./offchain/lendingPool/offchainBorrowableV2"));
|
|
@@ -2,9 +2,11 @@ import { BorrowablePastData, PoolTokenData } from "../offchainTypes";
|
|
|
2
2
|
import { Address, Borrowable } from "../../config/types";
|
|
3
3
|
import OffchainPoolToken from "../offchainPoolToken";
|
|
4
4
|
import OffchainLendingPool from "./offchainLendingPool";
|
|
5
|
+
import { BorrowableEntity } from "../../utils/borrowableEntity";
|
|
5
6
|
export default class OffchainBorrowable extends OffchainPoolToken {
|
|
6
7
|
protected readonly lendingPool: OffchainLendingPool;
|
|
7
8
|
protected readonly borrowable: Borrowable;
|
|
9
|
+
createBorrowableObject(lockStateChange?: boolean): Promise<BorrowableEntity>;
|
|
8
10
|
private _accrueInterest;
|
|
9
11
|
private _calculateBorrowRate;
|
|
10
12
|
constructor(lendingPool: OffchainLendingPool, borrowable: Borrowable);
|
|
@@ -25,28 +27,11 @@ export default class OffchainBorrowable extends OffchainPoolToken {
|
|
|
25
27
|
getBorrowRate(useStored?: boolean): Promise<number>;
|
|
26
28
|
getBorrowAPR(): Promise<number>;
|
|
27
29
|
getNextBorrowRate(borrowAmount: number): Promise<number>;
|
|
28
|
-
getNextBorrowAPR(borrowAmount: number): Promise<number>;
|
|
29
30
|
getSupply(): Promise<number>;
|
|
30
31
|
getSupplyUSD(): Promise<number>;
|
|
31
32
|
getUtilizationRate(): Promise<number>;
|
|
32
33
|
getSupplyRate(useStored?: boolean): Promise<number>;
|
|
33
34
|
getSupplyAPR(): Promise<number>;
|
|
34
|
-
getNextSupplyRate(supplyAmount: number): Promise<number>;
|
|
35
|
-
getNextSupplyAPR(supplyAmount: number): Promise<number>;
|
|
36
|
-
getFarmingRewardsRate(): Promise<Array<{
|
|
37
|
-
rewardToken: string;
|
|
38
|
-
rewardRate: number;
|
|
39
|
-
}>>;
|
|
40
|
-
getFarmingRewards(): Promise<Array<{
|
|
41
|
-
APR: number;
|
|
42
|
-
symbol: string;
|
|
43
|
-
}>>;
|
|
44
|
-
getNextFarmingRewards(borrowAmount: number): Promise<Array<{
|
|
45
|
-
APR: number;
|
|
46
|
-
symbol: string;
|
|
47
|
-
}>>;
|
|
48
|
-
getFarmingAPR(): Promise<number>;
|
|
49
|
-
getNextFarmingAPR(borrowAmount: number): Promise<number>;
|
|
50
35
|
getPoolTokenDataPast24h(): Promise<BorrowablePastData | undefined>;
|
|
51
36
|
getPoolTokenDataPast7d(): Promise<BorrowablePastData | undefined>;
|
|
52
37
|
private getAverageBorrowAPR;
|
|
@@ -4,9 +4,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const utils_1 = require("../../utils");
|
|
7
|
-
const imxes_1 = require("../../config/contracts/imxes");
|
|
8
7
|
const offchainPoolToken_1 = __importDefault(require("../offchainPoolToken"));
|
|
8
|
+
const borrowableEntity_1 = require("../../utils/borrowableEntity");
|
|
9
9
|
class OffchainBorrowable extends offchainPoolToken_1.default {
|
|
10
|
+
async createBorrowableObject(lockStateChange = false) {
|
|
11
|
+
const { kinkBorrowRate } = await this._calculateBorrowRate();
|
|
12
|
+
return new borrowableEntity_1.BorrowableEntity({
|
|
13
|
+
totalSupply: await this.getSupply(),
|
|
14
|
+
totalBorrows: await this.getTotalBorrows(),
|
|
15
|
+
kinkBorrowRate,
|
|
16
|
+
kinkUtilizationRate: await this.getKinkUtilizationRate(),
|
|
17
|
+
kinkMultiplier: await this.lendingPool.getKinkMultiplier(),
|
|
18
|
+
reserveFactor: await this.getReserveFactor(),
|
|
19
|
+
lockStateChange,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
10
22
|
// Simulates `accrueInterest` from `BInterestRateModel.sol`
|
|
11
23
|
async _accrueInterest() {
|
|
12
24
|
const [totalBalance, borrows, index, accrualTimestamp, borrowRate] = await Promise.all([
|
|
@@ -164,10 +176,6 @@ class OffchainBorrowable extends offchainPoolToken_1.default {
|
|
|
164
176
|
const kinkMultiplier = this.lendingPool.getKinkMultiplier();
|
|
165
177
|
return (((UR - kinkUR) / (1 - kinkUR)) * (kinkMultiplier - 1) + 1) * kinkBR;
|
|
166
178
|
}
|
|
167
|
-
async getNextBorrowAPR(borrowAmount) {
|
|
168
|
-
const borrowRate = await this.getNextBorrowRate(borrowAmount);
|
|
169
|
-
return (0, utils_1.toAPR)(borrowRate);
|
|
170
|
-
}
|
|
171
179
|
// Supply
|
|
172
180
|
async getSupply() {
|
|
173
181
|
const { totalBalance, totalBorrows } = await this._accrueInterest();
|
|
@@ -196,111 +204,6 @@ class OffchainBorrowable extends offchainPoolToken_1.default {
|
|
|
196
204
|
const supplyRate = await this.getSupplyRate();
|
|
197
205
|
return (0, utils_1.toAPR)(supplyRate);
|
|
198
206
|
}
|
|
199
|
-
async getNextSupplyRate(supplyAmount) {
|
|
200
|
-
const { totalBalance, totalBorrows } = await this._accrueInterest();
|
|
201
|
-
const supply = totalBalance + totalBorrows;
|
|
202
|
-
const UR = totalBorrows / (supply + supplyAmount);
|
|
203
|
-
const { kinkBorrowRate: kinkBR } = await this._calculateBorrowRate();
|
|
204
|
-
const kinkUR = await this.getKinkUtilizationRate();
|
|
205
|
-
const reserveFactor = await this.getReserveFactor();
|
|
206
|
-
if (UR < kinkUR)
|
|
207
|
-
return (UR / kinkUR) * kinkBR * UR * (1 - reserveFactor);
|
|
208
|
-
const kinkMultiplier = this.lendingPool.getKinkMultiplier();
|
|
209
|
-
return ((((UR - kinkUR) / (1 - kinkUR)) * (kinkMultiplier - 1) + 1) *
|
|
210
|
-
kinkBR *
|
|
211
|
-
UR *
|
|
212
|
-
(1 - reserveFactor));
|
|
213
|
-
}
|
|
214
|
-
async getNextSupplyAPR(supplyAmount) {
|
|
215
|
-
const supplyRate = await this.getNextSupplyRate(supplyAmount);
|
|
216
|
-
return (0, utils_1.toAPR)(supplyRate);
|
|
217
|
-
}
|
|
218
|
-
// Reward Speed
|
|
219
|
-
async getFarmingRewardsRate() {
|
|
220
|
-
const poolTokenData = (await this.getPoolTokenData());
|
|
221
|
-
const rewards = poolTokenData.rewards;
|
|
222
|
-
if (rewards && rewards.length > 0)
|
|
223
|
-
return rewards;
|
|
224
|
-
const FINISH_DELAY = 3600 * 24;
|
|
225
|
-
const farmingPoolData = poolTokenData.farmingPool;
|
|
226
|
-
if (farmingPoolData === null)
|
|
227
|
-
return [];
|
|
228
|
-
const segmentLength = parseInt(farmingPoolData.segmentLength);
|
|
229
|
-
const epochAmount = parseFloat(farmingPoolData.epochAmount);
|
|
230
|
-
const epochBegin = parseInt(farmingPoolData.epochBegin);
|
|
231
|
-
const epochEnd = epochBegin + segmentLength;
|
|
232
|
-
const timestamp = new Date().getTime() / 1000;
|
|
233
|
-
if (timestamp - FINISH_DELAY > epochEnd) {
|
|
234
|
-
// How to manage better this case? Maybe check shares on distributor
|
|
235
|
-
return [];
|
|
236
|
-
}
|
|
237
|
-
return [
|
|
238
|
-
{
|
|
239
|
-
rewardToken: imxes_1.IMX[this.getOffchain().network],
|
|
240
|
-
rewardRate: epochAmount / segmentLength,
|
|
241
|
-
},
|
|
242
|
-
];
|
|
243
|
-
}
|
|
244
|
-
// Farming
|
|
245
|
-
async getFarmingRewards() {
|
|
246
|
-
return this.getNextFarmingRewards(0);
|
|
247
|
-
}
|
|
248
|
-
async getNextFarmingRewards(borrowAmount) {
|
|
249
|
-
const farmingRewards = await this.getFarmingRewardsRate();
|
|
250
|
-
const currentBorrowedUSD = await this.getTotalBorrowsUSD();
|
|
251
|
-
const tokenPrice = await this.getTokenPriceFast();
|
|
252
|
-
const additionalBorrowsUSD = borrowAmount * tokenPrice;
|
|
253
|
-
const totalBorrowedUSD = currentBorrowedUSD + additionalBorrowsUSD;
|
|
254
|
-
if (totalBorrowedUSD === 0)
|
|
255
|
-
return [];
|
|
256
|
-
const rewards = [];
|
|
257
|
-
for (const reward of farmingRewards) {
|
|
258
|
-
const rewardPrice = await this.getOffchain()
|
|
259
|
-
.getPriceHelper()
|
|
260
|
-
.getDebankTokenPrice(this.getOffchain().network, reward.rewardToken);
|
|
261
|
-
rewards.push({
|
|
262
|
-
APR: (0, utils_1.toAPR)((rewardPrice * reward.rewardRate) / totalBorrowedUSD),
|
|
263
|
-
symbol: reward.rewardToken == "0x98878b06940ae243284ca214f92bb71a2b032b8a"
|
|
264
|
-
? "WMOVR"
|
|
265
|
-
: reward.rewardToken == "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"
|
|
266
|
-
? "WMATIC"
|
|
267
|
-
: reward.rewardToken ==
|
|
268
|
-
"0x6659a9c5cd313974343e30b4fdffd95bd4b4dcd2"
|
|
269
|
-
? "IMX"
|
|
270
|
-
: reward.rewardToken ==
|
|
271
|
-
"0x7b35ce522cb72e4077baeb96cb923a5529764a00"
|
|
272
|
-
? "IMX"
|
|
273
|
-
: reward.rewardToken ==
|
|
274
|
-
"0x60bb3d364b765c497c8ce50ae0ae3f0882c5bd05"
|
|
275
|
-
? "IMX"
|
|
276
|
-
: reward.rewardToken ==
|
|
277
|
-
"0x9c67ee39e3c4954396b9142010653f17257dd39c"
|
|
278
|
-
? "IMX"
|
|
279
|
-
: reward.rewardToken ==
|
|
280
|
-
"0xea6887e4a9cda1b77e70129e5fba830cdb5cddef"
|
|
281
|
-
? "IMX"
|
|
282
|
-
: reward.rewardToken ==
|
|
283
|
-
"0x900f1Ec5819FA087d368877cD03B265Bf1802667"
|
|
284
|
-
? "IMX"
|
|
285
|
-
: reward.rewardToken ==
|
|
286
|
-
"0xea38f1ccf77bf43f352636241b05dd8f6f5f52b2"
|
|
287
|
-
? "IMX"
|
|
288
|
-
: "IBEX",
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
return rewards;
|
|
292
|
-
}
|
|
293
|
-
async getFarmingAPR() {
|
|
294
|
-
return this.getNextFarmingAPR(0);
|
|
295
|
-
}
|
|
296
|
-
async getNextFarmingAPR(borrowAmount) {
|
|
297
|
-
const rewards = await this.getNextFarmingRewards(borrowAmount);
|
|
298
|
-
let APR = 0;
|
|
299
|
-
for (const reward of rewards) {
|
|
300
|
-
APR += reward.APR;
|
|
301
|
-
}
|
|
302
|
-
return APR;
|
|
303
|
-
}
|
|
304
207
|
// Past Data
|
|
305
208
|
async getPoolTokenDataPast24h() {
|
|
306
209
|
const lendingPoolDataPast = await this.lendingPool.getLendingPoolDataPast24h();
|
|
@@ -3,6 +3,7 @@ import { Address, Borrowable } from '../../../config/types';
|
|
|
3
3
|
import OnchainLendingPool from './index';
|
|
4
4
|
import OnchainPoolToken from '../../onchainPoolToken';
|
|
5
5
|
import OffchainBorrowable from '../../../offchain/lendingPool/offchainBorrowable';
|
|
6
|
+
import { BorrowableEntity } from "../../../utils/borrowableEntity";
|
|
6
7
|
export default abstract class OnchainBorrowable extends OnchainPoolToken {
|
|
7
8
|
protected readonly lendingPool: OnchainLendingPool;
|
|
8
9
|
protected readonly borrowable: Borrowable;
|
|
@@ -18,5 +19,6 @@ export default abstract class OnchainBorrowable extends OnchainPoolToken {
|
|
|
18
19
|
protected abstract initializePoolToken(): Promise<Contract>;
|
|
19
20
|
protected initializeToken(): Promise<Contract>;
|
|
20
21
|
isETH(): Promise<boolean>;
|
|
22
|
+
createBorrowableObject(lockStateChange?: boolean): Promise<BorrowableEntity>;
|
|
21
23
|
getAvailableToBorrow(): Promise<number>;
|
|
22
24
|
}
|
|
@@ -35,6 +35,9 @@ class OnchainBorrowable extends onchainPoolToken_1.default {
|
|
|
35
35
|
const underlying = (await this.getToken())._address;
|
|
36
36
|
return (underlying.toLowerCase() === weths_1.WETH[this.getLendingPool().getImpermaxFactory().getOnchain().network].toLowerCase());
|
|
37
37
|
}
|
|
38
|
+
async createBorrowableObject(lockStateChange = false) {
|
|
39
|
+
return (await this.getOffchainBorrowable()).createBorrowableObject(lockStateChange);
|
|
40
|
+
}
|
|
38
41
|
async getAvailableToBorrow() {
|
|
39
42
|
return await this.getTotalBalance();
|
|
40
43
|
}
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
export interface
|
|
1
|
+
export interface BorrowableEntityParams {
|
|
2
2
|
totalSupply: number;
|
|
3
3
|
totalBorrows: number;
|
|
4
|
-
|
|
4
|
+
kinkBorrowRate: number;
|
|
5
5
|
kinkUtilizationRate: number;
|
|
6
6
|
kinkMultiplier: number;
|
|
7
7
|
reserveFactor: number;
|
|
8
|
+
lockStateChange?: boolean;
|
|
8
9
|
}
|
|
9
|
-
export declare class
|
|
10
|
+
export declare class BorrowableEntity {
|
|
11
|
+
lockStateChange: boolean;
|
|
12
|
+
state: number;
|
|
10
13
|
totalSupply: number;
|
|
11
14
|
initialTotalSupply: number;
|
|
12
15
|
totalBorrows: number;
|
|
13
16
|
initialTotalBorrows: number;
|
|
14
|
-
|
|
17
|
+
kinkBorrowRate: number;
|
|
15
18
|
kinkUtilizationRate: number;
|
|
16
19
|
kinkMultiplier: number;
|
|
17
20
|
reserveFactor: number;
|
|
18
|
-
constructor(params:
|
|
21
|
+
constructor(params: BorrowableEntityParams);
|
|
22
|
+
protected checkLock(): void;
|
|
19
23
|
/**
|
|
20
24
|
* PUBLIC GETTERS
|
|
21
25
|
*/
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.BorrowableEntity = void 0;
|
|
4
4
|
const index_1 = require("../index");
|
|
5
|
-
class
|
|
5
|
+
class BorrowableEntity {
|
|
6
6
|
constructor(params) {
|
|
7
7
|
this.totalSupply = params.totalSupply;
|
|
8
8
|
this.initialTotalSupply = params.totalSupply;
|
|
9
9
|
this.totalBorrows = params.totalBorrows;
|
|
10
10
|
this.initialTotalBorrows = params.totalBorrows;
|
|
11
|
-
this.
|
|
11
|
+
this.kinkBorrowRate = params.kinkBorrowRate;
|
|
12
12
|
this.kinkUtilizationRate = params.kinkUtilizationRate;
|
|
13
13
|
this.kinkMultiplier = params.kinkMultiplier;
|
|
14
14
|
this.reserveFactor = params.reserveFactor;
|
|
15
|
+
this.lockStateChange = params.lockStateChange ?? true;
|
|
16
|
+
this.state = 0;
|
|
17
|
+
}
|
|
18
|
+
checkLock() {
|
|
19
|
+
if (this.lockStateChange)
|
|
20
|
+
throw Error("Can't change state of original position object");
|
|
21
|
+
else
|
|
22
|
+
this.state++;
|
|
15
23
|
}
|
|
16
24
|
/**
|
|
17
25
|
* PUBLIC GETTERS
|
|
@@ -26,6 +34,7 @@ class Borrowable {
|
|
|
26
34
|
return 0;
|
|
27
35
|
return this.totalBorrows / this.totalSupply;
|
|
28
36
|
}
|
|
37
|
+
// TODO implement debt ceiling
|
|
29
38
|
getInitialAvailableToBorrow() {
|
|
30
39
|
return this.initialTotalSupply - this.initialTotalBorrows;
|
|
31
40
|
}
|
|
@@ -41,11 +50,11 @@ class Borrowable {
|
|
|
41
50
|
getBorrowRate() {
|
|
42
51
|
const utilizationRate = this.getUtilizationRate();
|
|
43
52
|
if (utilizationRate <= this.kinkUtilizationRate) {
|
|
44
|
-
return this.
|
|
53
|
+
return this.kinkBorrowRate * utilizationRate / this.kinkUtilizationRate;
|
|
45
54
|
}
|
|
46
55
|
else {
|
|
47
56
|
const overUtil = (utilizationRate - this.kinkUtilizationRate) / (1 - this.kinkUtilizationRate);
|
|
48
|
-
return this.
|
|
57
|
+
return this.kinkBorrowRate * ((this.kinkMultiplier - 1) * overUtil + 1);
|
|
49
58
|
}
|
|
50
59
|
}
|
|
51
60
|
getSupplyRate() {
|
|
@@ -61,9 +70,11 @@ class Borrowable {
|
|
|
61
70
|
* PUBLIC SETTERS
|
|
62
71
|
*/
|
|
63
72
|
supply(amount) {
|
|
73
|
+
this.checkLock();
|
|
64
74
|
this.totalSupply = this.initialTotalSupply + amount;
|
|
65
75
|
}
|
|
66
76
|
withdraw(amount) {
|
|
77
|
+
this.checkLock();
|
|
67
78
|
if (amount > this.getInitialAvailableToWithdraw()) {
|
|
68
79
|
throw new Error("Trying to withdraw more than available liquidity");
|
|
69
80
|
}
|
|
@@ -72,6 +83,7 @@ class Borrowable {
|
|
|
72
83
|
}
|
|
73
84
|
}
|
|
74
85
|
borrow(amount) {
|
|
86
|
+
this.checkLock();
|
|
75
87
|
if (amount > this.getInitialAvailableToBorrow()) {
|
|
76
88
|
throw new Error("Trying to borrow more than available liquidity");
|
|
77
89
|
}
|
|
@@ -80,7 +92,8 @@ class Borrowable {
|
|
|
80
92
|
}
|
|
81
93
|
}
|
|
82
94
|
repay(amount) {
|
|
95
|
+
this.checkLock();
|
|
83
96
|
this.totalBorrows = Math.max(this.initialTotalBorrows - amount, 0);
|
|
84
97
|
}
|
|
85
98
|
}
|
|
86
|
-
exports.
|
|
99
|
+
exports.BorrowableEntity = BorrowableEntity;
|