@1delta/providers 0.0.1 → 0.0.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/dist/evm.d.ts CHANGED
@@ -111,5 +111,8 @@ export declare function getEvmClient(chain: string, rpcId?: number): PublicClien
111
111
  export declare function createMulticallRetry(customRpcs?: {
112
112
  [chainId: string]: string[];
113
113
  }): (chain: string, calls: any[], abi: any, batchSize?: number, maxRetries?: number, providerId?: number, allowFailure?: boolean) => Promise<any[]>;
114
+ export declare function getEvmClientWithCustomRpcs(chain: string, rpcId?: number, customRpcs?: {
115
+ [chainId: string]: string[];
116
+ }): PublicClient;
114
117
  export declare function multicallRetry(chain: string, calls: any[], abi: any, batchSize?: number, maxRetries?: number, providerId?: number): Promise<any[]>;
115
118
  //# sourceMappingURL=evm.d.ts.map
package/dist/evm.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../src/evm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyC,YAAY,EAAE,MAAM,MAAM,CAAA;AAkE1E,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBlB,CAAC;AAEH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBlB,CAAC;AAGH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBpB,CAAC;AA8MH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,YAAY,CAmBnE;AAID,wBAAgB,oBAAoB,CAAC,UAAU,CAAC,EAAE;IAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,IAEzE,OAAO,MAAM,EACb,OAAO,GAAG,EAAE,EACZ,KAAK,GAAG,EACR,kBAA8B,EAC9B,mBAAc,EACd,mBAAc,EACd,sBAAmB,oBA6B1B;AA0CD,wBAAsB,cAAc,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EAAE,EACZ,GAAG,EAAE,GAAG,EACR,SAAS,SAAqB,EAC9B,UAAU,SAAI,EACd,UAAU,SAAI,kBAIjB"}
1
+ {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../src/evm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyC,YAAY,EAAE,MAAM,MAAM,CAAC;AAiE3E,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBlB,CAAC;AAEH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBlB,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBpB,CAAC;AA6MH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,YAAY,CAmBnE;AAID,wBAAgB,oBAAoB,CAAC,UAAU,CAAC,EAAE;IAChD,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC7B,IAEG,OAAO,MAAM,EACb,OAAO,GAAG,EAAE,EACZ,KAAK,GAAG,EACR,kBAA8B,EAC9B,mBAAc,EACd,mBAAc,EACd,sBAAmB,oBAwCtB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,KAAK,SAAI,EACT,UAAU,CAAC,EAAE;IAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,GAC3C,YAAY,CAuCd;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EAAE,EACZ,GAAG,EAAE,GAAG,EACR,SAAS,SAAqB,EAC9B,UAAU,SAAI,EACd,UAAU,SAAI,kBAWf"}
package/dist/evm.js CHANGED
@@ -4,19 +4,19 @@ import { createPublicClient, defineChain, http } from "viem";
4
4
  import { mantle, mainnet, optimism, arbitrum, bsc, avalanche, taiko, metis, polygon, zksync, scroll, gnosis, base, blast, kaia, opBNB, fantom, sonic, linea, hemi, neonMainnet, degen, gravity, lightlinkPhoenix, plume, abstract, peaq, flowMainnet, soneium, goat, berachain, rootstock, ink, vanar, fuse, superposition, story, apeChain, telos, flare, aurora, kava, iota, coreDao, unichain, mode, xLayer, zircuit, corn, bob, manta, harmonyOne, celo, bitlayer, merlin, sei, iotex, bsquared, zetachain, ronin, inEVM, } from "viem/chains";
5
5
  export const crossfi = defineChain({
6
6
  id: 4158,
7
- name: 'CrossFi Mainet',
7
+ name: "CrossFi Mainet",
8
8
  nativeCurrency: {
9
9
  decimals: 18,
10
- name: 'XFI',
11
- symbol: 'XFI',
10
+ name: "XFI",
11
+ symbol: "XFI",
12
12
  },
13
13
  rpcUrls: {
14
14
  default: {
15
- http: ['https://rpc.mainnet.ms/'],
15
+ http: ["https://rpc.mainnet.ms/"],
16
16
  },
17
17
  },
18
18
  blockExplorers: {
19
- default: { name: 'Explorer', url: 'https://xfiscan.com/' },
19
+ default: { name: "Explorer", url: "https://xfiscan.com/" },
20
20
  },
21
21
  // contracts: {
22
22
  // multicall3: {
@@ -27,37 +27,37 @@ export const crossfi = defineChain({
27
27
  });
28
28
  export const botanix = defineChain({
29
29
  id: 3637,
30
- name: 'Botanix',
30
+ name: "Botanix",
31
31
  nativeCurrency: {
32
32
  decimals: 18,
33
- name: 'BTC',
34
- symbol: 'BTC',
33
+ name: "BTC",
34
+ symbol: "BTC",
35
35
  },
36
36
  rpcUrls: {
37
37
  default: {
38
38
  http: [
39
39
  "https://rpc.ankr.com/botanix_mainnet",
40
- "https://rpc.botanixlabs.com"
40
+ "https://rpc.botanixlabs.com",
41
41
  ],
42
42
  },
43
43
  },
44
44
  blockExplorers: {
45
- default: { name: 'Explorer', url: 'https://botanixscan.io/' },
45
+ default: { name: "Explorer", url: "https://botanixscan.io/" },
46
46
  },
47
47
  contracts: {
48
48
  multicall3: {
49
49
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
50
50
  blockCreated: 1,
51
- }
52
- }
51
+ },
52
+ },
53
53
  });
54
54
  export const GraphLinq = defineChain({
55
55
  id: 614,
56
- name: 'GraphLinq Chain',
56
+ name: "GraphLinq Chain",
57
57
  nativeCurrency: {
58
58
  decimals: 18,
59
- name: 'GLQ',
60
- symbol: 'GLQ',
59
+ name: "GLQ",
60
+ symbol: "GLQ",
61
61
  },
62
62
  rpcUrls: {
63
63
  default: {
@@ -65,7 +65,7 @@ export const GraphLinq = defineChain({
65
65
  },
66
66
  },
67
67
  blockExplorers: {
68
- default: { name: 'Explorer', "url": "https://explorer.graphlinq.io", },
68
+ default: { name: "Explorer", url: "https://explorer.graphlinq.io" },
69
69
  },
70
70
  // contracts: {
71
71
  // multicall3: {
@@ -121,8 +121,8 @@ function getEvmChain(chain) {
121
121
  multicall3: {
122
122
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
123
123
  blockCreated: 1,
124
- }
125
- }
124
+ },
125
+ },
126
126
  };
127
127
  case Chain.NEON_EVM_MAINNET:
128
128
  return neonMainnet;
@@ -133,8 +133,8 @@ function getEvmChain(chain) {
133
133
  multicall3: {
134
134
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
135
135
  blockCreated: 1,
136
- }
137
- }
136
+ },
137
+ },
138
138
  };
