@gearbox-protocol/sdk 3.0.0-vfourabi.1 → 3.0.0-vfourabi.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +3 -0
- package/.github/workflows/lint_pr.yml +18 -0
- package/.github/workflows/pr.yml +39 -0
- package/.github/workflows/release.yml +47 -0
- package/.gitignore +19 -0
- package/.husky/commit-msg +1 -0
- package/.husky/pre-commit +1 -0
- package/.nvmrc +1 -0
- package/.releaserc.json +34 -0
- package/.vscode/extensions.json +7 -0
- package/.vscode/settings.json +16 -0
- package/.yarn/install-state.gz +0 -0
- package/.yarnrc.yml +1 -0
- package/ContributionAgreement +72 -0
- package/dist/cjs/abi/iZapper.cjs +85 -0
- package/dist/cjs/abi/iZapper.d.ts +123 -0
- package/dist/cjs/sdk/index.cjs +19830 -19764
- package/dist/cjs/sdk/index.d.ts +3746 -3061
- package/dist/esm/abi/iZapper.d.mts +123 -0
- package/dist/esm/abi/iZapper.mjs +83 -0
- package/dist/esm/sdk/index.d.mts +3746 -3061
- package/dist/esm/sdk/index.mjs +19807 -19765
- package/jest.config.js +7 -0
- package/package.json +32 -2
- package/scripts/example.ts +30 -0
- package/src/abi/compressors.ts +3962 -0
- package/src/abi/errors.ts +196 -0
- package/src/abi/iERC20.ts +122 -0
- package/src/abi/iPausable.ts +35 -0
- package/src/abi/iPriceFeedStore.ts +227 -0
- package/src/abi/iUpdatablePriceFeed.ts +16 -0
- package/src/abi/iVersion.ts +28 -0
- package/src/abi/iZapper.ts +84 -0
- package/src/abi/routerV300.ts +378 -0
- package/src/abi/v300.ts +4151 -0
- package/src/abi/v310.ts +5179 -0
- package/src/adapters/AbstractAdapter.ts +28 -0
- package/src/adapters/BalancerV2VaultAdapterContract.ts +19 -0
- package/src/adapters/BalancerV3RouterAdapterContract.ts +19 -0
- package/src/adapters/CamelotV3AdapterContract.ts +20 -0
- package/src/adapters/ConvexV1BaseRewardPoolAdapterContract.ts +20 -0
- package/src/adapters/ConvexV1BoosterAdapterContract.ts +20 -0
- package/src/adapters/Curve2AssetsAdapterContract.ts +20 -0
- package/src/adapters/Curve3AssetsAdapterContract.ts +20 -0
- package/src/adapters/Curve4AssetsAdapterContract.ts +20 -0
- package/src/adapters/CurveV1AdapterStETHContract.ts +20 -0
- package/src/adapters/CurveV1StableNGAdapterContract.ts +20 -0
- package/src/adapters/DaiUsdsAdapterContract.ts +21 -0
- package/src/adapters/ERC4626AdapterContract.ts +20 -0
- package/src/adapters/MellowERC4626VaultAdapterContract.ts +20 -0
- package/src/adapters/MellowVaultAdapterContract.ts +20 -0
- package/src/adapters/PendleRouterAdapterContract.ts +21 -0
- package/src/adapters/StakingRewardsAdapterContract.ts +21 -0
- package/src/adapters/UniswapV2AdapterContract.ts +20 -0
- package/src/adapters/UniswapV3AdapterContract.ts +170 -0
- package/src/adapters/VelodromeV2AdapterContract.ts +20 -0
- package/src/adapters/WstETHV1AdapterContract.ts +20 -0
- package/src/adapters/YearnV2AdapterContract.ts +20 -0
- package/src/adapters/abi/adapters.ts +4325 -0
- package/src/adapters/abi/iBalancerV3RouterAdapter.ts +126 -0
- package/src/adapters/abi/index.ts +2 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/plugin.ts +90 -0
- package/src/adapters/types.ts +62 -0
- package/src/dev/AccountOpener.ts +611 -0
- package/src/dev/PriceFeedStore.ts +95 -0
- package/src/dev/SDKExample.ts +167 -0
- package/src/dev/abi.ts +14 -0
- package/src/dev/calcLiquidatableLTs.ts +77 -0
- package/src/dev/createAnvilClient.ts +155 -0
- package/src/dev/index.ts +7 -0
- package/src/dev/setLTZero.ts +127 -0
- package/src/dev/setLTs.ts +68 -0
- package/src/sdk/GearboxSDK.ts +488 -0
- package/src/sdk/abi/index.ts +1 -0
- package/src/sdk/abi/oracles.ts +4614 -0
- package/src/sdk/accounts/CreditAccountsService.ts +1123 -0
- package/src/sdk/accounts/index.ts +1 -0
- package/src/sdk/base/AddressLabeller.ts +35 -0
- package/src/sdk/base/BaseContract.ts +237 -0
- package/src/sdk/base/IAddressLabeller.ts +13 -0
- package/src/sdk/base/PlaceholderContract.ts +12 -0
- package/src/sdk/base/SDKConstruct.ts +35 -0
- package/src/sdk/base/TokensMeta.ts +45 -0
- package/src/sdk/base/index.ts +6 -0
- package/src/sdk/base/types.ts +102 -0
- package/src/sdk/bots/BotsService.ts +92 -0
- package/src/sdk/bots/index.ts +2 -0
- package/src/sdk/bots/utils.ts +19 -0
- package/src/sdk/chain/Provider.ts +99 -0
- package/src/sdk/chain/chains.ts +41 -0
- package/src/sdk/chain/detectChain.ts +21 -0
- package/src/sdk/chain/index.ts +3 -0
- package/src/sdk/constants/address-provider.ts +47 -0
- package/src/sdk/constants/addresses.ts +82 -0
- package/src/sdk/constants/bot-permissions.ts +36 -0
- package/src/sdk/constants/index.ts +6 -0
- package/src/sdk/constants/math.ts +23 -0
- package/src/sdk/constants/networks.ts +38 -0
- package/src/sdk/constants/periphery.ts +7 -0
- package/src/sdk/core/BotListV3Contract.ts +103 -0
- package/src/sdk/core/GearStakingV3Contract.ts +84 -0
- package/src/sdk/core/address-provider/AbstractAddressProviderContract.ts +101 -0
- package/src/sdk/core/address-provider/AddressProviderV3Contract.ts +105 -0
- package/src/sdk/core/address-provider/AddressProviderV3_1Contract.ts +92 -0
- package/src/sdk/core/address-provider/getAddressProvider.ts +45 -0
- package/src/sdk/core/address-provider/index.ts +4 -0
- package/src/sdk/core/address-provider/types.ts +17 -0
- package/src/sdk/core/index.ts +3 -0
- package/src/sdk/gauges/GaugeStakingService.ts +100 -0
- package/src/sdk/gauges/index.ts +2 -0
- package/src/sdk/gauges/utils.ts +25 -0
- package/src/sdk/index.ts +17 -0
- package/src/sdk/market/MarketConfiguratorContract.ts +78 -0
- package/src/sdk/market/MarketRegister.ts +330 -0
- package/src/sdk/market/MarketSuite.ts +83 -0
- package/src/sdk/market/adapters/PlaceholderAdapterContracts.ts +18 -0
- package/src/sdk/market/adapters/factory.ts +34 -0
- package/src/sdk/market/adapters/index.ts +3 -0
- package/src/sdk/market/adapters/types.ts +7 -0
- package/src/sdk/market/credit/CreditConfiguratorV300Contract.ts +164 -0
- package/src/sdk/market/credit/CreditConfiguratorV310Contract.ts +139 -0
- package/src/sdk/market/credit/CreditFacadeV300Contract.ts +206 -0
- package/src/sdk/market/credit/CreditFacadeV310Contract.ts +190 -0
- package/src/sdk/market/credit/CreditManagerV300Contract.ts +122 -0
- package/src/sdk/market/credit/CreditManagerV310Contract.ts +122 -0
- package/src/sdk/market/credit/CreditSuite.ts +65 -0
- package/src/sdk/market/credit/createCreditConfigurator.ts +18 -0
- package/src/sdk/market/credit/createCreditFacade.ts +18 -0
- package/src/sdk/market/credit/createCreditManager.ts +18 -0
- package/src/sdk/market/credit/index.ts +8 -0
- package/src/sdk/market/credit/types.ts +42 -0
- package/src/sdk/market/index.ts +7 -0
- package/src/sdk/market/oracle/PriceOracleBaseContract.ts +376 -0
- package/src/sdk/market/oracle/PriceOracleV300Contract.ts +71 -0
- package/src/sdk/market/oracle/PriceOracleV310Contract.ts +43 -0
- package/src/sdk/market/oracle/createPriceOracle.ts +22 -0
- package/src/sdk/market/oracle/index.ts +4 -0
- package/src/sdk/market/oracle/types.ts +48 -0
- package/src/sdk/market/pool/GaugeContract.ts +120 -0
- package/src/sdk/market/pool/LinearInterestRateModelContract.ts +75 -0
- package/src/sdk/market/pool/PoolQuotaKeeperV300Contract.ts +89 -0
- package/src/sdk/market/pool/PoolQuotaKeeperV310Contract.ts +89 -0
- package/src/sdk/market/pool/PoolSuite.ts +76 -0
- package/src/sdk/market/pool/PoolV300Contract.ts +144 -0
- package/src/sdk/market/pool/PoolV310Contract.ts +144 -0
- package/src/sdk/market/pool/TumblerContract.ts +73 -0
- package/src/sdk/market/pool/createInterestRateModel.ts +33 -0
- package/src/sdk/market/pool/createPool.ts +19 -0
- package/src/sdk/market/pool/createPoolQuotaKeeper.ts +20 -0
- package/src/sdk/market/pool/createRateKeeper.ts +25 -0
- package/src/sdk/market/pool/index.ts +6 -0
- package/src/sdk/market/pool/types.ts +28 -0
- package/src/sdk/market/pricefeeds/AbstractLPPriceFeed.ts +71 -0
- package/src/sdk/market/pricefeeds/AbstractPriceFeed.ts +137 -0
- package/src/sdk/market/pricefeeds/BalancerStablePriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/BalancerWeightedPriceFeed.ts +70 -0
- package/src/sdk/market/pricefeeds/BoundedPriceFeed.ts +34 -0
- package/src/sdk/market/pricefeeds/ChainlinkPriceFeed.ts +16 -0
- package/src/sdk/market/pricefeeds/CompositePriceFeed.ts +25 -0
- package/src/sdk/market/pricefeeds/CurveCryptoPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/CurveStablePriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/CurveUSDPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/Erc4626PriceFeed.ts +36 -0
- package/src/sdk/market/pricefeeds/MellowLRTPriceFeed.ts +26 -0
- package/src/sdk/market/pricefeeds/PendleTWAPPTPriceFeed.ts +44 -0
- package/src/sdk/market/pricefeeds/PriceFeedRef.ts +34 -0
- package/src/sdk/market/pricefeeds/PriceFeedsRegister.ts +293 -0
- package/src/sdk/market/pricefeeds/RedstonePriceFeed.ts +65 -0
- package/src/sdk/market/pricefeeds/RedstoneUpdater.ts +304 -0
- package/src/sdk/market/pricefeeds/WstETHPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/YearnPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/ZeroPriceFeed.ts +17 -0
- package/src/sdk/market/pricefeeds/index.ts +20 -0
- package/src/sdk/market/pricefeeds/types.ts +82 -0
- package/src/sdk/market/pricefeeds/utils.ts +24 -0
- package/src/sdk/plugins/index.ts +10 -0
- package/src/sdk/router/PathOptionFactory.ts +147 -0
- package/src/sdk/router/RouterV3Contract.ts +558 -0
- package/src/sdk/router/index.ts +2 -0
- package/src/sdk/router/types.ts +48 -0
- package/src/sdk/sdk-gov-legacy/contracts/adapters.ts +39 -0
- package/src/sdk/sdk-gov-legacy/contracts/contracts.ts +647 -0
- package/src/sdk/sdk-gov-legacy/contracts/index.ts +2 -0
- package/src/sdk/sdk-gov-legacy/core/constants.ts +11 -0
- package/src/sdk/sdk-gov-legacy/index.ts +4 -0
- package/src/sdk/sdk-gov-legacy/oracles/PriceFeedType.ts +24 -0
- package/src/sdk/sdk-gov-legacy/oracles/index.ts +1 -0
- package/src/sdk/sdk-gov-legacy/tokens/aave.ts +101 -0
- package/src/sdk/sdk-gov-legacy/tokens/aura.ts +284 -0
- package/src/sdk/sdk-gov-legacy/tokens/balancer.ts +421 -0
- package/src/sdk/sdk-gov-legacy/tokens/compound.ts +79 -0
- package/src/sdk/sdk-gov-legacy/tokens/convex.ts +561 -0
- package/src/sdk/sdk-gov-legacy/tokens/curveLP.ts +480 -0
- package/src/sdk/sdk-gov-legacy/tokens/decimals.ts +301 -0
- package/src/sdk/sdk-gov-legacy/tokens/erc4626.ts +75 -0
- package/src/sdk/sdk-gov-legacy/tokens/gear.ts +273 -0
- package/src/sdk/sdk-gov-legacy/tokens/index.ts +18 -0
- package/src/sdk/sdk-gov-legacy/tokens/normal.ts +613 -0
- package/src/sdk/sdk-gov-legacy/tokens/quoted.ts +10 -0
- package/src/sdk/sdk-gov-legacy/tokens/stakingRewards.ts +41 -0
- package/src/sdk/sdk-gov-legacy/tokens/token.ts +2354 -0
- package/src/sdk/sdk-gov-legacy/tokens/tokenData.ts +44 -0
- package/src/sdk/sdk-gov-legacy/tokens/tokenType.ts +33 -0
- package/src/sdk/sdk-gov-legacy/tokens/wrapped.ts +28 -0
- package/src/sdk/sdk-gov-legacy/tokens/yearn.ts +122 -0
- package/src/sdk/sdk-gov-legacy/tokens/zircuit.ts +44 -0
- package/src/sdk/sdk-legacy/apy/index.ts +149 -0
- package/src/sdk/sdk-legacy/core/assets.ts +200 -0
- package/src/sdk/sdk-legacy/core/creditAccount.spec.ts +1966 -0
- package/src/sdk/sdk-legacy/core/creditAccount.ts +816 -0
- package/src/sdk/sdk-legacy/core/creditManager.ts +316 -0
- package/src/sdk/sdk-legacy/core/creditSession.ts +352 -0
- package/src/sdk/sdk-legacy/core/endpoint.ts +131 -0
- package/src/sdk/sdk-legacy/core/eventOrTx.ts +101 -0
- package/src/sdk/sdk-legacy/core/pool.ts +439 -0
- package/src/sdk/sdk-legacy/core/strategy.ts +82 -0
- package/src/sdk/sdk-legacy/core/transactions.ts +865 -0
- package/src/sdk/sdk-legacy/gearboxRewards/api.ts +704 -0
- package/src/sdk/sdk-legacy/gearboxRewards/apy.ts +267 -0
- package/src/sdk/sdk-legacy/gearboxRewards/extraAPY.ts +165 -0
- package/src/sdk/sdk-legacy/gearboxRewards/index.ts +3 -0
- package/src/sdk/sdk-legacy/gearboxRewards/merklAPI.ts +151 -0
- package/src/sdk/sdk-legacy/index.ts +21 -0
- package/src/sdk/sdk-legacy/pathfinder/core.ts +18 -0
- package/src/sdk/sdk-legacy/pathfinder/index.ts +1 -0
- package/src/sdk/sdk-legacy/payload/creditAccount.ts +48 -0
- package/src/sdk/sdk-legacy/payload/creditManager.ts +133 -0
- package/src/sdk/sdk-legacy/payload/creditSession.ts +143 -0
- package/src/sdk/sdk-legacy/payload/graphPayload.ts +10 -0
- package/src/sdk/sdk-legacy/payload/pool.ts +198 -0
- package/src/sdk/sdk-legacy/payload/token.ts +13 -0
- package/src/sdk/sdk-legacy/tokens/tokenData.ts +57 -0
- package/src/sdk/sdk-legacy/types/IAirdropDistributor.ts +103 -0
- package/src/sdk/sdk-legacy/types/IBaseRewardPool.ts +249 -0
- package/src/sdk/sdk-legacy/types/IDataCompressorV3.ts +957 -0
- package/src/sdk/sdk-legacy/types/IDegenDistributor.ts +70 -0
- package/src/sdk/sdk-legacy/types/IERC20Permit.ts +35 -0
- package/src/sdk/sdk-legacy/types/IERC20ZapperDeposits.ts +99 -0
- package/src/sdk/sdk-legacy/types/IETHZapperDeposits.ts +27 -0
- package/src/sdk/sdk-legacy/types/IFarmingPool.ts +229 -0
- package/src/sdk/sdk-legacy/types/IInterestRateModel.ts +23 -0
- package/src/sdk/sdk-legacy/types/IMulticall3.ts +242 -0
- package/src/sdk/sdk-legacy/types/IOffchainOracle.ts +31 -0
- package/src/sdk/sdk-legacy/types/index.ts +11 -0
- package/src/sdk/sdk-legacy/utils/formatter.ts +46 -0
- package/src/sdk/sdk-legacy/utils/index.ts +3 -0
- package/src/sdk/sdk-legacy/utils/math.ts +6 -0
- package/src/sdk/sdk-legacy/utils/price.ts +27 -0
- package/src/sdk/types/index.ts +5 -0
- package/src/sdk/types/logger.ts +13 -0
- package/src/sdk/types/state-human.ts +224 -0
- package/src/sdk/types/state.ts +8 -0
- package/src/sdk/types/transactions.ts +22 -0
- package/src/sdk/types/tvl.ts +4 -0
- package/src/sdk/utils/AddressMap.ts +111 -0
- package/src/sdk/utils/bytes32ToString.ts +6 -0
- package/src/sdk/utils/childLogger.ts +8 -0
- package/src/sdk/utils/createRawTx.ts +86 -0
- package/src/sdk/utils/etherscan.ts +42 -0
- package/src/sdk/utils/filterDust.ts +20 -0
- package/src/sdk/utils/formatter.ts +124 -0
- package/src/sdk/utils/index.ts +10 -0
- package/src/sdk/utils/internal/Hooks.ts +51 -0
- package/src/sdk/utils/internal/index.ts +1 -0
- package/src/sdk/utils/json.ts +27 -0
- package/src/sdk/utils/mappers.ts +38 -0
- package/src/sdk/utils/retry.ts +24 -0
- package/src/sdk/utils/viem/detectNetwork.ts +27 -0
- package/src/sdk/utils/viem/index.ts +3 -0
- package/src/sdk/utils/viem/sendRawTx.ts +36 -0
- package/src/sdk/utils/viem/simulateMulticall.ts +262 -0
- package/tsconfig.build.json +4 -0
- package/tsconfig.json +16 -0
- package/tsup.config.ts +77 -0
|
@@ -0,0 +1,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
|
+
}
|
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
|
+
});
|