@sudobility/types 1.8.21 → 1.8.22

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.
@@ -9,616 +9,618 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.RpcHelpers = void 0;
10
10
  const enums_1 = require("../../types/business/enums");
11
11
  /**
12
- * Alchemy network identifier mappings
13
- * Maps Chain enum values to Alchemy-specific network identifiers
12
+ * Consolidated chain information map
13
+ * Contains all static metadata for each supported blockchain network
14
14
  */
15
- const ALCHEMY_NETWORK_MAP = {
16
- // Ethereum - direct mapping
17
- [enums_1.Chain.ETH_MAINNET]: 'eth-mainnet',
18
- [enums_1.Chain.ETH_SEPOLIA]: 'eth-sepolia',
19
- [enums_1.Chain.ETH_GOERLI]: 'eth-goerli',
20
- // Polygon - direct mapping
21
- [enums_1.Chain.POLYGON_MAINNET]: 'polygon-mainnet',
22
- [enums_1.Chain.POLYGON_MUMBAI]: 'polygon-mumbai',
23
- [enums_1.Chain.POLYGON_AMOY]: 'polygon-amoy',
24
- // Optimism - uses 'opt' prefix
25
- [enums_1.Chain.OPTIMISM_MAINNET]: 'opt-mainnet',
26
- [enums_1.Chain.OPTIMISM_SEPOLIA]: 'opt-sepolia',
27
- [enums_1.Chain.OPTIMISM_GOERLI]: 'opt-goerli',
28
- // Arbitrum - uses 'arb' prefix
29
- [enums_1.Chain.ARBITRUM_MAINNET]: 'arb-mainnet',
30
- [enums_1.Chain.ARBITRUM_SEPOLIA]: 'arb-sepolia',
31
- [enums_1.Chain.ARBITRUM_GOERLI]: 'arb-goerli',
32
- // Base - direct mapping
33
- [enums_1.Chain.BASE_MAINNET]: 'base-mainnet',
34
- [enums_1.Chain.BASE_SEPOLIA]: 'base-sepolia',
35
- [enums_1.Chain.BASE_GOERLI]: 'base-goerli',
36
- // Avalanche
37
- [enums_1.Chain.AVALANCHE_MAINNET]: 'avax-mainnet',
38
- [enums_1.Chain.AVALANCHE_FUJI]: 'avax-fuji',
39
- // BNB Chain
40
- [enums_1.Chain.BNB_MAINNET]: 'bnb-mainnet',
41
- [enums_1.Chain.BNB_TESTNET]: 'bnb-testnet',
42
- // Gnosis Chain
43
- [enums_1.Chain.GNOSIS_MAINNET]: 'gnosis-mainnet',
44
- [enums_1.Chain.GNOSIS_CHIADO]: 'gnosis-chiado',
45
- // Celo
46
- [enums_1.Chain.CELO_MAINNET]: 'celo-mainnet',
47
- [enums_1.Chain.CELO_ALFAJORES]: 'celo-alfajores',
48
- // zkSync
49
- [enums_1.Chain.ZKSYNC_MAINNET]: 'zksync-mainnet',
50
- [enums_1.Chain.ZKSYNC_SEPOLIA]: 'zksync-sepolia',
51
- // Linea
52
- [enums_1.Chain.LINEA_MAINNET]: 'linea-mainnet',
53
- [enums_1.Chain.LINEA_SEPOLIA]: 'linea-sepolia',
54
- // Scroll
55
- [enums_1.Chain.SCROLL_MAINNET]: 'scroll-mainnet',
56
- [enums_1.Chain.SCROLL_SEPOLIA]: 'scroll-sepolia',
57
- // Monad
58
- [enums_1.Chain.MONAD_MAINNET]: '',
59
- [enums_1.Chain.MONAD_TESTNET]: '',
60
- // Story Protocol
61
- [enums_1.Chain.STORY_MAINNET]: '',
62
- [enums_1.Chain.STORY_TESTNET]: '',
63
- // Plume Network
64
- [enums_1.Chain.PLUME_MAINNET]: '',
65
- [enums_1.Chain.PLUME_TESTNET]: '',
66
- // Nexus
67
- [enums_1.Chain.NEXUS_MAINNET]: '',
68
- [enums_1.Chain.NEXUS_TESTNET]: '',
69
- // HyperEVM
70
- [enums_1.Chain.HYPEREVM_MAINNET]: '',
71
- [enums_1.Chain.HYPEREVM_TESTNET]: '',
72
- // Sonic
73
- [enums_1.Chain.SONIC_MAINNET]: '',
74
- [enums_1.Chain.SONIC_TESTNET]: '',
75
- [enums_1.Chain.SONIC_BLAZE]: '',
76
- // Unichain
77
- [enums_1.Chain.UNICHAIN_MAINNET]: '',
78
- [enums_1.Chain.UNICHAIN_SEPOLIA]: '',
79
- // World Chain
80
- [enums_1.Chain.WORLD_MAINNET]: '',
81
- // XDC Network
82
- [enums_1.Chain.XDC_MAINNET]: '',
83
- // Ink
84
- [enums_1.Chain.INK_TESTNET]: '',
85
- // Fetch.ai
86
- [enums_1.Chain.FETCH_MAINNET]: '',
87
- [enums_1.Chain.FETCH_TESTNET]: '',
88
- // Gensyn
89
- [enums_1.Chain.GENSYN_MAINNET]: '',
90
- [enums_1.Chain.GENSYN_TESTNET]: '',
91
- // Ritual
92
- [enums_1.Chain.RITUAL_MAINNET]: '',
93
- [enums_1.Chain.RITUAL_TESTNET]: '',
94
- // Solana - simple names
95
- [enums_1.Chain.SOLANA_MAINNET]: 'mainnet',
96
- [enums_1.Chain.SOLANA_DEVNET]: 'devnet',
97
- [enums_1.Chain.SOLANA_TESTNET]: 'testnet',
98
- // Local development - no Alchemy support
99
- [enums_1.Chain.EVM_LOCAL]: '',
100
- [enums_1.Chain.SOLANA_LOCAL]: '',
101
- };
102
- /**
103
- * Block explorer domain mappings
104
- */
105
- const EXPLORER_DOMAIN_MAP = {
15
+ const CHAIN_INFO_MAP = {
106
16
  // Ethereum
107
- [enums_1.Chain.ETH_MAINNET]: 'api.etherscan.io',
108
- [enums_1.Chain.ETH_SEPOLIA]: 'api-sepolia.etherscan.io',
109
- [enums_1.Chain.ETH_GOERLI]: 'api-goerli.etherscan.io',
17
+ [enums_1.Chain.ETH_MAINNET]: {
18
+ chainType: enums_1.ChainType.EVM,
19
+ chainId: 1,
20
+ name: 'Ethereum',
21
+ alchemyNetwork: 'eth-mainnet',
22
+ explorerDomain: 'api.etherscan.io',
23
+ explorerBrowserDomain: 'etherscan.io',
24
+ usdcAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
25
+ isDev: false,
26
+ },
27
+ [enums_1.Chain.ETH_SEPOLIA]: {
28
+ chainType: enums_1.ChainType.EVM,
29
+ chainId: 11155111,
30
+ name: 'Ethereum Sepolia',
31
+ alchemyNetwork: 'eth-sepolia',
32
+ explorerDomain: 'api-sepolia.etherscan.io',
33
+ explorerBrowserDomain: 'sepolia.etherscan.io',
34
+ usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
35
+ isDev: true,
36
+ mailerAddress: '0x13fC7Fe676E4FaaE8F4D910d8Ed7fbD3FebDbe88',
37
+ },
38
+ [enums_1.Chain.ETH_GOERLI]: {
39
+ chainType: enums_1.ChainType.EVM,
40
+ chainId: 5,
41
+ name: 'Ethereum Goerli',
42
+ alchemyNetwork: 'eth-goerli',
43
+ explorerDomain: 'api-goerli.etherscan.io',
44
+ explorerBrowserDomain: 'goerli.etherscan.io',
45
+ usdcAddress: '0x07865c6E87B9F70255377e024ace6630C1Eaa37F',
46
+ isDev: true,
47
+ },
110
48
  // Polygon
111
- [enums_1.Chain.POLYGON_MAINNET]: 'api.polygonscan.com',
112
- [enums_1.Chain.POLYGON_MUMBAI]: 'api-testnet.polygonscan.com',
113
- [enums_1.Chain.POLYGON_AMOY]: 'api-amoy.polygonscan.com',
49
+ [enums_1.Chain.POLYGON_MAINNET]: {
50
+ chainType: enums_1.ChainType.EVM,
51
+ chainId: 137,
52
+ name: 'Polygon',
53
+ alchemyNetwork: 'polygon-mainnet',
54
+ explorerDomain: 'api.polygonscan.com',
55
+ explorerBrowserDomain: 'polygonscan.com',
56
+ usdcAddress: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
57
+ isDev: false,
58
+ },
59
+ [enums_1.Chain.POLYGON_MUMBAI]: {
60
+ chainType: enums_1.ChainType.EVM,
61
+ chainId: 80001,
62
+ name: 'Polygon Mumbai',
63
+ alchemyNetwork: 'polygon-mumbai',
64
+ explorerDomain: 'api-testnet.polygonscan.com',
65
+ explorerBrowserDomain: 'mumbai.polygonscan.com',
66
+ usdcAddress: '0x9999f7Fea5938fD3b1E26A12c3f2fb024e194f97',
67
+ isDev: true,
68
+ },
69
+ [enums_1.Chain.POLYGON_AMOY]: {
70
+ chainType: enums_1.ChainType.EVM,
71
+ chainId: 80002,
72
+ name: 'Polygon Amoy',
73
+ alchemyNetwork: 'polygon-amoy',
74
+ explorerDomain: 'api-amoy.polygonscan.com',
75
+ explorerBrowserDomain: 'amoy.polygonscan.com',
76
+ usdcAddress: '0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582',
77
+ isDev: true,
78
+ },
114
79
  // Optimism
115
- [enums_1.Chain.OPTIMISM_MAINNET]: 'api-optimistic.etherscan.io',
116
- [enums_1.Chain.OPTIMISM_SEPOLIA]: 'api-sepolia-optimistic.etherscan.io',
117
- [enums_1.Chain.OPTIMISM_GOERLI]: 'api-goerli-optimistic.etherscan.io',
80
+ [enums_1.Chain.OPTIMISM_MAINNET]: {
81
+ chainType: enums_1.ChainType.EVM,
82
+ chainId: 10,
83
+ name: 'Optimism',
84
+ alchemyNetwork: 'opt-mainnet',
85
+ explorerDomain: 'api-optimistic.etherscan.io',
86
+ explorerBrowserDomain: 'optimistic.etherscan.io',
87
+ usdcAddress: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
88
+ isDev: false,
89
+ },
90
+ [enums_1.Chain.OPTIMISM_SEPOLIA]: {
91
+ chainType: enums_1.ChainType.EVM,
92
+ chainId: 11155420,
93
+ name: 'Optimism Sepolia',
94
+ alchemyNetwork: 'opt-sepolia',
95
+ explorerDomain: 'api-sepolia-optimistic.etherscan.io',
96
+ explorerBrowserDomain: 'sepolia-optimistic.etherscan.io',
97
+ usdcAddress: '0x5fd84259d66Cd46123540766Be93DFE6D43130D7',
98
+ isDev: true,
99
+ },
100
+ [enums_1.Chain.OPTIMISM_GOERLI]: {
101
+ chainType: enums_1.ChainType.EVM,
102
+ chainId: 420,
103
+ name: 'Optimism Goerli',
104
+ alchemyNetwork: 'opt-goerli',
105
+ explorerDomain: 'api-goerli-optimistic.etherscan.io',
106
+ explorerBrowserDomain: 'goerli-optimistic.etherscan.io',
107
+ usdcAddress: '0xe05606174bac4A6364B31bd0eCA4bf4dD368f8C6',
108
+ isDev: true,
109
+ },
118
110
  // Arbitrum
119
- [enums_1.Chain.ARBITRUM_MAINNET]: 'api.arbiscan.io',
120
- [enums_1.Chain.ARBITRUM_SEPOLIA]: 'api-sepolia.arbiscan.io',
121
- [enums_1.Chain.ARBITRUM_GOERLI]: 'api-goerli.arbiscan.io',
111
+ [enums_1.Chain.ARBITRUM_MAINNET]: {
112
+ chainType: enums_1.ChainType.EVM,
113
+ chainId: 42161,
114
+ name: 'Arbitrum',
115
+ alchemyNetwork: 'arb-mainnet',
116
+ explorerDomain: 'api.arbiscan.io',
117
+ explorerBrowserDomain: 'arbiscan.io',
118
+ usdcAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
119
+ isDev: false,
120
+ },
121
+ [enums_1.Chain.ARBITRUM_SEPOLIA]: {
122
+ chainType: enums_1.ChainType.EVM,
123
+ chainId: 421614,
124
+ name: 'Arbitrum Sepolia',
125
+ alchemyNetwork: 'arb-sepolia',
126
+ explorerDomain: 'api-sepolia.arbiscan.io',
127
+ explorerBrowserDomain: 'sepolia.arbiscan.io',
128
+ usdcAddress: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',
129
+ isDev: true,
130
+ },
131
+ [enums_1.Chain.ARBITRUM_GOERLI]: {
132
+ chainType: enums_1.ChainType.EVM,
133
+ chainId: 421613,
134
+ name: 'Arbitrum Goerli',
135
+ alchemyNetwork: 'arb-goerli',
136
+ explorerDomain: 'api-goerli.arbiscan.io',
137
+ explorerBrowserDomain: 'goerli.arbiscan.io',
138
+ usdcAddress: '0xfd064A18f3BF249cf1f87FC203E90D8f650f2d63',
139
+ isDev: true,
140
+ },
122
141
  // Base
123
- [enums_1.Chain.BASE_MAINNET]: 'api.basescan.org',
124
- [enums_1.Chain.BASE_SEPOLIA]: 'api-sepolia.basescan.org',
125
- [enums_1.Chain.BASE_GOERLI]: 'api-goerli.basescan.org',
142
+ [enums_1.Chain.BASE_MAINNET]: {
143
+ chainType: enums_1.ChainType.EVM,
144
+ chainId: 8453,
145
+ name: 'Base',
146
+ alchemyNetwork: 'base-mainnet',
147
+ explorerDomain: 'api.basescan.org',
148
+ explorerBrowserDomain: 'basescan.org',
149
+ usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
150
+ isDev: false,
151
+ },
152
+ [enums_1.Chain.BASE_SEPOLIA]: {
153
+ chainType: enums_1.ChainType.EVM,
154
+ chainId: 84532,
155
+ name: 'Base Sepolia',
156
+ alchemyNetwork: 'base-sepolia',
157
+ explorerDomain: 'api-sepolia.basescan.org',
158
+ explorerBrowserDomain: 'sepolia.basescan.org',
159
+ usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
160
+ isDev: true,
161
+ },
162
+ [enums_1.Chain.BASE_GOERLI]: {
163
+ chainType: enums_1.ChainType.EVM,
164
+ chainId: 84531,
165
+ name: 'Base Goerli',
166
+ alchemyNetwork: 'base-goerli',
167
+ explorerDomain: 'api-goerli.basescan.org',
168
+ explorerBrowserDomain: 'goerli.basescan.org',
169
+ usdcAddress: '0xF175520C52418dfE19C8098071a252da48Cd1C19',
170
+ isDev: true,
171
+ },
126
172
  // Avalanche
127
- [enums_1.Chain.AVALANCHE_MAINNET]: 'api.snowtrace.io',
128
- [enums_1.Chain.AVALANCHE_FUJI]: 'api-testnet.snowtrace.io',
173
+ [enums_1.Chain.AVALANCHE_MAINNET]: {
174
+ chainType: enums_1.ChainType.EVM,
175
+ chainId: 43114,
176
+ name: 'Avalanche',
177
+ alchemyNetwork: 'avax-mainnet',
178
+ explorerDomain: 'api.snowtrace.io',
179
+ explorerBrowserDomain: 'snowtrace.io',
180
+ usdcAddress: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',
181
+ isDev: false,
182
+ },
183
+ [enums_1.Chain.AVALANCHE_FUJI]: {
184
+ chainType: enums_1.ChainType.EVM,
185
+ chainId: 43113,
186
+ name: 'Avalanche Fuji',
187
+ alchemyNetwork: 'avax-fuji',
188
+ explorerDomain: 'api-testnet.snowtrace.io',
189
+ explorerBrowserDomain: 'testnet.snowtrace.io',
190
+ usdcAddress: '0x5425890298aed601595a70AB815c96711a31Bc65',
191
+ isDev: true,
192
+ },
129
193
  // BNB Chain
130
- [enums_1.Chain.BNB_MAINNET]: 'api.bscscan.com',
131
- [enums_1.Chain.BNB_TESTNET]: 'api-testnet.bscscan.com',
194
+ [enums_1.Chain.BNB_MAINNET]: {
195
+ chainType: enums_1.ChainType.EVM,
196
+ chainId: 56,
197
+ name: 'BNB Chain',
198
+ alchemyNetwork: 'bnb-mainnet',
199
+ explorerDomain: 'api.bscscan.com',
200
+ explorerBrowserDomain: 'bscscan.com',
201
+ usdcAddress: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',
202
+ isDev: false,
203
+ },
204
+ [enums_1.Chain.BNB_TESTNET]: {
205
+ chainType: enums_1.ChainType.EVM,
206
+ chainId: 97,
207
+ name: 'BNB Chain Testnet',
208
+ alchemyNetwork: 'bnb-testnet',
209
+ explorerDomain: 'api-testnet.bscscan.com',
210
+ explorerBrowserDomain: 'testnet.bscscan.com',
211
+ usdcAddress: '0x64544969ed7EBf5f083679233325356EbE738930',
212
+ isDev: true,
213
+ },
132
214
  // Gnosis Chain
133
- [enums_1.Chain.GNOSIS_MAINNET]: 'api.gnosisscan.io',
134
- [enums_1.Chain.GNOSIS_CHIADO]: 'api-chiado.gnosisscan.io',
215
+ [enums_1.Chain.GNOSIS_MAINNET]: {
216
+ chainType: enums_1.ChainType.EVM,
217
+ chainId: 100,
218
+ name: 'Gnosis',
219
+ alchemyNetwork: 'gnosis-mainnet',
220
+ explorerDomain: 'api.gnosisscan.io',
221
+ explorerBrowserDomain: 'gnosisscan.io',
222
+ usdcAddress: '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83',
223
+ isDev: false,
224
+ },
225
+ [enums_1.Chain.GNOSIS_CHIADO]: {
226
+ chainType: enums_1.ChainType.EVM,
227
+ chainId: 10200,
228
+ name: 'Gnosis Chiado',
229
+ alchemyNetwork: 'gnosis-chiado',
230
+ explorerDomain: 'api-chiado.gnosisscan.io',
231
+ explorerBrowserDomain: 'gnosis-chiado.blockscout.com',
232
+ usdcAddress: '0x',
233
+ isDev: true,
234
+ },
135
235
  // Celo
136
- [enums_1.Chain.CELO_MAINNET]: 'api.celoscan.io',
137
- [enums_1.Chain.CELO_ALFAJORES]: 'api-alfajores.celoscan.io',
236
+ [enums_1.Chain.CELO_MAINNET]: {
237
+ chainType: enums_1.ChainType.EVM,
238
+ chainId: 42220,
239
+ name: 'Celo',
240
+ alchemyNetwork: 'celo-mainnet',
241
+ explorerDomain: 'api.celoscan.io',
242
+ explorerBrowserDomain: 'celoscan.io',
243
+ usdcAddress: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',
244
+ isDev: false,
245
+ },
246
+ [enums_1.Chain.CELO_ALFAJORES]: {
247
+ chainType: enums_1.ChainType.EVM,
248
+ chainId: 44787,
249
+ name: 'Celo Alfajores',
250
+ alchemyNetwork: 'celo-alfajores',
251
+ explorerDomain: 'api-alfajores.celoscan.io',
252
+ explorerBrowserDomain: 'alfajores.celoscan.io',
253
+ usdcAddress: '0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B',
254
+ isDev: true,
255
+ },
138
256
  // zkSync
139
- [enums_1.Chain.ZKSYNC_MAINNET]: 'api-era.zksync.network',
140
- [enums_1.Chain.ZKSYNC_SEPOLIA]: 'api-sepolia-era.zksync.network',
257
+ [enums_1.Chain.ZKSYNC_MAINNET]: {
258
+ chainType: enums_1.ChainType.EVM,
259
+ chainId: 324,
260
+ name: 'zkSync',
261
+ alchemyNetwork: 'zksync-mainnet',
262
+ explorerDomain: 'api-era.zksync.network',
263
+ explorerBrowserDomain: 'explorer.zksync.io',
264
+ usdcAddress: '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4',
265
+ isDev: false,
266
+ },
267
+ [enums_1.Chain.ZKSYNC_SEPOLIA]: {
268
+ chainType: enums_1.ChainType.EVM,
269
+ chainId: 300,
270
+ name: 'zkSync Sepolia',
271
+ alchemyNetwork: 'zksync-sepolia',
272
+ explorerDomain: 'api-sepolia-era.zksync.network',
273
+ explorerBrowserDomain: 'sepolia.explorer.zksync.io',
274
+ usdcAddress: '0x',
275
+ isDev: true,
276
+ },
141
277
  // Linea
142
- [enums_1.Chain.LINEA_MAINNET]: 'api.lineascan.build',
143
- [enums_1.Chain.LINEA_SEPOLIA]: 'api-sepolia.lineascan.build',
278
+ [enums_1.Chain.LINEA_MAINNET]: {
279
+ chainType: enums_1.ChainType.EVM,
280
+ chainId: 59144,
281
+ name: 'Linea',
282
+ alchemyNetwork: 'linea-mainnet',
283
+ explorerDomain: 'api.lineascan.build',
284
+ explorerBrowserDomain: 'lineascan.build',
285
+ usdcAddress: '0x176211869cA2b568f2A7D4EE941E073a821EE1ff',
286
+ isDev: false,
287
+ },
288
+ [enums_1.Chain.LINEA_SEPOLIA]: {
289
+ chainType: enums_1.ChainType.EVM,
290
+ chainId: 59141,
291
+ name: 'Linea Sepolia',
292
+ alchemyNetwork: 'linea-sepolia',
293
+ explorerDomain: 'api-sepolia.lineascan.build',
294
+ explorerBrowserDomain: 'sepolia.lineascan.build',
295
+ usdcAddress: '0x',
296
+ isDev: true,
297
+ },
144
298
  // Scroll
145
- [enums_1.Chain.SCROLL_MAINNET]: 'api.scrollscan.com',
146
- [enums_1.Chain.SCROLL_SEPOLIA]: 'api-sepolia.scrollscan.com',
299
+ [enums_1.Chain.SCROLL_MAINNET]: {
300
+ chainType: enums_1.ChainType.EVM,
301
+ chainId: 534352,
302
+ name: 'Scroll',
303
+ alchemyNetwork: 'scroll-mainnet',
304
+ explorerDomain: 'api.scrollscan.com',
305
+ explorerBrowserDomain: 'scrollscan.com',
306
+ usdcAddress: '0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4',
307
+ isDev: false,
308
+ },
309
+ [enums_1.Chain.SCROLL_SEPOLIA]: {
310
+ chainType: enums_1.ChainType.EVM,
311
+ chainId: 534351,
312
+ name: 'Scroll Sepolia',
313
+ alchemyNetwork: 'scroll-sepolia',
314
+ explorerDomain: 'api-sepolia.scrollscan.com',
315
+ explorerBrowserDomain: 'sepolia.scrollscan.com',
316
+ usdcAddress: '0x',
317
+ isDev: true,
318
+ },
147
319
  // Monad
148
- [enums_1.Chain.MONAD_MAINNET]: '',
149
- [enums_1.Chain.MONAD_TESTNET]: '',
320
+ [enums_1.Chain.MONAD_MAINNET]: {
321
+ chainType: enums_1.ChainType.EVM,
322
+ chainId: 10000,
323
+ name: 'Monad',
324
+ alchemyNetwork: '',
325
+ explorerDomain: '',
326
+ explorerBrowserDomain: 'explorer.monad.xyz',
327
+ usdcAddress: '0x',
328
+ isDev: false,
329
+ },
330
+ [enums_1.Chain.MONAD_TESTNET]: {
331
+ chainType: enums_1.ChainType.EVM,
332
+ chainId: 10001,
333
+ name: 'Monad Testnet',
334
+ alchemyNetwork: '',
335
+ explorerDomain: '',
336
+ explorerBrowserDomain: 'testnet.explorer.monad.xyz',
337
+ usdcAddress: '0x',
338
+ isDev: true,
339
+ },
150
340
  // Story Protocol
151
- [enums_1.Chain.STORY_MAINNET]: '',
152
- [enums_1.Chain.STORY_TESTNET]: '',
341
+ [enums_1.Chain.STORY_MAINNET]: {
342
+ chainType: enums_1.ChainType.EVM,
343
+ chainId: 1516,
344
+ name: 'Story',
345
+ alchemyNetwork: '',
346
+ explorerDomain: '',
347
+ explorerBrowserDomain: 'explorer.story.foundation',
348
+ usdcAddress: '0x',
349
+ isDev: false,
350
+ },
351
+ [enums_1.Chain.STORY_TESTNET]: {
352
+ chainType: enums_1.ChainType.EVM,
353
+ chainId: 1513,
354
+ name: 'Story Testnet',
355
+ alchemyNetwork: '',
356
+ explorerDomain: '',
357
+ explorerBrowserDomain: 'testnet.explorer.story.foundation',
358
+ usdcAddress: '0x',
359
+ isDev: true,
360
+ },
153
361
  // Plume Network
154
- [enums_1.Chain.PLUME_MAINNET]: '',
155
- [enums_1.Chain.PLUME_TESTNET]: '',
362
+ [enums_1.Chain.PLUME_MAINNET]: {
363
+ chainType: enums_1.ChainType.EVM,
364
+ chainId: 98865,
365
+ name: 'Plume',
366
+ alchemyNetwork: '',
367
+ explorerDomain: '',
368
+ explorerBrowserDomain: 'explorer.plumenetwork.xyz',
369
+ usdcAddress: '0x222365EF19F7947e5484218551B56bb3965Aa7aF',
370
+ isDev: false,
371
+ },
372
+ [enums_1.Chain.PLUME_TESTNET]: {
373
+ chainType: enums_1.ChainType.EVM,
374
+ chainId: 98864,
375
+ name: 'Plume Testnet',
376
+ alchemyNetwork: '',
377
+ explorerDomain: '',
378
+ explorerBrowserDomain: 'testnet.explorer.plumenetwork.xyz',
379
+ usdcAddress: '0xcB5f30e335672893c7eb944B374c196392C19D18',
380
+ isDev: true,
381
+ },
156
382
  // Nexus
157
- [enums_1.Chain.NEXUS_MAINNET]: '',
158
- [enums_1.Chain.NEXUS_TESTNET]: '',
383
+ [enums_1.Chain.NEXUS_MAINNET]: {
384
+ chainType: enums_1.ChainType.EVM,
385
+ chainId: 9999,
386
+ name: 'Nexus',
387
+ alchemyNetwork: '',
388
+ explorerDomain: '',
389
+ explorerBrowserDomain: 'explorer.nexus.xyz',
390
+ usdcAddress: '0x',
391
+ isDev: false,
392
+ },
393
+ [enums_1.Chain.NEXUS_TESTNET]: {
394
+ chainType: enums_1.ChainType.EVM,
395
+ chainId: 9998,
396
+ name: 'Nexus Testnet',
397
+ alchemyNetwork: '',
398
+ explorerDomain: '',
399
+ explorerBrowserDomain: 'testnet.explorer.nexus.xyz',
400
+ usdcAddress: '0x',
401
+ isDev: true,
402
+ },
159
403
  // HyperEVM
160
- [enums_1.Chain.HYPEREVM_MAINNET]: '',
161
- [enums_1.Chain.HYPEREVM_TESTNET]: '',
404
+ [enums_1.Chain.HYPEREVM_MAINNET]: {
405
+ chainType: enums_1.ChainType.EVM,
406
+ chainId: 998,
407
+ name: 'HyperEVM',
408
+ alchemyNetwork: '',
409
+ explorerDomain: '',
410
+ explorerBrowserDomain: 'app.hyperliquid.xyz/explorer',
411
+ usdcAddress: '0xb88339CB7199b77E23DB6E890353E22632Ba630f',
412
+ isDev: false,
413
+ },
414
+ [enums_1.Chain.HYPEREVM_TESTNET]: {
415
+ chainType: enums_1.ChainType.EVM,
416
+ chainId: 997,
417
+ name: 'HyperEVM Testnet',
418
+ alchemyNetwork: '',
419
+ explorerDomain: '',
420
+ explorerBrowserDomain: 'app.hyperliquid-testnet.xyz/explorer',
421
+ usdcAddress: '0x2B3370eE501B4a559b57D449569354196457D8Ab',
422
+ isDev: true,
423
+ },
162
424
  // Sonic
163
- [enums_1.Chain.SONIC_MAINNET]: '',
164
- [enums_1.Chain.SONIC_TESTNET]: '',
165
- [enums_1.Chain.SONIC_BLAZE]: '',
425
+ [enums_1.Chain.SONIC_MAINNET]: {
426
+ chainType: enums_1.ChainType.EVM,
427
+ chainId: 146,
428
+ name: 'Sonic',
429
+ alchemyNetwork: '',
430
+ explorerDomain: '',
431
+ explorerBrowserDomain: 'sonicscan.org',
432
+ usdcAddress: '0x29219dd400f2Bf60E5a23d13Be72B486D4038894',
433
+ isDev: false,
434
+ },
435
+ [enums_1.Chain.SONIC_TESTNET]: {
436
+ chainType: enums_1.ChainType.EVM,
437
+ chainId: 64165,
438
+ name: 'Sonic Testnet',
439
+ alchemyNetwork: '',
440
+ explorerDomain: '',
441
+ explorerBrowserDomain: 'testnet.sonicscan.org',
442
+ usdcAddress: '0x0BA304580ee7c9a980CF72e55f5Ed2E9fd30Bc51',
443
+ isDev: true,
444
+ },
445
+ [enums_1.Chain.SONIC_BLAZE]: {
446
+ chainType: enums_1.ChainType.EVM,
447
+ chainId: 57054,
448
+ name: 'Sonic Blaze',
449
+ alchemyNetwork: '',
450
+ explorerDomain: '',
451
+ explorerBrowserDomain: 'blaze.sonicscan.org',
452
+ usdcAddress: '0xA4879Fed32Ecbef99399e5cbC247E533421C4eC6',
453
+ isDev: true,
454
+ },
166
455
  // Unichain
167
- [enums_1.Chain.UNICHAIN_MAINNET]: '',
168
- [enums_1.Chain.UNICHAIN_SEPOLIA]: '',
456
+ [enums_1.Chain.UNICHAIN_MAINNET]: {
457
+ chainType: enums_1.ChainType.EVM,
458
+ chainId: 1,
459
+ name: 'Unichain',
460
+ alchemyNetwork: '',
461
+ explorerDomain: '',
462
+ explorerBrowserDomain: 'uniscan.xyz',
463
+ usdcAddress: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
464
+ isDev: false,
465
+ },
466
+ [enums_1.Chain.UNICHAIN_SEPOLIA]: {
467
+ chainType: enums_1.ChainType.EVM,
468
+ chainId: 1301,
469
+ name: 'Unichain Sepolia',
470
+ alchemyNetwork: '',
471
+ explorerDomain: '',
472
+ explorerBrowserDomain: 'sepolia.uniscan.xyz',
473
+ usdcAddress: '0x31d0220469e10c4E71834a79b1f276E153D00a2D',
474
+ isDev: true,
475
+ },
169
476
  // World Chain
170
- [enums_1.Chain.WORLD_MAINNET]: '',
477
+ [enums_1.Chain.WORLD_MAINNET]: {
478
+ chainType: enums_1.ChainType.EVM,
479
+ chainId: 480,
480
+ name: 'World Chain',
481
+ alchemyNetwork: '',
482
+ explorerDomain: '',
483
+ explorerBrowserDomain: 'worldscan.org',
484
+ usdcAddress: '0x79A02482A880bCe3F13E09da970dC34dB4cD24D1',
485
+ isDev: false,
486
+ },
171
487
  // XDC Network
172
- [enums_1.Chain.XDC_MAINNET]: '',
488
+ [enums_1.Chain.XDC_MAINNET]: {
489
+ chainType: enums_1.ChainType.EVM,
490
+ chainId: 50,
491
+ name: 'XDC Network',
492
+ alchemyNetwork: '',
493
+ explorerDomain: '',
494
+ explorerBrowserDomain: 'xdcscan.io',
495
+ usdcAddress: '0x',
496
+ isDev: false,
497
+ },
173
498
  // Ink
174
- [enums_1.Chain.INK_TESTNET]: '',
499
+ [enums_1.Chain.INK_TESTNET]: {
500
+ chainType: enums_1.ChainType.EVM,
501
+ chainId: 763373,
502
+ name: 'Ink Testnet',
503
+ alchemyNetwork: '',
504
+ explorerDomain: '',
505
+ explorerBrowserDomain: 'explorer.inkonchain.com',
506
+ usdcAddress: '0xFabab97dCE620294D2B0b0e46C68964e326300Ac',
507
+ isDev: true,
508
+ },
175
509
  // Fetch.ai
176
- [enums_1.Chain.FETCH_MAINNET]: '',
177
- [enums_1.Chain.FETCH_TESTNET]: '',
510
+ [enums_1.Chain.FETCH_MAINNET]: {
511
+ chainType: enums_1.ChainType.EVM,
512
+ chainId: 2154,
513
+ name: 'Fetch.ai',
514
+ alchemyNetwork: '',
515
+ explorerDomain: '',
516
+ explorerBrowserDomain: 'explore.fetch.ai',
517
+ usdcAddress: '0x',
518
+ isDev: false,
519
+ },
520
+ [enums_1.Chain.FETCH_TESTNET]: {
521
+ chainType: enums_1.ChainType.EVM,
522
+ chainId: 2153,
523
+ name: 'Fetch.ai Testnet',
524
+ alchemyNetwork: '',
525
+ explorerDomain: '',
526
+ explorerBrowserDomain: 'explore-testnet.fetch.ai',
527
+ usdcAddress: '0x',
528
+ isDev: true,
529
+ },
178
530
  // Gensyn
179
- [enums_1.Chain.GENSYN_MAINNET]: '',
180
- [enums_1.Chain.GENSYN_TESTNET]: '',
531
+ [enums_1.Chain.GENSYN_MAINNET]: {
532
+ chainType: enums_1.ChainType.EVM,
533
+ chainId: 8888,
534
+ name: 'Gensyn',
535
+ alchemyNetwork: '',
536
+ explorerDomain: '',
537
+ explorerBrowserDomain: 'explorer.gensyn.ai',
538
+ usdcAddress: '0x',
539
+ isDev: false,
540
+ },
541
+ [enums_1.Chain.GENSYN_TESTNET]: {
542
+ chainType: enums_1.ChainType.EVM,
543
+ chainId: 8887,
544
+ name: 'Gensyn Testnet',
545
+ alchemyNetwork: '',
546
+ explorerDomain: '',
547
+ explorerBrowserDomain: 'testnet.explorer.gensyn.ai',
548
+ usdcAddress: '0x',
549
+ isDev: true,
550
+ },
181
551
  // Ritual
182
- [enums_1.Chain.RITUAL_MAINNET]: '',
183
- [enums_1.Chain.RITUAL_TESTNET]: '',
184
- // Solana - no block explorer API in this format
185
- [enums_1.Chain.SOLANA_MAINNET]: '',
186
- [enums_1.Chain.SOLANA_DEVNET]: '',
187
- [enums_1.Chain.SOLANA_TESTNET]: '',
188
- // Local development - no block explorer API
189
- [enums_1.Chain.EVM_LOCAL]: '',
190
- [enums_1.Chain.SOLANA_LOCAL]: '',
191
- };
192
- /**
193
- * Block explorer browser URL mappings
194
- */
195
- const EXPLORER_BROWSER_MAP = {
196
- // Ethereum
197
- [enums_1.Chain.ETH_MAINNET]: 'etherscan.io',
198
- [enums_1.Chain.ETH_SEPOLIA]: 'sepolia.etherscan.io',
199
- [enums_1.Chain.ETH_GOERLI]: 'goerli.etherscan.io',
200
- // Polygon
201
- [enums_1.Chain.POLYGON_MAINNET]: 'polygonscan.com',
202
- [enums_1.Chain.POLYGON_MUMBAI]: 'mumbai.polygonscan.com',
203
- [enums_1.Chain.POLYGON_AMOY]: 'amoy.polygonscan.com',
204
- // Optimism
205
- [enums_1.Chain.OPTIMISM_MAINNET]: 'optimistic.etherscan.io',
206
- [enums_1.Chain.OPTIMISM_SEPOLIA]: 'sepolia-optimistic.etherscan.io',
207
- [enums_1.Chain.OPTIMISM_GOERLI]: 'goerli-optimistic.etherscan.io',
208
- // Arbitrum
209
- [enums_1.Chain.ARBITRUM_MAINNET]: 'arbiscan.io',
210
- [enums_1.Chain.ARBITRUM_SEPOLIA]: 'sepolia.arbiscan.io',
211
- [enums_1.Chain.ARBITRUM_GOERLI]: 'goerli.arbiscan.io',
212
- // Base
213
- [enums_1.Chain.BASE_MAINNET]: 'basescan.org',
214
- [enums_1.Chain.BASE_SEPOLIA]: 'sepolia.basescan.org',
215
- [enums_1.Chain.BASE_GOERLI]: 'goerli.basescan.org',
216
- // Avalanche
217
- [enums_1.Chain.AVALANCHE_MAINNET]: 'snowtrace.io',
218
- [enums_1.Chain.AVALANCHE_FUJI]: 'testnet.snowtrace.io',
219
- // BNB Chain
220
- [enums_1.Chain.BNB_MAINNET]: 'bscscan.com',
221
- [enums_1.Chain.BNB_TESTNET]: 'testnet.bscscan.com',
222
- // Gnosis Chain
223
- [enums_1.Chain.GNOSIS_MAINNET]: 'gnosisscan.io',
224
- [enums_1.Chain.GNOSIS_CHIADO]: 'gnosis-chiado.blockscout.com',
225
- // Celo
226
- [enums_1.Chain.CELO_MAINNET]: 'celoscan.io',
227
- [enums_1.Chain.CELO_ALFAJORES]: 'alfajores.celoscan.io',
228
- // zkSync
229
- [enums_1.Chain.ZKSYNC_MAINNET]: 'explorer.zksync.io',
230
- [enums_1.Chain.ZKSYNC_SEPOLIA]: 'sepolia.explorer.zksync.io',
231
- // Linea
232
- [enums_1.Chain.LINEA_MAINNET]: 'lineascan.build',
233
- [enums_1.Chain.LINEA_SEPOLIA]: 'sepolia.lineascan.build',
234
- // Scroll
235
- [enums_1.Chain.SCROLL_MAINNET]: 'scrollscan.com',
236
- [enums_1.Chain.SCROLL_SEPOLIA]: 'sepolia.scrollscan.com',
237
- // Monad
238
- [enums_1.Chain.MONAD_MAINNET]: 'explorer.monad.xyz',
239
- [enums_1.Chain.MONAD_TESTNET]: 'testnet.explorer.monad.xyz',
240
- // Story Protocol
241
- [enums_1.Chain.STORY_MAINNET]: 'explorer.story.foundation',
242
- [enums_1.Chain.STORY_TESTNET]: 'testnet.explorer.story.foundation',
243
- // Plume Network
244
- [enums_1.Chain.PLUME_MAINNET]: 'explorer.plumenetwork.xyz',
245
- [enums_1.Chain.PLUME_TESTNET]: 'testnet.explorer.plumenetwork.xyz',
246
- // Nexus
247
- [enums_1.Chain.NEXUS_MAINNET]: 'explorer.nexus.xyz',
248
- [enums_1.Chain.NEXUS_TESTNET]: 'testnet.explorer.nexus.xyz',
249
- // HyperEVM
250
- [enums_1.Chain.HYPEREVM_MAINNET]: 'app.hyperliquid.xyz/explorer',
251
- [enums_1.Chain.HYPEREVM_TESTNET]: 'app.hyperliquid-testnet.xyz/explorer',
252
- // Sonic
253
- [enums_1.Chain.SONIC_MAINNET]: 'sonicscan.org',
254
- [enums_1.Chain.SONIC_TESTNET]: 'testnet.sonicscan.org',
255
- [enums_1.Chain.SONIC_BLAZE]: 'blaze.sonicscan.org',
256
- // Unichain
257
- [enums_1.Chain.UNICHAIN_MAINNET]: 'uniscan.xyz',
258
- [enums_1.Chain.UNICHAIN_SEPOLIA]: 'sepolia.uniscan.xyz',
259
- // World Chain
260
- [enums_1.Chain.WORLD_MAINNET]: 'worldscan.org',
261
- // XDC Network
262
- [enums_1.Chain.XDC_MAINNET]: 'xdcscan.io',
263
- // Ink
264
- [enums_1.Chain.INK_TESTNET]: 'explorer.inkonchain.com',
265
- // Fetch.ai
266
- [enums_1.Chain.FETCH_MAINNET]: 'explore.fetch.ai',
267
- [enums_1.Chain.FETCH_TESTNET]: 'explore-testnet.fetch.ai',
268
- // Gensyn
269
- [enums_1.Chain.GENSYN_MAINNET]: 'explorer.gensyn.ai',
270
- [enums_1.Chain.GENSYN_TESTNET]: 'testnet.explorer.gensyn.ai',
271
- // Ritual
272
- [enums_1.Chain.RITUAL_MAINNET]: 'explorer.ritual.net',
273
- [enums_1.Chain.RITUAL_TESTNET]: 'testnet.explorer.ritual.net',
552
+ [enums_1.Chain.RITUAL_MAINNET]: {
553
+ chainType: enums_1.ChainType.EVM,
554
+ chainId: 7777,
555
+ name: 'Ritual',
556
+ alchemyNetwork: '',
557
+ explorerDomain: '',
558
+ explorerBrowserDomain: 'explorer.ritual.net',
559
+ usdcAddress: '0x',
560
+ isDev: false,
561
+ },
562
+ [enums_1.Chain.RITUAL_TESTNET]: {
563
+ chainType: enums_1.ChainType.EVM,
564
+ chainId: 7776,
565
+ name: 'Ritual Testnet',
566
+ alchemyNetwork: '',
567
+ explorerDomain: '',
568
+ explorerBrowserDomain: 'testnet.explorer.ritual.net',
569
+ usdcAddress: '0x',
570
+ isDev: true,
571
+ },
274
572
  // Solana
275
- [enums_1.Chain.SOLANA_MAINNET]: 'explorer.solana.com',
276
- [enums_1.Chain.SOLANA_DEVNET]: 'explorer.solana.com/?cluster=devnet',
277
- [enums_1.Chain.SOLANA_TESTNET]: 'explorer.solana.com/?cluster=testnet',
278
- // Local development - no block explorer
279
- [enums_1.Chain.EVM_LOCAL]: '',
280
- [enums_1.Chain.SOLANA_LOCAL]: '',
281
- };
282
- /**
283
- * EVM chains (used for type checking)
284
- */
285
- const EVM_CHAINS = new Set([
286
- enums_1.Chain.ETH_MAINNET,
287
- enums_1.Chain.ETH_SEPOLIA,
288
- enums_1.Chain.ETH_GOERLI,
289
- enums_1.Chain.POLYGON_MAINNET,
290
- enums_1.Chain.POLYGON_MUMBAI,
291
- enums_1.Chain.POLYGON_AMOY,
292
- enums_1.Chain.OPTIMISM_MAINNET,
293
- enums_1.Chain.OPTIMISM_SEPOLIA,
294
- enums_1.Chain.OPTIMISM_GOERLI,
295
- enums_1.Chain.ARBITRUM_MAINNET,
296
- enums_1.Chain.ARBITRUM_SEPOLIA,
297
- enums_1.Chain.ARBITRUM_GOERLI,
298
- enums_1.Chain.BASE_MAINNET,
299
- enums_1.Chain.BASE_SEPOLIA,
300
- enums_1.Chain.BASE_GOERLI,
301
- enums_1.Chain.AVALANCHE_MAINNET,
302
- enums_1.Chain.AVALANCHE_FUJI,
303
- enums_1.Chain.BNB_MAINNET,
304
- enums_1.Chain.BNB_TESTNET,
305
- enums_1.Chain.GNOSIS_MAINNET,
306
- enums_1.Chain.GNOSIS_CHIADO,
307
- enums_1.Chain.CELO_MAINNET,
308
- enums_1.Chain.CELO_ALFAJORES,
309
- enums_1.Chain.ZKSYNC_MAINNET,
310
- enums_1.Chain.ZKSYNC_SEPOLIA,
311
- enums_1.Chain.LINEA_MAINNET,
312
- enums_1.Chain.LINEA_SEPOLIA,
313
- enums_1.Chain.SCROLL_MAINNET,
314
- enums_1.Chain.SCROLL_SEPOLIA,
315
- enums_1.Chain.MONAD_MAINNET,
316
- enums_1.Chain.MONAD_TESTNET,
317
- enums_1.Chain.STORY_MAINNET,
318
- enums_1.Chain.STORY_TESTNET,
319
- enums_1.Chain.PLUME_MAINNET,
320
- enums_1.Chain.PLUME_TESTNET,
321
- enums_1.Chain.NEXUS_MAINNET,
322
- enums_1.Chain.NEXUS_TESTNET,
323
- enums_1.Chain.HYPEREVM_MAINNET,
324
- enums_1.Chain.HYPEREVM_TESTNET,
325
- enums_1.Chain.SONIC_MAINNET,
326
- enums_1.Chain.SONIC_TESTNET,
327
- enums_1.Chain.SONIC_BLAZE,
328
- enums_1.Chain.UNICHAIN_MAINNET,
329
- enums_1.Chain.UNICHAIN_SEPOLIA,
330
- enums_1.Chain.WORLD_MAINNET,
331
- enums_1.Chain.XDC_MAINNET,
332
- enums_1.Chain.INK_TESTNET,
333
- enums_1.Chain.FETCH_MAINNET,
334
- enums_1.Chain.FETCH_TESTNET,
335
- enums_1.Chain.GENSYN_MAINNET,
336
- enums_1.Chain.GENSYN_TESTNET,
337
- enums_1.Chain.RITUAL_MAINNET,
338
- enums_1.Chain.RITUAL_TESTNET,
339
- enums_1.Chain.EVM_LOCAL,
340
- ]);
341
- /**
342
- * Solana chains (used for type checking)
343
- */
344
- const SOLANA_CHAINS = new Set([
345
- enums_1.Chain.SOLANA_MAINNET,
346
- enums_1.Chain.SOLANA_DEVNET,
347
- enums_1.Chain.SOLANA_TESTNET,
348
- enums_1.Chain.SOLANA_LOCAL,
349
- ]);
350
- /**
351
- * Chain ID mappings
352
- * EVM chains use positive IDs, Solana chains use negative IDs
353
- */
354
- const CHAIN_ID_MAP = {
355
- // Ethereum
356
- [enums_1.Chain.ETH_MAINNET]: 1,
357
- [enums_1.Chain.ETH_SEPOLIA]: 11155111,
358
- [enums_1.Chain.ETH_GOERLI]: 5,
359
- // Polygon
360
- [enums_1.Chain.POLYGON_MAINNET]: 137,
361
- [enums_1.Chain.POLYGON_MUMBAI]: 80001,
362
- [enums_1.Chain.POLYGON_AMOY]: 80002,
363
- // Optimism
364
- [enums_1.Chain.OPTIMISM_MAINNET]: 10,
365
- [enums_1.Chain.OPTIMISM_SEPOLIA]: 11155420,
366
- [enums_1.Chain.OPTIMISM_GOERLI]: 420,
367
- // Arbitrum
368
- [enums_1.Chain.ARBITRUM_MAINNET]: 42161,
369
- [enums_1.Chain.ARBITRUM_SEPOLIA]: 421614,
370
- [enums_1.Chain.ARBITRUM_GOERLI]: 421613,
371
- // Base
372
- [enums_1.Chain.BASE_MAINNET]: 8453,
373
- [enums_1.Chain.BASE_SEPOLIA]: 84532,
374
- [enums_1.Chain.BASE_GOERLI]: 84531,
375
- // Avalanche
376
- [enums_1.Chain.AVALANCHE_MAINNET]: 43114,
377
- [enums_1.Chain.AVALANCHE_FUJI]: 43113,
378
- // BNB Chain
379
- [enums_1.Chain.BNB_MAINNET]: 56,
380
- [enums_1.Chain.BNB_TESTNET]: 97,
381
- // Gnosis Chain
382
- [enums_1.Chain.GNOSIS_MAINNET]: 100,
383
- [enums_1.Chain.GNOSIS_CHIADO]: 10200,
384
- // Celo
385
- [enums_1.Chain.CELO_MAINNET]: 42220,
386
- [enums_1.Chain.CELO_ALFAJORES]: 44787,
387
- // zkSync
388
- [enums_1.Chain.ZKSYNC_MAINNET]: 324,
389
- [enums_1.Chain.ZKSYNC_SEPOLIA]: 300,
390
- // Linea
391
- [enums_1.Chain.LINEA_MAINNET]: 59144,
392
- [enums_1.Chain.LINEA_SEPOLIA]: 59141,
393
- // Scroll
394
- [enums_1.Chain.SCROLL_MAINNET]: 534352,
395
- [enums_1.Chain.SCROLL_SEPOLIA]: 534351,
396
- // Monad
397
- [enums_1.Chain.MONAD_MAINNET]: 10000, // TBD - placeholder
398
- [enums_1.Chain.MONAD_TESTNET]: 10001, // TBD - placeholder
399
- // Story Protocol
400
- [enums_1.Chain.STORY_MAINNET]: 1516, // Actual Story chain ID
401
- [enums_1.Chain.STORY_TESTNET]: 1513, // Story testnet chain ID
402
- // Plume Network
403
- [enums_1.Chain.PLUME_MAINNET]: 98865, // Plume mainnet
404
- [enums_1.Chain.PLUME_TESTNET]: 98864, // Plume testnet
405
- // Nexus
406
- [enums_1.Chain.NEXUS_MAINNET]: 9999, // TBD - placeholder
407
- [enums_1.Chain.NEXUS_TESTNET]: 9998, // TBD - placeholder
408
- // HyperEVM
409
- [enums_1.Chain.HYPEREVM_MAINNET]: 998, // HyperEVM L1
410
- [enums_1.Chain.HYPEREVM_TESTNET]: 997, // HyperEVM testnet
411
- // Sonic
412
- [enums_1.Chain.SONIC_MAINNET]: 146, // Sonic mainnet
413
- [enums_1.Chain.SONIC_TESTNET]: 64165, // Sonic testnet (S)
414
- [enums_1.Chain.SONIC_BLAZE]: 57054, // Sonic Blaze testnet (deprecated soon)
415
- // Unichain
416
- [enums_1.Chain.UNICHAIN_MAINNET]: 1, // TBD - mainnet not launched yet, placeholder
417
- [enums_1.Chain.UNICHAIN_SEPOLIA]: 1301, // Unichain Sepolia testnet
418
- // World Chain
419
- [enums_1.Chain.WORLD_MAINNET]: 480, // World Chain mainnet
420
- // XDC Network
421
- [enums_1.Chain.XDC_MAINNET]: 50, // XDC Network mainnet
422
- // Ink
423
- [enums_1.Chain.INK_TESTNET]: 763373, // Ink testnet (Sepolia)
424
- // Fetch.ai (Cosmos-based but supports EVM)
425
- [enums_1.Chain.FETCH_MAINNET]: 2154, // Fetch.ai EVM
426
- [enums_1.Chain.FETCH_TESTNET]: 2153, // Fetch.ai testnet
427
- // Gensyn
428
- [enums_1.Chain.GENSYN_MAINNET]: 8888, // TBD - placeholder
429
- [enums_1.Chain.GENSYN_TESTNET]: 8887, // TBD - placeholder
430
- // Ritual
431
- [enums_1.Chain.RITUAL_MAINNET]: 7777, // TBD - placeholder
432
- [enums_1.Chain.RITUAL_TESTNET]: 7776, // TBD - placeholder
433
- // Solana (negative IDs)
434
- [enums_1.Chain.SOLANA_MAINNET]: -101,
435
- [enums_1.Chain.SOLANA_DEVNET]: -102,
436
- [enums_1.Chain.SOLANA_TESTNET]: -103,
437
- // Local development
438
- [enums_1.Chain.EVM_LOCAL]: 31337,
439
- [enums_1.Chain.SOLANA_LOCAL]: -104,
440
- };
441
- /**
442
- * USDC address/mint mappings
443
- * EVM chains have contract addresses, Solana chains have mint addresses
444
- * Source: https://developers.circle.com/stablecoins/usdc-contract-addresses
445
- */
446
- const USDC_ADDRESS_MAP = {
447
- // Ethereum - Official Circle USDC
448
- [enums_1.Chain.ETH_MAINNET]: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
449
- [enums_1.Chain.ETH_SEPOLIA]: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
450
- [enums_1.Chain.ETH_GOERLI]: '0x07865c6E87B9F70255377e024ace6630C1Eaa37F', // Deprecated
451
- // Polygon - Official Circle USDC (native USDC)
452
- [enums_1.Chain.POLYGON_MAINNET]: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
453
- [enums_1.Chain.POLYGON_MUMBAI]: '0x9999f7Fea5938fD3b1E26A12c3f2fb024e194f97', // Deprecated
454
- [enums_1.Chain.POLYGON_AMOY]: '0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582',
455
- // Optimism - Official Circle USDC
456
- [enums_1.Chain.OPTIMISM_MAINNET]: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
457
- [enums_1.Chain.OPTIMISM_SEPOLIA]: '0x5fd84259d66Cd46123540766Be93DFE6D43130D7',
458
- [enums_1.Chain.OPTIMISM_GOERLI]: '0xe05606174bac4A6364B31bd0eCA4bf4dD368f8C6', // Deprecated
459
- // Arbitrum - Official Circle USDC
460
- [enums_1.Chain.ARBITRUM_MAINNET]: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
461
- [enums_1.Chain.ARBITRUM_SEPOLIA]: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',
462
- [enums_1.Chain.ARBITRUM_GOERLI]: '0xfd064A18f3BF249cf1f87FC203E90D8f650f2d63', // Deprecated
463
- // Base - Official Circle USDC
464
- [enums_1.Chain.BASE_MAINNET]: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
465
- [enums_1.Chain.BASE_SEPOLIA]: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
466
- [enums_1.Chain.BASE_GOERLI]: '0xF175520C52418dfE19C8098071a252da48Cd1C19', // Deprecated
467
- // Avalanche - Official Circle USDC
468
- [enums_1.Chain.AVALANCHE_MAINNET]: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',
469
- [enums_1.Chain.AVALANCHE_FUJI]: '0x5425890298aed601595a70AB815c96711a31Bc65',
470
- // BNB Chain
471
- [enums_1.Chain.BNB_MAINNET]: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',
472
- [enums_1.Chain.BNB_TESTNET]: '0x64544969ed7EBf5f083679233325356EbE738930',
473
- // Gnosis Chain
474
- [enums_1.Chain.GNOSIS_MAINNET]: '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83',
475
- [enums_1.Chain.GNOSIS_CHIADO]: '0x',
476
- // Celo
477
- [enums_1.Chain.CELO_MAINNET]: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',
478
- [enums_1.Chain.CELO_ALFAJORES]: '0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B',
479
- // zkSync - Official Circle USDC
480
- [enums_1.Chain.ZKSYNC_MAINNET]: '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4',
481
- [enums_1.Chain.ZKSYNC_SEPOLIA]: '0x',
482
- // Linea
483
- [enums_1.Chain.LINEA_MAINNET]: '0x176211869cA2b568f2A7D4EE941E073a821EE1ff',
484
- [enums_1.Chain.LINEA_SEPOLIA]: '0x',
485
- // Scroll
486
- [enums_1.Chain.SCROLL_MAINNET]: '0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4',
487
- [enums_1.Chain.SCROLL_SEPOLIA]: '0x',
488
- // Monad
489
- [enums_1.Chain.MONAD_MAINNET]: '0x',
490
- [enums_1.Chain.MONAD_TESTNET]: '0x',
491
- // Story Protocol
492
- [enums_1.Chain.STORY_MAINNET]: '0x',
493
- [enums_1.Chain.STORY_TESTNET]: '0x',
494
- // Plume Network
495
- [enums_1.Chain.PLUME_MAINNET]: '0x222365EF19F7947e5484218551B56bb3965Aa7aF',
496
- [enums_1.Chain.PLUME_TESTNET]: '0xcB5f30e335672893c7eb944B374c196392C19D18',
497
- // Nexus
498
- [enums_1.Chain.NEXUS_MAINNET]: '0x',
499
- [enums_1.Chain.NEXUS_TESTNET]: '0x',
500
- // HyperEVM
501
- [enums_1.Chain.HYPEREVM_MAINNET]: '0xb88339CB7199b77E23DB6E890353E22632Ba630f',
502
- [enums_1.Chain.HYPEREVM_TESTNET]: '0x2B3370eE501B4a559b57D449569354196457D8Ab',
503
- // Sonic
504
- [enums_1.Chain.SONIC_MAINNET]: '0x29219dd400f2Bf60E5a23d13Be72B486D4038894',
505
- [enums_1.Chain.SONIC_TESTNET]: '0x0BA304580ee7c9a980CF72e55f5Ed2E9fd30Bc51',
506
- [enums_1.Chain.SONIC_BLAZE]: '0xA4879Fed32Ecbef99399e5cbC247E533421C4eC6',
507
- // Unichain
508
- [enums_1.Chain.UNICHAIN_MAINNET]: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
509
- [enums_1.Chain.UNICHAIN_SEPOLIA]: '0x31d0220469e10c4E71834a79b1f276E153D00a2D',
510
- // World Chain
511
- [enums_1.Chain.WORLD_MAINNET]: '0x79A02482A880bCe3F13E09da970dC34dB4cD24D1',
512
- // XDC Network
513
- [enums_1.Chain.XDC_MAINNET]: '0x',
514
- // Ink
515
- [enums_1.Chain.INK_TESTNET]: '0xFabab97dCE620294D2B0b0e46C68964e326300Ac',
516
- // Fetch.ai
517
- [enums_1.Chain.FETCH_MAINNET]: '0x',
518
- [enums_1.Chain.FETCH_TESTNET]: '0x',
519
- // Gensyn
520
- [enums_1.Chain.GENSYN_MAINNET]: '0x',
521
- [enums_1.Chain.GENSYN_TESTNET]: '0x',
522
- // Ritual
523
- [enums_1.Chain.RITUAL_MAINNET]: '0x',
524
- [enums_1.Chain.RITUAL_TESTNET]: '0x',
525
- // Solana (mint addresses)
526
- [enums_1.Chain.SOLANA_MAINNET]: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
527
- [enums_1.Chain.SOLANA_DEVNET]: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
528
- [enums_1.Chain.SOLANA_TESTNET]: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
529
- // Local development - mock addresses
530
- [enums_1.Chain.EVM_LOCAL]: '0x0000000000000000000000000000000000000000',
531
- [enums_1.Chain.SOLANA_LOCAL]: '11111111111111111111111111111111',
532
- };
533
- /**
534
- * User-friendly chain name mappings
535
- */
536
- const CHAIN_NAME_MAP = {
537
- // Ethereum
538
- [enums_1.Chain.ETH_MAINNET]: 'Ethereum',
539
- [enums_1.Chain.ETH_SEPOLIA]: 'Ethereum Sepolia',
540
- [enums_1.Chain.ETH_GOERLI]: 'Ethereum Goerli',
541
- // Polygon
542
- [enums_1.Chain.POLYGON_MAINNET]: 'Polygon',
543
- [enums_1.Chain.POLYGON_MUMBAI]: 'Polygon Mumbai',
544
- [enums_1.Chain.POLYGON_AMOY]: 'Polygon Amoy',
545
- // Optimism
546
- [enums_1.Chain.OPTIMISM_MAINNET]: 'Optimism',
547
- [enums_1.Chain.OPTIMISM_SEPOLIA]: 'Optimism Sepolia',
548
- [enums_1.Chain.OPTIMISM_GOERLI]: 'Optimism Goerli',
549
- // Arbitrum
550
- [enums_1.Chain.ARBITRUM_MAINNET]: 'Arbitrum',
551
- [enums_1.Chain.ARBITRUM_SEPOLIA]: 'Arbitrum Sepolia',
552
- [enums_1.Chain.ARBITRUM_GOERLI]: 'Arbitrum Goerli',
553
- // Base
554
- [enums_1.Chain.BASE_MAINNET]: 'Base',
555
- [enums_1.Chain.BASE_SEPOLIA]: 'Base Sepolia',
556
- [enums_1.Chain.BASE_GOERLI]: 'Base Goerli',
557
- // Avalanche
558
- [enums_1.Chain.AVALANCHE_MAINNET]: 'Avalanche',
559
- [enums_1.Chain.AVALANCHE_FUJI]: 'Avalanche Fuji',
560
- // BNB Chain
561
- [enums_1.Chain.BNB_MAINNET]: 'BNB Chain',
562
- [enums_1.Chain.BNB_TESTNET]: 'BNB Chain Testnet',
563
- // Gnosis Chain
564
- [enums_1.Chain.GNOSIS_MAINNET]: 'Gnosis',
565
- [enums_1.Chain.GNOSIS_CHIADO]: 'Gnosis Chiado',
566
- // Celo
567
- [enums_1.Chain.CELO_MAINNET]: 'Celo',
568
- [enums_1.Chain.CELO_ALFAJORES]: 'Celo Alfajores',
569
- // zkSync
570
- [enums_1.Chain.ZKSYNC_MAINNET]: 'zkSync',
571
- [enums_1.Chain.ZKSYNC_SEPOLIA]: 'zkSync Sepolia',
572
- // Linea
573
- [enums_1.Chain.LINEA_MAINNET]: 'Linea',
574
- [enums_1.Chain.LINEA_SEPOLIA]: 'Linea Sepolia',
575
- // Scroll
576
- [enums_1.Chain.SCROLL_MAINNET]: 'Scroll',
577
- [enums_1.Chain.SCROLL_SEPOLIA]: 'Scroll Sepolia',
578
- // Monad
579
- [enums_1.Chain.MONAD_MAINNET]: 'Monad',
580
- [enums_1.Chain.MONAD_TESTNET]: 'Monad Testnet',
581
- // Story Protocol
582
- [enums_1.Chain.STORY_MAINNET]: 'Story',
583
- [enums_1.Chain.STORY_TESTNET]: 'Story Testnet',
584
- // Plume Network
585
- [enums_1.Chain.PLUME_MAINNET]: 'Plume',
586
- [enums_1.Chain.PLUME_TESTNET]: 'Plume Testnet',
587
- // Nexus
588
- [enums_1.Chain.NEXUS_MAINNET]: 'Nexus',
589
- [enums_1.Chain.NEXUS_TESTNET]: 'Nexus Testnet',
590
- // HyperEVM
591
- [enums_1.Chain.HYPEREVM_MAINNET]: 'HyperEVM',
592
- [enums_1.Chain.HYPEREVM_TESTNET]: 'HyperEVM Testnet',
593
- // Sonic
594
- [enums_1.Chain.SONIC_MAINNET]: 'Sonic',
595
- [enums_1.Chain.SONIC_TESTNET]: 'Sonic Testnet',
596
- [enums_1.Chain.SONIC_BLAZE]: 'Sonic Blaze',
597
- // Unichain
598
- [enums_1.Chain.UNICHAIN_MAINNET]: 'Unichain',
599
- [enums_1.Chain.UNICHAIN_SEPOLIA]: 'Unichain Sepolia',
600
- // World Chain
601
- [enums_1.Chain.WORLD_MAINNET]: 'World Chain',
602
- // XDC Network
603
- [enums_1.Chain.XDC_MAINNET]: 'XDC Network',
604
- // Ink
605
- [enums_1.Chain.INK_TESTNET]: 'Ink Testnet',
606
- // Fetch.ai
607
- [enums_1.Chain.FETCH_MAINNET]: 'Fetch.ai',
608
- [enums_1.Chain.FETCH_TESTNET]: 'Fetch.ai Testnet',
609
- // Gensyn
610
- [enums_1.Chain.GENSYN_MAINNET]: 'Gensyn',
611
- [enums_1.Chain.GENSYN_TESTNET]: 'Gensyn Testnet',
612
- // Ritual
613
- [enums_1.Chain.RITUAL_MAINNET]: 'Ritual',
614
- [enums_1.Chain.RITUAL_TESTNET]: 'Ritual Testnet',
615
- // Solana
616
- [enums_1.Chain.SOLANA_MAINNET]: 'Solana',
617
- [enums_1.Chain.SOLANA_DEVNET]: 'Solana Devnet',
618
- [enums_1.Chain.SOLANA_TESTNET]: 'Solana Testnet',
573
+ [enums_1.Chain.SOLANA_MAINNET]: {
574
+ chainType: enums_1.ChainType.SOLANA,
575
+ chainId: -101,
576
+ name: 'Solana',
577
+ alchemyNetwork: 'solana-mainnet',
578
+ explorerDomain: '',
579
+ explorerBrowserDomain: 'explorer.solana.com',
580
+ usdcAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
581
+ isDev: false,
582
+ },
583
+ [enums_1.Chain.SOLANA_DEVNET]: {
584
+ chainType: enums_1.ChainType.SOLANA,
585
+ chainId: -102,
586
+ name: 'Solana Devnet',
587
+ alchemyNetwork: 'solana-devnet',
588
+ explorerDomain: '',
589
+ explorerBrowserDomain: 'explorer.solana.com/?cluster=devnet',
590
+ usdcAddress: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
591
+ isDev: true,
592
+ },
593
+ [enums_1.Chain.SOLANA_TESTNET]: {
594
+ chainType: enums_1.ChainType.SOLANA,
595
+ chainId: -103,
596
+ name: 'Solana Testnet',
597
+ alchemyNetwork: 'solana-testnet',
598
+ explorerDomain: '',
599
+ explorerBrowserDomain: 'explorer.solana.com/?cluster=testnet',
600
+ usdcAddress: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
601
+ isDev: true,
602
+ },
619
603
  // Local development
620
- [enums_1.Chain.EVM_LOCAL]: 'Local EVM',
621
- [enums_1.Chain.SOLANA_LOCAL]: 'Local Solana',
604
+ [enums_1.Chain.EVM_LOCAL]: {
605
+ chainType: enums_1.ChainType.EVM,
606
+ chainId: 31337,
607
+ name: 'Local EVM',
608
+ alchemyNetwork: '',
609
+ explorerDomain: '',
610
+ explorerBrowserDomain: '',
611
+ usdcAddress: '0x0000000000000000000000000000000000000000',
612
+ isDev: true,
613
+ },
614
+ [enums_1.Chain.SOLANA_LOCAL]: {
615
+ chainType: enums_1.ChainType.SOLANA,
616
+ chainId: -104,
617
+ name: 'Local Solana',
618
+ alchemyNetwork: '',
619
+ explorerDomain: '',
620
+ explorerBrowserDomain: '',
621
+ usdcAddress: '11111111111111111111111111111111',
622
+ isDev: true,
623
+ },
622
624
  };
623
625
  /**
624
626
  * Helper class for building RPC endpoints and block explorer API URLs
@@ -630,7 +632,8 @@ class RpcHelpers {
630
632
  * @returns True if the chain is an EVM chain
631
633
  */
632
634
  static isEvmChain(chain) {
633
- return EVM_CHAINS.has(chain);
635
+ const info = CHAIN_INFO_MAP[chain];
636
+ return info ? info.chainType === enums_1.ChainType.EVM : false;
634
637
  }
635
638
  /**
636
639
  * Check if a chain is a Solana chain
@@ -638,7 +641,8 @@ class RpcHelpers {
638
641
  * @returns True if the chain is a Solana chain
639
642
  */
640
643
  static isSolanaChain(chain) {
641
- return SOLANA_CHAINS.has(chain);
644
+ const info = CHAIN_INFO_MAP[chain];
645
+ return info ? info.chainType === enums_1.ChainType.SOLANA : false;
642
646
  }
643
647
  /**
644
648
  * Get the chain type (EVM or Solana) for a given chain
@@ -655,13 +659,37 @@ class RpcHelpers {
655
659
  * ```
656
660
  */
657
661
  static getChainType(chain) {
658
- if (this.isEvmChain(chain)) {
659
- return enums_1.ChainType.EVM;
662
+ const info = CHAIN_INFO_MAP[chain];
663
+ if (!info) {
664
+ throw new Error(`Unknown chain: ${chain}`);
660
665
  }
661
- if (this.isSolanaChain(chain)) {
662
- return enums_1.ChainType.SOLANA;
666
+ return info.chainType;
667
+ }
668
+ /**
669
+ * Get complete static chain information
670
+ * @param chain - Chain identifier
671
+ * @returns ChainInfo object containing all static chain metadata
672
+ * @throws Error if the chain is not recognized
673
+ * @example
674
+ * ```typescript
675
+ * const info = RpcHelpers.getChainInfo(Chain.ETH_MAINNET);
676
+ * // Returns: {
677
+ * // chainType: ChainType.EVM,
678
+ * // chainId: 1,
679
+ * // name: 'Ethereum',
680
+ * // alchemyNetwork: 'eth-mainnet',
681
+ * // explorerDomain: 'api.etherscan.io',
682
+ * // explorerBrowserDomain: 'etherscan.io',
683
+ * // usdcAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
684
+ * // }
685
+ * ```
686
+ */
687
+ static getChainInfo(chain) {
688
+ const info = CHAIN_INFO_MAP[chain];
689
+ if (!info) {
690
+ throw new Error(`Unknown chain: ${chain}`);
663
691
  }
664
- throw new Error(`Unknown chain: ${chain}`);
692
+ return info;
665
693
  }
666
694
  /**
667
695
  * Get the chain ID for a given chain
@@ -684,11 +712,7 @@ class RpcHelpers {
684
712
  * ```
685
713
  */
686
714
  static getChainId(chain) {
687
- const chainId = CHAIN_ID_MAP[chain];
688
- if (chainId === undefined) {
689
- throw new Error(`Unknown chain: ${chain}`);
690
- }
691
- return chainId;
715
+ return this.getChainInfo(chain).chainId;
692
716
  }
693
717
  /**
694
718
  * Get the USDC address/mint for a given chain
@@ -708,11 +732,7 @@ class RpcHelpers {
708
732
  * ```
709
733
  */
710
734
  static getUSDCAddress(chain) {
711
- const address = USDC_ADDRESS_MAP[chain];
712
- if (address === undefined) {
713
- throw new Error(`Unknown chain: ${chain}`);
714
- }
715
- return address;
735
+ return this.getChainInfo(chain).usdcAddress;
716
736
  }
717
737
  /**
718
738
  * Get the user-friendly display name for a chain
@@ -735,41 +755,37 @@ class RpcHelpers {
735
755
  * ```
736
756
  */
737
757
  static getUserFriendlyName(chain) {
738
- const name = CHAIN_NAME_MAP[chain];
739
- if (name === undefined) {
740
- throw new Error(`Unknown chain: ${chain}`);
741
- }
742
- return name;
758
+ return this.getChainInfo(chain).name;
743
759
  }
744
760
  /**
745
761
  * Get the list of visible chains for the application
746
- * @param isDev - Whether to include development/testnet chains
747
- * @returns Array of Chain values to display
762
+ * @param chainType - Filter by chain type (EVM or Solana)
763
+ * @param isDev - Whether to include development/testnet chains (true) or production chains (false)
764
+ * @returns Array of ChainInfo objects for chains that match the filters and have a mailer contract deployed
748
765
  * @example
749
766
  * ```typescript
750
- * const prodChains = RpcHelpers.getVisibleChains(false);
751
- * // Returns: [Chain.ETH_MAINNET, Chain.BASE_MAINNET, Chain.POLYGON_MAINNET, Chain.OPTIMISM_MAINNET]
767
+ * // Get production EVM chains with mailer contracts
768
+ * const prodEvmChains = RpcHelpers.getVisibleChains(ChainType.EVM, false);
769
+ * // Returns: ChainInfo[] with only mainnet EVM chains that have mailerAddress set
770
+ *
771
+ * // Get development EVM chains with mailer contracts
772
+ * const devEvmChains = RpcHelpers.getVisibleChains(ChainType.EVM, true);
773
+ * // Returns: ChainInfo[] with only testnet EVM chains that have mailerAddress set
752
774
  *
753
- * const devChains = RpcHelpers.getVisibleChains(true);
754
- * // Returns: [Chain.ETH_MAINNET, Chain.BASE_MAINNET, Chain.POLYGON_MAINNET, Chain.OPTIMISM_MAINNET, Chain.ETH_SEPOLIA]
775
+ * // Get production Solana chains with mailer contracts
776
+ * const prodSolanaChains = RpcHelpers.getVisibleChains(ChainType.SOLANA, false);
777
+ * // Returns: ChainInfo[] with only mainnet Solana chains that have mailerAddress set
755
778
  * ```
756
779
  */
757
- static getVisibleChains(isDev) {
758
- const mainnetChains = [
759
- enums_1.Chain.ETH_MAINNET,
760
- enums_1.Chain.BASE_MAINNET,
761
- enums_1.Chain.POLYGON_MAINNET,
762
- enums_1.Chain.OPTIMISM_MAINNET,
763
- ];
764
- if (isDev) {
765
- return [...mainnetChains, enums_1.Chain.ETH_SEPOLIA];
766
- }
767
- return mainnetChains;
780
+ static getVisibleChains(chainType, isDev) {
781
+ return Object.values(CHAIN_INFO_MAP).filter((info) => info.chainType === chainType &&
782
+ info.isDev === isDev &&
783
+ info.mailerAddress !== undefined);
768
784
  }
769
785
  /**
770
- * Derive all chain information from a ChainConfig
786
+ * Derive all chain information from a ChainConfig including API URLs
771
787
  * @param config - Chain configuration with API keys
772
- * @returns Object with all derived chain information
788
+ * @returns Object with all derived chain information including RPC and explorer URLs
773
789
  * @example
774
790
  * ```typescript
775
791
  * const config: ChainConfig = {
@@ -778,7 +794,7 @@ class RpcHelpers {
778
794
  * etherscanApiKey: 'your-etherscan-key'
779
795
  * };
780
796
  *
781
- * const info = RpcHelpers.getChainInfo(config);
797
+ * const info = RpcHelpers.deriveChainInfo(config);
782
798
  * // Returns: {
783
799
  * // chain: Chain.ETH_MAINNET,
784
800
  * // chainId: 1,
@@ -791,7 +807,7 @@ class RpcHelpers {
791
807
  * // }
792
808
  * ```
793
809
  */
794
- static getChainInfo(config) {
810
+ static deriveChainInfo(config) {
795
811
  return {
796
812
  chain: config.chain,
797
813
  chainId: this.getChainId(config.chain),
@@ -810,13 +826,11 @@ class RpcHelpers {
810
826
  if (!alchemyApiKey) {
811
827
  return undefined;
812
828
  }
813
- const network = ALCHEMY_NETWORK_MAP[chain];
829
+ const chainInfo = this.getChainInfo(chain);
830
+ const network = chainInfo.alchemyNetwork;
814
831
  if (!network) {
815
832
  return undefined;
816
833
  }
817
- if (this.isSolanaChain(chain)) {
818
- return `https://solana-${network}.g.alchemy.com/v2/${alchemyApiKey}`;
819
- }
820
834
  return `https://${network}.g.alchemy.com/v2/${alchemyApiKey}`;
821
835
  }
822
836
  static getExplorerApiUrl(apiKeyOrApis, chain) {
@@ -826,10 +840,11 @@ class RpcHelpers {
826
840
  if (!etherscanApiKey) {
827
841
  return undefined;
828
842
  }
829
- if (this.isSolanaChain(chain)) {
843
+ const chainInfo = this.getChainInfo(chain);
844
+ if (chainInfo.chainType === enums_1.ChainType.SOLANA) {
830
845
  return undefined;
831
846
  }
832
- const domain = EXPLORER_DOMAIN_MAP[chain];
847
+ const domain = chainInfo.explorerDomain;
833
848
  if (!domain) {
834
849
  return undefined;
835
850
  }
@@ -854,7 +869,8 @@ class RpcHelpers {
854
869
  * ```
855
870
  */
856
871
  static getBlockExplorerUrl(chain) {
857
- const domain = EXPLORER_BROWSER_MAP[chain];
872
+ const chainInfo = this.getChainInfo(chain);
873
+ const domain = chainInfo.explorerBrowserDomain;
858
874
  if (!domain) {
859
875
  return undefined;
860
876
  }