139
139
  case Chain.GRAVITY_ALPHA_MAINNET:
140
140
  return gravity;
@@ -165,8 +165,8 @@ function getEvmChain(chain) {
165
165
  multicall3: {
166
166
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
167
167
  blockCreated: 1,
168
- }
169
- }
168
+ },
169
+ },
170
170
  };
171
171
  case Chain.FUSE_MAINNET:
172
172
  return fuse;
@@ -179,8 +179,8 @@ function getEvmChain(chain) {
179
179
  multicall3: {
180
180
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
181
181
  blockCreated: 1,
182
- }
183
- }
182
+ },
183
+ },
184
184
  };
185
185
  case Chain.APECHAIN:
186
186
  return apeChain;
@@ -231,8 +231,8 @@ function getEvmChain(chain) {
231
231
  multicall3: {
232
232
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
233
233
  blockCreated: 1,
234
- }
235
- }
234
+ },
235
+ },
236
236
  };
237
237
  case Chain.SEI_NETWORK:
238
238
  return sei;
@@ -243,8 +243,8 @@ function getEvmChain(chain) {
243
243
  multicall3: {
244
244
  address: "0x46063722c010AF39E465d286B84936A12aFb81F0",
245
245
  blockCreated: 1,
246
- }
247
- }
246
+ },
247
+ },
248
248
  };
249
249
  case Chain.X_LAYER_MAINNET:
250
250
  return xLayer;
@@ -260,7 +260,8 @@ function getEvmChain(chain) {
260
260
  // return rariChain
261
261
  // case Chain.GLUE_MAINNET:
262
262
  // return glue
263
- default: throw new Error("Not in VIEM: " + chain);
263
+ default:
264
+ throw new Error("Not in VIEM: " + chain);
264
265
  }
265
266
  }
266
267
  const RPC_OVERRIDES = {
@@ -272,7 +273,7 @@ const RPC_OVERRIDES = {
272
273
  function trimTrailingSlash(url) {
273
274
  if (!url)
274
275
  return undefined;
275
- return url.endsWith('/') ? url.slice(0, -1) : url;
276
+ return url.endsWith("/") ? url.slice(0, -1) : url;
276
277
  }
277
278
  export function getEvmClient(chain, rpcId = 0) {
278
279
  const chainInfo = getEvmChain(chain);
@@ -280,16 +281,15 @@ export function getEvmClient(chain, rpcId = 0) {
280
281
  if (rpcId === 0)
281
282
  rpc = chainInfo.rpcUrls.default.http[0];
282
283
  else {
283
- const rpcsChain = CHAIN_INFO[chain].rpc?.filter(a => !a.includes("wss://"));
284
- const rpcs = chainInfo.rpcUrls.default.http.map(a => trimTrailingSlash(a));
285
- const rpcsAdded = rpcsChain.map(a => trimTrailingSlash(a));
284
+ const rpcsChain = CHAIN_INFO[chain].rpc?.filter((a) => !a.includes("wss://"));
285
+ const rpcs = chainInfo.rpcUrls.default.http.map((a) => trimTrailingSlash(a));
286
+ const rpcsAdded = rpcsChain.map((a) => trimTrailingSlash(a));
286
287
  const allRpcs = uniq([...rpcs, ...rpcsAdded]);
287
288
  rpc = allRpcs[rpcId];
288
289
  }
289
290
  return createPublicClient({
290
291
  chain: chainInfo,
291
- transport: http(RPC_OVERRIDES[chain] ??
292
- rpc)
292
+ transport: http(RPC_OVERRIDES[chain] ?? rpc),
293
293
  });
294
294
  }
295
295
  const DEFAULT_BATCH_SIZE = 4096;
@@ -310,7 +310,7 @@ export function createMulticallRetry(customRpcs) {
310
310
  allowFailure,
311
311
  });
312
312
  if (allowFailure) {
313
- return data.map(({ result, status }) => status !== "success" ? '0x' : result);
313
+ return data.map(({ result, status }) => status !== "success" ? "0x" : result);
314
314
  }
315
315
  return data;
316
316
  }
@@ -323,15 +323,15 @@ export function createMulticallRetry(customRpcs) {
323
323
  }
324
324
  };
325
325
  }
