@1delta/providers 0.0.41 → 0.0.43
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/dist/{_esm-NMEXBKYZ.mjs → _esm-BLSSJTMS.mjs} +33 -33
- package/dist/{ccip-3Y4YD27I.mjs → ccip-P6QKYDYG.mjs} +1 -1
- package/dist/{chunk-7BYOX3YW.mjs → chunk-GGVKF6RL.mjs} +175 -129
- package/dist/index.d.mts +582 -160
- package/dist/index.d.ts +582 -160
- package/dist/index.js +1424 -1193
- package/dist/index.mjs +815 -640
- package/package.json +5 -6
- package/src/chains/chainMapping.ts +314 -0
- package/src/chains/customChains.ts +202 -0
- package/src/client/client.ts +110 -0
- package/src/evm.ts +7 -1067
- package/src/multicall/multicall.ts +250 -0
- package/src/rpc/rpcOverrides.ts +248 -0
- package/src/transport/transport.ts +17 -0
- package/src/utils/utils.ts +55 -0
- package/test/contract.ts +204 -0
- package/test/multicallRetry.test.ts +808 -0
- package/test/multicallRetry.testUtils.ts +181 -0
- package/vitest.config.ts +8 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@1delta/providers",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.43",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -17,14 +17,13 @@
|
|
|
17
17
|
"author": "",
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"
|
|
20
|
+
"vitest": "^4.0.18",
|
|
21
21
|
"@1delta/chain-registry": "0.0.4",
|
|
22
|
-
"@1delta/data-sdk": "0.0.
|
|
22
|
+
"@1delta/data-sdk": "0.0.14"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"
|
|
26
|
-
"typescript": "^5.9.3"
|
|
27
|
-
"tsup": "^8.5.1"
|
|
25
|
+
"tsup": "^8.5.1",
|
|
26
|
+
"typescript": "^5.9.3"
|
|
28
27
|
},
|
|
29
28
|
"scripts": {
|
|
30
29
|
"build": "tsup src/index.ts --format esm,cjs --dts",
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { Chain } from '@1delta/chain-registry'
|
|
2
|
+
import {
|
|
3
|
+
mantle,
|
|
4
|
+
mainnet,
|
|
5
|
+
optimism,
|
|
6
|
+
arbitrum,
|
|
7
|
+
bsc,
|
|
8
|
+
avalanche,
|
|
9
|
+
taiko,
|
|
10
|
+
metis,
|
|
11
|
+
polygon,
|
|
12
|
+
zksync,
|
|
13
|
+
scroll,
|
|
14
|
+
gnosis,
|
|
15
|
+
base,
|
|
16
|
+
blast,
|
|
17
|
+
kaia,
|
|
18
|
+
opBNB,
|
|
19
|
+
fantom,
|
|
20
|
+
sonic,
|
|
21
|
+
linea,
|
|
22
|
+
hemi,
|
|
23
|
+
neonMainnet,
|
|
24
|
+
degen,
|
|
25
|
+
gravity,
|
|
26
|
+
lightlinkPhoenix,
|
|
27
|
+
plume,
|
|
28
|
+
abstract,
|
|
29
|
+
peaq,
|
|
30
|
+
flowMainnet,
|
|
31
|
+
soneium,
|
|
32
|
+
goat,
|
|
33
|
+
berachain,
|
|
34
|
+
rootstock,
|
|
35
|
+
ink,
|
|
36
|
+
vanar,
|
|
37
|
+
fuse,
|
|
38
|
+
superposition,
|
|
39
|
+
story,
|
|
40
|
+
apeChain,
|
|
41
|
+
telos,
|
|
42
|
+
flare,
|
|
43
|
+
aurora,
|
|
44
|
+
kava,
|
|
45
|
+
iota,
|
|
46
|
+
coreDao,
|
|
47
|
+
unichain,
|
|
48
|
+
mode,
|
|
49
|
+
xLayer,
|
|
50
|
+
zircuit,
|
|
51
|
+
corn,
|
|
52
|
+
bob,
|
|
53
|
+
manta,
|
|
54
|
+
harmonyOne,
|
|
55
|
+
celo,
|
|
56
|
+
bitlayer,
|
|
57
|
+
merlin,
|
|
58
|
+
sei,
|
|
59
|
+
iotex,
|
|
60
|
+
bsquared,
|
|
61
|
+
zetachain,
|
|
62
|
+
ronin,
|
|
63
|
+
inEVM,
|
|
64
|
+
pulsechain,
|
|
65
|
+
xdc,
|
|
66
|
+
cronos,
|
|
67
|
+
cronoszkEVM,
|
|
68
|
+
taraxa,
|
|
69
|
+
meter,
|
|
70
|
+
morph,
|
|
71
|
+
moonbeam,
|
|
72
|
+
zkLinkNova,
|
|
73
|
+
vana,
|
|
74
|
+
} from 'viem/chains'
|
|
75
|
+
import { customChains, katana, plasma } from './customChains'
|
|
76
|
+
|
|
77
|
+
export function getEvmChain(chain: string) {
|
|
78
|
+
switch (chain) {
|
|
79
|
+
case Chain.ARBITRUM_ONE:
|
|
80
|
+
return arbitrum
|
|
81
|
+
case Chain.ETHEREUM_MAINNET:
|
|
82
|
+
return mainnet
|
|
83
|
+
case Chain.MANTLE:
|
|
84
|
+
return mantle
|
|
85
|
+
case Chain.BNB_SMART_CHAIN_MAINNET:
|
|
86
|
+
return bsc
|
|
87
|
+
case Chain.OPBNB_MAINNET:
|
|
88
|
+
return opBNB
|
|
89
|
+
case Chain.TAIKO_ALETHIA:
|
|
90
|
+
return taiko
|
|
91
|
+
case Chain.AVALANCHE_C_CHAIN:
|
|
92
|
+
return avalanche
|
|
93
|
+
case Chain.OP_MAINNET:
|
|
94
|
+
return optimism
|
|
95
|
+
case Chain.METIS_ANDROMEDA_MAINNET:
|
|
96
|
+
return metis
|
|
97
|
+
case Chain.POLYGON_MAINNET:
|
|
98
|
+
return polygon
|
|
99
|
+
case Chain.ZKSYNC_MAINNET:
|
|
100
|
+
return zksync
|
|
101
|
+
case Chain.SCROLL:
|
|
102
|
+
return scroll
|
|
103
|
+
case Chain.GNOSIS:
|
|
104
|
+
return gnosis
|
|
105
|
+
case Chain.BASE:
|
|
106
|
+
return base
|
|
107
|
+
case Chain.BLAST:
|
|
108
|
+
return blast
|
|
109
|
+
case Chain.KAIA_MAINNET:
|
|
110
|
+
return kaia
|
|
111
|
+
case Chain.FANTOM_OPERA:
|
|
112
|
+
return fantom
|
|
113
|
+
case Chain.SONIC_MAINNET:
|
|
114
|
+
return sonic
|
|
115
|
+
case Chain.LINEA:
|
|
116
|
+
return linea
|
|
117
|
+
case Chain.HEMI_NETWORK:
|
|
118
|
+
return {
|
|
119
|
+
...hemi,
|
|
120
|
+
contracts: {
|
|
121
|
+
multicall3: {
|
|
122
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
123
|
+
blockCreated: 1,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
}
|
|
127
|
+
case Chain.NEON_EVM_MAINNET:
|
|
128
|
+
return neonMainnet
|
|
129
|
+
case Chain.DEGEN_CHAIN:
|
|
130
|
+
return {
|
|
131
|
+
...degen,
|
|
132
|
+
contracts: {
|
|
133
|
+
multicall3: {
|
|
134
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
135
|
+
blockCreated: 1,
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
}
|
|
139
|
+
case Chain.GRAVITY_ALPHA_MAINNET:
|
|
140
|
+
return gravity
|
|
141
|
+
case Chain.LIGHTLINK_PHOENIX_MAINNET:
|
|
142
|
+
return lightlinkPhoenix
|
|
143
|
+
case Chain.PLUME_MAINNET:
|
|
144
|
+
return plume
|
|
145
|
+
case Chain.ABSTRACT:
|
|
146
|
+
return abstract
|
|
147
|
+
case Chain.PEAQ:
|
|
148
|
+
return peaq
|
|
149
|
+
case Chain.EVM_ON_FLOW:
|
|
150
|
+
return flowMainnet
|
|
151
|
+
case Chain.SONEIUM:
|
|
152
|
+
return soneium
|
|
153
|
+
case Chain.GOAT_NETWORK:
|
|
154
|
+
return goat
|
|
155
|
+
case Chain.BERACHAIN:
|
|
156
|
+
return berachain
|
|
157
|
+
case Chain.ROOTSTOCK_MAINNET:
|
|
158
|
+
return rootstock
|
|
159
|
+
case Chain.VANAR_MAINNET:
|
|
160
|
+
return vanar
|
|
161
|
+
case Chain.INK:
|
|
162
|
+
return {
|
|
163
|
+
...ink,
|
|
164
|
+
contracts: {
|
|
165
|
+
multicall3: {
|
|
166
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
167
|
+
blockCreated: 1,
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
}
|
|
171
|
+
case Chain.FUSE_MAINNET:
|
|
172
|
+
return fuse
|
|
173
|
+
case Chain.SUPERPOSITION:
|
|
174
|
+
return superposition
|
|
175
|
+
case Chain.STORY:
|
|
176
|
+
return {
|
|
177
|
+
...story,
|
|
178
|
+
contracts: {
|
|
179
|
+
multicall3: {
|
|
180
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
181
|
+
blockCreated: 1,
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
}
|
|
185
|
+
case Chain.APECHAIN:
|
|
186
|
+
return apeChain
|
|
187
|
+
case Chain.IOTEX_NETWORK_MAINNET:
|
|
188
|
+
return iotex
|
|
189
|
+
case Chain.TELOS_EVM_MAINNET:
|
|
190
|
+
return telos
|
|
191
|
+
case Chain.FLARE_MAINNET:
|
|
192
|
+
return flare
|
|
193
|
+
case Chain.AURA_MAINNET:
|
|
194
|
+
return aurora
|
|
195
|
+
case Chain.KAVA:
|
|
196
|
+
return kava
|
|
197
|
+
case Chain.IOTA_EVM:
|
|
198
|
+
return iota
|
|
199
|
+
case Chain.AURORA_MAINNET:
|
|
200
|
+
return aurora
|
|
201
|
+
case Chain.UNICHAIN:
|
|
202
|
+
return unichain
|
|
203
|
+
case Chain.CORE_BLOCKCHAIN_MAINNET:
|
|
204
|
+
return coreDao
|
|
205
|
+
case Chain.MODE:
|
|
206
|
+
return mode
|
|
207
|
+
case Chain.CORN:
|
|
208
|
+
return corn
|
|
209
|
+
case Chain.BOB:
|
|
210
|
+
return bob
|
|
211
|
+
case Chain.RONIN_MAINNET:
|
|
212
|
+
return ronin
|
|
213
|
+
case Chain.MANTA_PACIFIC_MAINNET:
|
|
214
|
+
return manta
|
|
215
|
+
case Chain.ZIRCUIT_MAINNET:
|
|
216
|
+
return zircuit
|
|
217
|
+
case Chain.GRAPHLINQ_BLOCKCHAIN_MAINNET:
|
|
218
|
+
return customChains.GraphLinq
|
|
219
|
+
case Chain.ZETACHAIN_MAINNET:
|
|
220
|
+
return zetachain
|
|
221
|
+
case Chain.BITLAYER_MAINNET:
|
|
222
|
+
return bitlayer
|
|
223
|
+
case Chain.CROSSFI_MAINNET:
|
|
224
|
+
return customChains.crossfi
|
|
225
|
+
case Chain.INEVM_MAINNET:
|
|
226
|
+
return inEVM
|
|
227
|
+
case Chain.XDC_NETWORK:
|
|
228
|
+
return xdc
|
|
229
|
+
case Chain.CRONOS_MAINNET:
|
|
230
|
+
return cronos
|
|
231
|
+
case Chain.CRONOS_ZKEVM_MAINNET:
|
|
232
|
+
return cronoszkEVM
|
|
233
|
+
case Chain.B2_MAINNET:
|
|
234
|
+
return {
|
|
235
|
+
...bsquared,
|
|
236
|
+
contracts: {
|
|
237
|
+
multicall3: {
|
|
238
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
239
|
+
blockCreated: 1,
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
}
|
|
243
|
+
case Chain.SEI_NETWORK:
|
|
244
|
+
return sei
|
|
245
|
+
case Chain.MERLIN_MAINNET:
|
|
246
|
+
return {
|
|
247
|
+
...merlin,
|
|
248
|
+
contracts: {
|
|
249
|
+
multicall3: {
|
|
250
|
+
address: '0x46063722c010AF39E465d286B84936A12aFb81F0',
|
|
251
|
+
blockCreated: 1,
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
}
|
|
255
|
+
case Chain.X_LAYER_MAINNET:
|
|
256
|
+
return xLayer
|
|
257
|
+
case Chain.CELO_MAINNET:
|
|
258
|
+
return celo
|
|
259
|
+
case Chain.BOTANIX_MAINNET:
|
|
260
|
+
return customChains.botanix
|
|
261
|
+
case Chain.HARMONY_MAINNET_SHARD_0:
|
|
262
|
+
return harmonyOne
|
|
263
|
+
case Chain.HYPEREVM:
|
|
264
|
+
return customChains.hyperEvm
|
|
265
|
+
case Chain.KATANA:
|
|
266
|
+
return katana
|
|
267
|
+
case Chain.TARAXA_MAINNET:
|
|
268
|
+
return {
|
|
269
|
+
...taraxa,
|
|
270
|
+
contracts: {
|
|
271
|
+
multicall3: {
|
|
272
|
+
address: '0xca11bde05977b3631167028862be2a173976ca11',
|
|
273
|
+
blockCreated: 1,
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
}
|
|
277
|
+
case Chain.METER_MAINNET:
|
|
278
|
+
return {
|
|
279
|
+
...meter,
|
|
280
|
+
contracts: {
|
|
281
|
+
multicall3: {
|
|
282
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
283
|
+
blockCreated: 1,
|
|
284
|
+
},
|
|
285
|
+
},
|
|
286
|
+
}
|
|
287
|
+
case Chain.ARTELA_MAINNET:
|
|
288
|
+
return customChains.artela
|
|
289
|
+
case Chain.MORPH:
|
|
290
|
+
return morph
|
|
291
|
+
case Chain.VANA:
|
|
292
|
+
return vana
|
|
293
|
+
case Chain.PULSECHAIN:
|
|
294
|
+
return pulsechain
|
|
295
|
+
case Chain.PLASMA_MAINNET:
|
|
296
|
+
return plasma
|
|
297
|
+
case Chain.MOONBEAM:
|
|
298
|
+
return moonbeam
|
|
299
|
+
case Chain.MONAD_MAINNET:
|
|
300
|
+
return customChains.monadMainnet
|
|
301
|
+
case Chain.ZKLINK_NOVA_MAINNET:
|
|
302
|
+
return {
|
|
303
|
+
...zkLinkNova,
|
|
304
|
+
contracts: {
|
|
305
|
+
multicall3: {
|
|
306
|
+
address: '0x825267E0fA5CAe92F98540828a54198dcB3Eaeb5',
|
|
307
|
+
blockCreated: 1,
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
}
|
|
311
|
+
default:
|
|
312
|
+
throw new Error('Not in VIEM: ' + chain)
|
|
313
|
+
}
|
|
314
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { defineChain } from 'viem'
|
|
2
|
+
|
|
3
|
+
const crossfi = defineChain({
|
|
4
|
+
id: 4158,
|
|
5
|
+
name: 'CrossFi Mainet',
|
|
6
|
+
nativeCurrency: {
|
|
7
|
+
decimals: 18,
|
|
8
|
+
name: 'XFI',
|
|
9
|
+
symbol: 'XFI',
|
|
10
|
+
},
|
|
11
|
+
rpcUrls: {
|
|
12
|
+
default: {
|
|
13
|
+
http: ['https://rpc.mainnet.ms/'],
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
blockExplorers: {
|
|
17
|
+
default: { name: 'Explorer', url: 'https://xfiscan.com/' },
|
|
18
|
+
},
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
const botanix = defineChain({
|
|
22
|
+
id: 3637,
|
|
23
|
+
name: 'Botanix',
|
|
24
|
+
nativeCurrency: {
|
|
25
|
+
decimals: 18,
|
|
26
|
+
name: 'BTC',
|
|
27
|
+
symbol: 'BTC',
|
|
28
|
+
},
|
|
29
|
+
rpcUrls: {
|
|
30
|
+
default: {
|
|
31
|
+
http: [
|
|
32
|
+
'https://rpc.ankr.com/botanix_mainnet',
|
|
33
|
+
'https://rpc.botanixlabs.com',
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
blockExplorers: {
|
|
38
|
+
default: { name: 'Explorer', url: 'https://botanixscan.io/' },
|
|
39
|
+
},
|
|
40
|
+
contracts: {
|
|
41
|
+
multicall3: {
|
|
42
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
43
|
+
blockCreated: 1,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
const hyperEvm = defineChain({
|
|
49
|
+
id: 999,
|
|
50
|
+
name: 'Hyper EVM',
|
|
51
|
+
nativeCurrency: {
|
|
52
|
+
decimals: 18,
|
|
53
|
+
name: 'HYPE',
|
|
54
|
+
symbol: 'HYPE',
|
|
55
|
+
},
|
|
56
|
+
rpcUrls: {
|
|
57
|
+
default: {
|
|
58
|
+
http: ['https://rpc.hyperliquid.xyz/evm'],
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
blockExplorers: {
|
|
62
|
+
default: { name: 'Explorer', url: 'https://hypurrscan.io/' },
|
|
63
|
+
},
|
|
64
|
+
contracts: {
|
|
65
|
+
multicall3: {
|
|
66
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
67
|
+
blockCreated: 1,
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
export const katana = defineChain({
|
|
73
|
+
id: 747474,
|
|
74
|
+
name: 'Katana',
|
|
75
|
+
nativeCurrency: {
|
|
76
|
+
decimals: 18,
|
|
77
|
+
name: 'Ether',
|
|
78
|
+
symbol: 'ETH',
|
|
79
|
+
},
|
|
80
|
+
rpcUrls: {
|
|
81
|
+
default: {
|
|
82
|
+
http: ['https://rpc.katana.network'],
|
|
83
|
+
webSocket: [],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
blockExplorers: {
|
|
87
|
+
default: { name: 'Explorer', url: 'https://katanascan.com/' },
|
|
88
|
+
},
|
|
89
|
+
contracts: {
|
|
90
|
+
multicall3: {
|
|
91
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
92
|
+
blockCreated: 0,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
const GraphLinq = defineChain({
|
|
98
|
+
id: 614,
|
|
99
|
+
name: 'GraphLinq Chain',
|
|
100
|
+
nativeCurrency: {
|
|
101
|
+
decimals: 18,
|
|
102
|
+
name: 'GLQ',
|
|
103
|
+
symbol: 'GLQ',
|
|
104
|
+
},
|
|
105
|
+
rpcUrls: {
|
|
106
|
+
default: {
|
|
107
|
+
http: ['https://glq-dataseed.graphlinq.io'],
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
blockExplorers: {
|
|
111
|
+
default: { name: 'Explorer', url: 'https://explorer.graphlinq.io' },
|
|
112
|
+
},
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
const artela = defineChain({
|
|
116
|
+
id: 11820,
|
|
117
|
+
name: 'Artela Mainnet',
|
|
118
|
+
nativeCurrency: {
|
|
119
|
+
decimals: 18,
|
|
120
|
+
name: 'ART',
|
|
121
|
+
symbol: 'ART',
|
|
122
|
+
},
|
|
123
|
+
rpcUrls: {
|
|
124
|
+
default: {
|
|
125
|
+
http: ['https://node-euro.artela.network/rpc'],
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
blockExplorers: {
|
|
129
|
+
default: { name: 'Explorer', url: 'https://artscan.artela.network' },
|
|
130
|
+
},
|
|
131
|
+
contracts: {
|
|
132
|
+
multicall3: {
|
|
133
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
134
|
+
blockCreated: 1,
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
export const plasma = defineChain({
|
|
140
|
+
id: 9745,
|
|
141
|
+
name: 'Plasma Mainnet',
|
|
142
|
+
nativeCurrency: {
|
|
143
|
+
decimals: 18,
|
|
144
|
+
name: 'XPL',
|
|
145
|
+
symbol: 'XPL',
|
|
146
|
+
},
|
|
147
|
+
rpcUrls: {
|
|
148
|
+
default: {
|
|
149
|
+
http: ['https://rpc.plasma.to'],
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
blockExplorers: {
|
|
153
|
+
default: { name: 'Explorer', url: 'https://plasmascan.to/' },
|
|
154
|
+
},
|
|
155
|
+
contracts: {
|
|
156
|
+
multicall3: {
|
|
157
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
158
|
+
blockCreated: 1,
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
const monadMainnet = defineChain({
|
|
164
|
+
id: 143,
|
|
165
|
+
name: 'Monad Mainnet',
|
|
166
|
+
network: 'monad',
|
|
167
|
+
nativeCurrency: {
|
|
168
|
+
name: 'Monad',
|
|
169
|
+
symbol: 'MON',
|
|
170
|
+
decimals: 18,
|
|
171
|
+
},
|
|
172
|
+
blockExplorers: {
|
|
173
|
+
default: { name: 'Explorer', url: 'https://monadvision.com/' },
|
|
174
|
+
},
|
|
175
|
+
rpcUrls: {
|
|
176
|
+
default: {
|
|
177
|
+
http: [
|
|
178
|
+
'https://rpc-mainnet.monadinfra.com',
|
|
179
|
+
'https://rpc.monad.xyz',
|
|
180
|
+
'https://rpc1.monad.xyz',
|
|
181
|
+
'https://rpc2.monad.xyz',
|
|
182
|
+
'https://rpc3.monad.xyz',
|
|
183
|
+
'https://rpc4.monad.xyz',
|
|
184
|
+
],
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
contracts: {
|
|
188
|
+
multicall3: {
|
|
189
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
190
|
+
blockCreated: 1,
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
export const customChains = {
|
|
196
|
+
artela,
|
|
197
|
+
botanix,
|
|
198
|
+
crossfi,
|
|
199
|
+
GraphLinq,
|
|
200
|
+
hyperEvm,
|
|
201
|
+
monadMainnet,
|
|
202
|
+
} as const
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { chains } from '@1delta/data-sdk'
|
|
2
|
+
import { createPublicClient, PublicClient } from 'viem'
|
|
3
|
+
import { getEvmChain } from '../chains/chainMapping'
|
|
4
|
+
import { LIST_OVERRIDES } from '../rpc/rpcOverrides'
|
|
5
|
+
import { createTransport } from '../transport/transport'
|
|
6
|
+
import { trimTrailingSlash, uniq } from '../utils/utils'
|
|
7
|
+
|
|
8
|
+
function getEvmClientInternal(chain: string, rpcId = 0): PublicClient {
|
|
9
|
+
const chainInfo = getEvmChain(chain)
|
|
10
|
+
let rpc: string
|
|
11
|
+
if (rpcId === 0)
|
|
12
|
+
rpc = chainInfo.rpcUrls.default.http[0] ?? LIST_OVERRIDES[chain]?.[0]
|
|
13
|
+
else {
|
|
14
|
+
const rpcsChain = (LIST_OVERRIDES[chain] ??
|
|
15
|
+
chains()?.[chain]?.rpc ??
|
|
16
|
+
[]) as any[]
|
|
17
|
+
const rpcs = chainInfo.rpcUrls.default.http.map((a) => trimTrailingSlash(a))
|
|
18
|
+
const rpcsAdded = rpcsChain.map((a) => trimTrailingSlash(a))
|
|
19
|
+
const allRpcs = uniq([...rpcsAdded, ...rpcs])
|
|
20
|
+
const currId = Math.min(allRpcs.length - 1, rpcId)
|
|
21
|
+
rpc = allRpcs[currId] as any
|
|
22
|
+
}
|
|
23
|
+
if (!rpc)
|
|
24
|
+
throw new Error('Failed to get RPC at index ' + rpcId + ' for ' + chain)
|
|
25
|
+
return createPublicClient({
|
|
26
|
+
chain: chainInfo as any,
|
|
27
|
+
transport: createTransport(rpc),
|
|
28
|
+
}) as any
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function getEvmClient(chain: string, rpcId = 0): PublicClient {
|
|
32
|
+
return getEvmClientInternal(chain, rpcId)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function getEvmClientUniversal({
|
|
36
|
+
chain,
|
|
37
|
+
rpcId = 0,
|
|
38
|
+
}: {
|
|
39
|
+
chain: string
|
|
40
|
+
rpcId: number
|
|
41
|
+
}): PublicClient {
|
|
42
|
+
return getEvmClientInternal(chain, rpcId)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function getEvmClientWithCustomRpcsInternal(
|
|
46
|
+
chain: string,
|
|
47
|
+
rpcId = 0,
|
|
48
|
+
customRpcs: Record<string, string[]> = LIST_OVERRIDES,
|
|
49
|
+
): PublicClient {
|
|
50
|
+
const chainInfo = getEvmChain(chain)
|
|
51
|
+
let rpc: string
|
|
52
|
+
|
|
53
|
+
if (customRpcs && customRpcs[chain]) {
|
|
54
|
+
const customRpcList = uniq(
|
|
55
|
+
customRpcs[chain]
|
|
56
|
+
.filter(Boolean)
|
|
57
|
+
.map((url) => trimTrailingSlash(url))
|
|
58
|
+
.filter((url): url is string => Boolean(url)),
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
if (customRpcList.length === 0) {
|
|
62
|
+
throw new Error(`No valid custom RPCs provided for chain ${chain}`)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
rpc = customRpcList[rpcId % customRpcList.length]
|
|
66
|
+
} else {
|
|
67
|
+
if (rpcId === 0)
|
|
68
|
+
rpc = chainInfo.rpcUrls.default.http[0] ?? LIST_OVERRIDES[chain]?.[0]
|
|
69
|
+
else {
|
|
70
|
+
const rpcsChain = (chains()?.[chain]?.rpc ?? []) as any[]
|
|
71
|
+
const rpcs = chainInfo.rpcUrls.default.http.map((a) =>
|
|
72
|
+
trimTrailingSlash(a),
|
|
73
|
+
)
|
|
74
|
+
const rpcsAdded = rpcsChain.map((a) => trimTrailingSlash(a))
|
|
75
|
+
const allRpcs = uniq([...rpcs, ...rpcsAdded])
|
|
76
|
+
const currId = Math.min(allRpcs.length - 1, rpcId)
|
|
77
|
+
rpc = allRpcs[currId] as any
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (!rpc)
|
|
81
|
+
throw new Error('Failed to get RPC at index ' + rpcId + ' for ' + chain)
|
|
82
|
+
return createPublicClient({
|
|
83
|
+
chain: chainInfo as any,
|
|
84
|
+
transport: createTransport(rpc),
|
|
85
|
+
}) as any
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @deprecated use getEvmClientWithCustomRpcsUniversal instead
|
|
90
|
+
* @see getEvmClientWithCustomRpcsUniversal
|
|
91
|
+
*/
|
|
92
|
+
export function getEvmClientWithCustomRpcs(
|
|
93
|
+
chain: string,
|
|
94
|
+
rpcId = 0,
|
|
95
|
+
customRpcs: Record<string, string[]> = LIST_OVERRIDES,
|
|
96
|
+
): PublicClient {
|
|
97
|
+
return getEvmClientWithCustomRpcsInternal(chain, rpcId, customRpcs)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function getEvmClientWithCustomRpcsUniversal({
|
|
101
|
+
chain,
|
|
102
|
+
rpcId = 0,
|
|
103
|
+
customRpcs = LIST_OVERRIDES,
|
|
104
|
+
}: {
|
|
105
|
+
chain: string
|
|
106
|
+
rpcId: number
|
|
107
|
+
customRpcs: Record<string, string[]>
|
|
108
|
+
}): PublicClient {
|
|
109
|
+
return getEvmClientWithCustomRpcsInternal(chain, rpcId, customRpcs)
|
|
110
|
+
}
|