@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1delta/providers",
3
- "version": "0.0.41",
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
- "lodash": "^4.17.21",
20
+ "vitest": "^4.0.18",
21
21
  "@1delta/chain-registry": "0.0.4",
22
- "@1delta/data-sdk": "0.0.11"
22
+ "@1delta/data-sdk": "0.0.14"
23
23
  },
24
24
  "devDependencies": {
25
- "@types/lodash": "^4.17.21",
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
+ }