326
- function getEvmClientWithCustomRpcs(chain, rpcId = 0, customRpcs) {
326
+ export function getEvmClientWithCustomRpcs(chain, rpcId = 0, customRpcs) {
327
327
  const chainInfo = getEvmChain(chain);
328
328
  let rpc;
329
329
  if (customRpcs && customRpcs[chain]) {
330
330
  // Use custom RPC list if any (make sure that they are unique and valid)
331
331
  const customRpcList = uniq(customRpcs[chain]
332
332
  .filter(Boolean) // Remove empty ones
333
- .filter(a => !a.includes("wss://")) // filter websocket ones (like the default impl)
334
- .map(url => trimTrailingSlash(url))
333
+ .filter((a) => !a.includes("wss://")) // filter websocket ones (like the default impl)
334
+ .map((url) => trimTrailingSlash(url))
335
335
  .filter((url) => Boolean(url)) // Type-safe filter for defined URLs
336
336
  );
337
337
  if (customRpcList.length === 0) {
@@ -344,17 +344,16 @@ function getEvmClientWithCustomRpcs(chain, rpcId = 0, customRpcs) {
344
344
  if (rpcId === 0)
345
345
  rpc = chainInfo.rpcUrls.default.http[0];
346
346
  else {
347
- const rpcsChain = CHAIN_INFO[chain].rpc?.filter(a => !a.includes("wss://"));
348
- const rpcs = chainInfo.rpcUrls.default.http.map(a => trimTrailingSlash(a));
349
- const rpcsAdded = rpcsChain.map(a => trimTrailingSlash(a));
347
+ const rpcsChain = CHAIN_INFO[chain].rpc?.filter((a) => !a.includes("wss://"));
348
+ const rpcs = chainInfo.rpcUrls.default.http.map((a) => trimTrailingSlash(a));
349
+ const rpcsAdded = rpcsChain.map((a) => trimTrailingSlash(a));
350
350
  const allRpcs = uniq([...rpcs, ...rpcsAdded]);
351
351
  rpc = allRpcs[rpcId];
352
352
  }
353
353
  }
354
354
  return createPublicClient({
355
355
  chain: chainInfo,
356
- transport: http(RPC_OVERRIDES[chain] ??
357
- rpc)
356
+ transport: http(RPC_OVERRIDES[chain] ?? rpc),
358
357
  });
359
358
  }
360
359
  export async function multicallRetry(chain, calls, abi, batchSize = DEFAULT_BATCH_SIZE, maxRetries = 3, providerId = 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1delta/providers",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/evm.ts CHANGED
@@ -1,460 +1,483 @@
1
- import { Chain, CHAIN_INFO } from "@1delta/asset-registry"
1
+ import { Chain, CHAIN_INFO } from "@1delta/asset-registry";
2
2
  import { isArray, uniq } from "lodash";
3
- import { createPublicClient, defineChain, http, PublicClient } from "viem"
3
+ import { createPublicClient, defineChain, http, PublicClient } from "viem";
4
4
  import {
5
- mantle,
6
- mainnet,
7
- optimism,
8
- arbitrum,
9
- bsc,
10
- avalanche,
11
- taiko,
12
- metis,
13
- polygon,
14
- zksync,
15
- scroll,
16
- gnosis,
17
- base,
18
- blast,
19
- kaia,
20
- opBNB,
21
- fantom,
22
- sonic,
23
- linea,
24
- hemi,
25
- neonMainnet,
26
- degen,
27
- gravity,
28
- lightlinkPhoenix,
29
- plume,
30
- abstract,
31
- peaq,
32
- flowMainnet,
33
- soneium,
34
- goat,
35
- berachain,
36
- rootstock,
37
- ink,
38
- vanar,
39
- fuse,
40
- superposition,
41
- story,
42
- apeChain,
43
- telos,
44
- flare,
45
- aurora,
46
- kava,
47
- iota,
48
- coreDao,
49
- unichain,
50
- mode,
51
- xLayer,
52
- zircuit,
53
- corn,
54
- bob,
55
- manta,
56
- harmonyOne,
57
- celo,
58
- bitlayer,
59
- merlin,
60
- sei,
61
- iotex,
62
- bsquared,
63
- zetachain,
64
- ronin,
65
- inEVM,
66
- } from "viem/chains"
67
-
5
+ mantle,
6
+ mainnet,
7
+ optimism,
8
+ arbitrum,
9
+ bsc,
10
+ avalanche,
11
+ taiko,
12
+ metis,
13
+ polygon,
14
+ zksync,
15
+ scroll,
16
+ gnosis,
17
+ base,
18
+ blast,
19
+ kaia,
20
+ opBNB,
21
+ fantom,
22
+ sonic,
23
+ linea,
24
+ hemi,
25
+ neonMainnet,
26
+ degen,
27
+ gravity,
28
+ lightlinkPhoenix,
29
+ plume,
30
+ abstract,
31
+ peaq,
32
+ flowMainnet,
33
+ soneium,
34
+ goat,
35
+ berachain,
36
+ rootstock,
37
+ ink,
38
+ vanar,
39
+ fuse,
40
+ superposition,
41
+ story,
42
+ apeChain,
43
+ telos,
44
+ flare,
45
+ aurora,
46
+ kava,
47
+ iota,
48
+ coreDao,
49
+ unichain,
50
+ mode,
51
+ xLayer,
52
+ zircuit,
53
+ corn,
54
+ bob,
55
+ manta,
56
+ harmonyOne,
57
+ celo,
58
+ bitlayer,
59
+ merlin,
60
+ sei,
61
+ iotex,
62
+ bsquared,
63
+ zetachain,
64
+ ronin,
65
+ inEVM,
66
+ } from "viem/chains";
68
67
 
69
68
  export const crossfi = defineChain({
70
- id: 4158,
71
- name: 'CrossFi Mainet',
72
- nativeCurrency: {
73
- decimals: 18,
74
- name: 'XFI',
75
- symbol: 'XFI',
76
- },
77
- rpcUrls: {
78
- default: {
79
- http: ['https://rpc.mainnet.ms/'],
80
- },
81
- },
82
- blockExplorers: {
83
- default: { name: 'Explorer', url: 'https://xfiscan.com/' },
69
+ id: 4158,
70
+ name: "CrossFi Mainet",
71
+ nativeCurrency: {
72
+ decimals: 18,
73
+ name: "XFI",
74
+ symbol: "XFI",
75
+ },
76
+ rpcUrls: {
77
+ default: {
78
+ http: ["https://rpc.mainnet.ms/"],
84
79
  },
85
- // contracts: {
86
- // multicall3: {
87
- // address: "0xcA11bde05977b3631167028862bE2a173976CA11",
88
- // blockCreated: 1,
89
- // }
90
- // }
80
+ },
81
+ blockExplorers: {
82
+ default: { name: "Explorer", url: "https://xfiscan.com/" },
83
+ },
84
+ // contracts: {
85
+ // multicall3: {
86
+ // address: "0xcA11bde05977b3631167028862bE2a173976CA11",
87
+ // blockCreated: 1,
88
+ // }
89
+ // }
91
90
  });
92
91
 
93
92
  export const botanix = defineChain({
94
- id: 3637,
95
- name: 'Botanix',
96
- nativeCurrency: {
97
- decimals: 18,
98
- name: 'BTC',
99
- symbol: 'BTC',
93
+ id: 3637,
94
+ name: "Botanix",
95
+ nativeCurrency: {
96
+ decimals: 18,
97
+ name: "BTC",
98
+ symbol: "BTC",
99
+ },
100
+ rpcUrls: {
101
+ default: {
102
+ http: [
103
+ "https://rpc.ankr.com/botanix_mainnet",
104
+ "https://rpc.botanixlabs.com",
105
+ ],
100
106
  },
101
- rpcUrls: {
102
- default: {
103
- http: [
104
- "https://rpc.ankr.com/botanix_mainnet",
105
- "https://rpc.botanixlabs.com"],
106
- },
107
- },
108
- blockExplorers: {
109
- default: { name: 'Explorer', url: 'https://botanixscan.io/' },
107
+ },
108
+ blockExplorers: {
109
+ default: { name: "Explorer", url: "https://botanixscan.io/" },
110
+ },
111
+ contracts: {
112
+ multicall3: {
113
+ address: "0xcA11bde05977b3631167028862bE2a173976CA11",
114
+ blockCreated: 1,
110
115
  },
111
- contracts: {
112
- multicall3: {
113
- address: "0xcA11bde05977b3631167028862bE2a173976CA11",
114
- blockCreated: 1,
115
- }
116
- }
116
+ },
117
117
  });
118
118
 
119
-
120
119
  export const GraphLinq = defineChain({
121
- id: 614,
122
- name: 'GraphLinq Chain',
123
- nativeCurrency: {
124
- decimals: 18,
125
- name: 'GLQ',
126
- symbol: 'GLQ',
127
- },
128
- rpcUrls: {
129
- default: {
130
- http: ["https://glq-dataseed.graphlinq.io"],
131
- },
132
- },
133
- blockExplorers: {
134
- default: { name: 'Explorer', "url": "https://explorer.graphlinq.io", },
120
+ id: 614,
121
+ name: "GraphLinq Chain",
122
+ nativeCurrency: {
123
+ decimals: 18,
124
+ name: "GLQ",
125
+ symbol: "GLQ",
126
+ },
127
+ rpcUrls: {
128
+ default: {
129
+ http: ["https://glq-dataseed.graphlinq.io"],
135
130
  },
136
- // contracts: {
137
- // multicall3: {
138
- // address: "0xcA11bde05977b3631167028862bE2a173976CA11",
139
- // blockCreated: 1,
140
- // }
141
- // }
131
+ },
132
+ blockExplorers: {
133
+ default: { name: "Explorer", url: "https://explorer.graphlinq.io" },
134
+ },
135
+ // contracts: {
136
+ // multicall3: {
137
+ // address: "0xcA11bde05977b3631167028862bE2a173976CA11",
138
+ // blockCreated: 1,
139
+ // }
140
+ // }
142
141
  });
143
142
 
144
-
145
-
146
143
  function getEvmChain(chain: string) {
147
- switch (chain) {
148
- case Chain.ARBITRUM_ONE:
149
- return arbitrum
150
- case Chain.ETHEREUM_MAINNET:
151
- return mainnet
152
- case Chain.MANTLE:
153
- return mantle
154
- case Chain.BNB_SMART_CHAIN_MAINNET:
155
- return bsc
156
- case Chain.OPBNB_MAINNET:
157
- return opBNB
158
- case Chain.TAIKO_ALETHIA:
159
- return taiko
160
- case Chain.AVALANCHE_C_CHAIN:
161
- return avalanche
162
- case Chain.OP_MAINNET:
163
- return optimism
164
- case Chain.METIS_ANDROMEDA_MAINNET:
165
- return metis
166
- case Chain.POLYGON_MAINNET:
167
- return polygon
168
- case Chain.ZKSYNC_MAINNET:
169
- return zksync
170
- case Chain.SCROLL:
171
- return scroll
172
- case Chain.GNOSIS:
173
- return gnosis
174
- case Chain.BASE:
175
- return base
176
- case Chain.BLAST:
177
- return blast
178
- case Chain.KAIA_MAINNET:
179
- return kaia
180
- case Chain.FANTOM_OPERA:
181
- return fantom
182
- case Chain.SONIC_MAINNET:
183
- return sonic
184
- case Chain.LINEA:
185
- return linea
186
- case Chain.HEMI_NETWORK:
187
- return {
188
- ...hemi,
189
- contracts: {
190
- multicall3: {
191
- address: "0xcA11bde05977b3631167028862bE2a173976CA11",
192
- blockCreated: 1,
193
- }
194
- }
195
- }
196
- case Chain.NEON_EVM_MAINNET:
197
- return neonMainnet
198
- case Chain.DEGEN_CHAIN:
199
- return {
200
- ...degen,
201
- contracts: {
202
- multicall3: {
203
- address: "0xcA11bde05977b3631167028862bE2a173976CA11",
204
- blockCreated: 1,
205
- }
206
- }
207
- }
208
- case Chain.GRAVITY_ALPHA_MAINNET:
209
- return gravity
210
- case Chain.LIGHTLINK_PHOENIX_MAINNET:
211
- return lightlinkPhoenix
212
- case Chain.PLUME_MAINNET:
213
- return plume
214
- case Chain.ABSTRACT:
215
- return abstract
216
- case Chain.PEAQ:
217
- return peaq
218
- case Chain.EVM_ON_FLOW:
219
- return flowMainnet
220
- case Chain.SONEIUM:
221
- return soneium
222
- case Chain.GOAT_NETWORK:
223
- return goat
224
- case Chain.BERACHAIN:
225
- return berachain
226
- case Chain.ROOTSTOCK_MAINNET:
227
- return rootstock
228
- case Chain.VANAR_MAINNET:
229
- return vanar
230
- case Chain.INK:
231
- return {
232
- ...ink,
233
- contracts: {
234
- multicall3: {
235
- address: "0xcA11bde05977b3631167028862bE2a173976CA11",
236
- blockCreated: 1,
237
- }
238
- }
239
- }
240
- case Chain.FUSE_MAINNET:
241
- return fuse
242
- case Chain.SUPERPOSITION:
243
- return superposition
244
- case Chain.STORY:
245
- return {
246
- ...story,
247
- contracts: {
248
- multicall3: {
249
- address: "0xcA11bde05977b3631167028862bE2a173976CA11",
250
- blockCreated: 1,
251
- }
252
- }
253
- }
254
- case Chain.APECHAIN:
255
- return apeChain
256
- case Chain.IOTEX_NETWORK_MAINNET:
257
- return iotex
258
- case Chain.TELOS_EVM_MAINNET:
259
- return telos
260
- case Chain.FLARE_MAINNET:
261
- return flare
262
- case Chain.AURA_MAINNET:
263
- return aurora
264
- case Chain.KAVA:
265
- return kava
266
- case Chain.IOTA_EVM:
267
- return iota
268
- case Chain.AURORA_MAINNET:
269
- return aurora
270
- case Chain.UNICHAIN:
271
- return unichain
272
- case Chain.CORE_BLOCKCHAIN_MAINNET:
273
- return coreDao
274
- case Chain.MODE:
275
- return mode
276
- case Chain.CORN:
277
- return corn
278
- case Chain.BOB:
279
- return bob
280
- case Chain.RONIN_MAINNET:
281
- return ronin
282
- case Chain.MANTA_PACIFIC_MAINNET:
283
- return manta
284
- case Chain.ZIRCUIT_MAINNET:
285
- return zircuit
286
- case Chain.GRAPHLINQ_BLOCKCHAIN_MAINNET:
287
- return GraphLinq
288
- case Chain.ZETACHAIN_MAINNET:
289
- return zetachain
290
- case Chain.BITLAYER_MAINNET:
291
- return bitlayer
292
- case Chain.CROSSFI_MAINNET:
293
- return crossfi
294
- case Chain.INEVM_MAINNET:
295
- return inEVM
296
- case Chain.B2_MAINNET:
297
- return {
298
- ...bsquared,
299
- contracts: {
300
- multicall3: {
301
- address: "0xcA11bde05977b3631167028862bE2a173976CA11",
302
- blockCreated: 1,
303
- }
304
- }
305
- }
306
- case Chain.SEI_NETWORK:
307
- return sei
308
- case Chain.MERLIN_MAINNET:
309
- return {
310
- ...merlin,
311
- contracts: {
312
- multicall3: {
313
- address: "0x46063722c010AF39E465d286B84936A12aFb81F0",
314
- blockCreated: 1,
315
- }
316
- }
317
- }
318
- case Chain.X_LAYER_MAINNET:
319
- return xLayer
320
- case Chain.CELO_MAINNET:
321
- return celo
322
- case Chain.BOTANIX_MAINNET:
323
- return botanix
324
- case Chain.HARMONY_MAINNET_SHARD_0:
325
- return harmonyOne
326
- // case Chain.VANA:
327
- // return vana
328
- // case Chain.RARI_CHAIN_MAINNET:
329
- // return rariChain
330
- // case Chain.GLUE_MAINNET:
331
- // return glue
332
- default: throw new Error("Not in VIEM: " + chain)
333
- }
144
+ switch (chain) {
145
+ case Chain.ARBITRUM_ONE:
146
+ return arbitrum;
147
+ case Chain.ETHEREUM_MAINNET:
148
+ return mainnet;
149
+ case Chain.MANTLE:
150
+ return mantle;
151
+ case Chain.BNB_SMART_CHAIN_MAINNET:
152
+ return bsc;
153
+ case Chain.OPBNB_MAINNET:
154
+ return opBNB;
155
+ case Chain.TAIKO_ALETHIA:
156
+ return taiko;
157
+ case Chain.AVALANCHE_C_CHAIN:
158
+ return avalanche;
159
+ case Chain.OP_MAINNET:
160
+ return optimism;
161
+ case Chain.METIS_ANDROMEDA_MAINNET:
162
+ return metis;
163
+ case Chain.POLYGON_MAINNET:
164
+ return polygon;
165
+ case Chain.ZKSYNC_MAINNET:
166
+ return zksync;
167
+ case Chain.SCROLL:
168
+ return scroll;
169
+ case Chain.GNOSIS:
170
+ return gnosis;
171
+ case Chain.BASE:
172
+ return base;
173
+ case Chain.BLAST:
174
+ return blast;
175
+ case Chain.KAIA_MAINNET:
176
+ return kaia;
177
+ case Chain.FANTOM_OPERA:
178
+ return fantom;
179
+ case Chain.SONIC_MAINNET:
180
+ return sonic;
181
+ case Chain.LINEA:
182
+ return linea;
183
+ case Chain.HEMI_NETWORK:
184
+ return {
185
+ ...hemi,
186
+ contracts: {
187
+ multicall3: {
188
+ address: "0xcA11bde05977b3631167028862bE2a173976CA11",
189
+ blockCreated: 1,
190
+ },
191
+ },
192
+ };
193
+ case Chain.NEON_EVM_MAINNET:
194
+ return neonMainnet;
195
+ case Chain.DEGEN_CHAIN:
196
+ return {
197
+ ...degen,
198
+ contracts: {
199
+ multicall3: {
200
+ address: "0xcA11bde05977b3631167028862bE2a173976CA11",
201
+ blockCreated: 1,
202
+ },
203
+ },
204
+ };
205
+ case Chain.GRAVITY_ALPHA_MAINNET:
206
+ return gravity;
207
+ case Chain.LIGHTLINK_PHOENIX_MAINNET:
208
+ return lightlinkPhoenix;
209
+ case Chain.PLUME_MAINNET:
210
+ return plume;
211
+ case Chain.ABSTRACT:
212
+ return abstract;
213
+ case Chain.PEAQ:
214
+ return peaq;
215
+ case Chain.EVM_ON_FLOW:
216
+ return flowMainnet;
217
+ case Chain.SONEIUM:
218
+ return soneium;
219
+ case Chain.GOAT_NETWORK:
220
+ return goat;
221
+ case Chain.BERACHAIN:
222
+ return berachain;
223
+ case Chain.ROOTSTOCK_MAINNET:
224
+ return rootstock;
225
+ case Chain.VANAR_MAINNET:
226
+ return vanar;
227
+ case Chain.INK:
228
+ return {
229
+ ...ink,
230
+ contracts: {
231
+ multicall3: {
232
+ address: "0xcA11bde05977b3631167028862bE2a173976CA11",
233
+ blockCreated: 1,
234
+ },
235
+ },
236
+ };
237
+ case Chain.FUSE_MAINNET:
238
+ return fuse;
239
+ case Chain.SUPERPOSITION:
240
+ return superposition;
241
+ case Chain.STORY:
242
+ return {
243
+ ...story,
244
+ contracts: {
245
+ multicall3: {
246
+ address: "0xcA11bde05977b3631167028862bE2a173976CA11",
247
+ blockCreated: 1,
248
+ },
249
+ },
250
+ };
251
+ case Chain.APECHAIN:
252
+ return apeChain;
253
+ case Chain.IOTEX_NETWORK_MAINNET:
254
+ return iotex;
255
+ case Chain.TELOS_EVM_MAINNET:
256
+ return telos;
257
+ case Chain.FLARE_MAINNET:
258
+ return flare;
259
+ case Chain.AURA_MAINNET:
260
+ return aurora;
261
+ case Chain.KAVA:
262
+ return kava;
263
+ case Chain.IOTA_EVM:
264
+ return iota;
265
+ case Chain.AURORA_MAINNET:
266
+ return aurora;
267
+ case Chain.UNICHAIN:
268
+ return unichain;
269
+ case Chain.CORE_BLOCKCHAIN_MAINNET:
270
+ return coreDao;
271
+ case Chain.MODE:
272
+ return mode;
273
+ case Chain.CORN:
274
+ return corn;
275
+ case Chain.BOB:
276
+ return bob;
277
+ case Chain.RONIN_MAINNET:
278
+ return ronin;
279
+ case Chain.MANTA_PACIFIC_MAINNET:
280
+ return manta;
281
+ case Chain.ZIRCUIT_MAINNET:
282
+ return zircuit;
283
+ case Chain.GRAPHLINQ_BLOCKCHAIN_MAINNET:
284
+ return GraphLinq;
285
+ case Chain.ZETACHAIN_MAINNET:
286
+ return zetachain;
287
+ case Chain.BITLAYER_MAINNET:
288
+ return bitlayer;
289
+ case Chain.CROSSFI_MAINNET:
290
+ return crossfi;
291
+ case Chain.INEVM_MAINNET:
292
+ return inEVM;
293
+ case Chain.B2_MAINNET:
294
+ return {
295
+ ...bsquared,
296
+ contracts: {
297
+ multicall3: {
298
+ address: "0xcA11bde05977b3631167028862bE2a173976CA11",
299
+ blockCreated: 1,
300
+ },
301
+ },
302
+ };
303
+ case Chain.SEI_NETWORK:
304
+ return sei;
305
+ case Chain.MERLIN_MAINNET:
306
+ return {
307
+ ...merlin,
308
+ contracts: {
309
+ multicall3: {
310
+ address: "0x46063722c010AF39E465d286B84936A12aFb81F0",
311
+ blockCreated: 1,
312
+ },
313
+ },
314
+ };
315
+ case Chain.X_LAYER_MAINNET:
316
+ return xLayer;
317
+ case Chain.CELO_MAINNET:
318
+ return celo;
319
+ case Chain.BOTANIX_MAINNET:
320
+ return botanix;
321
+ case Chain.HARMONY_MAINNET_SHARD_0:
322
+ return harmonyOne;
323
+ // case Chain.VANA:
324
+ // return vana
325
+ // case Chain.RARI_CHAIN_MAINNET:
326
+ // return rariChain
327
+ // case Chain.GLUE_MAINNET:
328
+ // return glue
329
+ default:
330
+ throw new Error("Not in VIEM: " + chain);
331
+ }
334
332
  }
335
333
 
336
334
  const RPC_OVERRIDES: any = {
337
- [Chain.FANTOM_OPERA]: "https://rpc.fantom.network",
338
- [Chain.BNB_SMART_CHAIN_MAINNET]: "https://bsc-dataseed2.ninicoin.io",
339
- [Chain.METIS_ANDROMEDA_MAINNET]: "https://andromeda.metis.io/?owner=1088",
340
- [Chain.X_LAYER_MAINNET]: "https://xlayerrpc.okx.com",
341
- }
335
+ [Chain.FANTOM_OPERA]: "https://rpc.fantom.network",
336
+ [Chain.BNB_SMART_CHAIN_MAINNET]: "https://bsc-dataseed2.ninicoin.io",
337
+ [Chain.METIS_ANDROMEDA_MAINNET]: "https://andromeda.metis.io/?owner=1088",
338
+ [Chain.X_LAYER_MAINNET]: "https://xlayerrpc.okx.com",
339
+ };
342
340
 
343
341
  function trimTrailingSlash(url?: string) {
344
- if (!url) return undefined
345
- return url.endsWith('/') ? url.slice(0, -1) : url;
342
+ if (!url) return undefined;
343
+ return url.endsWith("/") ? url.slice(0, -1) : url;
346
344
  }
347
345
 
348
346
  export function getEvmClient(chain: string, rpcId = 0): PublicClient {
349
- const chainInfo = getEvmChain(chain)
350
- let rpc: string
351
- if (rpcId === 0) rpc = chainInfo.rpcUrls.default.http[0]
352
- else {
353
- const rpcsChain = CHAIN_INFO[chain].rpc?.filter(a => !a.includes("wss://"))
354
- const rpcs = chainInfo.rpcUrls.default.http.map(a => trimTrailingSlash(a))
355
- const rpcsAdded = rpcsChain.map(a => trimTrailingSlash(a))
356
- const allRpcs = uniq([...rpcs, ...rpcsAdded])
357
- rpc = allRpcs[rpcId] as any
358
- }
359
- return createPublicClient({
360
- chain: chainInfo as any,
361
- transport: http(
362
- RPC_OVERRIDES[chain] ??
363
- rpc
364
- )
365
- }) as any
366
-
347
+ const chainInfo = getEvmChain(chain);
348
+ let rpc: string;
349
+ if (rpcId === 0) rpc = chainInfo.rpcUrls.default.http[0];
350
+ else {
351
+ const rpcsChain = CHAIN_INFO[chain].rpc?.filter(
352
+ (a) => !a.includes("wss://")
353
+ );
354
+ const rpcs = chainInfo.rpcUrls.default.http.map((a) =>
355
+ trimTrailingSlash(a)
356
+ );
357
+ const rpcsAdded = rpcsChain.map((a) => trimTrailingSlash(a));
358
+ const allRpcs = uniq([...rpcs, ...rpcsAdded]);
359
+ rpc = allRpcs[rpcId] as any;
360
+ }
361
+ return createPublicClient({
362
+ chain: chainInfo as any,
363
+ transport: http(RPC_OVERRIDES[chain] ?? rpc),
364
+ }) as any;
367
365
  }
368
366
 
369
367
  const DEFAULT_BATCH_SIZE = 4096;
370
368
 
371
- export function createMulticallRetry(customRpcs?: { [chainId: string]: string[] }) {
372
- return async function multicallRetry(
373
- chain: string,
374
- calls: any[],
375
- abi: any,
376
- batchSize = DEFAULT_BATCH_SIZE,
377
- maxRetries = 3,
378
- providerId = 0,
379
- allowFailure = true,
380
- ) {
381
- try {
382
- const provider = getEvmClientWithCustomRpcs(chain, providerId, customRpcs)
383
- const abiIsArray = isArray(abi[0])
384
- const data = await provider.multicall({
385
- batchSize: DEFAULT_BATCH_SIZE,
386
- contracts: calls.map((call, i) => ({
387
- abi: abiIsArray ? abi?.[i] : abi,
388
- address: call.address as any,
389
- functionName: call.name,
390
- // @ts-ignore
391
- args: call.args ?? call.params ?? [],
392
- })),
393
- allowFailure,
394
- })
395
- if (allowFailure) {
396
- return (data as any[]).map(
397
- ({ result, status }: any) => status !== "success" ? '0x' : result
398
- );
399
- }
400
- return data
401
- } catch (e) {
402
- // error if max retries achieved
403
- if (maxRetries === 0) throw e
404
- console.log(e)
405
- return await multicallRetry(chain, calls, abi, batchSize, maxRetries - 1, providerId + 1)
406
- }
369
+ export function createMulticallRetry(customRpcs?: {
370
+ [chainId: string]: string[];
371
+ }) {
372
+ return async function multicallRetry(
373
+ chain: string,
374
+ calls: any[],
375
+ abi: any,
376
+ batchSize = DEFAULT_BATCH_SIZE,
377
+ maxRetries = 3,
378
+ providerId = 0,
379
+ allowFailure = true
380
+ ) {
381
+ try {
382
+ const provider = getEvmClientWithCustomRpcs(
383
+ chain,
384
+ providerId,
385
+ customRpcs
386
+ );
387
+ const abiIsArray = isArray(abi[0]);
388
+ const data = await provider.multicall({
389
+ batchSize: DEFAULT_BATCH_SIZE,
390
+ contracts: calls.map((call, i) => ({
391
+ abi: abiIsArray ? abi?.[i] : abi,
392
+ address: call.address as any,
393
+ functionName: call.name,
394
+ // @ts-ignore
395
+ args: call.args ?? call.params ?? [],
396
+ })),
397
+ allowFailure,
398
+ });
399
+ if (allowFailure) {
400
+ return (data as any[]).map(({ result, status }: any) =>
401
+ status !== "success" ? "0x" : result
402
+ );
403
+ }
404
+ return data;
405
+ } catch (e) {
406
+ // error if max retries achieved
407
+ if (maxRetries === 0) throw e;
408
+ console.log(e);
409
+ return await multicallRetry(
410
+ chain,
411
+ calls,
412
+ abi,
413
+ batchSize,
414
+ maxRetries - 1,
415
+ providerId + 1
416
+ );
407
417
  }
418
+ };
408
419
  }
409
420
 
410
- function getEvmClientWithCustomRpcs(chain: string, rpcId = 0, customRpcs?: { [chainId: string]: string[] }): PublicClient {
411
- const chainInfo = getEvmChain(chain)
412
- let rpc: string
421
+ export function getEvmClientWithCustomRpcs(
422
+ chain: string,
423
+ rpcId = 0,
424
+ customRpcs?: { [chainId: string]: string[] }
425
+ ): PublicClient {
426
+ const chainInfo = getEvmChain(chain);
427
+ let rpc: string;
413
428
 
414
- if (customRpcs && customRpcs[chain]) {
415
- // Use custom RPC list if any (make sure that they are unique and valid)
416
- const customRpcList = uniq(
417
- customRpcs[chain]
418
- .filter(Boolean) // Remove empty ones
419
- .filter(a => !a.includes("wss://")) // filter websocket ones (like the default impl)
420
- .map(url => trimTrailingSlash(url))
421
- .filter((url): url is string => Boolean(url)) // Type-safe filter for defined URLs
422
- )
429
+ if (customRpcs && customRpcs[chain]) {
430
+ // Use custom RPC list if any (make sure that they are unique and valid)
431
+ const customRpcList = uniq(
432
+ customRpcs[chain]
433
+ .filter(Boolean) // Remove empty ones
434
+ .filter((a) => !a.includes("wss://")) // filter websocket ones (like the default impl)
435
+ .map((url) => trimTrailingSlash(url))
436
+ .filter((url): url is string => Boolean(url)) // Type-safe filter for defined URLs
437
+ );
423
438
 
424
- if (customRpcList.length === 0) {
425
- throw new Error(`No valid custom RPCs provided for chain ${chain}`)
426
- }
439
+ if (customRpcList.length === 0) {
440
+ throw new Error(`No valid custom RPCs provided for chain ${chain}`);
441
+ }
427
442
 
428
- rpc = customRpcList[rpcId % customRpcList.length]
429
- } else {
430
- // Fallback to existing logic
431
- if (rpcId === 0) rpc = chainInfo.rpcUrls.default.http[0]
432
- else {
433
- const rpcsChain = CHAIN_INFO[chain].rpc?.filter(a => !a.includes("wss://"))
434
- const rpcs = chainInfo.rpcUrls.default.http.map(a => trimTrailingSlash(a))
435
- const rpcsAdded = rpcsChain.map(a => trimTrailingSlash(a))
436
- const allRpcs = uniq([...rpcs, ...rpcsAdded])
437
- rpc = allRpcs[rpcId] as any
438
- }
443
+ rpc = customRpcList[rpcId % customRpcList.length];
444
+ } else {
445
+ // Fallback to existing logic
446
+ if (rpcId === 0) rpc = chainInfo.rpcUrls.default.http[0];
447
+ else {
448
+ const rpcsChain = CHAIN_INFO[chain].rpc?.filter(
449
+ (a) => !a.includes("wss://")
450
+ );
451
+ const rpcs = chainInfo.rpcUrls.default.http.map((a) =>
452
+ trimTrailingSlash(a)
453
+ );
454
+ const rpcsAdded = rpcsChain.map((a) => trimTrailingSlash(a));
455
+ const allRpcs = uniq([...rpcs, ...rpcsAdded]);
456
+ rpc = allRpcs[rpcId] as any;
439
457
  }
458
+ }
440
459
 
441
- return createPublicClient({
442
- chain: chainInfo as any,
443
- transport: http(
444
- RPC_OVERRIDES[chain] ??
445
- rpc
446
- )
447
- }) as any
460
+ return createPublicClient({
461
+ chain: chainInfo as any,
462
+ transport: http(RPC_OVERRIDES[chain] ?? rpc),
463
+ }) as any;
448
464
  }
449
465
 
450
466
  export async function multicallRetry(
451
- chain: string,
452
- calls: any[],
453
- abi: any,
454
- batchSize = DEFAULT_BATCH_SIZE,
455
- maxRetries = 3,
456
- providerId = 0,
467
+ chain: string,
468
+ calls: any[],
469
+ abi: any,
470
+ batchSize = DEFAULT_BATCH_SIZE,
471
+ maxRetries = 3,
472
+ providerId = 0
457
473
  ) {
458
- const defaultMulticallRetry = createMulticallRetry()
459
- return defaultMulticallRetry(chain, calls, abi, batchSize, maxRetries, providerId)
460
- }
474
+ const defaultMulticallRetry = createMulticallRetry();
475
+ return defaultMulticallRetry(
476
+ chain,
477
+ calls,
478
+ abi,
479
+ batchSize,
480
+ maxRetries,
481
+ providerId
482
+ );
483
+ }