@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,139 @@
1
+ import type {
2
+ Address,
3
+ ContractEventName,
4
+ DecodeFunctionDataReturnType,
5
+ Log,
6
+ } from "viem";
7
+
8
+ import { iCreditConfiguratorV310Abi } from "../../../abi/v310";
9
+ import type { CreditManagerData } from "../../base";
10
+ import { BaseContract } from "../../base";
11
+ import { RAMP_DURATION_BY_NETWORK } from "../../constants";
12
+ import type { GearboxSDK } from "../../GearboxSDK";
13
+ import { formatDuration, percentFmt } from "../../utils";
14
+ import type { RampEvent } from "./CreditConfiguratorV300Contract";
15
+ import type { ICreditConfiguratorContract } from "./types";
16
+
17
+ const abi = iCreditConfiguratorV310Abi;
18
+ type abi = typeof abi;
19
+
20
+ export class CreditConfiguratorV310Contract
21
+ extends BaseContract<abi>
22
+ implements ICreditConfiguratorContract
23
+ {
24
+ public readonly adapters: Address[] = [];
25
+ public isPaused = false;
26
+
27
+ constructor(
28
+ sdk: GearboxSDK,
29
+ { creditConfigurator, creditManager }: CreditManagerData,
30
+ ) {
31
+ super(sdk, {
32
+ ...creditConfigurator.baseParams,
33
+ name: `CreditConfigurator(${creditManager.name})`,
34
+ abi,
35
+ });
36
+ }
37
+
38
+ public override processLog(
39
+ log: Log<
40
+ bigint,
41
+ number,
42
+ false,
43
+ undefined,
44
+ undefined,
45
+ abi,
46
+ ContractEventName<abi>
47
+ >,
48
+ ): void {
49
+ switch (log.eventName) {
50
+ case "AddCollateralToken":
51
+ case "AllowAdapter":
52
+ case "AllowToken":
53
+ case "CreditConfiguratorUpgraded":
54
+ case "ForbidAdapter":
55
+ case "ForbidToken":
56
+ case "ScheduleTokenLiquidationThresholdRamp":
57
+ case "SetBorrowingLimits":
58
+ case "SetCreditFacade":
59
+ case "SetExpirationDate":
60
+ case "SetLossPolicy":
61
+ case "SetMaxDebtPerBlockMultiplier":
62
+ case "SetPriceOracle":
63
+ case "SetTokenLiquidationThreshold":
64
+ case "UpdateFees":
65
+ this.dirty = true;
66
+ break;
67
+ }
68
+ }
69
+
70
+ public async checkRamps(): Promise<RampEvent[]> {
71
+ let fromBlock =
72
+ this.sdk.currentBlock -
73
+ RAMP_DURATION_BY_NETWORK[this.sdk.provider.networkType];
74
+ fromBlock = fromBlock < 0n ? 0n : fromBlock;
75
+
76
+ const logs = await this.provider.publicClient.getContractEvents({
77
+ address: this.address,
78
+ abi: this.abi,
79
+ fromBlock,
80
+ eventName: "ScheduleTokenLiquidationThresholdRamp",
81
+ strict: true,
82
+ });
83
+
84
+ return logs.map(({ args }) => args);
85
+ }
86
+
87
+ public parseFunctionParams(
88
+ params: DecodeFunctionDataReturnType<abi>,
89
+ ): Array<string> | undefined {
90
+ switch (params.functionName) {
91
+ case "addCollateralToken":
92
+ case "setLiquidationThreshold": {
93
+ const [token, lt] = params.args;
94
+ return [this.labelAddress(token), percentFmt(lt)];
95
+ }
96
+ case "setExpirationDate": {
97
+ const [expirationDate] = params.args;
98
+ // TODO: add date format
99
+ return [`${expirationDate}`];
100
+ }
101
+ case "setFees": {
102
+ const [
103
+ feeLiquidation,
104
+ liquidationPremium,
105
+ feeLiquidationExpired,
106
+ liquidationPremiumExpired,
107
+ ] = params.args;
108
+ return [
109
+ percentFmt(feeLiquidation),
110
+ percentFmt(liquidationPremium),
111
+ percentFmt(feeLiquidationExpired),
112
+ percentFmt(liquidationPremiumExpired),
113
+ ];
114
+ }
115
+ // case "setMinDebtLimit":
116
+ // case "setMaxDebtLimit": {
117
+ // const [debt] = params.args;
118
+ // return [this.factory.convertUnderlying(debt)];
119
+ // }
120
+ case "setCreditFacade": {
121
+ const [newCreditFacade, migrateParams] = params.args;
122
+ return [this.labelAddress(newCreditFacade), `${migrateParams}`];
123
+ }
124
+ case "rampLiquidationThreshold": {
125
+ const [token, liquidationThresholdFinal, rampStart, rampDuration] =
126
+ params.args;
127
+ return [
128
+ this.labelAddress(token),
129
+ percentFmt(liquidationThresholdFinal),
130
+ `${rampStart}`,
131
+ formatDuration(rampDuration),
132
+ ];
133
+ }
134
+
135
+ default:
136
+ return undefined;
137
+ }
138
+ }
139
+ }
@@ -0,0 +1,206 @@
1
+ import type {
2
+ Address,
3
+ ContractEventName,
4
+ DecodeFunctionDataReturnType,
5
+ Log,
6
+ } from "viem";
7
+ import { encodeFunctionData } from "viem";
8
+
9
+ import { iPausableAbi } from "../../../abi/iPausable";
10
+ import {
11
+ iCreditFacadeV300Abi,
12
+ iCreditFacadeV300MulticallAbi,
13
+ } from "../../../abi/v300";
14
+ import type { CreditFacadeState, CreditManagerData } from "../../base";
15
+ import { BaseContract } from "../../base";
16
+ import { ADDRESS_0X0 } from "../../constants";
17
+ import type { GearboxSDK } from "../../GearboxSDK";
18
+ import type { CreditFacadeStateHuman, MultiCall, RawTx } from "../../types";
19
+ import { fmtBinaryMask, formatBNvalue } from "../../utils";
20
+ import type { OnDemandPriceUpdate } from "../oracle";
21
+
22
+ const abi = [
23
+ ...iCreditFacadeV300Abi,
24
+ ...iCreditFacadeV300MulticallAbi,
25
+ ...iPausableAbi,
26
+ ] as const;
27
+ type abi = typeof abi;
28
+
29
+ // Augmenting contract class with interface of compressor data object
30
+ export interface CreditFacadeV300Contract
31
+ extends Omit<CreditFacadeState, "baseParams">,
32
+ BaseContract<abi> {}
33
+
34
+ export class CreditFacadeV300Contract extends BaseContract<abi> {
35
+ public readonly underlying: Address;
36
+
37
+ constructor(
38
+ sdk: GearboxSDK,
39
+ { creditFacade, creditManager }: CreditManagerData,
40
+ ) {
41
+ const { baseParams, ...rest } = creditFacade;
42
+ super(sdk, {
43
+ ...baseParams,
44
+ name: `CreditFacadeV3(${creditManager.name})`,
45
+ abi,
46
+ });
47
+ Object.assign(this, rest);
48
+ this.underlying = creditManager.underlying;
49
+ }
50
+
51
+ public override stateHuman(raw?: boolean): CreditFacadeStateHuman {
52
+ const decimals = this.sdk.tokensMeta.decimals(this.underlying);
53
+ return {
54
+ ...super.stateHuman(raw),
55
+ expirable: this.expirable,
56
+ isDegenMode: this.degenNFT !== ADDRESS_0X0,
57
+ degenNFT: this.labelAddress(this.degenNFT),
58
+ expirationDate: this.expirationDate,
59
+ maxDebtPerBlockMultiplier: this.maxDebtPerBlockMultiplier,
60
+ botList: this.labelAddress(this.botList),
61
+ minDebt: formatBNvalue(this.minDebt, decimals),
62
+ maxDebt: formatBNvalue(this.maxDebt, decimals),
63
+ currentCumulativeLoss: "0", // TODO
64
+ maxCumulativeLoss: "0", // TODO
65
+ forbiddenTokenMask: fmtBinaryMask(this.forbiddenTokenMask),
66
+ isPaused: this.isPaused,
67
+ };
68
+ }
69
+
70
+ public override processLog(
71
+ log: Log<
72
+ bigint,
73
+ number,
74
+ false,
75
+ undefined,
76
+ undefined,
77
+ abi,
78
+ ContractEventName<abi>
79
+ >,
80
+ ): void {
81
+ switch (log.eventName) {
82
+ case "Paused":
83
+ this.isPaused = true;
84
+ break;
85
+ case "Unpaused":
86
+ this.isPaused = false;
87
+ break;
88
+ case "AddCollateral":
89
+ case "CloseCreditAccount":
90
+ case "DecreaseDebt":
91
+ case "Execute":
92
+ case "FinishMultiCall":
93
+ case "IncreaseDebt":
94
+ case "LiquidateCreditAccount":
95
+ case "OpenCreditAccount":
96
+ case "StartMultiCall":
97
+ case "WithdrawCollateral":
98
+ this.dirty = true;
99
+ break;
100
+ }
101
+ }
102
+
103
+ public encodeOnDemandPriceUpdates(
104
+ updates: OnDemandPriceUpdate[],
105
+ ): MultiCall[] {
106
+ return updates.map(u => ({
107
+ target: this.address,
108
+ callData: encodeFunctionData({
109
+ abi: iCreditFacadeV300MulticallAbi,
110
+ functionName: "onDemandPriceUpdate",
111
+ args: [u.token, u.reserve, u.data],
112
+ }),
113
+ }));
114
+ }
115
+
116
+ public liquidateCreditAccount(
117
+ ca: Address,
118
+ to: Address,
119
+ calls: MultiCall[],
120
+ ): RawTx {
121
+ return this.createRawTx({
122
+ functionName: "liquidateCreditAccount",
123
+ args: [ca, to, calls],
124
+ });
125
+ }
126
+
127
+ public closeCreditAccount(ca: Address, calls: MultiCall[]): RawTx {
128
+ return this.createRawTx({
129
+ functionName: "closeCreditAccount",
130
+ args: [ca, calls],
131
+ });
132
+ }
133
+
134
+ public multicall(ca: Address, calls: MultiCall[]): RawTx {
135
+ return this.createRawTx({
136
+ functionName: "multicall",
137
+ args: [ca, calls],
138
+ });
139
+ }
140
+
141
+ public openCreditAccount(
142
+ to: Address,
143
+ calls: MultiCall[],
144
+ referralCode: bigint,
145
+ ): RawTx {
146
+ return this.createRawTx({
147
+ functionName: "openCreditAccount",
148
+ args: [to, calls, referralCode],
149
+ });
150
+ }
151
+
152
+ public parseFunctionParams(
153
+ params: DecodeFunctionDataReturnType<abi>,
154
+ ): string[] | undefined {
155
+ switch (params.functionName) {
156
+ case "openCreditAccount": {
157
+ const [onBehalfOf, calls, referralCode] = params.args;
158
+ return [
159
+ this.labelAddress(onBehalfOf),
160
+ this.sdk.parseMultiCall([...calls]).join(","),
161
+ `${referralCode}`,
162
+ ];
163
+ }
164
+ case "closeCreditAccount": {
165
+ const [creditAccount, calls] = params.args;
166
+ return [
167
+ this.labelAddress(creditAccount),
168
+ this.sdk.parseMultiCall([...calls]).join(","),
169
+ ];
170
+ }
171
+ case "liquidateCreditAccount": {
172
+ const [creditAccount, to, calls] = params.args;
173
+ return [
174
+ this.labelAddress(creditAccount),
175
+ this.labelAddress(to),
176
+ this.sdk.parseMultiCall([...calls]).join(","),
177
+ ];
178
+ }
179
+ case "setBotPermissions": {
180
+ const [creditAccount, bot, permissions] = params.args;
181
+ return [
182
+ this.labelAddress(creditAccount),
183
+ this.labelAddress(bot),
184
+ fmtBinaryMask(permissions),
185
+ ];
186
+ }
187
+ case "storeExpectedBalances": {
188
+ const [deltas] = params.args;
189
+ return [
190
+ deltas
191
+ .map(({ token, amount }) => {
192
+ return (
193
+ this.labelAddress(token) +
194
+ ": " +
195
+ this.sdk.tokensMeta.formatBN(token, amount)
196
+ );
197
+ })
198
+ .join(","),
199
+ ];
200
+ }
201
+
202
+ default:
203
+ return undefined;
204
+ }
205
+ }
206
+ }
@@ -0,0 +1,190 @@
1
+ import type {
2
+ Address,
3
+ ContractEventName,
4
+ DecodeFunctionDataReturnType,
5
+ Log,
6
+ } from "viem";
7
+ import { encodeFunctionData } from "viem";
8
+
9
+ import { iPausableAbi } from "../../../abi/iPausable";
10
+ import {
11
+ iCreditFacadeMulticallV310Abi,
12
+ iCreditFacadeV310Abi,
13
+ } from "../../../abi/v310";
14
+ import type { CreditFacadeState, CreditManagerData } from "../../base";
15
+ import { BaseContract } from "../../base";
16
+ import { ADDRESS_0X0 } from "../../constants";
17
+ import type { GearboxSDK } from "../../GearboxSDK";
18
+ import type { CreditFacadeStateHuman, MultiCall, RawTx } from "../../types";
19
+ import { fmtBinaryMask, formatBNvalue } from "../../utils";
20
+ import type { OnDemandPriceUpdate } from "../oracle";
21
+
22
+ const abi = [
23
+ ...iCreditFacadeV310Abi,
24
+ ...iCreditFacadeMulticallV310Abi,
25
+ ...iPausableAbi,
26
+ ] as const;
27
+ type abi = typeof abi;
28
+
29
+ // Augmenting contract class with interface of compressor data object
30
+ export interface CreditFacadeV310Contract
31
+ extends Omit<CreditFacadeState, "baseParams">,
32
+ BaseContract<abi> {}
33
+
34
+ export class CreditFacadeV310Contract extends BaseContract<abi> {
35
+ public readonly underlying: Address;
36
+
37
+ constructor(
38
+ sdk: GearboxSDK,
39
+ { creditFacade, creditManager }: CreditManagerData,
40
+ ) {
41
+ const { baseParams, ...rest } = creditFacade;
42
+ super(sdk, {
43
+ ...baseParams,
44
+ name: `CreditFacadeV310(${creditManager.name})`,
45
+ abi,
46
+ });
47
+ Object.assign(this, rest);
48
+ this.underlying = creditManager.underlying;
49
+ }
50
+
51
+ public override stateHuman(raw?: boolean): CreditFacadeStateHuman {
52
+ const decimals = this.sdk.tokensMeta.decimals(this.underlying);
53
+ return {
54
+ ...super.stateHuman(raw),
55
+ expirable: this.expirable,
56
+ isDegenMode: this.degenNFT !== ADDRESS_0X0,
57
+ degenNFT: this.labelAddress(this.degenNFT),
58
+ expirationDate: this.expirationDate,
59
+ maxDebtPerBlockMultiplier: this.maxDebtPerBlockMultiplier,
60
+ botList: this.labelAddress(this.botList),
61
+ minDebt: formatBNvalue(this.minDebt, decimals),
62
+ maxDebt: formatBNvalue(this.maxDebt, decimals),
63
+ currentCumulativeLoss: "0", // TODO
64
+ maxCumulativeLoss: "0", // TODO
65
+ forbiddenTokenMask: fmtBinaryMask(this.forbiddenTokenMask),
66
+ isPaused: this.isPaused,
67
+ };
68
+ }
69
+
70
+ public override processLog(
71
+ log: Log<
72
+ bigint,
73
+ number,
74
+ false,
75
+ undefined,
76
+ undefined,
77
+ abi,
78
+ ContractEventName<abi>
79
+ >,
80
+ ): void {
81
+ switch (log.eventName) {
82
+ case "Paused":
83
+ this.isPaused = true;
84
+ break;
85
+ case "Unpaused":
86
+ this.isPaused = false;
87
+ break;
88
+ case "AddCollateral":
89
+ case "CloseCreditAccount":
90
+ case "Execute":
91
+ case "FinishMultiCall":
92
+ case "LiquidateCreditAccount":
93
+ case "OpenCreditAccount":
94
+ case "PartiallyLiquidateCreditAccount":
95
+ case "StartMultiCall":
96
+ case "WithdrawCollateral":
97
+ case "WithdrawPhantomToken":
98
+ this.dirty = true;
99
+ break;
100
+ }
101
+ }
102
+
103
+ public encodeOnDemandPriceUpdates(
104
+ updates: OnDemandPriceUpdate[],
105
+ ): MultiCall[] {
106
+ return [
107
+ {
108
+ target: this.address,
109
+ callData: encodeFunctionData({
110
+ abi: iCreditFacadeMulticallV310Abi,
111
+ functionName: "onDemandPriceUpdates",
112
+ args: [
113
+ updates.map(u => ({
114
+ priceFeed: u.priceFeed,
115
+ data: u.data,
116
+ })),
117
+ ],
118
+ }),
119
+ },
120
+ ];
121
+ }
122
+
123
+ public liquidateCreditAccount(
124
+ ca: Address,
125
+ to: Address,
126
+ calls: MultiCall[],
127
+ ): RawTx {
128
+ return this.createRawTx({
129
+ functionName: "liquidateCreditAccount",
130
+ args: [ca, to, calls],
131
+ });
132
+ }
133
+
134
+ public closeCreditAccount(ca: Address, calls: MultiCall[]): RawTx {
135
+ return this.createRawTx({
136
+ functionName: "closeCreditAccount",
137
+ args: [ca, calls],
138
+ });
139
+ }
140
+
141
+ public multicall(ca: Address, calls: MultiCall[]): RawTx {
142
+ return this.createRawTx({
143
+ functionName: "multicall",
144
+ args: [ca, calls],
145
+ });
146
+ }
147
+
148
+ public openCreditAccount(
149
+ to: Address,
150
+ calls: MultiCall[],
151
+ referralCode: bigint,
152
+ ): RawTx {
153
+ return this.createRawTx({
154
+ functionName: "openCreditAccount",
155
+ args: [to, calls, referralCode],
156
+ });
157
+ }
158
+
159
+ public parseFunctionParams(
160
+ params: DecodeFunctionDataReturnType<abi>,
161
+ ): string[] | undefined {
162
+ switch (params.functionName) {
163
+ case "openCreditAccount": {
164
+ const [onBehalfOf, calls, referralCode] = params.args;
165
+ return [
166
+ this.labelAddress(onBehalfOf),
167
+ this.sdk.parseMultiCall([...calls]).join(","),
168
+ `${referralCode}`,
169
+ ];
170
+ }
171
+ case "closeCreditAccount": {
172
+ const [creditAccount, calls] = params.args;
173
+ return [
174
+ this.labelAddress(creditAccount),
175
+ this.sdk.parseMultiCall([...calls]).join(","),
176
+ ];
177
+ }
178
+ case "liquidateCreditAccount": {
179
+ const [creditAccount, to, calls] = params.args;
180
+ return [
181
+ this.labelAddress(creditAccount),
182
+ this.labelAddress(to),
183
+ this.sdk.parseMultiCall([...calls]).join(","),
184
+ ];
185
+ }
186
+ default:
187
+ return undefined;
188
+ }
189
+ }
190
+ }
@@ -0,0 +1,122 @@
1
+ import type { Address, ContractEventName, Log } from "viem";
2
+
3
+ import { iCreditManagerV300Abi } from "../../../abi/v300";
4
+ import type { CreditManagerData, CreditManagerState } from "../../base";
5
+ import { BaseContract } from "../../base";
6
+ import type { GearboxSDK } from "../../GearboxSDK";
7
+ import type { CreditManagerStateHuman } from "../../types";
8
+ import { AddressMap, fmtBinaryMask, percentFmt } from "../../utils";
9
+ import type { IAdapterContract } from "../adapters";
10
+ import { createAdapter } from "../adapters";
11
+ import type { ICreditManagerContract } from "./types";
12
+
13
+ type abi = typeof iCreditManagerV300Abi;
14
+ const abi = iCreditManagerV300Abi;
15
+
16
+ // Augmenting contract class with interface of compressor data object
17
+ export interface CreditManagerV300Contract
18
+ extends Omit<
19
+ CreditManagerState,
20
+ "baseParams" | "collateralTokens" | "liquidationThresholds"
21
+ >,
22
+ BaseContract<abi> {}
23
+
24
+ export class CreditManagerV300Contract
25
+ extends BaseContract<abi>
26
+ implements ICreditManagerContract
27
+ {
28
+ /**
29
+ * Mapping targetContract => adapter
30
+ */
31
+ public readonly adapters: AddressMap<IAdapterContract>;
32
+ /**
33
+ * Mapping token address => liquidation threshold
34
+ */
35
+ public readonly liquidationThresholds: AddressMap<number>;
36
+
37
+ constructor(sdk: GearboxSDK, { creditManager, adapters }: CreditManagerData) {
38
+ const { baseParams, collateralTokens, ...rest } = creditManager;
39
+ super(sdk, {
40
+ ...baseParams,
41
+ name: `CreditManagerV300(${creditManager.name})`,
42
+ abi,
43
+ });
44
+ Object.assign(this, rest);
45
+ this.liquidationThresholds = new AddressMap(
46
+ collateralTokens.map(ct => [ct.token, ct.liquidationThreshold]),
47
+ "liquidationThresholds",
48
+ );
49
+
50
+ this.adapters = new AddressMap(undefined, "adapters");
51
+ for (const adapterData of adapters) {
52
+ try {
53
+ const adapter = createAdapter(this.sdk, adapterData);
54
+ adapter.name = `${adapter.name}(${this.name})`;
55
+ this.adapters.upsert(adapter.targetContract, adapter);
56
+ } catch (e) {
57
+ throw new Error(`cannot attach adapter: ${e}`, { cause: e });
58
+ }
59
+ }
60
+ }
61
+
62
+ public override stateHuman(raw?: boolean): CreditManagerStateHuman {
63
+ return {
64
+ ...super.stateHuman(raw),
65
+ name: this.name,
66
+ accountFactory: this.labelAddress(this.accountFactory),
67
+ underlying: this.labelAddress(this.underlying),
68
+ pool: this.labelAddress(this.pool),
69
+ creditFacade: this.labelAddress(this.creditFacade),
70
+ creditConfigurator: this.labelAddress(this.creditConfigurator),
71
+ maxEnabledTokens: this.maxEnabledTokens,
72
+ collateralTokens: Object.fromEntries(
73
+ this.liquidationThresholds
74
+ .entries()
75
+ .map(([k, v]) => [
76
+ this.labelAddress(k as Address),
77
+ percentFmt(v, raw),
78
+ ]),
79
+ ) as Record<Address, string>,
80
+ feeInterest: percentFmt(this.feeInterest, raw),
81
+ feeLiquidation: percentFmt(this.feeLiquidation, raw),
82
+ liquidationDiscount: percentFmt(this.liquidationDiscount, raw),
83
+ feeLiquidationExpired: percentFmt(this.feeLiquidationExpired, raw),
84
+ liquidationDiscountExpired: percentFmt(
85
+ this.liquidationDiscountExpired,
86
+ raw,
87
+ ),
88
+ quotedTokensMask: fmtBinaryMask(0n), // TODO: ?
89
+ contractsToAdapters: Object.fromEntries(
90
+ this.adapters
91
+ .entries()
92
+ .map(([k, v]) => [
93
+ this.labelAddress(k),
94
+ this.labelAddress(v.address),
95
+ ]),
96
+ ),
97
+ creditAccounts: [], // TODO: ?
98
+ };
99
+ }
100
+
101
+ public get collateralTokens(): Address[] {
102
+ return this.liquidationThresholds.keys();
103
+ }
104
+
105
+ public override processLog(
106
+ log: Log<
107
+ bigint,
108
+ number,
109
+ false,
110
+ undefined,
111
+ undefined,
112
+ abi,
113
+ ContractEventName<abi>
114
+ >,
115
+ ): void {
116
+ switch (log.eventName) {
117
+ case "SetCreditConfigurator":
118
+ this.dirty = true;
119
+ break;
120
+ }
121
+ }
122
+ }