@gearbox-protocol/sdk 3.0.0-vfourabi.1 → 3.0.0-vfourabi.3
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/.eslintignore +3 -0
- package/.github/workflows/lint_pr.yml +18 -0
- package/.github/workflows/pr.yml +39 -0
- package/.github/workflows/release.yml +47 -0
- package/.gitignore +19 -0
- package/.husky/commit-msg +1 -0
- package/.husky/pre-commit +1 -0
- package/.nvmrc +1 -0
- package/.releaserc.json +34 -0
- package/.vscode/extensions.json +7 -0
- package/.vscode/settings.json +16 -0
- package/.yarn/install-state.gz +0 -0
- package/.yarnrc.yml +1 -0
- package/ContributionAgreement +72 -0
- package/dist/cjs/abi/iZapper.cjs +85 -0
- package/dist/cjs/abi/iZapper.d.ts +123 -0
- package/dist/cjs/sdk/index.cjs +19830 -19764
- package/dist/cjs/sdk/index.d.ts +3746 -3061
- package/dist/esm/abi/iZapper.d.mts +123 -0
- package/dist/esm/abi/iZapper.mjs +83 -0
- package/dist/esm/sdk/index.d.mts +3746 -3061
- package/dist/esm/sdk/index.mjs +19807 -19765
- package/jest.config.js +7 -0
- package/package.json +32 -2
- package/scripts/example.ts +30 -0
- package/src/abi/compressors.ts +3962 -0
- package/src/abi/errors.ts +196 -0
- package/src/abi/iERC20.ts +122 -0
- package/src/abi/iPausable.ts +35 -0
- package/src/abi/iPriceFeedStore.ts +227 -0
- package/src/abi/iUpdatablePriceFeed.ts +16 -0
- package/src/abi/iVersion.ts +28 -0
- package/src/abi/iZapper.ts +84 -0
- package/src/abi/routerV300.ts +378 -0
- package/src/abi/v300.ts +4151 -0
- package/src/abi/v310.ts +5179 -0
- package/src/adapters/AbstractAdapter.ts +28 -0
- package/src/adapters/BalancerV2VaultAdapterContract.ts +19 -0
- package/src/adapters/BalancerV3RouterAdapterContract.ts +19 -0
- package/src/adapters/CamelotV3AdapterContract.ts +20 -0
- package/src/adapters/ConvexV1BaseRewardPoolAdapterContract.ts +20 -0
- package/src/adapters/ConvexV1BoosterAdapterContract.ts +20 -0
- package/src/adapters/Curve2AssetsAdapterContract.ts +20 -0
- package/src/adapters/Curve3AssetsAdapterContract.ts +20 -0
- package/src/adapters/Curve4AssetsAdapterContract.ts +20 -0
- package/src/adapters/CurveV1AdapterStETHContract.ts +20 -0
- package/src/adapters/CurveV1StableNGAdapterContract.ts +20 -0
- package/src/adapters/DaiUsdsAdapterContract.ts +21 -0
- package/src/adapters/ERC4626AdapterContract.ts +20 -0
- package/src/adapters/MellowERC4626VaultAdapterContract.ts +20 -0
- package/src/adapters/MellowVaultAdapterContract.ts +20 -0
- package/src/adapters/PendleRouterAdapterContract.ts +21 -0
- package/src/adapters/StakingRewardsAdapterContract.ts +21 -0
- package/src/adapters/UniswapV2AdapterContract.ts +20 -0
- package/src/adapters/UniswapV3AdapterContract.ts +170 -0
- package/src/adapters/VelodromeV2AdapterContract.ts +20 -0
- package/src/adapters/WstETHV1AdapterContract.ts +20 -0
- package/src/adapters/YearnV2AdapterContract.ts +20 -0
- package/src/adapters/abi/adapters.ts +4325 -0
- package/src/adapters/abi/iBalancerV3RouterAdapter.ts +126 -0
- package/src/adapters/abi/index.ts +2 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/plugin.ts +90 -0
- package/src/adapters/types.ts +62 -0
- package/src/dev/AccountOpener.ts +611 -0
- package/src/dev/PriceFeedStore.ts +95 -0
- package/src/dev/SDKExample.ts +167 -0
- package/src/dev/abi.ts +14 -0
- package/src/dev/calcLiquidatableLTs.ts +77 -0
- package/src/dev/createAnvilClient.ts +155 -0
- package/src/dev/index.ts +7 -0
- package/src/dev/setLTZero.ts +127 -0
- package/src/dev/setLTs.ts +68 -0
- package/src/sdk/GearboxSDK.ts +488 -0
- package/src/sdk/abi/index.ts +1 -0
- package/src/sdk/abi/oracles.ts +4614 -0
- package/src/sdk/accounts/CreditAccountsService.ts +1123 -0
- package/src/sdk/accounts/index.ts +1 -0
- package/src/sdk/base/AddressLabeller.ts +35 -0
- package/src/sdk/base/BaseContract.ts +237 -0
- package/src/sdk/base/IAddressLabeller.ts +13 -0
- package/src/sdk/base/PlaceholderContract.ts +12 -0
- package/src/sdk/base/SDKConstruct.ts +35 -0
- package/src/sdk/base/TokensMeta.ts +45 -0
- package/src/sdk/base/index.ts +6 -0
- package/src/sdk/base/types.ts +102 -0
- package/src/sdk/bots/BotsService.ts +92 -0
- package/src/sdk/bots/index.ts +2 -0
- package/src/sdk/bots/utils.ts +19 -0
- package/src/sdk/chain/Provider.ts +99 -0
- package/src/sdk/chain/chains.ts +41 -0
- package/src/sdk/chain/detectChain.ts +21 -0
- package/src/sdk/chain/index.ts +3 -0
- package/src/sdk/constants/address-provider.ts +47 -0
- package/src/sdk/constants/addresses.ts +82 -0
- package/src/sdk/constants/bot-permissions.ts +36 -0
- package/src/sdk/constants/index.ts +6 -0
- package/src/sdk/constants/math.ts +23 -0
- package/src/sdk/constants/networks.ts +38 -0
- package/src/sdk/constants/periphery.ts +7 -0
- package/src/sdk/core/BotListV3Contract.ts +103 -0
- package/src/sdk/core/GearStakingV3Contract.ts +84 -0
- package/src/sdk/core/address-provider/AbstractAddressProviderContract.ts +101 -0
- package/src/sdk/core/address-provider/AddressProviderV3Contract.ts +105 -0
- package/src/sdk/core/address-provider/AddressProviderV3_1Contract.ts +92 -0
- package/src/sdk/core/address-provider/getAddressProvider.ts +45 -0
- package/src/sdk/core/address-provider/index.ts +4 -0
- package/src/sdk/core/address-provider/types.ts +17 -0
- package/src/sdk/core/index.ts +3 -0
- package/src/sdk/gauges/GaugeStakingService.ts +100 -0
- package/src/sdk/gauges/index.ts +2 -0
- package/src/sdk/gauges/utils.ts +25 -0
- package/src/sdk/index.ts +17 -0
- package/src/sdk/market/MarketConfiguratorContract.ts +78 -0
- package/src/sdk/market/MarketRegister.ts +330 -0
- package/src/sdk/market/MarketSuite.ts +83 -0
- package/src/sdk/market/adapters/PlaceholderAdapterContracts.ts +18 -0
- package/src/sdk/market/adapters/factory.ts +34 -0
- package/src/sdk/market/adapters/index.ts +3 -0
- package/src/sdk/market/adapters/types.ts +7 -0
- package/src/sdk/market/credit/CreditConfiguratorV300Contract.ts +164 -0
- package/src/sdk/market/credit/CreditConfiguratorV310Contract.ts +139 -0
- package/src/sdk/market/credit/CreditFacadeV300Contract.ts +206 -0
- package/src/sdk/market/credit/CreditFacadeV310Contract.ts +190 -0
- package/src/sdk/market/credit/CreditManagerV300Contract.ts +122 -0
- package/src/sdk/market/credit/CreditManagerV310Contract.ts +122 -0
- package/src/sdk/market/credit/CreditSuite.ts +65 -0
- package/src/sdk/market/credit/createCreditConfigurator.ts +18 -0
- package/src/sdk/market/credit/createCreditFacade.ts +18 -0
- package/src/sdk/market/credit/createCreditManager.ts +18 -0
- package/src/sdk/market/credit/index.ts +8 -0
- package/src/sdk/market/credit/types.ts +42 -0
- package/src/sdk/market/index.ts +7 -0
- package/src/sdk/market/oracle/PriceOracleBaseContract.ts +376 -0
- package/src/sdk/market/oracle/PriceOracleV300Contract.ts +71 -0
- package/src/sdk/market/oracle/PriceOracleV310Contract.ts +43 -0
- package/src/sdk/market/oracle/createPriceOracle.ts +22 -0
- package/src/sdk/market/oracle/index.ts +4 -0
- package/src/sdk/market/oracle/types.ts +48 -0
- package/src/sdk/market/pool/GaugeContract.ts +120 -0
- package/src/sdk/market/pool/LinearInterestRateModelContract.ts +75 -0
- package/src/sdk/market/pool/PoolQuotaKeeperV300Contract.ts +89 -0
- package/src/sdk/market/pool/PoolQuotaKeeperV310Contract.ts +89 -0
- package/src/sdk/market/pool/PoolSuite.ts +76 -0
- package/src/sdk/market/pool/PoolV300Contract.ts +144 -0
- package/src/sdk/market/pool/PoolV310Contract.ts +144 -0
- package/src/sdk/market/pool/TumblerContract.ts +73 -0
- package/src/sdk/market/pool/createInterestRateModel.ts +33 -0
- package/src/sdk/market/pool/createPool.ts +19 -0
- package/src/sdk/market/pool/createPoolQuotaKeeper.ts +20 -0
- package/src/sdk/market/pool/createRateKeeper.ts +25 -0
- package/src/sdk/market/pool/index.ts +6 -0
- package/src/sdk/market/pool/types.ts +28 -0
- package/src/sdk/market/pricefeeds/AbstractLPPriceFeed.ts +71 -0
- package/src/sdk/market/pricefeeds/AbstractPriceFeed.ts +137 -0
- package/src/sdk/market/pricefeeds/BalancerStablePriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/BalancerWeightedPriceFeed.ts +70 -0
- package/src/sdk/market/pricefeeds/BoundedPriceFeed.ts +34 -0
- package/src/sdk/market/pricefeeds/ChainlinkPriceFeed.ts +16 -0
- package/src/sdk/market/pricefeeds/CompositePriceFeed.ts +25 -0
- package/src/sdk/market/pricefeeds/CurveCryptoPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/CurveStablePriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/CurveUSDPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/Erc4626PriceFeed.ts +36 -0
- package/src/sdk/market/pricefeeds/MellowLRTPriceFeed.ts +26 -0
- package/src/sdk/market/pricefeeds/PendleTWAPPTPriceFeed.ts +44 -0
- package/src/sdk/market/pricefeeds/PriceFeedRef.ts +34 -0
- package/src/sdk/market/pricefeeds/PriceFeedsRegister.ts +293 -0
- package/src/sdk/market/pricefeeds/RedstonePriceFeed.ts +65 -0
- package/src/sdk/market/pricefeeds/RedstoneUpdater.ts +304 -0
- package/src/sdk/market/pricefeeds/WstETHPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/YearnPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/ZeroPriceFeed.ts +17 -0
- package/src/sdk/market/pricefeeds/index.ts +20 -0
- package/src/sdk/market/pricefeeds/types.ts +82 -0
- package/src/sdk/market/pricefeeds/utils.ts +24 -0
- package/src/sdk/plugins/index.ts +10 -0
- package/src/sdk/router/PathOptionFactory.ts +147 -0
- package/src/sdk/router/RouterV3Contract.ts +558 -0
- package/src/sdk/router/index.ts +2 -0
- package/src/sdk/router/types.ts +48 -0
- package/src/sdk/sdk-gov-legacy/contracts/adapters.ts +39 -0
- package/src/sdk/sdk-gov-legacy/contracts/contracts.ts +647 -0
- package/src/sdk/sdk-gov-legacy/contracts/index.ts +2 -0
- package/src/sdk/sdk-gov-legacy/core/constants.ts +11 -0
- package/src/sdk/sdk-gov-legacy/index.ts +4 -0
- package/src/sdk/sdk-gov-legacy/oracles/PriceFeedType.ts +24 -0
- package/src/sdk/sdk-gov-legacy/oracles/index.ts +1 -0
- package/src/sdk/sdk-gov-legacy/tokens/aave.ts +101 -0
- package/src/sdk/sdk-gov-legacy/tokens/aura.ts +284 -0
- package/src/sdk/sdk-gov-legacy/tokens/balancer.ts +421 -0
- package/src/sdk/sdk-gov-legacy/tokens/compound.ts +79 -0
- package/src/sdk/sdk-gov-legacy/tokens/convex.ts +561 -0
- package/src/sdk/sdk-gov-legacy/tokens/curveLP.ts +480 -0
- package/src/sdk/sdk-gov-legacy/tokens/decimals.ts +301 -0
- package/src/sdk/sdk-gov-legacy/tokens/erc4626.ts +75 -0
- package/src/sdk/sdk-gov-legacy/tokens/gear.ts +273 -0
- package/src/sdk/sdk-gov-legacy/tokens/index.ts +18 -0
- package/src/sdk/sdk-gov-legacy/tokens/normal.ts +613 -0
- package/src/sdk/sdk-gov-legacy/tokens/quoted.ts +10 -0
- package/src/sdk/sdk-gov-legacy/tokens/stakingRewards.ts +41 -0
- package/src/sdk/sdk-gov-legacy/tokens/token.ts +2354 -0
- package/src/sdk/sdk-gov-legacy/tokens/tokenData.ts +44 -0
- package/src/sdk/sdk-gov-legacy/tokens/tokenType.ts +33 -0
- package/src/sdk/sdk-gov-legacy/tokens/wrapped.ts +28 -0
- package/src/sdk/sdk-gov-legacy/tokens/yearn.ts +122 -0
- package/src/sdk/sdk-gov-legacy/tokens/zircuit.ts +44 -0
- package/src/sdk/sdk-legacy/apy/index.ts +149 -0
- package/src/sdk/sdk-legacy/core/assets.ts +200 -0
- package/src/sdk/sdk-legacy/core/creditAccount.spec.ts +1966 -0
- package/src/sdk/sdk-legacy/core/creditAccount.ts +816 -0
- package/src/sdk/sdk-legacy/core/creditManager.ts +316 -0
- package/src/sdk/sdk-legacy/core/creditSession.ts +352 -0
- package/src/sdk/sdk-legacy/core/endpoint.ts +131 -0
- package/src/sdk/sdk-legacy/core/eventOrTx.ts +101 -0
- package/src/sdk/sdk-legacy/core/pool.ts +439 -0
- package/src/sdk/sdk-legacy/core/strategy.ts +82 -0
- package/src/sdk/sdk-legacy/core/transactions.ts +865 -0
- package/src/sdk/sdk-legacy/gearboxRewards/api.ts +704 -0
- package/src/sdk/sdk-legacy/gearboxRewards/apy.ts +267 -0
- package/src/sdk/sdk-legacy/gearboxRewards/extraAPY.ts +165 -0
- package/src/sdk/sdk-legacy/gearboxRewards/index.ts +3 -0
- package/src/sdk/sdk-legacy/gearboxRewards/merklAPI.ts +151 -0
- package/src/sdk/sdk-legacy/index.ts +21 -0
- package/src/sdk/sdk-legacy/pathfinder/core.ts +18 -0
- package/src/sdk/sdk-legacy/pathfinder/index.ts +1 -0
- package/src/sdk/sdk-legacy/payload/creditAccount.ts +48 -0
- package/src/sdk/sdk-legacy/payload/creditManager.ts +133 -0
- package/src/sdk/sdk-legacy/payload/creditSession.ts +143 -0
- package/src/sdk/sdk-legacy/payload/graphPayload.ts +10 -0
- package/src/sdk/sdk-legacy/payload/pool.ts +198 -0
- package/src/sdk/sdk-legacy/payload/token.ts +13 -0
- package/src/sdk/sdk-legacy/tokens/tokenData.ts +57 -0
- package/src/sdk/sdk-legacy/types/IAirdropDistributor.ts +103 -0
- package/src/sdk/sdk-legacy/types/IBaseRewardPool.ts +249 -0
- package/src/sdk/sdk-legacy/types/IDataCompressorV3.ts +957 -0
- package/src/sdk/sdk-legacy/types/IDegenDistributor.ts +70 -0
- package/src/sdk/sdk-legacy/types/IERC20Permit.ts +35 -0
- package/src/sdk/sdk-legacy/types/IERC20ZapperDeposits.ts +99 -0
- package/src/sdk/sdk-legacy/types/IETHZapperDeposits.ts +27 -0
- package/src/sdk/sdk-legacy/types/IFarmingPool.ts +229 -0
- package/src/sdk/sdk-legacy/types/IInterestRateModel.ts +23 -0
- package/src/sdk/sdk-legacy/types/IMulticall3.ts +242 -0
- package/src/sdk/sdk-legacy/types/IOffchainOracle.ts +31 -0
- package/src/sdk/sdk-legacy/types/index.ts +11 -0
- package/src/sdk/sdk-legacy/utils/formatter.ts +46 -0
- package/src/sdk/sdk-legacy/utils/index.ts +3 -0
- package/src/sdk/sdk-legacy/utils/math.ts +6 -0
- package/src/sdk/sdk-legacy/utils/price.ts +27 -0
- package/src/sdk/types/index.ts +5 -0
- package/src/sdk/types/logger.ts +13 -0
- package/src/sdk/types/state-human.ts +224 -0
- package/src/sdk/types/state.ts +8 -0
- package/src/sdk/types/transactions.ts +22 -0
- package/src/sdk/types/tvl.ts +4 -0
- package/src/sdk/utils/AddressMap.ts +111 -0
- package/src/sdk/utils/bytes32ToString.ts +6 -0
- package/src/sdk/utils/childLogger.ts +8 -0
- package/src/sdk/utils/createRawTx.ts +86 -0
- package/src/sdk/utils/etherscan.ts +42 -0
- package/src/sdk/utils/filterDust.ts +20 -0
- package/src/sdk/utils/formatter.ts +124 -0
- package/src/sdk/utils/index.ts +10 -0
- package/src/sdk/utils/internal/Hooks.ts +51 -0
- package/src/sdk/utils/internal/index.ts +1 -0
- package/src/sdk/utils/json.ts +27 -0
- package/src/sdk/utils/mappers.ts +38 -0
- package/src/sdk/utils/retry.ts +24 -0
- package/src/sdk/utils/viem/detectNetwork.ts +27 -0
- package/src/sdk/utils/viem/index.ts +3 -0
- package/src/sdk/utils/viem/sendRawTx.ts +36 -0
- package/src/sdk/utils/viem/simulateMulticall.ts +262 -0
- package/tsconfig.build.json +4 -0
- package/tsconfig.json +16 -0
- package/tsup.config.ts +77 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
import type { NetworkType } from "../../chain";
|
|
4
|
+
import { chains, isSupportedNetwork } from "../../chain";
|
|
5
|
+
|
|
6
|
+
export const TESTNET_CHAINS: Record<NetworkType, number> = {
|
|
7
|
+
Mainnet: 7878,
|
|
8
|
+
Optimism: 7879,
|
|
9
|
+
Arbitrum: 7880,
|
|
10
|
+
Base: 7881,
|
|
11
|
+
Sonic: 7882,
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
type ChartsPriceSource = "chainlink" | "spot";
|
|
15
|
+
|
|
16
|
+
const CHARTS_BACKEND_ADDRESSES: Record<number, string> = {
|
|
17
|
+
[chains.Mainnet.id]: "https://charts-server.fly.dev",
|
|
18
|
+
[chains.Arbitrum.id]: "https://charts-server.fly.dev",
|
|
19
|
+
[chains.Optimism.id]: "https://charts-server.fly.dev",
|
|
20
|
+
[chains.Base.id]: "https://charts-server.fly.dev",
|
|
21
|
+
[chains.Sonic.id]: "https://charts-server.fly.dev",
|
|
22
|
+
|
|
23
|
+
[TESTNET_CHAINS.Mainnet]: "https://testnet.gearbox.foundation",
|
|
24
|
+
[TESTNET_CHAINS.Arbitrum]: "https://arbtest.gearbox.foundation",
|
|
25
|
+
[TESTNET_CHAINS.Optimism]: "https://opttest.gearbox.foundation",
|
|
26
|
+
// !& Base & Sonic
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const LAMA_URL = "https://charts-server.fly.dev/api/defillama?ids=";
|
|
30
|
+
|
|
31
|
+
const STATIC_TOKEN = "https://static.gearbox.fi/tokens/";
|
|
32
|
+
|
|
33
|
+
const LEADERBOARD_APIS: Record<number, string> = {
|
|
34
|
+
[chains.Mainnet.id]: "https://gpointbot.fly.dev",
|
|
35
|
+
[chains.Optimism.id]: "https://gpointbot.fly.dev",
|
|
36
|
+
[chains.Arbitrum.id]: "https://gpointbot.fly.dev",
|
|
37
|
+
[chains.Base.id]: "https://gpointbot.fly.dev",
|
|
38
|
+
[chains.Sonic.id]: "https://gpointbot.fly.dev",
|
|
39
|
+
|
|
40
|
+
[TESTNET_CHAINS.Mainnet]: "https://testnet.gearbox.foundation/gpointbot",
|
|
41
|
+
[TESTNET_CHAINS.Optimism]: "https://testnet.gearbox.foundation/gpointbot",
|
|
42
|
+
[TESTNET_CHAINS.Arbitrum]: "https://testnet.gearbox.foundation/gpointbot",
|
|
43
|
+
[TESTNET_CHAINS.Base]: "https://testnet.gearbox.foundation/gpointbot",
|
|
44
|
+
[TESTNET_CHAINS.Sonic]: "https://testnet.gearbox.foundation/gpointbot",
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const REFERRAL_API = "https://referral-gen.fly.dev/generate";
|
|
48
|
+
|
|
49
|
+
export class GearboxBackendApi {
|
|
50
|
+
static getChartsUrl = (
|
|
51
|
+
url: string,
|
|
52
|
+
chainId: number,
|
|
53
|
+
options: Options = { params: {} },
|
|
54
|
+
priceSource?: ChartsPriceSource,
|
|
55
|
+
) => {
|
|
56
|
+
const domain = CHARTS_BACKEND_ADDRESSES[chainId];
|
|
57
|
+
const priceSourceArr = priceSource ? [priceSource] : [];
|
|
58
|
+
|
|
59
|
+
const isMain = isSupportedNetwork(chainId);
|
|
60
|
+
|
|
61
|
+
const relativePath = URLApi.getRelativeUrl(
|
|
62
|
+
url,
|
|
63
|
+
isMain
|
|
64
|
+
? {
|
|
65
|
+
...options,
|
|
66
|
+
params: { ...options.params, chainId: chainId },
|
|
67
|
+
}
|
|
68
|
+
: options,
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
return [domain, "api", ...priceSourceArr, relativePath].join("/");
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
static getLlamaAPYUrl = (idList: Array<string>) => {
|
|
75
|
+
return `${LAMA_URL}${idList.join(",")}`;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
static getStaticTokenUrl = () => STATIC_TOKEN;
|
|
79
|
+
|
|
80
|
+
static getRewardsMerkleUrl = (
|
|
81
|
+
network: NetworkType,
|
|
82
|
+
root: Address,
|
|
83
|
+
account: Address,
|
|
84
|
+
) => {
|
|
85
|
+
const path = `${network}_${root.slice(2)}/${account.slice(2, 4)}`;
|
|
86
|
+
const url = `https://am.gearbox.finance/${path.toLowerCase()}.json`;
|
|
87
|
+
|
|
88
|
+
return url;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
static getNFTMerkleUrl = (network: NetworkType, root: Address) => {
|
|
92
|
+
const url = `https://dm.gearbox.finance/${network.toLowerCase()}_${root}.json`;
|
|
93
|
+
|
|
94
|
+
return url;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
static getLeaderboardUrl = (url: string, chainId: number) => {
|
|
98
|
+
return `${LEADERBOARD_APIS[chainId]}${url}`;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
static getReferralUrl = () => REFERRAL_API;
|
|
102
|
+
|
|
103
|
+
static apyServerAllRewards = (chainId: number) =>
|
|
104
|
+
URLApi.getRelativeUrl("https://apy-server.fly.dev/api/rewards/tokens/all", {
|
|
105
|
+
params: { chain_id: chainId },
|
|
106
|
+
});
|
|
107
|
+
static apyServerGearAPY = (chainId: number) =>
|
|
108
|
+
URLApi.getRelativeUrl("https://apy-server.fly.dev/api/rewards/gear-apy", {
|
|
109
|
+
params: { chain_id: chainId },
|
|
110
|
+
});
|
|
111
|
+
static apyServerAllPoolRewards = (chainId: number) =>
|
|
112
|
+
URLApi.getRelativeUrl("https://apy-server.fly.dev/api/rewards/pools/all", {
|
|
113
|
+
params: { chain_id: chainId },
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface Options {
|
|
118
|
+
params?: Record<string, string | number>;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export class URLApi {
|
|
122
|
+
static getRelativeUrl = (url: string, options?: Options) => {
|
|
123
|
+
const { params = {} } = options || {};
|
|
124
|
+
|
|
125
|
+
const paramsString = Object.entries(params)
|
|
126
|
+
.map<string>(([key, value]) => `${key}=${value}`)
|
|
127
|
+
.join("&");
|
|
128
|
+
|
|
129
|
+
return [url, ...(paramsString ? [paramsString] : [])].join("?");
|
|
130
|
+
};
|
|
131
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
import type { TokenData } from "../tokens/tokenData";
|
|
4
|
+
import type { TxSerialized } from "./transactions";
|
|
5
|
+
|
|
6
|
+
export interface Display {
|
|
7
|
+
toString: (tokenData: Record<string, TokenData>) => string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type TxStatus = "pending" | "success" | "reverted";
|
|
11
|
+
|
|
12
|
+
export interface EventOrTxProps {
|
|
13
|
+
block: number;
|
|
14
|
+
txHash: Address;
|
|
15
|
+
txStatus: TxStatus;
|
|
16
|
+
timestamp: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export abstract class EventOrTx implements Display {
|
|
20
|
+
public block: number;
|
|
21
|
+
|
|
22
|
+
public readonly txHash: Address;
|
|
23
|
+
|
|
24
|
+
public readonly timestamp: number;
|
|
25
|
+
|
|
26
|
+
protected _txStatus: TxStatus;
|
|
27
|
+
|
|
28
|
+
constructor({ block, txHash, txStatus, timestamp = 0 }: EventOrTxProps) {
|
|
29
|
+
this.block = block;
|
|
30
|
+
this.txHash = txHash;
|
|
31
|
+
this._txStatus = txStatus;
|
|
32
|
+
this.timestamp = timestamp;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public get isPending(): boolean {
|
|
36
|
+
return this._txStatus === "pending";
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public get txStatus() {
|
|
40
|
+
return this._txStatus;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public compare(item: EventOrTx): number {
|
|
44
|
+
if (this.isPending && !item.isPending) {
|
|
45
|
+
return -1;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (!this.isPending && item.isPending) {
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return item.block - this.block;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public abstract toString(): string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export type EVMEventProps = Omit<EventOrTxProps, "txStatus"> & {
|
|
59
|
+
logId?: number;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export abstract class EVMEvent extends EventOrTx {
|
|
63
|
+
logId?: number;
|
|
64
|
+
constructor(opts: EVMEventProps) {
|
|
65
|
+
super({ ...opts, txStatus: "success" });
|
|
66
|
+
this.logId = opts.logId;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export type EVMTxProps = Omit<EventOrTxProps, "block" | "txStatus"> &
|
|
71
|
+
Partial<Pick<EventOrTxProps, "block" | "txStatus">>;
|
|
72
|
+
export abstract class EVMTx extends EventOrTx {
|
|
73
|
+
constructor({
|
|
74
|
+
txHash,
|
|
75
|
+
block = 0,
|
|
76
|
+
txStatus = "pending",
|
|
77
|
+
timestamp = 0,
|
|
78
|
+
}: EVMTxProps) {
|
|
79
|
+
super({
|
|
80
|
+
block,
|
|
81
|
+
txStatus,
|
|
82
|
+
txHash,
|
|
83
|
+
timestamp,
|
|
84
|
+
});
|
|
85
|
+
if (this.txStatus !== "pending" && this.block === 0) {
|
|
86
|
+
throw new Error("Block not specified for non-pending tx");
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
abstract serialize(): TxSerialized;
|
|
91
|
+
|
|
92
|
+
public revert(block: number) {
|
|
93
|
+
this._txStatus = "reverted";
|
|
94
|
+
this.block = block;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
public success(block: number) {
|
|
98
|
+
this._txStatus = "success";
|
|
99
|
+
this.block = block;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
import type { Address, PublicClient } from "viem";
|
|
2
|
+
import { getContract } from "viem";
|
|
3
|
+
|
|
4
|
+
import { PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR } from "../../constants";
|
|
5
|
+
import { toBigInt } from "../../utils";
|
|
6
|
+
import type {
|
|
7
|
+
ChartsPoolDataPayload,
|
|
8
|
+
LinearModel,
|
|
9
|
+
PoolDataExtraPayload,
|
|
10
|
+
PoolDataPayload,
|
|
11
|
+
UserPoolPayload,
|
|
12
|
+
} from "../payload/pool";
|
|
13
|
+
import { iInterestRateModelAbi } from "../types";
|
|
14
|
+
import { rayToNumber } from "../utils/formatter";
|
|
15
|
+
|
|
16
|
+
export type PoolType = "universal" | "trade" | "farm";
|
|
17
|
+
|
|
18
|
+
export class PoolData_Legacy {
|
|
19
|
+
readonly address: Address;
|
|
20
|
+
readonly type: PoolType;
|
|
21
|
+
readonly underlyingToken: Address;
|
|
22
|
+
readonly dieselToken: Address;
|
|
23
|
+
readonly stakedDieselToken: Array<Address>;
|
|
24
|
+
readonly stakedDieselToken_old: Array<Address>;
|
|
25
|
+
readonly isPaused: boolean;
|
|
26
|
+
readonly version: number;
|
|
27
|
+
readonly poolQuotaKeeper: Address;
|
|
28
|
+
readonly gauge: Address;
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly symbol: string;
|
|
31
|
+
readonly marketConfigurator: Address;
|
|
32
|
+
|
|
33
|
+
// Information
|
|
34
|
+
readonly expectedLiquidity: bigint;
|
|
35
|
+
readonly expectedLiquidityLimit: bigint;
|
|
36
|
+
readonly availableLiquidity: bigint;
|
|
37
|
+
readonly baseInterestIndex: bigint;
|
|
38
|
+
readonly utilization: number;
|
|
39
|
+
|
|
40
|
+
readonly totalBorrowed: bigint;
|
|
41
|
+
readonly totalDebtLimit: bigint;
|
|
42
|
+
readonly quotas: Record<
|
|
43
|
+
Address,
|
|
44
|
+
{
|
|
45
|
+
token: Address;
|
|
46
|
+
rate: bigint;
|
|
47
|
+
quotaIncreaseFee: bigint;
|
|
48
|
+
totalQuoted: bigint;
|
|
49
|
+
limit: bigint;
|
|
50
|
+
isActive: boolean;
|
|
51
|
+
}
|
|
52
|
+
>;
|
|
53
|
+
readonly zappers: Record<
|
|
54
|
+
Address,
|
|
55
|
+
Record<
|
|
56
|
+
Address,
|
|
57
|
+
{
|
|
58
|
+
zapper: Address;
|
|
59
|
+
tokenIn: Address;
|
|
60
|
+
tokenOut: Address;
|
|
61
|
+
}
|
|
62
|
+
>
|
|
63
|
+
>;
|
|
64
|
+
|
|
65
|
+
readonly totalSupply: bigint;
|
|
66
|
+
|
|
67
|
+
readonly depositAPY: number;
|
|
68
|
+
readonly borrowAPY: number;
|
|
69
|
+
|
|
70
|
+
readonly interestModel: LinearModel;
|
|
71
|
+
readonly dieselRate: number;
|
|
72
|
+
readonly dieselRateRay: bigint;
|
|
73
|
+
readonly withdrawFee: number;
|
|
74
|
+
readonly lastBaseInterestUpdate: bigint;
|
|
75
|
+
|
|
76
|
+
constructor(payload: PoolDataPayload, extra: PoolDataExtraPayload) {
|
|
77
|
+
this.address = payload.addr.toLowerCase() as Address;
|
|
78
|
+
this.type = PoolData_Legacy.getPoolType(payload.name || "");
|
|
79
|
+
this.underlyingToken = payload.underlying.toLowerCase() as Address;
|
|
80
|
+
this.dieselToken = payload.dieselToken.toLowerCase() as Address;
|
|
81
|
+
this.stakedDieselToken = (extra.stakedDieselToken || []).map(
|
|
82
|
+
t => t.toLowerCase() as Address,
|
|
83
|
+
);
|
|
84
|
+
this.stakedDieselToken_old = (extra.stakedDieselToken_old || []).map(
|
|
85
|
+
t => t.toLowerCase() as Address,
|
|
86
|
+
);
|
|
87
|
+
this.isPaused = payload.isPaused;
|
|
88
|
+
this.version = Number(payload.version);
|
|
89
|
+
this.poolQuotaKeeper = payload.poolQuotaKeeper.toLowerCase() as Address;
|
|
90
|
+
this.gauge = payload.gauge.toLowerCase() as Address;
|
|
91
|
+
this.name = payload.name;
|
|
92
|
+
this.symbol = payload.symbol;
|
|
93
|
+
this.marketConfigurator =
|
|
94
|
+
payload.marketConfigurator.toLowerCase() as Address;
|
|
95
|
+
|
|
96
|
+
const expected = payload.expectedLiquidity;
|
|
97
|
+
const available = payload.availableLiquidity;
|
|
98
|
+
this.expectedLiquidity = expected;
|
|
99
|
+
this.availableLiquidity = available;
|
|
100
|
+
this.expectedLiquidityLimit =
|
|
101
|
+
this.expectedLiquidity + this.availableLiquidity;
|
|
102
|
+
this.baseInterestIndex = payload.baseInterestIndex;
|
|
103
|
+
|
|
104
|
+
this.utilization = PoolData_Legacy.calculateUtilization(
|
|
105
|
+
expected,
|
|
106
|
+
available,
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
this.totalBorrowed = payload.totalBorrowed;
|
|
110
|
+
this.totalDebtLimit = payload.totalDebtLimit;
|
|
111
|
+
|
|
112
|
+
this.quotas = payload.quotas.reduce<PoolData_Legacy["quotas"]>((acc, q) => {
|
|
113
|
+
const token = q.token.toLowerCase() as Address;
|
|
114
|
+
acc[token] = {
|
|
115
|
+
token,
|
|
116
|
+
rate: toBigInt(q.rate) * PERCENTAGE_DECIMALS,
|
|
117
|
+
quotaIncreaseFee: toBigInt(q.quotaIncreaseFee),
|
|
118
|
+
totalQuoted: q.totalQuoted,
|
|
119
|
+
limit: q.limit,
|
|
120
|
+
isActive: q.isActive,
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
return acc;
|
|
124
|
+
}, {});
|
|
125
|
+
|
|
126
|
+
this.zappers = payload.zappers.reduce<PoolData_Legacy["zappers"]>(
|
|
127
|
+
(acc, z) => {
|
|
128
|
+
const tokenIn = z.tokenIn.addr.toLowerCase() as Address;
|
|
129
|
+
const tokenOut = z.tokenOut.addr.toLowerCase() as Address;
|
|
130
|
+
const zapper = z.baseParams.addr.toLowerCase() as Address;
|
|
131
|
+
const old = acc[tokenIn] || {};
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
...acc,
|
|
135
|
+
[tokenIn]: {
|
|
136
|
+
...old,
|
|
137
|
+
[tokenOut]: { tokenIn, tokenOut, zapper },
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
},
|
|
141
|
+
{},
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
this.totalSupply = payload.totalSupply;
|
|
145
|
+
|
|
146
|
+
this.depositAPY = rayToNumber(payload.supplyRate * PERCENTAGE_DECIMALS);
|
|
147
|
+
this.borrowAPY = rayToNumber(
|
|
148
|
+
payload.baseInterestRate * PERCENTAGE_DECIMALS,
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
this.interestModel = {
|
|
152
|
+
interestModel: payload.lirm.interestModel.toLowerCase() as Address,
|
|
153
|
+
U_1: toBigInt(payload.lirm.U_1),
|
|
154
|
+
U_2: toBigInt(payload.lirm.U_2),
|
|
155
|
+
R_base: toBigInt(payload.lirm.R_base),
|
|
156
|
+
R_slope1: toBigInt(payload.lirm.R_slope1),
|
|
157
|
+
R_slope2: toBigInt(payload.lirm.R_slope2),
|
|
158
|
+
R_slope3: toBigInt(payload.lirm.R_slope3),
|
|
159
|
+
version: Number(payload?.lirm?.version),
|
|
160
|
+
isBorrowingMoreU2Forbidden: payload?.lirm?.isBorrowingMoreU2Forbidden,
|
|
161
|
+
};
|
|
162
|
+
this.dieselRate = rayToNumber(payload.dieselRate_RAY);
|
|
163
|
+
this.dieselRateRay = payload.dieselRate_RAY;
|
|
164
|
+
this.lastBaseInterestUpdate = payload.lastBaseInterestUpdate;
|
|
165
|
+
this.withdrawFee =
|
|
166
|
+
Number(payload.withdrawFee) / Number(PERCENTAGE_DECIMALS);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
async calculateBorrowRate({
|
|
170
|
+
provider,
|
|
171
|
+
expectedLiquidity,
|
|
172
|
+
availableLiquidity,
|
|
173
|
+
}: CalculateBorrowRateProps) {
|
|
174
|
+
const model = getContract({
|
|
175
|
+
address: this.interestModel.interestModel,
|
|
176
|
+
abi: iInterestRateModelAbi,
|
|
177
|
+
client: provider,
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
return model.read.calcBorrowRate([expectedLiquidity, availableLiquidity]);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
static getPoolType(name: string): PoolType {
|
|
184
|
+
const [identity = ""] = name.split(" ") || [];
|
|
185
|
+
const lc = identity.toLowerCase();
|
|
186
|
+
|
|
187
|
+
if (lc === "farm") return "farm";
|
|
188
|
+
if (lc === "trade") return "trade";
|
|
189
|
+
|
|
190
|
+
return "universal";
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
static calculateUtilization(expected: bigint, available: bigint) {
|
|
194
|
+
if (expected === 0n) return 0;
|
|
195
|
+
|
|
196
|
+
const borrowed = expected - available;
|
|
197
|
+
|
|
198
|
+
const u =
|
|
199
|
+
Number((borrowed * PERCENTAGE_FACTOR) / expected) /
|
|
200
|
+
Number(PERCENTAGE_DECIMALS);
|
|
201
|
+
|
|
202
|
+
return Math.max(0, u);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
interface CalculateBorrowRateProps {
|
|
207
|
+
provider: PublicClient;
|
|
208
|
+
expectedLiquidity: bigint;
|
|
209
|
+
availableLiquidity: bigint;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export class ChartsPoolData {
|
|
213
|
+
readonly address: Address;
|
|
214
|
+
readonly underlyingToken: Address;
|
|
215
|
+
readonly dieselToken: Address;
|
|
216
|
+
readonly type: PoolType;
|
|
217
|
+
readonly version: number;
|
|
218
|
+
readonly name: string;
|
|
219
|
+
|
|
220
|
+
readonly addLiqCount: number;
|
|
221
|
+
readonly addedLiquidity: number;
|
|
222
|
+
readonly removeLiqCount: number;
|
|
223
|
+
readonly removedLiquidity: number;
|
|
224
|
+
|
|
225
|
+
readonly earned7D: number;
|
|
226
|
+
readonly earned7DInUSD: number;
|
|
227
|
+
readonly utilization: number;
|
|
228
|
+
|
|
229
|
+
readonly dieselRate: number;
|
|
230
|
+
readonly dieselRateRay: bigint;
|
|
231
|
+
readonly depositAPY: number;
|
|
232
|
+
readonly depositAPYRay: bigint;
|
|
233
|
+
readonly borrowAPY: number;
|
|
234
|
+
readonly borrowAPYRay: bigint;
|
|
235
|
+
readonly lmAPY: number;
|
|
236
|
+
readonly lmRewardAll: Array<{ apy: number; token: Address }>;
|
|
237
|
+
|
|
238
|
+
readonly availableLiquidity: bigint;
|
|
239
|
+
readonly availableLiquidityChange: number;
|
|
240
|
+
readonly availableLiquidityInUSD: number;
|
|
241
|
+
|
|
242
|
+
readonly caLockedValue: number;
|
|
243
|
+
readonly caLockedValueChange: number;
|
|
244
|
+
readonly caLockedValueInUSD: number;
|
|
245
|
+
|
|
246
|
+
readonly expectedLiquidity: bigint;
|
|
247
|
+
readonly expectedLiquidityChange: number;
|
|
248
|
+
readonly expectedLiquidityInUSD: number;
|
|
249
|
+
readonly expectedLiqWeekAgo: number;
|
|
250
|
+
readonly expectedLiquidityLimit: bigint;
|
|
251
|
+
readonly expectedLiquidityLimitInUSD: number;
|
|
252
|
+
|
|
253
|
+
readonly totalBorrowed: bigint;
|
|
254
|
+
readonly totalBorrowedChange: number;
|
|
255
|
+
readonly totalBorrowedInUSD: number;
|
|
256
|
+
|
|
257
|
+
readonly debtWithInterest: bigint;
|
|
258
|
+
readonly debtWithInterestChange: number;
|
|
259
|
+
readonly debtWithInterestInUSD: number;
|
|
260
|
+
readonly debtWithInterestOld: bigint;
|
|
261
|
+
|
|
262
|
+
readonly oldAvailableLiquidity: bigint;
|
|
263
|
+
readonly oldCALockedValue: number;
|
|
264
|
+
readonly oldExpectedLiquidity: bigint;
|
|
265
|
+
readonly oldTotalBorrowed: bigint;
|
|
266
|
+
|
|
267
|
+
readonly withdrawFee: number;
|
|
268
|
+
|
|
269
|
+
readonly depositAPY1DAverage: number;
|
|
270
|
+
readonly depositAPY1DAverageChange: number;
|
|
271
|
+
readonly depositAPY7DAverage: number;
|
|
272
|
+
readonly depositAPY30DAverage: number;
|
|
273
|
+
|
|
274
|
+
readonly oldUniqueLPs: number;
|
|
275
|
+
readonly uniqueLPs: number;
|
|
276
|
+
readonly uniqueLPsChange: number;
|
|
277
|
+
|
|
278
|
+
constructor(payload: ChartsPoolDataPayload) {
|
|
279
|
+
this.address = (payload.addr || "").toLowerCase() as Address;
|
|
280
|
+
this.underlyingToken = (
|
|
281
|
+
payload.underlyingToken || ""
|
|
282
|
+
).toLowerCase() as Address;
|
|
283
|
+
this.dieselToken = (payload.dieselToken || "").toLowerCase() as Address;
|
|
284
|
+
this.type = PoolData_Legacy.getPoolType(payload.name || "");
|
|
285
|
+
this.version = payload.version || 1;
|
|
286
|
+
this.name = payload.name || "";
|
|
287
|
+
|
|
288
|
+
this.earned7D = payload.earned7D || 0;
|
|
289
|
+
this.earned7DInUSD = payload.earned7DInUSD || 0;
|
|
290
|
+
|
|
291
|
+
this.dieselRate = rayToNumber(payload.dieselRate_RAY || 0);
|
|
292
|
+
this.dieselRateRay = toBigInt(payload.dieselRate_RAY || 0);
|
|
293
|
+
this.depositAPY =
|
|
294
|
+
rayToNumber(payload.depositAPY_RAY || 0) * Number(PERCENTAGE_DECIMALS);
|
|
295
|
+
this.depositAPYRay = toBigInt(payload.depositAPY_RAY);
|
|
296
|
+
this.borrowAPY =
|
|
297
|
+
rayToNumber(payload.borrowAPY_RAY || 0) * Number(PERCENTAGE_DECIMALS);
|
|
298
|
+
this.borrowAPYRay = toBigInt(payload.borrowAPY_RAY || 0);
|
|
299
|
+
this.lmAPY = (payload.lmAPY || 0) / Number(PERCENTAGE_DECIMALS);
|
|
300
|
+
this.lmRewardAll = (payload.lmRewardAll || []).map(r => ({
|
|
301
|
+
apy: (r.apy || 0) / Number(PERCENTAGE_DECIMALS),
|
|
302
|
+
token: (r.token || "").toLowerCase() as Address,
|
|
303
|
+
}));
|
|
304
|
+
|
|
305
|
+
const expected = toBigInt(payload.expectedLiquidity || 0);
|
|
306
|
+
const available = toBigInt(payload.availableLiquidity || 0);
|
|
307
|
+
this.availableLiquidity = available;
|
|
308
|
+
this.oldAvailableLiquidity = toBigInt(payload.availableLiquidityOld || 0);
|
|
309
|
+
this.availableLiquidityChange =
|
|
310
|
+
(payload.availableLiquidity10kBasis || 0) * Number(PERCENTAGE_DECIMALS);
|
|
311
|
+
this.availableLiquidityInUSD = payload.availableLiquidityInUSD || 0;
|
|
312
|
+
|
|
313
|
+
this.utilization = PoolData_Legacy.calculateUtilization(
|
|
314
|
+
expected,
|
|
315
|
+
available,
|
|
316
|
+
);
|
|
317
|
+
|
|
318
|
+
this.caLockedValue = payload.caLockedValue || 0;
|
|
319
|
+
this.oldCALockedValue = payload.caLockedValueOld || 0;
|
|
320
|
+
this.caLockedValueChange =
|
|
321
|
+
(payload.caLockedValue10kBasis || 0) * Number(PERCENTAGE_DECIMALS);
|
|
322
|
+
this.caLockedValueInUSD = payload.caLockedValueUSD || 0;
|
|
323
|
+
|
|
324
|
+
this.expectedLiquidity = toBigInt(payload.expectedLiquidity || 0);
|
|
325
|
+
this.oldExpectedLiquidity = toBigInt(payload.expectedLiquidityOld || 0);
|
|
326
|
+
this.expectedLiquidityChange =
|
|
327
|
+
(payload.expectedLiquidity10kBasis || 0) * Number(PERCENTAGE_DECIMALS);
|
|
328
|
+
this.expectedLiquidityInUSD = payload.expectedLiquidityInUSD || 0;
|
|
329
|
+
this.expectedLiqWeekAgo = payload.expectedLiqWeekAgo || 0;
|
|
330
|
+
|
|
331
|
+
this.expectedLiquidityLimit = toBigInt(payload.expectedLiquidityLimit || 0);
|
|
332
|
+
this.expectedLiquidityLimitInUSD = payload.expectedLiquidityLimitInUSD || 0;
|
|
333
|
+
|
|
334
|
+
this.totalBorrowed = toBigInt(payload.totalBorrowed || 0);
|
|
335
|
+
this.oldTotalBorrowed = toBigInt(payload.totalBorrowedOld || 0);
|
|
336
|
+
this.totalBorrowedChange =
|
|
337
|
+
(payload.totalBorrowed10kBasis || 0) * Number(PERCENTAGE_DECIMALS);
|
|
338
|
+
this.totalBorrowedInUSD = payload.totalBorrowedInUSD || 0;
|
|
339
|
+
|
|
340
|
+
this.debtWithInterest = toBigInt(payload.debtWithInterest || 0);
|
|
341
|
+
this.debtWithInterestOld = toBigInt(payload.debtWithInterestOld || 0);
|
|
342
|
+
this.debtWithInterestChange =
|
|
343
|
+
(payload.debtWithInterest10kBasis || 0) * Number(PERCENTAGE_DECIMALS);
|
|
344
|
+
this.debtWithInterestInUSD = payload.debtWithInterestInUSD || 0;
|
|
345
|
+
|
|
346
|
+
this.withdrawFee = payload.withdrawFee || 0;
|
|
347
|
+
|
|
348
|
+
this.addLiqCount = payload.addLiqCount || 0;
|
|
349
|
+
this.addedLiquidity = payload.addedLiquidity || 0;
|
|
350
|
+
this.removeLiqCount = payload.removeLiqCount || 0;
|
|
351
|
+
this.removedLiquidity = payload.removedLiquidity || 0;
|
|
352
|
+
|
|
353
|
+
this.depositAPY1DAverage =
|
|
354
|
+
(payload.depositAPY1DAverage || 0) / Number(PERCENTAGE_DECIMALS);
|
|
355
|
+
this.depositAPY1DAverageChange =
|
|
356
|
+
(payload.depositAPY1DAverage10kBasis || 0) * Number(PERCENTAGE_DECIMALS);
|
|
357
|
+
this.depositAPY7DAverage =
|
|
358
|
+
(payload.depositAPY7DAverage || 0) / Number(PERCENTAGE_DECIMALS);
|
|
359
|
+
this.depositAPY30DAverage =
|
|
360
|
+
(payload.depositAPY30DAverage || 0) / Number(PERCENTAGE_DECIMALS);
|
|
361
|
+
|
|
362
|
+
this.uniqueLPs = payload.uniqueLPs || 0;
|
|
363
|
+
this.oldUniqueLPs = payload.uniqueLPsOld || 0;
|
|
364
|
+
this.uniqueLPsChange =
|
|
365
|
+
(payload.uniqueLPs10kBasis || 0) * Number(PERCENTAGE_DECIMALS);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
export class UserPoolData {
|
|
370
|
+
readonly id: string;
|
|
371
|
+
readonly address: Address;
|
|
372
|
+
readonly dieselToken: Address;
|
|
373
|
+
readonly underlyingToken: Address;
|
|
374
|
+
|
|
375
|
+
readonly depositAPY: number;
|
|
376
|
+
readonly depositAPYRay: bigint;
|
|
377
|
+
readonly lmRewardAll: Array<{ apy: number; token: Address }>;
|
|
378
|
+
|
|
379
|
+
readonly providedLiquidity: bigint;
|
|
380
|
+
readonly providedLiquidityInUSD: number;
|
|
381
|
+
|
|
382
|
+
readonly dieselBalance: bigint;
|
|
383
|
+
readonly dieselBalanceInUSD: number;
|
|
384
|
+
|
|
385
|
+
readonly userRewards: Array<{
|
|
386
|
+
token: Address;
|
|
387
|
+
pool: Address;
|
|
388
|
+
lmRewards: bigint;
|
|
389
|
+
lmRewardsInUSD: number;
|
|
390
|
+
}>;
|
|
391
|
+
|
|
392
|
+
readonly pnlInNativeToken: number;
|
|
393
|
+
readonly pnlInUSD: number;
|
|
394
|
+
|
|
395
|
+
readonly addedLiq: number;
|
|
396
|
+
readonly addLiqCount: number;
|
|
397
|
+
|
|
398
|
+
readonly removeLiqCount: number;
|
|
399
|
+
readonly removedLiq: number;
|
|
400
|
+
|
|
401
|
+
constructor(payload: UserPoolPayload) {
|
|
402
|
+
this.id = (payload.pool || "").toLowerCase();
|
|
403
|
+
this.address = (payload.pool || "").toLowerCase() as Address;
|
|
404
|
+
this.underlyingToken = (
|
|
405
|
+
payload.underlyingToken || ""
|
|
406
|
+
).toLowerCase() as Address;
|
|
407
|
+
this.dieselToken = (payload.dieselToken || "").toLowerCase() as Address;
|
|
408
|
+
|
|
409
|
+
this.depositAPY =
|
|
410
|
+
rayToNumber(payload.depositAPY_RAY || 0) * Number(PERCENTAGE_DECIMALS);
|
|
411
|
+
this.depositAPYRay = toBigInt(payload.depositAPY_RAY || 0);
|
|
412
|
+
this.lmRewardAll = (payload.lmRewardAll || []).map(r => ({
|
|
413
|
+
apy: (r.apy || 0) / Number(PERCENTAGE_DECIMALS),
|
|
414
|
+
token: (r.token || "").toLowerCase() as Address,
|
|
415
|
+
}));
|
|
416
|
+
|
|
417
|
+
this.providedLiquidity = toBigInt(payload.liqValue || 0);
|
|
418
|
+
this.providedLiquidityInUSD = payload.liqValueInUSD;
|
|
419
|
+
|
|
420
|
+
this.dieselBalance = toBigInt(payload.dieselBalanceBI || 0);
|
|
421
|
+
this.dieselBalanceInUSD = payload.dieselBalance;
|
|
422
|
+
|
|
423
|
+
this.userRewards = (payload.userRewards || []).map(r => ({
|
|
424
|
+
token: (r.rewardToken || "").toLowerCase() as Address,
|
|
425
|
+
pool: (r.pool || "").toLowerCase() as Address,
|
|
426
|
+
lmRewards: toBigInt(r.lmRewards || 0),
|
|
427
|
+
lmRewardsInUSD: r.lmRewardsInUSD,
|
|
428
|
+
}));
|
|
429
|
+
|
|
430
|
+
this.pnlInNativeToken = payload.liqPnlInNativeToken;
|
|
431
|
+
this.pnlInUSD = payload.liqPnlInUSD;
|
|
432
|
+
|
|
433
|
+
this.addedLiq = payload.addedLiq;
|
|
434
|
+
this.addLiqCount = payload.addLiqCount;
|
|
435
|
+
|
|
436
|
+
this.removeLiqCount = payload.removeLiqCount;
|
|
437
|
+
this.removedLiq = payload.removedLiq;
|
|
438
|
+
}
|
|
439
|
+
}
|