@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,262 @@
1
+ import type {
2
+ AbiStateMutability,
3
+ Address,
4
+ CallParameters,
5
+ Chain,
6
+ Client,
7
+ ContractFunctionParameters,
8
+ ContractFunctionReturnType,
9
+ DecodeFunctionResultErrorType,
10
+ EncodeFunctionDataErrorType,
11
+ GetChainContractAddressErrorType,
12
+ GetContractErrorReturnType,
13
+ Hex,
14
+ MulticallContracts,
15
+ MulticallResults,
16
+ Narrow,
17
+ ReadContractErrorType,
18
+ Transport,
19
+ } from "viem";
20
+ import {
21
+ AbiDecodingZeroDataError,
22
+ BaseError,
23
+ decodeFunctionResult,
24
+ encodeFunctionData,
25
+ getChainContractAddress,
26
+ getContractError,
27
+ multicall3Abi,
28
+ RawContractError,
29
+ } from "viem";
30
+ import { simulateContract } from "viem/actions";
31
+ import { getAction } from "viem/utils";
32
+
33
+ export type MulticallParameters<
34
+ contracts extends readonly unknown[] = readonly ContractFunctionParameters[],
35
+ allowFailure extends boolean = true,
36
+ options extends {
37
+ optional?: boolean;
38
+ properties?: Record<string, any>;
39
+ } = {},
40
+ > = Pick<
41
+ CallParameters,
42
+ "blockNumber" | "blockTag" | "stateOverride" | "gas" | "account"
43
+ > & {
44
+ allowFailure?: allowFailure | boolean | undefined;
45
+ batchSize?: number | undefined;
46
+ contracts: MulticallContracts<
47
+ Narrow<contracts>,
48
+ { mutability: AbiStateMutability } & options
49
+ >;
50
+ multicallAddress?: Address | undefined;
51
+ };
52
+
53
+ export type MulticallReturnType<
54
+ contracts extends readonly unknown[] = readonly ContractFunctionParameters[],
55
+ allowFailure extends boolean = true,
56
+ options extends {
57
+ error?: Error;
58
+ } = { error: Error },
59
+ > = MulticallResults<
60
+ Narrow<contracts>,
61
+ allowFailure,
62
+ { mutability: AbiStateMutability } & options
63
+ >;
64
+
65
+ export type MulticallErrorType =
66
+ | GetChainContractAddressErrorType
67
+ | ReadContractErrorType
68
+ | GetContractErrorReturnType<
69
+ EncodeFunctionDataErrorType | DecodeFunctionResultErrorType
70
+ >
71
+ | Error;
72
+
73
+ /**
74
+ * This is "multicall" action from viem, modified to use "simulateContract" instead of "readContract"
75
+ * @param client
76
+ * @param parameters
77
+ * @returns
78
+ */
79
+ export async function simulateMulticall<
80
+ const contracts extends readonly unknown[],
81
+ chain extends Chain | undefined,
82
+ allowFailure extends boolean = true,
83
+ >(
84
+ client: Client<Transport, chain>,
85
+ parameters: MulticallParameters<contracts, allowFailure>,
86
+ ): Promise<MulticallReturnType<contracts, allowFailure>> {
87
+ const {
88
+ account,
89
+ allowFailure = true,
90
+ batchSize: batchSize_,
91
+ blockNumber,
92
+ blockTag,
93
+ gas,
94
+ multicallAddress: multicallAddress_,
95
+ stateOverride,
96
+ } = parameters;
97
+ const contracts = parameters.contracts as ContractFunctionParameters[];
98
+
99
+ const batchSize =
100
+ batchSize_ ??
101
+ ((typeof client.batch?.multicall === "object" &&
102
+ client.batch.multicall.batchSize) ||
103
+ 1_024);
104
+
105
+ let multicallAddress = multicallAddress_;
106
+ if (!multicallAddress) {
107
+ if (!client.chain)
108
+ throw new Error(
109
+ "client chain not configured. multicallAddress is required.",
110
+ );
111
+
112
+ multicallAddress = getChainContractAddress({
113
+ blockNumber,
114
+ chain: client.chain,
115
+ contract: "multicall3",
116
+ });
117
+ }
118
+
119
+ type Aggregate3Calls = {
120
+ allowFailure: boolean;
121
+ callData: Hex;
122
+ target: Address;
123
+ }[];
124
+
125
+ const chunkedCalls: Aggregate3Calls[] = [[]];
126
+ let currentChunk = 0;
127
+ let currentChunkSize = 0;
128
+ for (const contract of contracts) {
129
+ const { abi, address, args, functionName } = contract;
130
+ try {
131
+ const callData = encodeFunctionData({ abi, args, functionName });
132
+
133
+ currentChunkSize += (callData.length - 2) / 2;
134
+ // Check to see if we need to create a new chunk.
135
+ if (
136
+ // Check if batching is enabled.
137
+ batchSize > 0 &&
138
+ // Check if the current size of the batch exceeds the size limit.
139
+ currentChunkSize > batchSize &&
140
+ // Check if the current chunk is not already empty.
141
+ chunkedCalls[currentChunk].length > 0
142
+ ) {
143
+ currentChunk++;
144
+ currentChunkSize = (callData.length - 2) / 2;
145
+ chunkedCalls[currentChunk] = [];
146
+ }
147
+
148
+ chunkedCalls[currentChunk] = [
149
+ ...chunkedCalls[currentChunk],
150
+ {
151
+ allowFailure: true,
152
+ callData,
153
+ target: address,
154
+ },
155
+ ];
156
+ } catch (err) {
157
+ const error = getContractError(err as BaseError, {
158
+ abi,
159
+ address,
160
+ args,
161
+ docsPath: "/docs/contract/multicall",
162
+ functionName,
163
+ });
164
+ if (!allowFailure) throw error;
165
+ chunkedCalls[currentChunk] = [
166
+ ...chunkedCalls[currentChunk],
167
+ {
168
+ allowFailure: true,
169
+ callData: "0x" as Hex,
170
+ target: address,
171
+ },
172
+ ];
173
+ }
174
+ }
175
+
176
+ const aggregate3Results = await Promise.allSettled(
177
+ chunkedCalls.map(calls =>
178
+ getAction(
179
+ client,
180
+ simulateContract,
181
+ "simulateContract",
182
+ )({
183
+ account,
184
+ abi: multicall3Abi,
185
+ address: multicallAddress!,
186
+ args: [calls],
187
+ blockNumber,
188
+ blockTag: blockTag as any, // does not infer well that either blockNumber or blockTag must be present
189
+ functionName: "aggregate3",
190
+ stateOverride,
191
+ gas,
192
+ }),
193
+ ),
194
+ );
195
+
196
+ const results = [];
197
+ for (let i = 0; i < aggregate3Results.length; i++) {
198
+ const result = aggregate3Results[i];
199
+
200
+ // If an error occurred in a `simulateContract` invocation (ie. network error),
201
+ // then append the failure reason to each contract result.
202
+ if (result.status === "rejected") {
203
+ if (!allowFailure) {
204
+ throw result.reason;
205
+ }
206
+ for (const _i of chunkedCalls[i]) {
207
+ results.push({
208
+ status: "failure",
209
+ error: result.reason,
210
+ result: undefined,
211
+ });
212
+ }
213
+ continue;
214
+ }
215
+
216
+ // If the `simulateContract` call was successful, then decode the results.
217
+ const aggregate3Result = result.value.result as ContractFunctionReturnType<
218
+ typeof multicall3Abi,
219
+ AbiStateMutability,
220
+ "aggregate3"
221
+ >;
222
+ for (let j = 0; j < aggregate3Result.length; j++) {
223
+ // Extract the response from `readContract`
224
+ const { returnData, success } = aggregate3Result[j];
225
+
226
+ // Extract the request call data from the original call.
227
+ const { callData } = chunkedCalls[i][j];
228
+
229
+ // Extract the contract config for this call from the `contracts` argument
230
+ // for decoding.
231
+ const { abi, address, functionName, args } = contracts[
232
+ results.length
233
+ ] as ContractFunctionParameters;
234
+
235
+ try {
236
+ if (callData === "0x") throw new AbiDecodingZeroDataError();
237
+ if (!success) throw new RawContractError({ data: returnData });
238
+ const result = decodeFunctionResult({
239
+ abi,
240
+ args,
241
+ data: returnData,
242
+ functionName,
243
+ });
244
+ results.push(allowFailure ? { result, status: "success" } : result);
245
+ } catch (err) {
246
+ const error = getContractError(err as BaseError, {
247
+ abi,
248
+ address,
249
+ args,
250
+ docsPath: "/docs/contract/multicall",
251
+ functionName,
252
+ });
253
+ if (!allowFailure) throw error;
254
+ results.push({ error, result: undefined, status: "failure" });
255
+ }
256
+ }
257
+ }
258
+
259
+ if (results.length !== contracts.length)
260
+ throw new BaseError("multicall results mismatch");
261
+ return results as MulticallReturnType<contracts, allowFailure>;
262
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "exclude": ["scripts", "tsup.config.ts"]
4
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "compilerOptions": {
3
+ "strict": true,
4
+ "target": "ESNext",
5
+ "module": "ESNext",
6
+ "moduleResolution": "Node",
7
+ "esModuleInterop": true,
8
+ "skipLibCheck": true,
9
+ "lib": ["ESNext"],
10
+ "declaration": true,
11
+ "removeComments": false,
12
+ "resolveJsonModule": true
13
+ },
14
+ "include": ["src", "scripts", "tsup.config.ts"],
15
+ "exclude": ["dist", "node_modules"]
16
+ }
package/tsup.config.ts ADDED
@@ -0,0 +1,77 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+
3
+ import { sync as spawnSync } from "cross-spawn";
4
+ import type { Options } from "tsup";
5
+ import { defineConfig } from "tsup";
6
+
7
+ async function writeDummyPackage(subpath: string, type: "cjs" | "esm") {
8
+ const body =
9
+ type === "cjs"
10
+ ? `{"type": "commonjs"}`
11
+ : `{"type": "module","sideEffects":false}`;
12
+ await writeFile(`./dist/${type}/${subpath}/package.json`, body, "utf-8");
13
+ }
14
+
15
+ async function fixRelativeImports(subpath: string) {
16
+ for (const ext of ["d.mts", "mjs"]) {
17
+ let raw = await readFile(`./dist/esm/${subpath}/index.${ext}`, "utf-8");
18
+ raw = raw.replace(`from '../sdk';`, `from '../sdk/index.${ext}';`);
19
+ await writeFile(`./dist/esm/${subpath}/index.${ext}`, raw, "utf-8");
20
+ }
21
+ }
22
+
23
+ export default defineConfig(options => {
24
+ const commonOptions: Partial<Options> = {
25
+ entry: [
26
+ "src/sdk/index.ts",
27
+ "src/dev/index.ts",
28
+ "src/adapters/index.ts",
29
+ "src/abi/**/*.ts",
30
+ ],
31
+ clean: true,
32
+ splitting: false,
33
+ treeshake: true,
34
+ sourcemap: false,
35
+ // axios is externalized, because it has two different bundles for node (with native modules as dependencies)
36
+ // and browser. and we here make one bundle for both. so this responsibility is pushed further the build chain
37
+ external: ["../sdk", "axios"],
38
+ ...options,
39
+ };
40
+
41
+ return [
42
+ {
43
+ ...commonOptions,
44
+ format: "cjs",
45
+ outDir: "./dist/cjs/",
46
+ outExtension: () => ({ js: ".cjs" }),
47
+ onSuccess: async () => {
48
+ await Promise.all(
49
+ ["sdk", "dev", "adapters", "abi"].map(subpath =>
50
+ writeDummyPackage(subpath, "cjs"),
51
+ ),
52
+ );
53
+ },
54
+ },
55
+ {
56
+ ...commonOptions,
57
+ format: ["esm"],
58
+ outExtension: () => ({ js: ".mjs" }),
59
+ outDir: "./dist/esm/",
60
+ onSuccess: async () => {
61
+ // tsup with dts option is not working as expected: onSuccess is triggered and then dts is executed in parallel
62
+ // so we use spawnSync to run it in a separate process
63
+ spawnSync("yarn", ["tsup", "--dts-only"], { stdio: "inherit" });
64
+
65
+ for (const subpath of ["dev", "adapters"]) {
66
+ await fixRelativeImports(subpath);
67
+ }
68
+
69
+ await Promise.all(
70
+ ["sdk", "dev", "adapters", "abi"].map(subpath =>
71
+ writeDummyPackage(subpath, "esm"),
72
+ ),
73
+ );
74
+ },
75
+ },
76
+ ];
77
+ });