@metamask-previews/assets-controller 0.0.0-preview-903db2da → 0.0.0-preview-ab102d86
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/CHANGELOG.md +9 -0
- package/dist/data-sources/rpc-datasource/clients/MulticallClient.cjs +638 -0
- package/dist/data-sources/rpc-datasource/clients/MulticallClient.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.cts +47 -0
- package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.mts +47 -0
- package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/clients/MulticallClient.mjs +632 -0
- package/dist/data-sources/rpc-datasource/clients/MulticallClient.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/clients/index.cjs +8 -0
- package/dist/data-sources/rpc-datasource/clients/index.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/clients/index.d.cts +3 -0
- package/dist/data-sources/rpc-datasource/clients/index.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/clients/index.d.mts +3 -0
- package/dist/data-sources/rpc-datasource/clients/index.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/clients/index.mjs +2 -0
- package/dist/data-sources/rpc-datasource/clients/index.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/index.cjs +9 -0
- package/dist/data-sources/rpc-datasource/index.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/index.d.cts +4 -0
- package/dist/data-sources/rpc-datasource/index.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/index.d.mts +4 -0
- package/dist/data-sources/rpc-datasource/index.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/index.mjs +3 -0
- package/dist/data-sources/rpc-datasource/index.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/services/BalanceFetcher.cjs +167 -0
- package/dist/data-sources/rpc-datasource/services/BalanceFetcher.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.cts +16 -0
- package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.mts +16 -0
- package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/services/BalanceFetcher.mjs +163 -0
- package/dist/data-sources/rpc-datasource/services/BalanceFetcher.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/services/TokenDetector.cjs +173 -0
- package/dist/data-sources/rpc-datasource/services/TokenDetector.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/services/TokenDetector.d.cts +14 -0
- package/dist/data-sources/rpc-datasource/services/TokenDetector.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/services/TokenDetector.d.mts +14 -0
- package/dist/data-sources/rpc-datasource/services/TokenDetector.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/services/TokenDetector.mjs +169 -0
- package/dist/data-sources/rpc-datasource/services/TokenDetector.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/services/index.cjs +8 -0
- package/dist/data-sources/rpc-datasource/services/index.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/services/index.d.cts +3 -0
- package/dist/data-sources/rpc-datasource/services/index.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/services/index.d.mts +3 -0
- package/dist/data-sources/rpc-datasource/services/index.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/services/index.mjs +3 -0
- package/dist/data-sources/rpc-datasource/services/index.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/assets.cjs +3 -0
- package/dist/data-sources/rpc-datasource/types/assets.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/assets.d.cts +53 -0
- package/dist/data-sources/rpc-datasource/types/assets.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/assets.d.mts +53 -0
- package/dist/data-sources/rpc-datasource/types/assets.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/assets.mjs +2 -0
- package/dist/data-sources/rpc-datasource/types/assets.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/config.cjs +3 -0
- package/dist/data-sources/rpc-datasource/types/config.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/config.d.cts +18 -0
- package/dist/data-sources/rpc-datasource/types/config.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/config.d.mts +18 -0
- package/dist/data-sources/rpc-datasource/types/config.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/config.mjs +2 -0
- package/dist/data-sources/rpc-datasource/types/config.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/core.cjs +3 -0
- package/dist/data-sources/rpc-datasource/types/core.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/core.d.cts +19 -0
- package/dist/data-sources/rpc-datasource/types/core.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/core.d.mts +19 -0
- package/dist/data-sources/rpc-datasource/types/core.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/core.mjs +2 -0
- package/dist/data-sources/rpc-datasource/types/core.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/index.cjs +3 -0
- package/dist/data-sources/rpc-datasource/types/index.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/index.d.cts +7 -0
- package/dist/data-sources/rpc-datasource/types/index.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/index.d.mts +7 -0
- package/dist/data-sources/rpc-datasource/types/index.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/index.mjs +2 -0
- package/dist/data-sources/rpc-datasource/types/index.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/multicall.cjs +3 -0
- package/dist/data-sources/rpc-datasource/types/multicall.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/multicall.d.cts +24 -0
- package/dist/data-sources/rpc-datasource/types/multicall.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/multicall.d.mts +24 -0
- package/dist/data-sources/rpc-datasource/types/multicall.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/multicall.mjs +2 -0
- package/dist/data-sources/rpc-datasource/types/multicall.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/services.cjs +3 -0
- package/dist/data-sources/rpc-datasource/types/services.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/services.d.cts +74 -0
- package/dist/data-sources/rpc-datasource/types/services.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/services.d.mts +74 -0
- package/dist/data-sources/rpc-datasource/types/services.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/services.mjs +2 -0
- package/dist/data-sources/rpc-datasource/types/services.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/state.cjs +3 -0
- package/dist/data-sources/rpc-datasource/types/state.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/types/state.d.cts +67 -0
- package/dist/data-sources/rpc-datasource/types/state.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/state.d.mts +67 -0
- package/dist/data-sources/rpc-datasource/types/state.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/types/state.mjs +2 -0
- package/dist/data-sources/rpc-datasource/types/state.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/utils/batch.cjs +45 -0
- package/dist/data-sources/rpc-datasource/utils/batch.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/utils/batch.d.cts +28 -0
- package/dist/data-sources/rpc-datasource/utils/batch.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/utils/batch.d.mts +28 -0
- package/dist/data-sources/rpc-datasource/utils/batch.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/utils/batch.mjs +40 -0
- package/dist/data-sources/rpc-datasource/utils/batch.mjs.map +1 -0
- package/dist/data-sources/rpc-datasource/utils/index.cjs +7 -0
- package/dist/data-sources/rpc-datasource/utils/index.cjs.map +1 -0
- package/dist/data-sources/rpc-datasource/utils/index.d.cts +2 -0
- package/dist/data-sources/rpc-datasource/utils/index.d.cts.map +1 -0
- package/dist/data-sources/rpc-datasource/utils/index.d.mts +2 -0
- package/dist/data-sources/rpc-datasource/utils/index.d.mts.map +1 -0
- package/dist/data-sources/rpc-datasource/utils/index.mjs +2 -0
- package/dist/data-sources/rpc-datasource/utils/index.mjs.map +1 -0
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -10,5 +10,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
10
10
|
### Added
|
|
11
11
|
|
|
12
12
|
- Initial release ([#7587](https://github.com/MetaMask/core/pull/7587))
|
|
13
|
+
- Add `MulticallClient` for batching RPC calls using Multicall3 contract ([#7677](https://github.com/MetaMask/core/pull/7677))
|
|
14
|
+
- Add batch utilities (`divideIntoBatches`, `reduceInBatchesSerially`) for processing arrays in batches ([#7677](https://github.com/MetaMask/core/pull/7677))
|
|
15
|
+
- Add `TokenDetector` service for detecting ERC-20 tokens with non-zero balances on a chain ([#7683](https://github.com/MetaMask/core/pull/7683))
|
|
16
|
+
- Add `BalanceFetcher` service for fetching token balances for user's imported/detected tokens ([#7684](https://github.com/MetaMask/core/pull/7684))
|
|
17
|
+
- Add `viem` dependency for ABI encoding/decoding in MulticallClient
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Refactor `MulticallClient` to use viem for ABI encoding/decoding instead of manual implementation
|
|
13
22
|
|
|
14
23
|
[Unreleased]: https://github.com/MetaMask/core/
|
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _MulticallClient_instances, _MulticallClient_getProvider, _MulticallClient_config, _MulticallClient_multicallBatchBalanceOf, _MulticallClient_fallbackBatchBalanceOf, _MulticallClient_fetchSingleBalance;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MulticallClient = exports.decodeAggregate3Response = exports.encodeAggregate3 = void 0;
|
|
16
|
+
const viem_1 = require("viem");
|
|
17
|
+
const utils_1 = require("../utils/index.cjs");
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// ABI DEFINITIONS
|
|
20
|
+
// =============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Multicall3 contract ABI (subset for aggregate3 and getEthBalance).
|
|
23
|
+
*
|
|
24
|
+
* @see https://github.com/mds1/multicall
|
|
25
|
+
*/
|
|
26
|
+
const MULTICALL3_ABI = [
|
|
27
|
+
{
|
|
28
|
+
name: 'aggregate3',
|
|
29
|
+
type: 'function',
|
|
30
|
+
stateMutability: 'payable',
|
|
31
|
+
inputs: [
|
|
32
|
+
{
|
|
33
|
+
name: 'calls',
|
|
34
|
+
type: 'tuple[]',
|
|
35
|
+
components: [
|
|
36
|
+
{ name: 'target', type: 'address' },
|
|
37
|
+
{ name: 'allowFailure', type: 'bool' },
|
|
38
|
+
{ name: 'callData', type: 'bytes' },
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
outputs: [
|
|
43
|
+
{
|
|
44
|
+
name: 'returnData',
|
|
45
|
+
type: 'tuple[]',
|
|
46
|
+
components: [
|
|
47
|
+
{ name: 'success', type: 'bool' },
|
|
48
|
+
{ name: 'returnData', type: 'bytes' },
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'getEthBalance',
|
|
55
|
+
type: 'function',
|
|
56
|
+
stateMutability: 'view',
|
|
57
|
+
inputs: [{ name: 'addr', type: 'address' }],
|
|
58
|
+
outputs: [{ name: 'balance', type: 'uint256' }],
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
/**
|
|
62
|
+
* ERC-20 ABI (subset for balanceOf).
|
|
63
|
+
*/
|
|
64
|
+
const ERC20_ABI = [
|
|
65
|
+
{
|
|
66
|
+
name: 'balanceOf',
|
|
67
|
+
type: 'function',
|
|
68
|
+
stateMutability: 'view',
|
|
69
|
+
inputs: [{ name: 'account', type: 'address' }],
|
|
70
|
+
outputs: [{ name: 'balance', type: 'uint256' }],
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
// =============================================================================
|
|
74
|
+
// CONSTANTS
|
|
75
|
+
// =============================================================================
|
|
76
|
+
/**
|
|
77
|
+
* Zero address constant for native token.
|
|
78
|
+
*/
|
|
79
|
+
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
80
|
+
/**
|
|
81
|
+
* Multicall3 contract addresses by chain ID.
|
|
82
|
+
* Source: https://github.com/mds1/multicall/blob/main/deployments.json
|
|
83
|
+
*
|
|
84
|
+
* TODO: try to find service to use here instead of hardcoding the addresses
|
|
85
|
+
*/
|
|
86
|
+
const MULTICALL3_ADDRESS_BY_CHAIN = {
|
|
87
|
+
'0x1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
88
|
+
'0x2a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
89
|
+
'0x4': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
90
|
+
'0x5': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
91
|
+
'0x3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
92
|
+
'0xaa36a7': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
93
|
+
'0x4268': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
94
|
+
'0x5e9': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
95
|
+
'0x1b6e6': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
96
|
+
'0x18fc4a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
97
|
+
'0xa': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
98
|
+
'0x45': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
99
|
+
'0x1a4': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
100
|
+
'0xaa37dc': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
101
|
+
'0xa4b1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
102
|
+
'0xa4ba': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
103
|
+
'0x66eed': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
104
|
+
'0x66eee': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
105
|
+
'0x66eeb': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
106
|
+
'0x15f2249': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
107
|
+
'0x89': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
108
|
+
'0x13881': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
109
|
+
'0x13882': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
110
|
+
'0x44d': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
111
|
+
'0x5a2': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
112
|
+
'0x98a': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
113
|
+
'0x64': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
114
|
+
'0x27d8': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
115
|
+
'0xa86a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
116
|
+
'0xa869': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
117
|
+
'0xfa2': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
118
|
+
'0xfa': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
119
|
+
'0xfaf0': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
120
|
+
'0x38': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
121
|
+
'0x61': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
122
|
+
'0x15eb': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
123
|
+
'0xcc': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
124
|
+
'0x504': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
125
|
+
'0x505': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
126
|
+
'0x507': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
127
|
+
'0x2a15c308d': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
128
|
+
'0x2a15c3083': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
129
|
+
'0x63564c40': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
130
|
+
'0x19': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
131
|
+
'0x152': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
132
|
+
'0x5535072': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
133
|
+
'0x6c1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
134
|
+
'0x7a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
135
|
+
'0xe': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
136
|
+
'0x13': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
137
|
+
'0x10': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
138
|
+
'0x72': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
139
|
+
'0x120': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
140
|
+
'0x4e454152': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
141
|
+
'0x250': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
142
|
+
'0x5c2359': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
143
|
+
'0xec0': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
144
|
+
'0x42': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
145
|
+
'0x80': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
146
|
+
'0x440': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
147
|
+
'0x257': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
148
|
+
'0xe9fe': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
149
|
+
'0xd3a0': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
150
|
+
'0x84444': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
151
|
+
'0x1e': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
152
|
+
'0x1f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
153
|
+
'0x2329': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
154
|
+
'0x2328': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
155
|
+
'0x6c': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
156
|
+
'0x12': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
157
|
+
'0xa516': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
158
|
+
'0x5afe': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
159
|
+
'0xa4ec': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
160
|
+
'0xaef3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
161
|
+
'0x116ea': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
162
|
+
'0x116e9': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
163
|
+
'0x2019': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
164
|
+
'0x3e9': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
165
|
+
'0x7d1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
166
|
+
'0x141': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
167
|
+
'0x6a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
168
|
+
'0x28': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
169
|
+
'0x4d2': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
170
|
+
'0x1e14': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
171
|
+
'0x1e15': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
172
|
+
'0x1251': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
173
|
+
'0x7f08': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
174
|
+
'0x8ae': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
175
|
+
'0x138b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
176
|
+
'0x1389': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
177
|
+
'0x1388': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
178
|
+
'0x1f92': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
179
|
+
'0x14a33': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
180
|
+
'0x14a34': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
181
|
+
'0x2105': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
182
|
+
'0x936': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
183
|
+
'0xff': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
184
|
+
'0x46a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
185
|
+
'0x46b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
186
|
+
'0x8a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
187
|
+
'0x14f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
188
|
+
'0xd2af': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
189
|
+
'0xe9ac0ce': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
190
|
+
'0xe705': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
191
|
+
'0xe704': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
192
|
+
'0xe708': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
193
|
+
'0x2b6f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
194
|
+
'0x39': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
195
|
+
'0x23a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
196
|
+
'0x1644': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
197
|
+
'0xdea8': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
198
|
+
'0x3af': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
199
|
+
'0x171': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
200
|
+
'0x3e7': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
201
|
+
'0x76adf1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
202
|
+
'0x3b9ac9ff': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
203
|
+
'0x2c': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
204
|
+
'0x2e': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
205
|
+
'0x15b3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
206
|
+
'0x82751': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
207
|
+
'0x8274f': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
208
|
+
'0x82750': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
209
|
+
'0x96f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
210
|
+
'0x3cc5': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
211
|
+
'0x4571': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
212
|
+
'0xe99': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
213
|
+
'0x7d0': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
214
|
+
'0x1297': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
215
|
+
'0x1d5e': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
216
|
+
'0x3a14269b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
217
|
+
'0x561bf78b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
218
|
+
'0x235ddd0': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
219
|
+
'0x3cd156dc': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
220
|
+
'0x5d456c62': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
221
|
+
'0x79f99296': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
222
|
+
'0x585eb4b1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
223
|
+
'0x507aaa2a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
224
|
+
'0x1fc3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
225
|
+
'0x32d': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
226
|
+
'0x8a73': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
227
|
+
'0x8a72': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
228
|
+
'0x8a71': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
229
|
+
'0xe9ac0d6': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
230
|
+
'0x1069': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
231
|
+
'0x7e5': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
232
|
+
'0x53': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
233
|
+
'0x52': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
234
|
+
'0xe298': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
235
|
+
'0x1a8': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
236
|
+
'0x94': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
237
|
+
'0x2c6': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
238
|
+
'0x2803': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
239
|
+
'0x2802': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
240
|
+
'0xa9': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
241
|
+
'0x28c5f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
242
|
+
'0x28c60': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
243
|
+
'0x13a': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
244
|
+
'0x4cb2f': '0xdbfa261cd7d17bb40479a0493ad6c0fee435859e',
|
|
245
|
+
'0x7f93': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
246
|
+
'0xb660': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
247
|
+
'0xb02113d3f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
248
|
+
'0xdad': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
249
|
+
'0xdae': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
250
|
+
'0x15b38': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
251
|
+
'0x15b32': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
252
|
+
'0x45c': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
253
|
+
'0x45b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
254
|
+
'0x3d': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
255
|
+
'0x41a6ace': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
256
|
+
'0xa729': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
257
|
+
'0x1f47b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
258
|
+
'0x1b59': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
259
|
+
'0x1b58': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
260
|
+
'0xc3': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
261
|
+
'0x16fd8': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
262
|
+
'0xc7': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
263
|
+
'0x405': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
264
|
+
'0x334': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
265
|
+
'0x1ce': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
266
|
+
'0x1cf': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
267
|
+
'0xa70e': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
268
|
+
'0x868b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
269
|
+
'0xa0c71fd': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
270
|
+
'0x13e31': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
271
|
+
'0xa1337': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
272
|
+
'0x1f2b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
273
|
+
'0xf63': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
274
|
+
'0x144': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
|
|
275
|
+
'0x118': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
|
|
276
|
+
'0x12c': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
|
|
277
|
+
'0x18995f': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
|
|
278
|
+
'0x2b74': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
|
|
279
|
+
'0xfc': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
280
|
+
'0x9da': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
281
|
+
'0x137': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
282
|
+
'0x13ed': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
283
|
+
'0x24b1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
284
|
+
'0xba9302': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
285
|
+
'0x7c8': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
286
|
+
'0x138d5': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
287
|
+
'0x6d': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
288
|
+
'0x343b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
289
|
+
'0x34a1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
290
|
+
'0x3109': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
291
|
+
'0x91b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
292
|
+
'0xa96': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
293
|
+
'0x22c3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
294
|
+
'0x2be3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
295
|
+
'0xbf03': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
296
|
+
'0x1b254': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
297
|
+
'0xa7b14': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
298
|
+
'0x2276': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
299
|
+
'0x1b9e': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
300
|
+
'0x6a63bb8': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
301
|
+
'0x15af3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
302
|
+
'0x15af1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
303
|
+
'0xae3f3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
304
|
+
'0x531': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
305
|
+
'0x28c61': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
306
|
+
'0x28c58': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
307
|
+
'0x1d88': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
308
|
+
'0x5b9b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
309
|
+
'0x4c7e1': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
310
|
+
'0xa53b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
311
|
+
'0x1a2b': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
312
|
+
'0x406': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
313
|
+
'0x2cef': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
314
|
+
'0x18b2': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
315
|
+
'0x182a9': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
316
|
+
'0xc4': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
317
|
+
'0xfdd': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
318
|
+
'0xfde': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
319
|
+
'0x99c0a0f': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
320
|
+
'0x22cf': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
321
|
+
'0x310c5': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
322
|
+
'0x46f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
323
|
+
'0x659': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
324
|
+
'0x139c968f9': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
325
|
+
'0xed88': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
326
|
+
'0xd036': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
327
|
+
'0x1f3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
328
|
+
'0x31bf8c3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
329
|
+
'0x1cbc67bfdc': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
330
|
+
'0x98967f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
331
|
+
'0x4f588': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
332
|
+
'0x16db': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
333
|
+
'0x3a': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
334
|
+
'0x59': '0xca11bde05977b3631167028862be2a173976ca11',
|
|
335
|
+
'0x1e0': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
336
|
+
'0x2eb': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
337
|
+
'0x221': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
338
|
+
'0x6f0': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
339
|
+
'0xa867': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
340
|
+
'0x2611': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
341
|
+
'0xa6': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
342
|
+
'0x15f900': '0x6B5eFbC0C82eBb26CA13a4F11836f36Fc6fdBC5D',
|
|
343
|
+
'0x74c': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
344
|
+
'0x407b': '0x90a2377F233E3461BACa6080d4837837d8762927',
|
|
345
|
+
'0xa3c3': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
346
|
+
'0xab5': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
|
|
347
|
+
'0x138de': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
348
|
+
'0x18c6': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
349
|
+
'0x8173': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
350
|
+
'0x2ba': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
351
|
+
'0x279f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
352
|
+
'0xb67d2': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
353
|
+
'0xe8': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
354
|
+
'0x18232': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
355
|
+
'0x8f': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
356
|
+
'0x32': '0x0B1795ccA8E4eC4df02346a082df54D437F8D9aF',
|
|
357
|
+
'0x18c7': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
358
|
+
'0x10e6': '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
359
|
+
'0x10b3e': '0x99423C88EB5723A590b4C644426069042f137B9e',
|
|
360
|
+
};
|
|
361
|
+
// =============================================================================
|
|
362
|
+
// ENCODING/DECODING UTILITIES (using viem)
|
|
363
|
+
// =============================================================================
|
|
364
|
+
/**
|
|
365
|
+
* Encode a balanceOf call for an ERC-20 token.
|
|
366
|
+
*
|
|
367
|
+
* @param accountAddress - The account address.
|
|
368
|
+
* @returns The encoded call data.
|
|
369
|
+
*/
|
|
370
|
+
function encodeBalanceOf(accountAddress) {
|
|
371
|
+
return (0, viem_1.encodeFunctionData)({
|
|
372
|
+
abi: ERC20_ABI,
|
|
373
|
+
functionName: 'balanceOf',
|
|
374
|
+
args: [accountAddress],
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Encode a getEthBalance call for native token via Multicall3.
|
|
379
|
+
*
|
|
380
|
+
* @param accountAddress - The account address.
|
|
381
|
+
* @returns The encoded call data.
|
|
382
|
+
*/
|
|
383
|
+
function encodeGetEthBalance(accountAddress) {
|
|
384
|
+
return (0, viem_1.encodeFunctionData)({
|
|
385
|
+
abi: MULTICALL3_ABI,
|
|
386
|
+
functionName: 'getEthBalance',
|
|
387
|
+
args: [accountAddress],
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Encode a Multicall3 aggregate3 call.
|
|
392
|
+
*
|
|
393
|
+
* @param calls - Array of calls with target, allowFailure, and callData.
|
|
394
|
+
* @returns The encoded aggregate3 call data.
|
|
395
|
+
*/
|
|
396
|
+
function encodeAggregate3(calls) {
|
|
397
|
+
return (0, viem_1.encodeFunctionData)({
|
|
398
|
+
abi: MULTICALL3_ABI,
|
|
399
|
+
functionName: 'aggregate3',
|
|
400
|
+
args: [
|
|
401
|
+
calls.map((call) => ({
|
|
402
|
+
target: call.target,
|
|
403
|
+
allowFailure: call.allowFailure,
|
|
404
|
+
callData: call.callData,
|
|
405
|
+
})),
|
|
406
|
+
],
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
exports.encodeAggregate3 = encodeAggregate3;
|
|
410
|
+
/**
|
|
411
|
+
* Decode the response from aggregate3.
|
|
412
|
+
* Returns array of (success, returnData) tuples.
|
|
413
|
+
*
|
|
414
|
+
* @param data - The raw response data.
|
|
415
|
+
* @param callCount - Number of calls made (used for validation).
|
|
416
|
+
* @returns Array of success and return data.
|
|
417
|
+
*/
|
|
418
|
+
function decodeAggregate3Response(data, callCount) {
|
|
419
|
+
const decoded = (0, viem_1.decodeFunctionResult)({
|
|
420
|
+
abi: MULTICALL3_ABI,
|
|
421
|
+
functionName: 'aggregate3',
|
|
422
|
+
data,
|
|
423
|
+
});
|
|
424
|
+
// decoded is an array of { success: boolean, returnData: `0x${string}` }
|
|
425
|
+
const results = decoded;
|
|
426
|
+
if (results.length !== callCount) {
|
|
427
|
+
throw new Error(`Expected ${callCount} results, got ${results.length}`);
|
|
428
|
+
}
|
|
429
|
+
return results.map((result) => ({
|
|
430
|
+
success: result.success,
|
|
431
|
+
returnData: result.returnData,
|
|
432
|
+
}));
|
|
433
|
+
}
|
|
434
|
+
exports.decodeAggregate3Response = decodeAggregate3Response;
|
|
435
|
+
/**
|
|
436
|
+
* Decode a uint256 balance from return data.
|
|
437
|
+
*
|
|
438
|
+
* @param data - The hex return data.
|
|
439
|
+
* @returns The decoded balance as a string.
|
|
440
|
+
*/
|
|
441
|
+
function decodeUint256(data) {
|
|
442
|
+
const hexData = data.slice(2);
|
|
443
|
+
if (hexData.length === 0) {
|
|
444
|
+
return '0';
|
|
445
|
+
}
|
|
446
|
+
// Take first 64 chars (32 bytes) for uint256
|
|
447
|
+
const normalizedHex = hexData.length > 64 ? hexData.slice(0, 64) : hexData;
|
|
448
|
+
return BigInt(`0x${normalizedHex}`).toString();
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Client for batching RPC calls using Multicall3.
|
|
452
|
+
* Falls back to individual calls on chains without Multicall3 support.
|
|
453
|
+
*/
|
|
454
|
+
class MulticallClient {
|
|
455
|
+
constructor(getProvider, config) {
|
|
456
|
+
_MulticallClient_instances.add(this);
|
|
457
|
+
_MulticallClient_getProvider.set(this, void 0);
|
|
458
|
+
_MulticallClient_config.set(this, void 0);
|
|
459
|
+
__classPrivateFieldSet(this, _MulticallClient_getProvider, getProvider, "f");
|
|
460
|
+
// Use default values for invalid (non-positive) batch sizes to prevent
|
|
461
|
+
// infinite loops or errors in divideIntoBatches
|
|
462
|
+
const maxCallsPerBatch = config?.maxCallsPerBatch !== undefined && config.maxCallsPerBatch > 0
|
|
463
|
+
? config.maxCallsPerBatch
|
|
464
|
+
: 300;
|
|
465
|
+
const timeoutMs = config?.timeoutMs !== undefined && config.timeoutMs > 0
|
|
466
|
+
? config.timeoutMs
|
|
467
|
+
: 30000;
|
|
468
|
+
__classPrivateFieldSet(this, _MulticallClient_config, {
|
|
469
|
+
maxCallsPerBatch,
|
|
470
|
+
timeoutMs,
|
|
471
|
+
}, "f");
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Fetch ERC-20 and native token balances using Multicall3.
|
|
475
|
+
* Falls back to individual RPC calls on unsupported chains.
|
|
476
|
+
*
|
|
477
|
+
* @param chainId - The chain ID.
|
|
478
|
+
* @param requests - Array of balance requests.
|
|
479
|
+
* @returns Array of balance responses.
|
|
480
|
+
*/
|
|
481
|
+
async batchBalanceOf(chainId, requests) {
|
|
482
|
+
if (requests.length === 0) {
|
|
483
|
+
return [];
|
|
484
|
+
}
|
|
485
|
+
const multicallAddress = MULTICALL3_ADDRESS_BY_CHAIN[chainId];
|
|
486
|
+
const provider = __classPrivateFieldGet(this, _MulticallClient_getProvider, "f").call(this, chainId);
|
|
487
|
+
// If Multicall3 is not supported, fall back to individual calls
|
|
488
|
+
if (!multicallAddress) {
|
|
489
|
+
return __classPrivateFieldGet(this, _MulticallClient_instances, "m", _MulticallClient_fallbackBatchBalanceOf).call(this, provider, requests);
|
|
490
|
+
}
|
|
491
|
+
// Use Multicall3
|
|
492
|
+
return __classPrivateFieldGet(this, _MulticallClient_instances, "m", _MulticallClient_multicallBatchBalanceOf).call(this, provider, multicallAddress, requests);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
exports.MulticallClient = MulticallClient;
|
|
496
|
+
_MulticallClient_getProvider = new WeakMap(), _MulticallClient_config = new WeakMap(), _MulticallClient_instances = new WeakSet(), _MulticallClient_multicallBatchBalanceOf =
|
|
497
|
+
/**
|
|
498
|
+
* Fetch balances using Multicall3 aggregate3.
|
|
499
|
+
*
|
|
500
|
+
* @param provider - The RPC provider.
|
|
501
|
+
* @param multicallAddress - The Multicall3 contract address.
|
|
502
|
+
* @param requests - Array of balance requests.
|
|
503
|
+
* @returns Array of balance responses.
|
|
504
|
+
*/
|
|
505
|
+
async function _MulticallClient_multicallBatchBalanceOf(provider, multicallAddress, requests) {
|
|
506
|
+
const batchSize = __classPrivateFieldGet(this, _MulticallClient_config, "f").maxCallsPerBatch;
|
|
507
|
+
const responses = await (0, utils_1.reduceInBatchesSerially)({
|
|
508
|
+
values: requests,
|
|
509
|
+
batchSize,
|
|
510
|
+
initialResult: [],
|
|
511
|
+
eachBatch: async (workingResult, batch) => {
|
|
512
|
+
try {
|
|
513
|
+
// Build aggregate3 calls
|
|
514
|
+
const calls = batch.map((req) => {
|
|
515
|
+
const isNative = req.tokenAddress === ZERO_ADDRESS;
|
|
516
|
+
const target = isNative ? multicallAddress : req.tokenAddress;
|
|
517
|
+
return {
|
|
518
|
+
target,
|
|
519
|
+
allowFailure: true,
|
|
520
|
+
callData: isNative
|
|
521
|
+
? encodeGetEthBalance(req.accountAddress)
|
|
522
|
+
: encodeBalanceOf(req.accountAddress),
|
|
523
|
+
};
|
|
524
|
+
});
|
|
525
|
+
// Encode and send aggregate3 call
|
|
526
|
+
const callData = encodeAggregate3(calls);
|
|
527
|
+
const result = await provider.call({
|
|
528
|
+
to: multicallAddress,
|
|
529
|
+
data: callData,
|
|
530
|
+
});
|
|
531
|
+
// Decode response
|
|
532
|
+
const decoded = decodeAggregate3Response(result, batch.length);
|
|
533
|
+
// Map results back to responses
|
|
534
|
+
for (let i = 0; i < batch.length; i++) {
|
|
535
|
+
const { tokenAddress, accountAddress } = batch[i];
|
|
536
|
+
const { success, returnData } = decoded[i];
|
|
537
|
+
if (success && returnData && returnData.length > 2) {
|
|
538
|
+
workingResult.push({
|
|
539
|
+
tokenAddress,
|
|
540
|
+
accountAddress,
|
|
541
|
+
success: true,
|
|
542
|
+
balance: decodeUint256(returnData),
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
else {
|
|
546
|
+
workingResult.push({
|
|
547
|
+
tokenAddress,
|
|
548
|
+
accountAddress,
|
|
549
|
+
success: false,
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
catch {
|
|
555
|
+
// On aggregate3 error, fall back to individual calls for this batch.
|
|
556
|
+
// #fetchSingleBalance never rejects - it catches all errors internally
|
|
557
|
+
// and returns a failed response, so we use Promise.all here.
|
|
558
|
+
const fallbackResults = await Promise.all(batch.map((req) => __classPrivateFieldGet(this, _MulticallClient_instances, "m", _MulticallClient_fetchSingleBalance).call(this, provider, req)));
|
|
559
|
+
for (const result of fallbackResults) {
|
|
560
|
+
workingResult.push(result);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return workingResult;
|
|
564
|
+
},
|
|
565
|
+
});
|
|
566
|
+
return responses;
|
|
567
|
+
}, _MulticallClient_fallbackBatchBalanceOf =
|
|
568
|
+
/**
|
|
569
|
+
* Fallback: fetch balances using individual RPC calls.
|
|
570
|
+
*
|
|
571
|
+
* @param provider - The RPC provider.
|
|
572
|
+
* @param requests - Array of balance requests.
|
|
573
|
+
* @returns Array of balance responses.
|
|
574
|
+
*/
|
|
575
|
+
async function _MulticallClient_fallbackBatchBalanceOf(provider, requests) {
|
|
576
|
+
// Use smaller batch size for parallel individual calls to avoid overwhelming RPC
|
|
577
|
+
const batchSize = Math.min(__classPrivateFieldGet(this, _MulticallClient_config, "f").maxCallsPerBatch, 50);
|
|
578
|
+
const responses = await (0, utils_1.reduceInBatchesSerially)({
|
|
579
|
+
values: requests,
|
|
580
|
+
batchSize,
|
|
581
|
+
initialResult: [],
|
|
582
|
+
eachBatch: async (workingResult, batch) => {
|
|
583
|
+
// #fetchSingleBalance never rejects - it catches all errors internally
|
|
584
|
+
// and returns a failed response, so we use Promise.all here.
|
|
585
|
+
const batchResults = await Promise.all(batch.map((req) => __classPrivateFieldGet(this, _MulticallClient_instances, "m", _MulticallClient_fetchSingleBalance).call(this, provider, req)));
|
|
586
|
+
for (const result of batchResults) {
|
|
587
|
+
workingResult.push(result);
|
|
588
|
+
}
|
|
589
|
+
return workingResult;
|
|
590
|
+
},
|
|
591
|
+
});
|
|
592
|
+
return responses;
|
|
593
|
+
}, _MulticallClient_fetchSingleBalance =
|
|
594
|
+
/**
|
|
595
|
+
* Fetch a single token balance (fallback method).
|
|
596
|
+
*
|
|
597
|
+
* @param provider - The RPC provider.
|
|
598
|
+
* @param request - The balance request.
|
|
599
|
+
* @returns The balance response.
|
|
600
|
+
*/
|
|
601
|
+
async function _MulticallClient_fetchSingleBalance(provider, request) {
|
|
602
|
+
// Destructure inside try block to ensure any errors are caught
|
|
603
|
+
// and don't cause promise rejections that bypass error handling
|
|
604
|
+
try {
|
|
605
|
+
const { tokenAddress, accountAddress } = request;
|
|
606
|
+
// Native token (zero address)
|
|
607
|
+
if (tokenAddress === ZERO_ADDRESS) {
|
|
608
|
+
const balance = await provider.getBalance(accountAddress);
|
|
609
|
+
return {
|
|
610
|
+
tokenAddress,
|
|
611
|
+
accountAddress,
|
|
612
|
+
success: true,
|
|
613
|
+
balance: balance.toString(),
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
// ERC-20 token
|
|
617
|
+
const callData = encodeBalanceOf(accountAddress);
|
|
618
|
+
const result = await provider.call({
|
|
619
|
+
to: tokenAddress,
|
|
620
|
+
data: callData,
|
|
621
|
+
});
|
|
622
|
+
const balance = decodeUint256(result);
|
|
623
|
+
return {
|
|
624
|
+
tokenAddress,
|
|
625
|
+
accountAddress,
|
|
626
|
+
success: true,
|
|
627
|
+
balance,
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
catch {
|
|
631
|
+
return {
|
|
632
|
+
tokenAddress: request.tokenAddress,
|
|
633
|
+
accountAddress: request.accountAddress,
|
|
634
|
+
success: false,
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
};
|
|
638
|
+
//# sourceMappingURL=MulticallClient.cjs.map
|