@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.
Files changed (275) hide show
  1. package/.eslintignore +3 -0
  2. package/.github/workflows/lint_pr.yml +18 -0
  3. package/.github/workflows/pr.yml +39 -0
  4. package/.github/workflows/release.yml +47 -0
  5. package/.gitignore +19 -0
  6. package/.husky/commit-msg +1 -0
  7. package/.husky/pre-commit +1 -0
  8. package/.nvmrc +1 -0
  9. package/.releaserc.json +34 -0
  10. package/.vscode/extensions.json +7 -0
  11. package/.vscode/settings.json +16 -0
  12. package/.yarn/install-state.gz +0 -0
  13. package/.yarnrc.yml +1 -0
  14. package/ContributionAgreement +72 -0
  15. package/dist/cjs/abi/iZapper.cjs +85 -0
  16. package/dist/cjs/abi/iZapper.d.ts +123 -0
  17. package/dist/cjs/sdk/index.cjs +19830 -19764
  18. package/dist/cjs/sdk/index.d.ts +3746 -3061
  19. package/dist/esm/abi/iZapper.d.mts +123 -0
  20. package/dist/esm/abi/iZapper.mjs +83 -0
  21. package/dist/esm/sdk/index.d.mts +3746 -3061
  22. package/dist/esm/sdk/index.mjs +19807 -19765
  23. package/jest.config.js +7 -0
  24. package/package.json +32 -2
  25. package/scripts/example.ts +30 -0
  26. package/src/abi/compressors.ts +3962 -0
  27. package/src/abi/errors.ts +196 -0
  28. package/src/abi/iERC20.ts +122 -0
  29. package/src/abi/iPausable.ts +35 -0
  30. package/src/abi/iPriceFeedStore.ts +227 -0
  31. package/src/abi/iUpdatablePriceFeed.ts +16 -0
  32. package/src/abi/iVersion.ts +28 -0
  33. package/src/abi/iZapper.ts +84 -0
  34. package/src/abi/routerV300.ts +378 -0
  35. package/src/abi/v300.ts +4151 -0
  36. package/src/abi/v310.ts +5179 -0
  37. package/src/adapters/AbstractAdapter.ts +28 -0
  38. package/src/adapters/BalancerV2VaultAdapterContract.ts +19 -0
  39. package/src/adapters/BalancerV3RouterAdapterContract.ts +19 -0
  40. package/src/adapters/CamelotV3AdapterContract.ts +20 -0
  41. package/src/adapters/ConvexV1BaseRewardPoolAdapterContract.ts +20 -0
  42. package/src/adapters/ConvexV1BoosterAdapterContract.ts +20 -0
  43. package/src/adapters/Curve2AssetsAdapterContract.ts +20 -0
  44. package/src/adapters/Curve3AssetsAdapterContract.ts +20 -0
  45. package/src/adapters/Curve4AssetsAdapterContract.ts +20 -0
  46. package/src/adapters/CurveV1AdapterStETHContract.ts +20 -0
  47. package/src/adapters/CurveV1StableNGAdapterContract.ts +20 -0
  48. package/src/adapters/DaiUsdsAdapterContract.ts +21 -0
  49. package/src/adapters/ERC4626AdapterContract.ts +20 -0
  50. package/src/adapters/MellowERC4626VaultAdapterContract.ts +20 -0
  51. package/src/adapters/MellowVaultAdapterContract.ts +20 -0
  52. package/src/adapters/PendleRouterAdapterContract.ts +21 -0
  53. package/src/adapters/StakingRewardsAdapterContract.ts +21 -0
  54. package/src/adapters/UniswapV2AdapterContract.ts +20 -0
  55. package/src/adapters/UniswapV3AdapterContract.ts +170 -0
  56. package/src/adapters/VelodromeV2AdapterContract.ts +20 -0
  57. package/src/adapters/WstETHV1AdapterContract.ts +20 -0
  58. package/src/adapters/YearnV2AdapterContract.ts +20 -0
  59. package/src/adapters/abi/adapters.ts +4325 -0
  60. package/src/adapters/abi/iBalancerV3RouterAdapter.ts +126 -0
  61. package/src/adapters/abi/index.ts +2 -0
  62. package/src/adapters/index.ts +2 -0
  63. package/src/adapters/plugin.ts +90 -0
  64. package/src/adapters/types.ts +62 -0
  65. package/src/dev/AccountOpener.ts +611 -0
  66. package/src/dev/PriceFeedStore.ts +95 -0
  67. package/src/dev/SDKExample.ts +167 -0
  68. package/src/dev/abi.ts +14 -0
  69. package/src/dev/calcLiquidatableLTs.ts +77 -0
  70. package/src/dev/createAnvilClient.ts +155 -0
  71. package/src/dev/index.ts +7 -0
  72. package/src/dev/setLTZero.ts +127 -0
  73. package/src/dev/setLTs.ts +68 -0
  74. package/src/sdk/GearboxSDK.ts +488 -0
  75. package/src/sdk/abi/index.ts +1 -0
  76. package/src/sdk/abi/oracles.ts +4614 -0
  77. package/src/sdk/accounts/CreditAccountsService.ts +1123 -0
  78. package/src/sdk/accounts/index.ts +1 -0
  79. package/src/sdk/base/AddressLabeller.ts +35 -0
  80. package/src/sdk/base/BaseContract.ts +237 -0
  81. package/src/sdk/base/IAddressLabeller.ts +13 -0
  82. package/src/sdk/base/PlaceholderContract.ts +12 -0
  83. package/src/sdk/base/SDKConstruct.ts +35 -0
  84. package/src/sdk/base/TokensMeta.ts +45 -0
  85. package/src/sdk/base/index.ts +6 -0
  86. package/src/sdk/base/types.ts +102 -0
  87. package/src/sdk/bots/BotsService.ts +92 -0
  88. package/src/sdk/bots/index.ts +2 -0
  89. package/src/sdk/bots/utils.ts +19 -0
  90. package/src/sdk/chain/Provider.ts +99 -0
  91. package/src/sdk/chain/chains.ts +41 -0
  92. package/src/sdk/chain/detectChain.ts +21 -0
  93. package/src/sdk/chain/index.ts +3 -0
  94. package/src/sdk/constants/address-provider.ts +47 -0
  95. package/src/sdk/constants/addresses.ts +82 -0
  96. package/src/sdk/constants/bot-permissions.ts +36 -0
  97. package/src/sdk/constants/index.ts +6 -0
  98. package/src/sdk/constants/math.ts +23 -0
  99. package/src/sdk/constants/networks.ts +38 -0
  100. package/src/sdk/constants/periphery.ts +7 -0
  101. package/src/sdk/core/BotListV3Contract.ts +103 -0
  102. package/src/sdk/core/GearStakingV3Contract.ts +84 -0
  103. package/src/sdk/core/address-provider/AbstractAddressProviderContract.ts +101 -0
  104. package/src/sdk/core/address-provider/AddressProviderV3Contract.ts +105 -0
  105. package/src/sdk/core/address-provider/AddressProviderV3_1Contract.ts +92 -0
  106. package/src/sdk/core/address-provider/getAddressProvider.ts +45 -0
  107. package/src/sdk/core/address-provider/index.ts +4 -0
  108. package/src/sdk/core/address-provider/types.ts +17 -0
  109. package/src/sdk/core/index.ts +3 -0
  110. package/src/sdk/gauges/GaugeStakingService.ts +100 -0
  111. package/src/sdk/gauges/index.ts +2 -0
  112. package/src/sdk/gauges/utils.ts +25 -0
  113. package/src/sdk/index.ts +17 -0
  114. package/src/sdk/market/MarketConfiguratorContract.ts +78 -0
  115. package/src/sdk/market/MarketRegister.ts +330 -0
  116. package/src/sdk/market/MarketSuite.ts +83 -0
  117. package/src/sdk/market/adapters/PlaceholderAdapterContracts.ts +18 -0
  118. package/src/sdk/market/adapters/factory.ts +34 -0
  119. package/src/sdk/market/adapters/index.ts +3 -0
  120. package/src/sdk/market/adapters/types.ts +7 -0
  121. package/src/sdk/market/credit/CreditConfiguratorV300Contract.ts +164 -0
  122. package/src/sdk/market/credit/CreditConfiguratorV310Contract.ts +139 -0
  123. package/src/sdk/market/credit/CreditFacadeV300Contract.ts +206 -0
  124. package/src/sdk/market/credit/CreditFacadeV310Contract.ts +190 -0
  125. package/src/sdk/market/credit/CreditManagerV300Contract.ts +122 -0
  126. package/src/sdk/market/credit/CreditManagerV310Contract.ts +122 -0
  127. package/src/sdk/market/credit/CreditSuite.ts +65 -0
  128. package/src/sdk/market/credit/createCreditConfigurator.ts +18 -0
  129. package/src/sdk/market/credit/createCreditFacade.ts +18 -0
  130. package/src/sdk/market/credit/createCreditManager.ts +18 -0
  131. package/src/sdk/market/credit/index.ts +8 -0
  132. package/src/sdk/market/credit/types.ts +42 -0
  133. package/src/sdk/market/index.ts +7 -0
  134. package/src/sdk/market/oracle/PriceOracleBaseContract.ts +376 -0
  135. package/src/sdk/market/oracle/PriceOracleV300Contract.ts +71 -0
  136. package/src/sdk/market/oracle/PriceOracleV310Contract.ts +43 -0
  137. package/src/sdk/market/oracle/createPriceOracle.ts +22 -0
  138. package/src/sdk/market/oracle/index.ts +4 -0
  139. package/src/sdk/market/oracle/types.ts +48 -0
  140. package/src/sdk/market/pool/GaugeContract.ts +120 -0
  141. package/src/sdk/market/pool/LinearInterestRateModelContract.ts +75 -0
  142. package/src/sdk/market/pool/PoolQuotaKeeperV300Contract.ts +89 -0
  143. package/src/sdk/market/pool/PoolQuotaKeeperV310Contract.ts +89 -0
  144. package/src/sdk/market/pool/PoolSuite.ts +76 -0
  145. package/src/sdk/market/pool/PoolV300Contract.ts +144 -0
  146. package/src/sdk/market/pool/PoolV310Contract.ts +144 -0
  147. package/src/sdk/market/pool/TumblerContract.ts +73 -0
  148. package/src/sdk/market/pool/createInterestRateModel.ts +33 -0
  149. package/src/sdk/market/pool/createPool.ts +19 -0
  150. package/src/sdk/market/pool/createPoolQuotaKeeper.ts +20 -0
  151. package/src/sdk/market/pool/createRateKeeper.ts +25 -0
  152. package/src/sdk/market/pool/index.ts +6 -0
  153. package/src/sdk/market/pool/types.ts +28 -0
  154. package/src/sdk/market/pricefeeds/AbstractLPPriceFeed.ts +71 -0
  155. package/src/sdk/market/pricefeeds/AbstractPriceFeed.ts +137 -0
  156. package/src/sdk/market/pricefeeds/BalancerStablePriceFeed.ts +24 -0
  157. package/src/sdk/market/pricefeeds/BalancerWeightedPriceFeed.ts +70 -0
  158. package/src/sdk/market/pricefeeds/BoundedPriceFeed.ts +34 -0
  159. package/src/sdk/market/pricefeeds/ChainlinkPriceFeed.ts +16 -0
  160. package/src/sdk/market/pricefeeds/CompositePriceFeed.ts +25 -0
  161. package/src/sdk/market/pricefeeds/CurveCryptoPriceFeed.ts +24 -0
  162. package/src/sdk/market/pricefeeds/CurveStablePriceFeed.ts +24 -0
  163. package/src/sdk/market/pricefeeds/CurveUSDPriceFeed.ts +24 -0
  164. package/src/sdk/market/pricefeeds/Erc4626PriceFeed.ts +36 -0
  165. package/src/sdk/market/pricefeeds/MellowLRTPriceFeed.ts +26 -0
  166. package/src/sdk/market/pricefeeds/PendleTWAPPTPriceFeed.ts +44 -0
  167. package/src/sdk/market/pricefeeds/PriceFeedRef.ts +34 -0
  168. package/src/sdk/market/pricefeeds/PriceFeedsRegister.ts +293 -0
  169. package/src/sdk/market/pricefeeds/RedstonePriceFeed.ts +65 -0
  170. package/src/sdk/market/pricefeeds/RedstoneUpdater.ts +304 -0
  171. package/src/sdk/market/pricefeeds/WstETHPriceFeed.ts +24 -0
  172. package/src/sdk/market/pricefeeds/YearnPriceFeed.ts +24 -0
  173. package/src/sdk/market/pricefeeds/ZeroPriceFeed.ts +17 -0
  174. package/src/sdk/market/pricefeeds/index.ts +20 -0
  175. package/src/sdk/market/pricefeeds/types.ts +82 -0
  176. package/src/sdk/market/pricefeeds/utils.ts +24 -0
  177. package/src/sdk/plugins/index.ts +10 -0
  178. package/src/sdk/router/PathOptionFactory.ts +147 -0
  179. package/src/sdk/router/RouterV3Contract.ts +558 -0
  180. package/src/sdk/router/index.ts +2 -0
  181. package/src/sdk/router/types.ts +48 -0
  182. package/src/sdk/sdk-gov-legacy/contracts/adapters.ts +39 -0
  183. package/src/sdk/sdk-gov-legacy/contracts/contracts.ts +647 -0
  184. package/src/sdk/sdk-gov-legacy/contracts/index.ts +2 -0
  185. package/src/sdk/sdk-gov-legacy/core/constants.ts +11 -0
  186. package/src/sdk/sdk-gov-legacy/index.ts +4 -0
  187. package/src/sdk/sdk-gov-legacy/oracles/PriceFeedType.ts +24 -0
  188. package/src/sdk/sdk-gov-legacy/oracles/index.ts +1 -0
  189. package/src/sdk/sdk-gov-legacy/tokens/aave.ts +101 -0
  190. package/src/sdk/sdk-gov-legacy/tokens/aura.ts +284 -0
  191. package/src/sdk/sdk-gov-legacy/tokens/balancer.ts +421 -0
  192. package/src/sdk/sdk-gov-legacy/tokens/compound.ts +79 -0
  193. package/src/sdk/sdk-gov-legacy/tokens/convex.ts +561 -0
  194. package/src/sdk/sdk-gov-legacy/tokens/curveLP.ts +480 -0
  195. package/src/sdk/sdk-gov-legacy/tokens/decimals.ts +301 -0
  196. package/src/sdk/sdk-gov-legacy/tokens/erc4626.ts +75 -0
  197. package/src/sdk/sdk-gov-legacy/tokens/gear.ts +273 -0
  198. package/src/sdk/sdk-gov-legacy/tokens/index.ts +18 -0
  199. package/src/sdk/sdk-gov-legacy/tokens/normal.ts +613 -0
  200. package/src/sdk/sdk-gov-legacy/tokens/quoted.ts +10 -0
  201. package/src/sdk/sdk-gov-legacy/tokens/stakingRewards.ts +41 -0
  202. package/src/sdk/sdk-gov-legacy/tokens/token.ts +2354 -0
  203. package/src/sdk/sdk-gov-legacy/tokens/tokenData.ts +44 -0
  204. package/src/sdk/sdk-gov-legacy/tokens/tokenType.ts +33 -0
  205. package/src/sdk/sdk-gov-legacy/tokens/wrapped.ts +28 -0
  206. package/src/sdk/sdk-gov-legacy/tokens/yearn.ts +122 -0
  207. package/src/sdk/sdk-gov-legacy/tokens/zircuit.ts +44 -0
  208. package/src/sdk/sdk-legacy/apy/index.ts +149 -0
  209. package/src/sdk/sdk-legacy/core/assets.ts +200 -0
  210. package/src/sdk/sdk-legacy/core/creditAccount.spec.ts +1966 -0
  211. package/src/sdk/sdk-legacy/core/creditAccount.ts +816 -0
  212. package/src/sdk/sdk-legacy/core/creditManager.ts +316 -0
  213. package/src/sdk/sdk-legacy/core/creditSession.ts +352 -0
  214. package/src/sdk/sdk-legacy/core/endpoint.ts +131 -0
  215. package/src/sdk/sdk-legacy/core/eventOrTx.ts +101 -0
  216. package/src/sdk/sdk-legacy/core/pool.ts +439 -0
  217. package/src/sdk/sdk-legacy/core/strategy.ts +82 -0
  218. package/src/sdk/sdk-legacy/core/transactions.ts +865 -0
  219. package/src/sdk/sdk-legacy/gearboxRewards/api.ts +704 -0
  220. package/src/sdk/sdk-legacy/gearboxRewards/apy.ts +267 -0
  221. package/src/sdk/sdk-legacy/gearboxRewards/extraAPY.ts +165 -0
  222. package/src/sdk/sdk-legacy/gearboxRewards/index.ts +3 -0
  223. package/src/sdk/sdk-legacy/gearboxRewards/merklAPI.ts +151 -0
  224. package/src/sdk/sdk-legacy/index.ts +21 -0
  225. package/src/sdk/sdk-legacy/pathfinder/core.ts +18 -0
  226. package/src/sdk/sdk-legacy/pathfinder/index.ts +1 -0
  227. package/src/sdk/sdk-legacy/payload/creditAccount.ts +48 -0
  228. package/src/sdk/sdk-legacy/payload/creditManager.ts +133 -0
  229. package/src/sdk/sdk-legacy/payload/creditSession.ts +143 -0
  230. package/src/sdk/sdk-legacy/payload/graphPayload.ts +10 -0
  231. package/src/sdk/sdk-legacy/payload/pool.ts +198 -0
  232. package/src/sdk/sdk-legacy/payload/token.ts +13 -0
  233. package/src/sdk/sdk-legacy/tokens/tokenData.ts +57 -0
  234. package/src/sdk/sdk-legacy/types/IAirdropDistributor.ts +103 -0
  235. package/src/sdk/sdk-legacy/types/IBaseRewardPool.ts +249 -0
  236. package/src/sdk/sdk-legacy/types/IDataCompressorV3.ts +957 -0
  237. package/src/sdk/sdk-legacy/types/IDegenDistributor.ts +70 -0
  238. package/src/sdk/sdk-legacy/types/IERC20Permit.ts +35 -0
  239. package/src/sdk/sdk-legacy/types/IERC20ZapperDeposits.ts +99 -0
  240. package/src/sdk/sdk-legacy/types/IETHZapperDeposits.ts +27 -0
  241. package/src/sdk/sdk-legacy/types/IFarmingPool.ts +229 -0
  242. package/src/sdk/sdk-legacy/types/IInterestRateModel.ts +23 -0
  243. package/src/sdk/sdk-legacy/types/IMulticall3.ts +242 -0
  244. package/src/sdk/sdk-legacy/types/IOffchainOracle.ts +31 -0
  245. package/src/sdk/sdk-legacy/types/index.ts +11 -0
  246. package/src/sdk/sdk-legacy/utils/formatter.ts +46 -0
  247. package/src/sdk/sdk-legacy/utils/index.ts +3 -0
  248. package/src/sdk/sdk-legacy/utils/math.ts +6 -0
  249. package/src/sdk/sdk-legacy/utils/price.ts +27 -0
  250. package/src/sdk/types/index.ts +5 -0
  251. package/src/sdk/types/logger.ts +13 -0
  252. package/src/sdk/types/state-human.ts +224 -0
  253. package/src/sdk/types/state.ts +8 -0
  254. package/src/sdk/types/transactions.ts +22 -0
  255. package/src/sdk/types/tvl.ts +4 -0
  256. package/src/sdk/utils/AddressMap.ts +111 -0
  257. package/src/sdk/utils/bytes32ToString.ts +6 -0
  258. package/src/sdk/utils/childLogger.ts +8 -0
  259. package/src/sdk/utils/createRawTx.ts +86 -0
  260. package/src/sdk/utils/etherscan.ts +42 -0
  261. package/src/sdk/utils/filterDust.ts +20 -0
  262. package/src/sdk/utils/formatter.ts +124 -0
  263. package/src/sdk/utils/index.ts +10 -0
  264. package/src/sdk/utils/internal/Hooks.ts +51 -0
  265. package/src/sdk/utils/internal/index.ts +1 -0
  266. package/src/sdk/utils/json.ts +27 -0
  267. package/src/sdk/utils/mappers.ts +38 -0
  268. package/src/sdk/utils/retry.ts +24 -0
  269. package/src/sdk/utils/viem/detectNetwork.ts +27 -0
  270. package/src/sdk/utils/viem/index.ts +3 -0
  271. package/src/sdk/utils/viem/sendRawTx.ts +36 -0
  272. package/src/sdk/utils/viem/simulateMulticall.ts +262 -0
  273. package/tsconfig.build.json +4 -0
  274. package/tsconfig.json +16 -0
  275. package/tsup.config.ts +77 -0
