@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,99 @@
1
+ import type { Chain, PublicClient, Transport } from "viem";
2
+ import { createPublicClient, defineChain, fallback, http } from "viem";
3
+
4
+ import { AddressLabeller } from "../base/AddressLabeller";
5
+ import type { IAddressLabeller } from "../base/IAddressLabeller";
6
+ import type { NetworkType } from "./chains";
7
+ import { chains } from "./chains";
8
+
9
+ export interface NetworkOptions {
10
+ /**
11
+ * Chain Id needs to be set, because we sometimemes use forked testnets with different chain ids
12
+ */
13
+ chainId: number;
14
+ /**
15
+ * NetworkType needs to be set, because we sometimemes use forked testnets with different chain ids
16
+ */
17
+ networkType: NetworkType;
18
+ }
19
+
20
+ export type TransportOptions =
21
+ | {
22
+ /**
23
+ * RPC URL (and fallbacks) to use.
24
+ */
25
+ rpcURLs: string[];
26
+ }
27
+ | {
28
+ /**
29
+ * Alternatively, can pass entire viem transport
30
+ */
31
+ transport: Transport;
32
+ };
33
+
34
+ export interface ConnectionOptions {
35
+ /**
36
+ * RPC client timeout in milliseconds
37
+ */
38
+ timeout?: number;
39
+ /**
40
+ * Retry count for RPC
41
+ */
42
+ retryCount?: number;
43
+ }
44
+
45
+ export function createTransport(
46
+ opts: TransportOptions & ConnectionOptions,
47
+ ): Transport {
48
+ const { timeout = 120_000, retryCount } = opts;
49
+ if ("transport" in opts) {
50
+ return opts.transport;
51
+ }
52
+ const rpcs = opts.rpcURLs.map(url => http(url, { timeout, retryCount }));
53
+ return rpcs.length ? fallback(rpcs) : rpcs[0];
54
+ }
55
+
56
+ export class Provider {
57
+ public readonly chainId: number;
58
+ public readonly chain: Chain;
59
+ public readonly networkType: NetworkType;
60
+ public readonly addressLabels: IAddressLabeller;
61
+
62
+ #transport: Transport;
63
+ #publicClient: PublicClient;
64
+
65
+ constructor(opts: NetworkOptions & TransportOptions & ConnectionOptions) {
66
+ const { chainId, networkType } = opts;
67
+ this.chainId = chainId;
68
+ this.networkType = networkType;
69
+
70
+ // need to explicitly set chain id on testnets (e.g. 7878 = mainnet)
71
+ this.chain = defineChain({
72
+ ...chains[networkType],
73
+ id: chainId,
74
+ });
75
+ this.#transport = createTransport(opts);
76
+ this.#publicClient = createPublicClient({
77
+ chain: this.chain,
78
+ transport: this.#transport,
79
+ });
80
+
81
+ this.addressLabels = new AddressLabeller();
82
+ }
83
+
84
+ public get transport(): Transport {
85
+ return this.#transport;
86
+ }
87
+
88
+ public set transport(transport: Transport) {
89
+ this.#transport = transport;
90
+ this.#publicClient = createPublicClient({
91
+ chain: this.chain,
92
+ transport: this.#transport,
93
+ });
94
+ }
95
+
96
+ public get publicClient(): PublicClient {
97
+ return this.#publicClient;
98
+ }
99
+ }
@@ -0,0 +1,41 @@
1
+ import type { Chain } from "viem";
2
+ import { arbitrum, base, mainnet, optimism, sonic } from "viem/chains";
3
+
4
+ export const SUPPORTED_CHAINS = [
5
+ "Mainnet",
6
+ "Arbitrum",
7
+ "Optimism",
8
+ "Base",
9
+ "Sonic",
10
+ ] as const;
11
+
12
+ export type NetworkType = (typeof SUPPORTED_CHAINS)[number];
13
+
14
+ export const chains: Record<NetworkType, Chain> = {
15
+ Mainnet: mainnet,
16
+ Arbitrum: arbitrum,
17
+ Optimism: optimism,
18
+ Base: base,
19
+ Sonic: sonic,
20
+ };
21
+
22
+ const CHAINS_BY_ID: Record<number, NetworkType> = {
23
+ [mainnet.id]: "Mainnet",
24
+ [arbitrum.id]: "Arbitrum",
25
+ [optimism.id]: "Optimism",
26
+ [base.id]: "Base",
27
+ [sonic.id]: "Sonic",
28
+ };
29
+
30
+ export const getNetworkType = (chainId: number): NetworkType => {
31
+ const chainType = CHAINS_BY_ID[chainId];
32
+ if (chainType) {
33
+ return chainType;
34
+ }
35
+
36
+ throw new Error("Unsupported network");
37
+ };
38
+
39
+ export const isSupportedNetwork = (
40
+ chainId: number | undefined,
41
+ ): chainId is number => chainId !== undefined && !!CHAINS_BY_ID[chainId];
@@ -0,0 +1,21 @@
1
+ import type { Chain, Transport } from "viem";
2
+ import { createPublicClient, defineChain, http } from "viem";
3
+
4
+ import { detectNetwork } from "../utils/viem";
5
+ import { chains } from "./chains";
6
+
7
+ export async function detectChain(
8
+ transportOrRPC: Transport | string,
9
+ ): Promise<Chain> {
10
+ const transport =
11
+ typeof transportOrRPC === "string" ? http(transportOrRPC) : transportOrRPC;
12
+ const tempClient = createPublicClient({ transport });
13
+ const [networkType, chainId] = await Promise.all([
14
+ detectNetwork(tempClient),
15
+ tempClient.getChainId(),
16
+ ]);
17
+ return defineChain({
18
+ ...chains[networkType],
19
+ id: chainId,
20
+ });
21
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./chains";
2
+ export * from "./detectChain";
3
+ export * from "./Provider";
@@ -0,0 +1,47 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { NetworkType } from "../chain";
4
+ import { NOT_DEPLOYED } from "./addresses";
5
+
6
+ export const NO_VERSION = 0;
7
+
8
+ export const AP_ACCOUNT_FACTORY = "ACCOUNT_FACTORY";
9
+ export const AP_ACL = "ACL";
10
+ export const AP_ADAPTER_COMPRESSOR = "ADAPTER_COMPRESSOR";
11
+ export const AP_BOT_LIST = "BOT_LIST";
12
+ export const AP_CONTRACTS_REGISTER = "CONTRACTS_REGISTER";
13
+ export const AP_CONTROLLER_TIMELOCK = "CONTROLLER_TIMELOCK";
14
+ export const AP_CREDIT_ACCOUNT_COMPRESSOR = "CREDIT_ACCOUNT_COMPRESSOR";
15
+ export const AP_CREDIT_SUITE_COMPRESSOR = "CREDIT_SUITE_COMPRESSOR";
16
+ export const AP_DATA_COMPRESSOR = "DATA_COMPRESSOR";
17
+ export const AP_DELEVERAGE_BOT_HV = "DELEVERAGE_BOT_HV";
18
+ export const AP_DELEVERAGE_BOT_LV = "DELEVERAGE_BOT_LV";
19
+ export const AP_DELEVERAGE_BOT_PEGGED = "DELEVERAGE_BOT_PEGGED";
20
+ export const AP_GAUGE_COMPRESSOR = "GAUGE_COMPRESSOR";
21
+ export const AP_GEAR_STAKING = "GEAR_STAKING";
22
+ export const AP_GEAR_TOKEN = "GEAR_TOKEN";
23
+ export const AP_INFLATION_ATTACK_BLOCKER = "INFLATION_ATTACK_BLOCKER";
24
+ export const AP_INSOLVENCY_CHECKER = "INSOLVENCY_CHECKER";
25
+ export const AP_MARKET_COMPRESSOR = "MARKET_COMPRESSOR";
26
+ export const AP_MARKET_CONFIGURATOR = "MARKET_CONFIGURATOR";
27
+ export const AP_PARTIAL_LIQUIDATION_BOT = "PARTIAL_LIQUIDATION_BOT";
28
+ export const AP_PERIPHERY_COMPRESSOR = "PERIPHERY_COMPRESSOR";
29
+ export const AP_POOL_COMPRESSOR = "POOL_COMPRESSOR";
30
+ export const AP_PRICE_FEED_COMPRESSOR = "PRICE_FEED_COMPRESSOR";
31
+ export const AP_PRICE_ORACLE = "PRICE_ORACLE";
32
+ export const AP_REWARDS_COMPRESSOR = "REWARDS_COMPRESSOR";
33
+ export const AP_ROUTER = "LOCAL::ROUTER";
34
+ export const AP_TOKEN_COMPRESSOR = "TOKEN_COMPRESSOR";
35
+ export const AP_TREASURY = "TREASURY";
36
+ export const AP_WETH_GATEWAY = "WETH_GATEWAY";
37
+ export const AP_WETH_TOKEN = "WETH_TOKEN";
38
+ export const AP_ZAPPER_REGISTER = "ZAPPER_REGISTER";
39
+ export const AP_ZERO_PRICE_FEED = "ZERO_PRICE_FEED";
40
+
41
+ export const ADDRESS_PROVIDER: Record<NetworkType, Address> = {
42
+ Mainnet: "0x9ea7b04Da02a5373317D745c1571c84aaD03321D",
43
+ Arbitrum: "0x7d04eCdb892Ae074f03B5D0aBA03796F90F3F2af",
44
+ Optimism: "0x3761ca4BFAcFCFFc1B8034e69F19116dD6756726",
45
+ Base: NOT_DEPLOYED,
46
+ Sonic: "0x4b27b296273B72d7c7bfee1ACE93DC081467C41B",
47
+ };
@@ -0,0 +1,82 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { NetworkType } from "../chain";
4
+
5
+ export const MULTICALL_ADDRESS: Address =
6
+ "0xcA11bde05977b3631167028862bE2a173976CA11";
7
+
8
+ /**
9
+ * Address 0x0000000000000000000000000000000000000000
10
+ */
11
+ export const ADDRESS_0X0: Address =
12
+ "0x0000000000000000000000000000000000000000";
13
+
14
+ /**
15
+ * Dummy address to satisfy `0x${string}` typecheck, but fail on `isAddress` check
16
+ */
17
+ export const NOT_DEPLOYED = "0xNOT DEPLOYED";
18
+
19
+ /**
20
+ * Well-known USDC token address used to determine NetworkType on testnets with different chain ids
21
+ */
22
+ export const USDC: Record<NetworkType, Address> = {
23
+ Mainnet: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
24
+ Arbitrum: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
25
+ Optimism: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
26
+ Base: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
27
+ Sonic: "0x29219dd400f2Bf60E5a23d13Be72B486D4038894",
28
+ };
29
+
30
+ export const USDT: Record<NetworkType, Address> = {
31
+ Mainnet: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
32
+ Arbitrum: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
33
+ Optimism: "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58",
34
+ Base: NOT_DEPLOYED,
35
+ Sonic: NOT_DEPLOYED,
36
+ };
37
+
38
+ export const WETH: Record<NetworkType, Address> = {
39
+ Mainnet: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
40
+ Arbitrum: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
41
+ Optimism: "0x4200000000000000000000000000000000000006",
42
+ Base: NOT_DEPLOYED,
43
+ Sonic: NOT_DEPLOYED,
44
+ };
45
+
46
+ export const TIMELOCK: Record<NetworkType, Address> = {
47
+ Mainnet: "0xa133C9A92Fb8dDB962Af1cbae58b2723A0bdf23b",
48
+ Arbitrum: "0x148DD932eCe1155c11006F5650c6Ff428f8D374A",
49
+ Optimism: "0x148DD932eCe1155c11006F5650c6Ff428f8D374A",
50
+ Base: NOT_DEPLOYED,
51
+ Sonic: "0xAdbF876ce58CB65c99b18078353e1DCB16E69e84",
52
+ };
53
+
54
+ export const GEARBOX_MULTISIG: Record<NetworkType, Address> = {
55
+ Mainnet: "0xA7D5DDc1b8557914F158076b228AA91eF613f1D5",
56
+ Arbitrum: "0x57Fd8B1a9213624157786Fff4a7bc532Ce717773",
57
+ Optimism: "0x8bA8cd6D00919ceCc19D9B4A2c8669a524883C4c",
58
+ Base: NOT_DEPLOYED,
59
+ Sonic: "0xacEB9dc6a81f1C9E2d8a86c3bFec3f6EF584139D",
60
+ };
61
+
62
+ export const GEARBOX_RISK_CURATORS: Record<NetworkType, Address[]> = {
63
+ Mainnet: [TIMELOCK.Mainnet],
64
+ Arbitrum: [TIMELOCK.Arbitrum],
65
+ Optimism: [TIMELOCK.Optimism],
66
+ Base: [TIMELOCK.Base],
67
+ Sonic: [TIMELOCK.Sonic],
68
+ };
69
+
70
+ /**
71
+ * Depreciated pools
72
+ */
73
+ export const DEPRECIATED_POOLS: Record<NetworkType, Record<Address, string>> = {
74
+ Mainnet: {
75
+ ["0x1dc0f3359a254f876b37906cfc1000a35ce2d717".toLowerCase() as Address]:
76
+ "USDT_V3_BROKEN",
77
+ },
78
+ Arbitrum: {},
79
+ Optimism: {},
80
+ Base: {},
81
+ Sonic: {},
82
+ };
@@ -0,0 +1,36 @@
1
+ export enum BotPermissions {
2
+ ADD_COLLATERAL = 1,
3
+ INCREASE_DEBT = 1 << 1,
4
+ DECREASE_DEBT = 1 << 2,
5
+ ENABLE_TOKEN = 1 << 3,
6
+ DISABLE_TOKEN = 1 << 4,
7
+ WITHDRAW_COLLATERAL = 1 << 5,
8
+ UPDATE_QUOTA = 1 << 6,
9
+ REVOKE_ALLOWANCES = 1 << 7,
10
+
11
+ EXTERNAL_CALLS = 1 << 16,
12
+
13
+ ALL_CREDIT_FACADE_CALLS = ADD_COLLATERAL |
14
+ WITHDRAW_COLLATERAL |
15
+ INCREASE_DEBT |
16
+ DECREASE_DEBT |
17
+ ENABLE_TOKEN |
18
+ DISABLE_TOKEN |
19
+ UPDATE_QUOTA |
20
+ REVOKE_ALLOWANCES,
21
+
22
+ ALLS = ALL_CREDIT_FACADE_CALLS | EXTERNAL_CALLS,
23
+ }
24
+
25
+ export function botPermissionsToString(value: bigint): string {
26
+ let result = "";
27
+ for (let i = 0; i < 16; i++) {
28
+ if ((value & (1n << BigInt(i))) !== 0n) {
29
+ if (result.length > 0) {
30
+ result += " | ";
31
+ }
32
+ result += BotPermissions[1 << i];
33
+ }
34
+ }
35
+ return result;
36
+ }
@@ -0,0 +1,6 @@
1
+ export * from "./address-provider";
2
+ export * from "./addresses";
3
+ export * from "./bot-permissions";
4
+ export * from "./math";
5
+ export * from "./networks";
6
+ export * from "./periphery";
@@ -0,0 +1,23 @@
1
+ export const MAX_INT = BigInt(
2
+ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
3
+ );
4
+ export const MIN_INT96 = -39614081257132168796771975168n;
5
+ export const MAX_UINT256 =
6
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n;
7
+ export const MAX_UINT16 = 65535n;
8
+
9
+ export const RAY_DECIMALS_POW = 27;
10
+ export const RAY = 10n ** BigInt(RAY_DECIMALS_POW);
11
+ export const halfRAY = RAY / 2n;
12
+ export const WAD_DECIMALS_POW = 18;
13
+ export const WAD = 10n ** BigInt(WAD_DECIMALS_POW);
14
+
15
+ export const PRICE_DECIMALS_POW = 8;
16
+ export const PRICE_DECIMALS = 10n ** BigInt(PRICE_DECIMALS_POW);
17
+
18
+ export const SECONDS_PER_YEAR = 365 * 24 * 3600;
19
+
20
+ export const PERCENTAGE_DECIMALS = 100n;
21
+ export const PERCENTAGE_FACTOR = 10000n;
22
+ export const LEVERAGE_DECIMALS = 100n;
23
+ export const SLIPPAGE_DECIMALS = 100n;
@@ -0,0 +1,38 @@
1
+ import type { NetworkType } from "../chain";
2
+
3
+ /**
4
+ * Block number when address provider was deployed
5
+ */
6
+ export const ADDRESS_PROVIDER_BLOCK: Record<NetworkType, bigint> = {
7
+ Mainnet: 18433056n, // AddressProvderV3 0x9ea7b04Da02a5373317D745c1571c84aaD03321D
8
+ Arbitrum: 184650310n,
9
+ Optimism: 118410666n,
10
+ Base: 0n,
11
+ Sonic: 9779380n,
12
+ };
13
+
14
+ const BLOCK_DURATION_BY_NETWORK: Record<NetworkType, number> = {
15
+ Mainnet: 12.05,
16
+ Arbitrum: 0.26,
17
+ Optimism: 2,
18
+ Base: 2.01,
19
+ Sonic: 0.91,
20
+ };
21
+
22
+ const RAMP_TIME = 30 * 24 * 60 * 60 * 1.2;
23
+ export const RAMP_DURATION_BY_NETWORK: Record<NetworkType, bigint> = {
24
+ Mainnet: BigInt(Math.floor(RAMP_TIME / BLOCK_DURATION_BY_NETWORK.Mainnet)),
25
+ Arbitrum: BigInt(Math.floor(RAMP_TIME / BLOCK_DURATION_BY_NETWORK.Arbitrum)),
26
+ Optimism: BigInt(Math.floor(RAMP_TIME / BLOCK_DURATION_BY_NETWORK.Optimism)),
27
+ Base: BigInt(Math.floor(RAMP_TIME / BLOCK_DURATION_BY_NETWORK.Base)),
28
+ Sonic: BigInt(Math.floor(RAMP_TIME / BLOCK_DURATION_BY_NETWORK.Sonic)),
29
+ };
30
+
31
+ const WEEK = 7 * 24 * 60 * 60;
32
+ export const BLOCKS_PER_WEEK_BY_NETWORK: Record<NetworkType, bigint> = {
33
+ Mainnet: BigInt(Math.floor(WEEK / BLOCK_DURATION_BY_NETWORK.Mainnet)),
34
+ Arbitrum: BigInt(Math.floor(WEEK / BLOCK_DURATION_BY_NETWORK.Arbitrum)),
35
+ Optimism: BigInt(Math.floor(WEEK / BLOCK_DURATION_BY_NETWORK.Optimism)),
36
+ Base: BigInt(Math.floor(WEEK / BLOCK_DURATION_BY_NETWORK.Base)),
37
+ Sonic: BigInt(Math.floor(WEEK / BLOCK_DURATION_BY_NETWORK.Sonic)),
38
+ };
@@ -0,0 +1,7 @@
1
+ export const PERIPHERY_CONTRACTS = [
2
+ "DEGEN_DISTRIBUTOR",
3
+ "DEGEN_NFT",
4
+ "MULTI_PAUSE",
5
+ ] as const;
6
+
7
+ export type PeripheryContract = (typeof PERIPHERY_CONTRACTS)[number];
@@ -0,0 +1,103 @@
1
+ import type {
2
+ Address,
3
+ ContractEventName,
4
+ DecodeFunctionDataReturnType,
5
+ Log,
6
+ } from "viem";
7
+
8
+ import { iBotListV300Abi } from "../../abi/v300";
9
+ import { BaseContract } from "../base";
10
+ import { ADDRESS_PROVIDER_BLOCK, botPermissionsToString } from "../constants";
11
+ import type { GearboxSDK } from "../GearboxSDK";
12
+ import type { BotListStateHuman } from "../types";
13
+
14
+ const abi = iBotListV300Abi;
15
+ type abi = typeof abi;
16
+
17
+ export class BotListContract extends BaseContract<abi> {
18
+ #approvedCreditManagers?: Set<Address>;
19
+ #currentBlock: bigint;
20
+
21
+ constructor(sdk: GearboxSDK, address: Address) {
22
+ super(sdk, { addr: address, name: "BotListV3", abi });
23
+ this.#currentBlock = ADDRESS_PROVIDER_BLOCK[sdk.provider.networkType];
24
+ }
25
+
26
+ public parseFunctionParams(
27
+ params: DecodeFunctionDataReturnType<abi>,
28
+ ): Array<string> | undefined {
29
+ switch (params.functionName) {
30
+ case "setCreditManagerApprovedStatus": {
31
+ const [creditManager, status] = params.args;
32
+ return [this.addressLabels.get(creditManager), `${status}`];
33
+ }
34
+ case "setBotSpecialPermissions": {
35
+ const [bot, creditManager, permissions] = params.args;
36
+ return [
37
+ this.addressLabels.get(bot),
38
+ this.addressLabels.get(creditManager),
39
+ botPermissionsToString(permissions),
40
+ ];
41
+ }
42
+ default:
43
+ return undefined;
44
+ }
45
+ }
46
+
47
+ public async syncState(toBlock: bigint): Promise<void> {
48
+ const logs = await this.provider.publicClient.getContractEvents({
49
+ address: this.address,
50
+ abi: this.abi,
51
+ fromBlock: this.#currentBlock,
52
+ toBlock,
53
+ });
54
+ logs.forEach(e => this.processLog(e));
55
+ this.#currentBlock = toBlock;
56
+ }
57
+
58
+ public override processLog(
59
+ log: Log<
60
+ bigint,
61
+ number,
62
+ false,
63
+ undefined,
64
+ undefined,
65
+ abi,
66
+ ContractEventName<abi>
67
+ >,
68
+ ): void {
69
+ switch (log.eventName) {
70
+ case "SetCreditManagerApprovedStatus":
71
+ if (log.args.approved) {
72
+ this.approvedCreditManagers.add(log.args.creditManager!);
73
+ } else {
74
+ this.approvedCreditManagers.delete(log.args.creditManager!);
75
+ }
76
+ break;
77
+
78
+ case "SetBotSpecialPermissions":
79
+ this.logger?.debug(
80
+ `Bot ${log.args.bot} has been given permissions ${botPermissionsToString(
81
+ log.args.permissions!,
82
+ )} for credit manager ${log.args.creditManager}`,
83
+ );
84
+ break;
85
+ default:
86
+ this.logger?.warn(`Unknown event: ${log.eventName}`);
87
+ break;
88
+ }
89
+ }
90
+
91
+ public get approvedCreditManagers(): Set<Address> {
92
+ if (!this.#approvedCreditManagers) {
93
+ throw new Error(
94
+ "BotListContract state needs to be synced to load approvedCreditManagers",
95
+ );
96
+ }
97
+ return this.#approvedCreditManagers;
98
+ }
99
+
100
+ public override stateHuman(raw = true): BotListStateHuman {
101
+ return super.stateHuman(raw);
102
+ }
103
+ }
@@ -0,0 +1,84 @@
1
+ import type { Address, DecodeFunctionDataReturnType } from "viem";
2
+
3
+ import { iGearStakingV300Abi } from "../../abi/v300";
4
+ import type { PermitResult } from "../accounts";
5
+ import { BaseContract, VotingContractStatus } from "../base";
6
+ import { ADDRESS_0X0 } from "../constants";
7
+ import type { GearboxSDK } from "../GearboxSDK";
8
+ import type { GearStakingV3StateHuman, RawTx } from "../types";
9
+
10
+ const abi = iGearStakingV300Abi;
11
+ type abi = typeof abi;
12
+
13
+ export interface MultiVote {
14
+ votingContract: Address;
15
+ voteAmount: bigint;
16
+ isIncrease: boolean;
17
+ extraData: Address;
18
+ }
19
+
20
+ export class GearStakingContract extends BaseContract<abi> {
21
+ constructor(sdk: GearboxSDK, address: Address) {
22
+ super(sdk, { addr: address, name: "GearStakingV3", abi });
23
+ }
24
+
25
+ parseFunctionParams(
26
+ params: DecodeFunctionDataReturnType<abi>,
27
+ ): Array<string> | undefined {
28
+ switch (params.functionName) {
29
+ case "setVotingContractStatus": {
30
+ const [address, status] = params.args;
31
+ return [this.addressLabels.get(address), VotingContractStatus[status]];
32
+ }
33
+ default:
34
+ return undefined;
35
+ }
36
+ }
37
+
38
+ public override stateHuman(raw = true): GearStakingV3StateHuman {
39
+ return {
40
+ ...super.stateHuman(raw),
41
+ successor: this.labelAddress(ADDRESS_0X0),
42
+ migrator: this.labelAddress(ADDRESS_0X0),
43
+ };
44
+ }
45
+
46
+ public deposit(amount: bigint, votes: Array<MultiVote>): RawTx {
47
+ return this.createRawTx({
48
+ functionName: "deposit",
49
+ args: [amount, votes],
50
+ });
51
+ }
52
+
53
+ public depositWithPermit(
54
+ amount: bigint,
55
+ votes: Array<MultiVote>,
56
+ permit: PermitResult,
57
+ ): RawTx {
58
+ return this.createRawTx({
59
+ functionName: "depositWithPermit",
60
+ args: [amount, votes, permit.deadline, permit.v, permit.r, permit.s],
61
+ });
62
+ }
63
+
64
+ public withdraw(amount: bigint, to: Address, votes: Array<MultiVote>): RawTx {
65
+ return this.createRawTx({
66
+ functionName: "withdraw",
67
+ args: [amount, to, votes],
68
+ });
69
+ }
70
+
71
+ public claimWithdrawals(to: Address): RawTx {
72
+ return this.createRawTx({
73
+ functionName: "claimWithdrawals",
74
+ args: [to],
75
+ });
76
+ }
77
+
78
+ public multivote(votes: Array<MultiVote>): RawTx {
79
+ return this.createRawTx({
80
+ functionName: "multivote",
81
+ args: [votes],
82
+ });
83
+ }
84
+ }