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 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 BorrowableParams {
1
+ export interface BorrowableEntityParams {
2
2
  totalSupply: number;
3
3
  totalBorrows: number;
4
- kinkRate: number;
4
+ kinkBorrowRate: number;
5
5
  kinkUtilizationRate: number;
6
6
  kinkMultiplier: number;
7
7
  reserveFactor: number;
8
+ lockStateChange?: boolean;
8
9
  }
9
- export declare class Borrowable {
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
- kinkRate: number;
17
+ kinkBorrowRate: number;
15
18
  kinkUtilizationRate: number;
16
19
  kinkMultiplier: number;
17
20
  reserveFactor: number;
18
- constructor(params: BorrowableParams);
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.Borrowable = void 0;
3
+ exports.BorrowableEntity = void 0;
4
4
  const index_1 = require("../index");
5
- class Borrowable {
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.kinkRate = params.kinkRate;
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.kinkRate * utilizationRate / this.kinkUtilizationRate;
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.kinkRate * ((this.kinkMultiplier - 1) * overUtil + 1);
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.Borrowable = Borrowable;
99
+ exports.BorrowableEntity = BorrowableEntity;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "impermax-sdk",
3
- "version": "2.1.264",
3
+ "version": "2.1.266",
4
4
  "description": "",
5
5
  "main": "./lib/index.js",
6
6
  "module": "./lib/index.js",