@@ -0,0 +1,316 @@
1
+ import type { Address } from "viem";
2
+
3
+ import { PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, RAY } from "../../constants";
4
+ import { toBigInt } from "../../utils";
5
+ import type {
6
+ ChartsCreditManagerPayload,
7
+ CreditManagerDataPayload,
8
+ QuotaInfo,
9
+ } from "../payload/creditManager";
10
+
11
+ export type CreditManagerType = "universal" | "trade" | "farm" | "restaking";
12
+
13
+ export class CreditManagerData_Legacy {
14
+ readonly address: Address;
15
+ readonly type: CreditManagerType;
16
+ readonly underlyingToken: Address;
17
+ readonly pool: Address;
18
+ readonly creditFacade: Address; // V2 only: address of creditFacade
19
+ readonly creditConfigurator: Address; // V2 only: address of creditFacade
20
+ readonly degenNFT: Address; // V2 only: degenNFT, address(0) if not in degen mode
21
+ readonly isDegenMode: boolean;
22
+ readonly version: number;
23
+ readonly isPaused: boolean;
24
+ readonly forbiddenTokenMask: bigint; // V2 only: mask which forbids some particular tokens
25
+ readonly isBorrowingForbidden: boolean;
26
+ readonly maxEnabledTokensLength: number;
27
+ readonly name: string;
28
+ readonly tier: number;
29
+ readonly marketConfigurator: Address;
30
+
31
+ readonly baseBorrowRate: number;
32
+
33
+ readonly minDebt: bigint;
34
+ readonly maxDebt: bigint;
35
+ readonly availableToBorrow: bigint;
36
+ readonly totalDebt: bigint;
37
+ readonly totalDebtLimit: bigint;
38
+
39
+ readonly feeInterest: number;
40
+ readonly feeLiquidation: number;
41
+ readonly liquidationDiscount: number;
42
+ readonly feeLiquidationExpired: number;
43
+ readonly liquidationDiscountExpired: number;
44
+
45
+ readonly collateralTokens: Array<Address> = [];
46
+ readonly supportedTokens: Record<Address, true> = {};
47
+ readonly usableTokens: Record<Address, true> = {};
48
+ readonly adapters: Record<Address, CreditManagerDataPayload["adapters"][1]> =
49
+ {};
50
+ readonly contractsByAdapter: Record<Address, Address> = {};
51
+ readonly liquidationThresholds: Record<Address, bigint>;
52
+ readonly quotas: Record<Address, QuotaInfo>;
53
+
54
+ constructor(payload: CreditManagerDataPayload) {
55
+ this.address = payload.addr.toLowerCase() as Address;
56
+ this.underlyingToken = payload.underlying.toLowerCase() as Address;
57
+ this.type = CreditManagerData_Legacy.getType(payload.name || "");
58
+ this.name = payload.name;
59
+ this.pool = payload.pool.toLowerCase() as Address;
60
+ this.tier = CreditManagerData_Legacy.getTier(payload.name);
61
+ this.creditFacade = payload.creditFacade.toLowerCase() as Address;
62
+ this.creditConfigurator =
63
+ payload.creditConfigurator.toLowerCase() as Address;
64
+ this.degenNFT = payload.degenNFT.toLowerCase() as Address;
65
+ this.isDegenMode = payload.isDegenMode;
66
+ this.version = Number(payload.cfVersion);
67
+ this.isPaused = payload.isPaused;
68
+ this.forbiddenTokenMask = payload.forbiddenTokenMask;
69
+ this.maxEnabledTokensLength = Number(payload.maxEnabledTokensLength);
70
+ this.isBorrowingForbidden = payload.isBorrowingForbidden;
71
+ this.marketConfigurator =
72
+ payload.marketConfigurator.toLowerCase() as Address;
73
+
74
+ this.baseBorrowRate = Number(
75
+ (payload.baseBorrowRate *
76
+ (BigInt(payload.feeInterest) + PERCENTAGE_FACTOR) *
77
+ PERCENTAGE_DECIMALS) /
78
+ RAY,
79
+ );
80
+
81
+ this.minDebt = payload.minDebt;
82
+ this.maxDebt = payload.maxDebt;
83
+ this.availableToBorrow = payload.availableToBorrow;
84
+ this.totalDebt = payload.totalDebt;
85
+ this.totalDebtLimit = payload.totalDebtLimit;
86
+
87
+ this.feeInterest = Number(payload.feeInterest);
88
+ this.feeLiquidation = Number(payload.feeLiquidation);
89
+ this.liquidationDiscount = Number(payload.liquidationDiscount);
90
+ this.feeLiquidationExpired = Number(payload.feeLiquidationExpired);
91
+ this.liquidationDiscountExpired = Number(
92
+ payload.liquidationDiscountExpired,
93
+ );
94
+
95
+ payload.adapters.forEach(a => {
96
+ const contractLc = a.targetContract.toLowerCase() as Address;
97
+ const adapterLc = a.address.toLowerCase() as Address;
98
+
99
+ this.adapters[contractLc] = {
100
+ address: adapterLc,
101
+ contractType: a.contractType,
102
+ version: a.version,
103
+ name: a.name,
104
+ targetContract: contractLc,
105
+ };
106
+ this.contractsByAdapter[adapterLc] = contractLc;
107
+ });
108
+
109
+ this.liquidationThresholds = payload.liquidationThresholds.reduce<
110
+ CreditManagerData_Legacy["liquidationThresholds"]
111
+ >((acc, [token, threshold]) => {
112
+ acc[token.toLowerCase() as Address] = BigInt(threshold);
113
+ return acc;
114
+ }, {});
115
+
116
+ this.quotas = payload.quotas.reduce<CreditManagerData_Legacy["quotas"]>(
117
+ (acc, q) => {
118
+ const addressLc = q.token.toLowerCase() as Address;
119
+
120
+ acc[addressLc] = {
121
+ token: addressLc,
122
+ rate: BigInt(q.rate) * PERCENTAGE_DECIMALS,
123
+ quotaIncreaseFee: BigInt(q.quotaIncreaseFee),
124
+ totalQuoted: q.totalQuoted,
125
+ limit: q.limit,
126
+ isActive: q.isActive,
127
+ };
128
+
129
+ return acc;
130
+ },
131
+ {},
132
+ );
133
+
134
+ payload.collateralTokens.forEach(t => {
135
+ const tLc = t.toLowerCase() as Address;
136
+
137
+ const zeroLt = this.liquidationThresholds[tLc] === 0n;
138
+ const quotaNotActive = this.quotas[tLc]?.isActive === false;
139
+
140
+ const allowed = !zeroLt && !quotaNotActive;
141
+ if (allowed) this.usableTokens[tLc] = true;
142
+
143
+ this.collateralTokens.push(tLc);
144
+ this.supportedTokens[tLc] = true;
145
+ });
146
+ }
147
+
148
+ isQuoted(token: Address) {
149
+ return !!this.quotas[token];
150
+ }
151
+
152
+ static getTier(name: string): number {
153
+ const DEFAULT_TIER = 99;
154
+ const l = name.split(" ") || [];
155
+
156
+ const index = l.findIndex(w => w.toLowerCase() === "tier");
157
+ if (index < 0) return DEFAULT_TIER;
158
+
159
+ const number = l[index + 1];
160
+
161
+ const n = Number(number || DEFAULT_TIER);
162
+ return Number.isNaN(n) ? DEFAULT_TIER : n;
163
+ }
164
+
165
+ static getType(name: string): CreditManagerType {
166
+ const [identity = ""] = name.split(" ") || [];
167
+ const lc = identity.toLowerCase();
168
+
169
+ if (lc === "farm") return "farm";
170
+ if (lc === "trade") return "trade";
171
+ if (lc === "restaking") return "restaking";
172
+
173
+ return "universal";
174
+ }
175
+ }
176
+
177
+ export class ChartsCreditManagerData {
178
+ readonly address: Address;
179
+ readonly underlyingToken: Address;
180
+ readonly configurator: Address;
181
+ readonly creditFacade: Address;
182
+ readonly pool: Address;
183
+ readonly version: number;
184
+ readonly name: string;
185
+ readonly tier: number;
186
+
187
+ readonly borrowRate: number;
188
+ readonly borrowRateOld: number;
189
+ readonly borrowRateChange: number;
190
+
191
+ readonly minAmount: bigint;
192
+ readonly maxAmount: bigint;
193
+ readonly maxLeverageFactor: number; // for V1 only
194
+ readonly availableLiquidity: bigint;
195
+
196
+ readonly feeInterest: number;
197
+ readonly feeLiquidation: number;
198
+ readonly feeLiquidationExpired: number;
199
+
200
+ readonly openedAccountsCount: number;
201
+ readonly totalOpenedAccounts: number;
202
+ readonly totalClosedAccounts: number;
203
+ readonly totalRepaidAccounts: number;
204
+ readonly totalLiquidatedAccounts: number;
205
+
206
+ readonly totalBorrowed: bigint;
207
+ readonly totalBorrowedOld: bigint;
208
+ readonly totalBorrowedChange: number;
209
+ readonly totalDebtLimit: bigint;
210
+
211
+ readonly totalRepaid: bigint;
212
+
213
+ readonly totalProfit: bigint;
214
+ readonly totalProfitOld: bigint;
215
+ readonly pnlChange: number;
216
+ readonly totalLosses: bigint;
217
+ readonly totalLossesOld: bigint;
218
+
219
+ readonly totalBorrowedInUSD: number;
220
+ readonly totalLossesInUSD: number;
221
+ readonly totalProfitInUSD: number;
222
+ readonly totalRepaidInUSD: number;
223
+ readonly availableLiquidityInUSD: number;
224
+ readonly openedAccountsCountChange: number;
225
+ readonly totalOpenedAccountsChange: number;
226
+ readonly totalClosedAccountsChange: number;
227
+ readonly totalLiquidatedAccountsChange: number;
228
+
229
+ readonly liquidationThresholds: Record<string, bigint>;
230
+
231
+ constructor(payload: ChartsCreditManagerPayload) {
232
+ this.address = (payload.addr || "").toLowerCase() as Address;
233
+ this.underlyingToken = (
234
+ payload.underlyingToken || ""
235
+ ).toLowerCase() as Address;
236
+ this.configurator = (payload.configurator || "").toLowerCase() as Address;
237
+ this.creditFacade = (payload.creditFacade || "").toLowerCase() as Address;
238
+ this.pool = (payload.poolAddress || "").toLowerCase() as Address;
239
+ this.version = payload.version || 2;
240
+ this.name = payload.name || "";
241
+ this.tier = CreditManagerData_Legacy.getTier(payload.name || "");
242
+
243
+ this.borrowRate = Number(
244
+ (toBigInt(payload.borrowRate || 0) *
245
+ (toBigInt(payload.feeInterest || 0) + PERCENTAGE_FACTOR) *
246
+ PERCENTAGE_DECIMALS) /
247
+ RAY,
248
+ );
249
+ this.borrowRateOld = Number(
250
+ (toBigInt(payload.borrowRateOld || 0) *
251
+ (toBigInt(payload.feeInterest || 0) + PERCENTAGE_FACTOR) *
252
+ PERCENTAGE_DECIMALS) /
253
+ RAY,
254
+ );
255
+ this.borrowRateChange = Number(
256
+ toBigInt(payload.borrowRate10kBasis || 0) * PERCENTAGE_DECIMALS,
257
+ );
258
+
259
+ this.maxLeverageFactor = payload.maxLeverageFactor || 0;
260
+
261
+ this.feeInterest = payload.feeInterest || 0;
262
+ this.feeLiquidation = payload.feeLiquidation || 0;
263
+ this.feeLiquidationExpired = payload.feeLiquidationExpired || 0;
264
+
265
+ this.minAmount = toBigInt(payload.minAmount || 0);
266
+ this.maxAmount = toBigInt(payload.maxAmount || 0);
267
+
268
+ this.availableLiquidity = toBigInt(payload.availableLiquidity || 0);
269
+ this.availableLiquidityInUSD = payload.availableLiquidityInUSD || 0;
270
+
271
+ this.liquidationThresholds = Object.entries(
272
+ payload.liquidityThresholds || {},
273
+ ).reduce<Record<string, bigint>>((acc, [t, tr]) => {
274
+ acc[t.toLowerCase()] = BigInt(tr);
275
+
276
+ return acc;
277
+ }, {});
278
+
279
+ this.totalBorrowed = toBigInt(payload.totalBorrowed || 0);
280
+ this.totalBorrowedOld = toBigInt(payload.totalBorrowedBIOld || 0);
281
+ this.totalBorrowedInUSD = payload.totalBorrowedInUSD || 0;
282
+ this.totalBorrowedChange = Number(
283
+ toBigInt(payload.totalBorrowedBI10kBasis || 0) * PERCENTAGE_DECIMALS,
284
+ );
285
+ this.totalDebtLimit = toBigInt(payload.totalDebtLimit || 0);
286
+
287
+ this.totalLosses = toBigInt(payload.totalLosses || 0);
288
+ this.totalLossesOld = toBigInt(payload.totalLossesOld || 0);
289
+ this.totalLossesInUSD = payload.totalLossesInUSD || 0;
290
+
291
+ this.totalRepaid = toBigInt(payload.totalRepaid || 0);
292
+ this.totalRepaidInUSD = payload.totalRepaidInUSD || 0;
293
+
294
+ this.totalProfit = toBigInt(payload.totalProfit || 0);
295
+ this.totalProfitOld = toBigInt(payload.totalProfitOld || 0);
296
+ this.totalProfitInUSD = payload.totalProfitInUSD || 0;
297
+ this.pnlChange = Number(
298
+ toBigInt(payload.pnl10kBasis || 0) * PERCENTAGE_DECIMALS,
299
+ );
300
+
301
+ this.openedAccountsCount = payload.openedAccountsCount || 0;
302
+ this.openedAccountsCountChange = payload.openedAccountsCountChange || 0;
303
+
304
+ this.totalOpenedAccounts = payload.totalOpenedAccounts || 0;
305
+ this.totalOpenedAccountsChange = payload.totalOpenedAccountsChange || 0;
306
+
307
+ this.totalClosedAccounts = payload.totalClosedAccounts || 0;
308
+ this.totalClosedAccountsChange = payload.totalClosedAccountsChange || 0;
309
+
310
+ this.totalRepaidAccounts = payload.totalRepaidAccounts || 0;
311
+
312
+ this.totalLiquidatedAccounts = payload.totalLiquidatedAccounts || 0;
313
+ this.totalLiquidatedAccountsChange =
314
+ payload.totalLiquidatedAccountsChange || 0;
315
+ }
316
+ }
@@ -0,0 +1,352 @@
1
+ import type { Address } from "viem";
2
+
3
+ import { PERCENTAGE_DECIMALS } from "../../constants";
4
+ import { toBigInt, TypedObjectUtils } from "../../utils";
5
+ import type {
6
+ CreditSessionFilteredPayload,
7
+ CreditSessionPayload,
8
+ CreditSessionsAggregatedStatsPayload,
9
+ SecondaryStatus,
10
+ UserCreditSessionsAggregatedStatsPayload,
11
+ } from "../payload/creditSession";
12
+ import type { AssetWithView } from "./assets";
13
+
14
+ export interface CreditSessionAsset extends AssetWithView {
15
+ ind: number;
16
+ isForbidden: boolean;
17
+ isEnabled: boolean;
18
+
19
+ quota: bigint;
20
+ quotaIndexLU: bigint;
21
+ isQuoted: boolean;
22
+ }
23
+
24
+ export interface CreditSessionReward extends AssetWithView {
25
+ pool: Address;
26
+ }
27
+
28
+ export type CreditSessionStatus =
29
+ | "active"
30
+ | "closed"
31
+ | "repaid"
32
+ | "liquidated"
33
+ | "liquidateExpired"
34
+ | "liquidatePaused";
35
+
36
+ export const CREDIT_SESSION_STATUS_BY_ID: Record<number, CreditSessionStatus> =
37
+ {
38
+ 0: "active",
39
+ 1: "closed",
40
+ 2: "repaid",
41
+ 3: "liquidated",
42
+ 4: "liquidateExpired",
43
+ 5: "liquidatePaused",
44
+ };
45
+
46
+ export const CREDIT_SESSION_ID_BY_STATUS = TypedObjectUtils.swapKeyValue(
47
+ CREDIT_SESSION_STATUS_BY_ID,
48
+ );
49
+
50
+ export class CreditSession {
51
+ readonly id: string;
52
+ readonly status: CreditSessionStatus;
53
+ readonly borrower: Address;
54
+ readonly creditManager: Address;
55
+ readonly account: Address;
56
+ readonly underlyingToken: Address;
57
+ readonly version: number;
58
+
59
+ readonly since: number;
60
+ readonly closedAt: number;
61
+
62
+ readonly initialAmount: bigint;
63
+ readonly borrowedAmount: bigint;
64
+ readonly totalValue: bigint;
65
+ readonly healthFactor: number;
66
+
67
+ readonly profitInUSD: number;
68
+ readonly profitInUnderlying: number;
69
+ readonly collateralInUSD: number;
70
+ readonly collateralInUnderlying: number;
71
+ readonly roi: number;
72
+ readonly apy: number;
73
+ readonly currentBlock: number;
74
+ readonly currentTimestamp: number;
75
+
76
+ readonly baseBorrowAPY7DAverage: number;
77
+ readonly baseBorrowAPY_RAY: bigint;
78
+ readonly baseToken: Address;
79
+ readonly pool: Address;
80
+
81
+ readonly entryPrice: number;
82
+ readonly closePrice: number;
83
+ readonly quoteToken: Address;
84
+ readonly tradingToken: Address;
85
+
86
+ readonly sinceTimestamp: number;
87
+ readonly closedAtTimestamp: number;
88
+
89
+ readonly borrowAPY_RAY: bigint;
90
+ readonly borrowAPY7DAverage: number;
91
+ readonly totalValueUSD: number;
92
+ readonly debt: bigint;
93
+ readonly debtUSD: number;
94
+ readonly leverage: number;
95
+ readonly tfIndex: number;
96
+
97
+ readonly spotDebt: bigint;
98
+ readonly spotTotalValue: bigint;
99
+ readonly spotUserFunds: bigint;
100
+
101
+ readonly cvxUnclaimedRewards: Array<CreditSessionReward>;
102
+ readonly balances: Array<CreditSessionAsset> = [];
103
+ readonly forbiddenTokens: Record<string, true> = {};
104
+ readonly disabledTokens: Record<string, true> = {};
105
+ readonly teritaryStatus: SecondaryStatus;
106
+
107
+ constructor(payload: CreditSessionPayload) {
108
+ this.id = (payload.id || "").toLowerCase();
109
+ this.teritaryStatus = payload.teritaryStatus || { secStatus: [] };
110
+ this.status = CREDIT_SESSION_STATUS_BY_ID[payload.status || 0];
111
+ this.borrower = (payload.borrower || "").toLowerCase() as Address;
112
+ this.creditManager = (payload.creditManager || "").toLowerCase() as Address;
113
+ this.account = (payload.account || "").toLowerCase() as Address;
114
+ this.underlyingToken = (
115
+ payload.underlyingToken || ""
116
+ ).toLowerCase() as Address;
117
+ this.version = payload.version || 2;
118
+
119
+ this.initialAmount = toBigInt(payload.initialAmount || 0);
120
+ this.borrowedAmount = toBigInt(payload.borrowedAmount || 0);
121
+ this.totalValue = toBigInt(payload.totalValue || 0);
122
+ this.healthFactor = Number(toBigInt(payload.healthFactor || 0));
123
+
124
+ this.since = payload.since || 0;
125
+ this.closedAt = payload.closedAt || 0;
126
+ this.sinceTimestamp = payload.sinceTimestamp || 0;
127
+ this.closedAtTimestamp = payload.closedAtTimestamp || 0;
128
+
129
+ this.profitInUSD = payload.profitInUSD || 0;
130
+ this.profitInUnderlying = payload.profitInUnderlying || 0;
131
+ this.collateralInUSD = payload.collateralInUSD || 0;
132
+ this.collateralInUnderlying = payload.collateralInUnderlying || 0;
133
+
134
+ this.baseBorrowAPY7DAverage = payload.baseBorrowAPY7DAverage || 0;
135
+ this.baseBorrowAPY_RAY = toBigInt(payload.baseBorrowAPY_RAY || 0);
136
+ this.baseToken = (payload.tradingToken || "").toLowerCase() as Address;
137
+ this.pool = (payload.tradingToken || "").toLowerCase() as Address;
138
+
139
+ this.entryPrice = payload.entryPrice || 0;
140
+ this.closePrice = payload.closePrice || 0;
141
+ this.tradingToken = (payload.tradingToken || "").toLowerCase() as Address;
142
+ this.quoteToken = (payload.quoteToken || "").toLowerCase() as Address;
143
+
144
+ this.borrowAPY_RAY = toBigInt(payload.borrowAPY_RAY || 0);
145
+ this.borrowAPY7DAverage =
146
+ (payload.borrowAPY7DAverage || 0) * Number(PERCENTAGE_DECIMALS);
147
+ this.totalValueUSD = payload.totalValueUSD || 0;
148
+ this.debt = toBigInt(payload.debt || 0);
149
+ this.debtUSD = payload.debtUSD || 0;
150
+ this.leverage = payload.leverage || 0;
151
+ this.tfIndex = (payload.tfIndex || 0) * Number(PERCENTAGE_DECIMALS);
152
+
153
+ this.roi = (payload.roi || 0) / Number(PERCENTAGE_DECIMALS);
154
+ this.apy = (payload.apy || 0) / Number(PERCENTAGE_DECIMALS);
155
+
156
+ this.currentBlock = payload.currentBlock || 0;
157
+ this.currentTimestamp = payload.currentTimestamp || 0;
158
+
159
+ this.spotDebt = toBigInt(payload.spotDebt || 0);
160
+ this.spotTotalValue = toBigInt(payload.spotTotalValue || 0);
161
+ this.spotUserFunds = toBigInt(payload.spotUserFunds || 0);
162
+
163
+ this.cvxUnclaimedRewards = Object.entries(
164
+ payload.cvxUnclaimedRewards || {},
165
+ ).map(([t, b]): CreditSessionReward => {
166
+ return {
167
+ token: t.toLowerCase() as Address,
168
+ balance: toBigInt(b.bi || 0),
169
+ balanceView: b.f.toString(),
170
+ pool: b.pool.toLowerCase() as Address,
171
+ };
172
+ });
173
+
174
+ Object.entries(payload.balances || {}).forEach(([t, b]) => {
175
+ const token = t.toLowerCase();
176
+
177
+ if (!b.isEnabled) {
178
+ this.disabledTokens[token] = true;
179
+ }
180
+ if (b.isForbidden) {
181
+ this.forbiddenTokens[token] = true;
182
+ }
183
+
184
+ this.balances.push({
185
+ token: token.toLowerCase() as Address,
186
+ balance: toBigInt(b.BI || 0),
187
+ balanceView: b.F.toString(),
188
+
189
+ ind: b.ind,
190
+
191
+ isEnabled: b.isEnabled,
192
+ isForbidden: b.isForbidden,
193
+
194
+ quota: toBigInt(b.quota || 0),
195
+ quotaIndexLU: toBigInt(b.quotaIndexLU || 0),
196
+ isQuoted: b.isQuoted || false,
197
+ });
198
+ });
199
+ }
200
+ }
201
+
202
+ export class CreditSessionFiltered {
203
+ readonly id: string;
204
+ readonly borrower: Address;
205
+ readonly account: Address;
206
+ readonly creditManager: Address;
207
+ readonly underlyingToken: Address;
208
+
209
+ readonly status: CreditSessionStatus;
210
+ readonly since: number;
211
+ readonly closedAt: number;
212
+
213
+ readonly sinceTimestamp: number;
214
+ readonly closedAtTimestamp: number;
215
+
216
+ readonly healthFactor: number;
217
+ readonly leverage: number;
218
+
219
+ readonly debt: bigint;
220
+ readonly debtUSD: number;
221
+ readonly totalValue: bigint;
222
+ readonly totalValueUSD: number;
223
+
224
+ readonly profitInUSD: number;
225
+ readonly profitInUnderlying: number;
226
+
227
+ readonly tfIndex: number;
228
+
229
+ readonly balances: Array<AssetWithView>;
230
+ readonly teritaryStatus: SecondaryStatus;
231
+
232
+ constructor(payload: CreditSessionFilteredPayload) {
233
+ this.id = (payload.id || "").toLowerCase();
234
+ this.borrower = (payload.borrower || "").toLowerCase() as Address;
235
+ this.account = (payload.account || "").toLowerCase() as Address;
236
+ this.creditManager = (payload.creditManager || "").toLowerCase() as Address;
237
+ this.underlyingToken = (
238
+ payload.underlyingToken || ""
239
+ ).toLowerCase() as Address;
240
+
241
+ this.teritaryStatus = payload.teritaryStatus || { secStatus: [] };
242
+ this.status = CREDIT_SESSION_STATUS_BY_ID[payload.status || 0];
243
+ this.since = payload.since || 0;
244
+ this.closedAt = payload.closedAt || 0;
245
+ this.sinceTimestamp = payload.sinceTimestamp || 0;
246
+ this.closedAtTimestamp = payload.closedAtTimestamp || 0;
247
+
248
+ this.healthFactor = Number(toBigInt(payload.healthFactor || 0));
249
+ this.leverage = payload.leverage || 0;
250
+
251
+ this.debt = toBigInt(payload.debt || 0);
252
+ this.debtUSD = payload.debtUSD || 0;
253
+ this.totalValue = toBigInt(payload.totalValue || 0);
254
+ this.totalValueUSD = payload.totalValueUSD || 0;
255
+
256
+ this.profitInUSD = payload.pnlUSD || 0;
257
+ this.profitInUnderlying = payload.pnl || 0;
258
+
259
+ this.tfIndex = (payload.tfIndex || 0) * Number(PERCENTAGE_DECIMALS);
260
+
261
+ this.balances = Object.entries(payload.balances || {}).map(
262
+ ([token, balance]) => ({
263
+ token: token.toLowerCase() as Address,
264
+ balance: toBigInt(balance.BI || 0),
265
+ balanceView: balance.F.toString(),
266
+ }),
267
+ );
268
+ }
269
+ }
270
+
271
+ export type CreditSessionSortFields =
272
+ | "type"
273
+ | "tvl"
274
+ | "hf"
275
+ | "debt"
276
+ | "pnl"
277
+ | "leverage"
278
+ | "tfIndex";
279
+ export type CreditSessionSortType = "asc" | "desc";
280
+
281
+ export interface UserCreditSessions
282
+ extends Omit<
283
+ UserCreditSessionsAggregatedStatsPayload,
284
+ "accounts" | "totalValue10kBasis"
285
+ > {
286
+ totalValueChange: number;
287
+ accounts: Array<CreditSession>;
288
+ }
289
+
290
+ type AggregatedOmit =
291
+ | "healthFactor10kBasis"
292
+ | "leverage10kBasis"
293
+ | "activeAccounts10kBasis"
294
+ | "openedAccounts10kBasis"
295
+ | "healthFactor"
296
+ | "healthFactorOld";
297
+
298
+ export type CreditSessionsAggregatedStats = Omit<
299
+ CreditSessionsAggregatedStatsPayload,
300
+ AggregatedOmit
301
+ > & {
302
+ healthFactorChange: number;
303
+ leverageChange: number;
304
+ activeAccountsChange: number;
305
+ openedAccountsChange: number;
306
+ healthFactor: bigint;
307
+ healthFactorOld: bigint;
308
+ };
309
+
310
+ export class UserCreditSessionsBuilder {
311
+ static buildUserCreditSessions(
312
+ payload: UserCreditSessionsAggregatedStatsPayload,
313
+ ): UserCreditSessions {
314
+ const { accounts, totalValue10kBasis = 0, ...sessionsUnfiltered } = payload;
315
+
316
+ return {
317
+ ...sessionsUnfiltered,
318
+ totalValueChange: totalValue10kBasis * Number(PERCENTAGE_DECIMALS),
319
+ accounts: accounts.map(p => new CreditSession(p)),
320
+ };
321
+ }
322
+
323
+ static buildCreditSessionsAggregatedStats(
324
+ payload: CreditSessionsAggregatedStatsPayload,
325
+ ): CreditSessionsAggregatedStats {
326
+ const {
327
+ healthFactor10kBasis = 0,
328
+ leverage10kBasis = 0,
329
+ activeAccounts10kBasis = 0,
330
+ openedAccounts10kBasis = 0,
331
+ healthFactor = 0,
332
+ healthFactorOld = 0,
333
+ leverage,
334
+ leverageOld,
335
+ ...rest
336
+ } = payload;
337
+
338
+ return {
339
+ ...rest,
340
+ leverage: leverage,
341
+ leverageOld: leverageOld,
342
+ healthFactorChange: healthFactor10kBasis * Number(PERCENTAGE_DECIMALS),
343
+ leverageChange: leverage10kBasis * Number(PERCENTAGE_DECIMALS),
344
+ activeAccountsChange:
345
+ activeAccounts10kBasis * Number(PERCENTAGE_DECIMALS),
346
+ openedAccountsChange:
347
+ openedAccounts10kBasis * Number(PERCENTAGE_DECIMALS),
348
+ healthFactor: toBigInt(healthFactor || 0),
349
+ healthFactorOld: toBigInt(healthFactorOld || 0),
350
+ };
351
+ }
352
+ }