@circle-fin/app-kit 1.0.0 → 1.1.0

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/chains.cjs ADDED
@@ -0,0 +1,3248 @@
1
+ /**
2
+ * Copyright (c) 2026, Circle Internet Group, Inc. All rights reserved.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ 'use strict';
20
+
21
+ var zod = require('zod');
22
+
23
+ // -----------------------------------------------------------------------------
24
+ // Blockchain Enum
25
+ // -----------------------------------------------------------------------------
26
+ /**
27
+ * Enumeration of all blockchains known to this library.
28
+ *
29
+ * This enum contains every blockchain that has a chain definition, regardless
30
+ * of whether bridging is currently supported. For chains that support bridging
31
+ * via CCTPv2, see {@link BridgeChain}.
32
+ *
33
+ * @enum
34
+ * @category Enums
35
+ * @description Provides string identifiers for each blockchain with a definition.
36
+ * @see {@link BridgeChain} for the subset of chains that support CCTPv2 bridging.
37
+ */
38
+ var Blockchain;
39
+ (function (Blockchain) {
40
+ Blockchain["Algorand"] = "Algorand";
41
+ Blockchain["Algorand_Testnet"] = "Algorand_Testnet";
42
+ Blockchain["Aptos"] = "Aptos";
43
+ Blockchain["Aptos_Testnet"] = "Aptos_Testnet";
44
+ Blockchain["Arc_Testnet"] = "Arc_Testnet";
45
+ Blockchain["Arbitrum"] = "Arbitrum";
46
+ Blockchain["Arbitrum_Sepolia"] = "Arbitrum_Sepolia";
47
+ Blockchain["Avalanche"] = "Avalanche";
48
+ Blockchain["Avalanche_Fuji"] = "Avalanche_Fuji";
49
+ Blockchain["Base"] = "Base";
50
+ Blockchain["Base_Sepolia"] = "Base_Sepolia";
51
+ Blockchain["Celo"] = "Celo";
52
+ Blockchain["Celo_Alfajores_Testnet"] = "Celo_Alfajores_Testnet";
53
+ Blockchain["Codex"] = "Codex";
54
+ Blockchain["Codex_Testnet"] = "Codex_Testnet";
55
+ Blockchain["Edge"] = "Edge";
56
+ Blockchain["Edge_Testnet"] = "Edge_Testnet";
57
+ Blockchain["Ethereum"] = "Ethereum";
58
+ Blockchain["Ethereum_Sepolia"] = "Ethereum_Sepolia";
59
+ Blockchain["Hedera"] = "Hedera";
60
+ Blockchain["Hedera_Testnet"] = "Hedera_Testnet";
61
+ Blockchain["HyperEVM"] = "HyperEVM";
62
+ Blockchain["HyperEVM_Testnet"] = "HyperEVM_Testnet";
63
+ Blockchain["Ink"] = "Ink";
64
+ Blockchain["Ink_Testnet"] = "Ink_Testnet";
65
+ Blockchain["Linea"] = "Linea";
66
+ Blockchain["Linea_Sepolia"] = "Linea_Sepolia";
67
+ Blockchain["Monad"] = "Monad";
68
+ Blockchain["Monad_Testnet"] = "Monad_Testnet";
69
+ Blockchain["Morph"] = "Morph";
70
+ Blockchain["Morph_Testnet"] = "Morph_Testnet";
71
+ Blockchain["NEAR"] = "NEAR";
72
+ Blockchain["NEAR_Testnet"] = "NEAR_Testnet";
73
+ Blockchain["Noble"] = "Noble";
74
+ Blockchain["Noble_Testnet"] = "Noble_Testnet";
75
+ Blockchain["Optimism"] = "Optimism";
76
+ Blockchain["Optimism_Sepolia"] = "Optimism_Sepolia";
77
+ Blockchain["Polkadot_Asset_Hub"] = "Polkadot_Asset_Hub";
78
+ Blockchain["Polkadot_Westmint"] = "Polkadot_Westmint";
79
+ Blockchain["Plume"] = "Plume";
80
+ Blockchain["Plume_Testnet"] = "Plume_Testnet";
81
+ Blockchain["Polygon"] = "Polygon";
82
+ Blockchain["Polygon_Amoy_Testnet"] = "Polygon_Amoy_Testnet";
83
+ Blockchain["Sei"] = "Sei";
84
+ Blockchain["Sei_Testnet"] = "Sei_Testnet";
85
+ Blockchain["Solana"] = "Solana";
86
+ Blockchain["Solana_Devnet"] = "Solana_Devnet";
87
+ Blockchain["Sonic"] = "Sonic";
88
+ Blockchain["Sonic_Testnet"] = "Sonic_Testnet";
89
+ Blockchain["Stellar"] = "Stellar";
90
+ Blockchain["Stellar_Testnet"] = "Stellar_Testnet";
91
+ Blockchain["Sui"] = "Sui";
92
+ Blockchain["Sui_Testnet"] = "Sui_Testnet";
93
+ Blockchain["Unichain"] = "Unichain";
94
+ Blockchain["Unichain_Sepolia"] = "Unichain_Sepolia";
95
+ Blockchain["World_Chain"] = "World_Chain";
96
+ Blockchain["World_Chain_Sepolia"] = "World_Chain_Sepolia";
97
+ Blockchain["XDC"] = "XDC";
98
+ Blockchain["XDC_Apothem"] = "XDC_Apothem";
99
+ Blockchain["ZKSync_Era"] = "ZKSync_Era";
100
+ Blockchain["ZKSync_Sepolia"] = "ZKSync_Sepolia";
101
+ })(Blockchain || (Blockchain = {}));
102
+ /**
103
+ * Enum representing the subset of {@link Blockchain} that supports swap operations.
104
+ *
105
+ * This enum provides compile-time type safety for swap chain selection,
106
+ * ensuring only supported chains are available in IDE autocomplete
107
+ * when building swap parameters.
108
+ *
109
+ * @remarks
110
+ * Unlike the full {@link Blockchain} enum, SwapChain only includes networks
111
+ * where the swap functionality is actively supported by the library.
112
+ * Using this enum prevents runtime errors from attempting unsupported
113
+ * cross-chain swaps.
114
+ *
115
+ * Currently supports:
116
+ * - Ethereum mainnet
117
+ * - Base mainnet
118
+ * - Polygon mainnet
119
+ * - Solana mainnet
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * import { SwapChain, swap, createSwapKitContext } from '@circle-fin/swap-kit'
124
+ * import { createViemAdapterFromPrivateKey } from '@circle-fin/adapter-viem-v2'
125
+ *
126
+ * const context = createSwapKitContext()
127
+ * const adapter = createViemAdapterFromPrivateKey({
128
+ * privateKey: process.env.PRIVATE_KEY
129
+ * })
130
+ *
131
+ * // ✅ Autocomplete shows only swap-supported chains
132
+ * const result = await swap(context, {
133
+ * from: {
134
+ * adapter,
135
+ * chain: SwapChain.Ethereum // Autocomplete: Ethereum, Base, Polygon, Solana
136
+ * },
137
+ * tokenIn: 'USDC',
138
+ * tokenOut: 'USDT',
139
+ * amount: '100.0'
140
+ * })
141
+ * ```
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * // String literals also work (constrained to SwapChain values)
146
+ * const result = await swap(context, {
147
+ * from: {
148
+ * adapter,
149
+ * chain: 'Ethereum' // ✅ Only SwapChain strings allowed
150
+ * },
151
+ * tokenIn: 'USDC',
152
+ * tokenOut: 'NATIVE',
153
+ * amount: '50.0'
154
+ * })
155
+ *
156
+ * // ❌ TypeScript error - Sui not in SwapChain enum
157
+ * const invalidResult = await swap(context, {
158
+ * from: {
159
+ * adapter,
160
+ * chain: 'Sui' // Compile-time error!
161
+ * },
162
+ * tokenIn: 'USDC',
163
+ * tokenOut: 'USDT',
164
+ * amount: '100.0'
165
+ * })
166
+ * ```
167
+ */
168
+ /**
169
+ * Enum representing chains that support same-chain swaps through the Swap Kit.
170
+ *
171
+ * Unlike the full {@link Blockchain} enum, SwapChain includes only mainnet
172
+ * networks where adapter contracts are deployed (CCTPv2 support).
173
+ *
174
+ * Dynamic validation via {@link isSwapSupportedChain} ensures chains
175
+ * automatically work when adapter contracts and supported tokens are deployed.
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * import { SwapChain } from '@core/chains'
180
+ * import { swap } from '@circle-fin/swap-kit'
181
+ *
182
+ * const result = await swap(context, {
183
+ * from: {
184
+ * adapter,
185
+ * chain: SwapChain.Arbitrum // Now supported!
186
+ * },
187
+ * tokenIn: 'USDC',
188
+ * tokenOut: 'WETH',
189
+ * amount: '100.0'
190
+ * })
191
+ * ```
192
+ *
193
+ * @see {@link isSwapSupportedChain} for runtime validation
194
+ * @see {@link getSwapSupportedChains} for all supported chains
195
+ */
196
+ var SwapChain;
197
+ (function (SwapChain) {
198
+ // Original 4 chains
199
+ SwapChain["Ethereum"] = "Ethereum";
200
+ SwapChain["Base"] = "Base";
201
+ SwapChain["Polygon"] = "Polygon";
202
+ SwapChain["Solana"] = "Solana";
203
+ // Additional supported chains
204
+ SwapChain["Arbitrum"] = "Arbitrum";
205
+ SwapChain["Optimism"] = "Optimism";
206
+ SwapChain["Avalanche"] = "Avalanche";
207
+ SwapChain["Linea"] = "Linea";
208
+ SwapChain["Ink"] = "Ink";
209
+ SwapChain["World_Chain"] = "World_Chain";
210
+ SwapChain["Unichain"] = "Unichain";
211
+ SwapChain["Plume"] = "Plume";
212
+ SwapChain["Sei"] = "Sei";
213
+ SwapChain["Sonic"] = "Sonic";
214
+ SwapChain["XDC"] = "XDC";
215
+ SwapChain["HyperEVM"] = "HyperEVM";
216
+ SwapChain["Monad"] = "Monad";
217
+ })(SwapChain || (SwapChain = {}));
218
+ // -----------------------------------------------------------------------------
219
+ // Bridge Chain Enum (CCTPv2 Supported Chains)
220
+ // -----------------------------------------------------------------------------
221
+ /**
222
+ * Enumeration of blockchains that support cross-chain bridging via CCTPv2.
223
+ *
224
+ * The enum is derived from the full {@link Blockchain} enum but filtered to only
225
+ * include chains with active CCTPv2 support. When new chains gain CCTPv2 support,
226
+ * they are added to this enum.
227
+ *
228
+ * @enum
229
+ * @category Enums
230
+ *
231
+ * @remarks
232
+ * - This enum is the **canonical source** of bridging-supported chains.
233
+ * - Use this enum (or its string literals) in `kit.bridge()` calls for type safety.
234
+ * - Attempting to use a chain not in this enum will produce a TypeScript compile error.
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * import { BridgeKit, BridgeChain } from '@circle-fin/bridge-kit'
239
+ *
240
+ * const kit = new BridgeKit()
241
+ *
242
+ * // ✅ Valid - autocomplete suggests only supported chains
243
+ * await kit.bridge({
244
+ * from: { adapter, chain: BridgeChain.Ethereum },
245
+ * to: { adapter, chain: BridgeChain.Base },
246
+ * amount: '100'
247
+ * })
248
+ *
249
+ * // ✅ Also valid - string literals work with autocomplete
250
+ * await kit.bridge({
251
+ * from: { adapter, chain: 'Ethereum_Sepolia' },
252
+ * to: { adapter, chain: 'Base_Sepolia' },
253
+ * amount: '100'
254
+ * })
255
+ *
256
+ * // ❌ Compile error - Algorand is not in BridgeChain
257
+ * await kit.bridge({
258
+ * from: { adapter, chain: 'Algorand' }, // TypeScript error!
259
+ * to: { adapter, chain: 'Base' },
260
+ * amount: '100'
261
+ * })
262
+ * ```
263
+ *
264
+ * @see {@link Blockchain} for the complete list of all known blockchains.
265
+ * @see {@link BridgeChainIdentifier} for the type that accepts these values.
266
+ */
267
+ var BridgeChain;
268
+ (function (BridgeChain) {
269
+ // Mainnet chains with CCTPv2 support
270
+ BridgeChain["Arbitrum"] = "Arbitrum";
271
+ BridgeChain["Avalanche"] = "Avalanche";
272
+ BridgeChain["Base"] = "Base";
273
+ BridgeChain["Codex"] = "Codex";
274
+ BridgeChain["Edge"] = "Edge";
275
+ BridgeChain["Ethereum"] = "Ethereum";
276
+ BridgeChain["HyperEVM"] = "HyperEVM";
277
+ BridgeChain["Ink"] = "Ink";
278
+ BridgeChain["Linea"] = "Linea";
279
+ BridgeChain["Monad"] = "Monad";
280
+ BridgeChain["Morph"] = "Morph";
281
+ BridgeChain["Optimism"] = "Optimism";
282
+ BridgeChain["Plume"] = "Plume";
283
+ BridgeChain["Polygon"] = "Polygon";
284
+ BridgeChain["Sei"] = "Sei";
285
+ BridgeChain["Solana"] = "Solana";
286
+ BridgeChain["Sonic"] = "Sonic";
287
+ BridgeChain["Unichain"] = "Unichain";
288
+ BridgeChain["World_Chain"] = "World_Chain";
289
+ BridgeChain["XDC"] = "XDC";
290
+ // Testnet chains with CCTPv2 support
291
+ BridgeChain["Arc_Testnet"] = "Arc_Testnet";
292
+ BridgeChain["Arbitrum_Sepolia"] = "Arbitrum_Sepolia";
293
+ BridgeChain["Avalanche_Fuji"] = "Avalanche_Fuji";
294
+ BridgeChain["Base_Sepolia"] = "Base_Sepolia";
295
+ BridgeChain["Codex_Testnet"] = "Codex_Testnet";
296
+ BridgeChain["Edge_Testnet"] = "Edge_Testnet";
297
+ BridgeChain["Ethereum_Sepolia"] = "Ethereum_Sepolia";
298
+ BridgeChain["HyperEVM_Testnet"] = "HyperEVM_Testnet";
299
+ BridgeChain["Ink_Testnet"] = "Ink_Testnet";
300
+ BridgeChain["Linea_Sepolia"] = "Linea_Sepolia";
301
+ BridgeChain["Monad_Testnet"] = "Monad_Testnet";
302
+ BridgeChain["Morph_Testnet"] = "Morph_Testnet";
303
+ BridgeChain["Optimism_Sepolia"] = "Optimism_Sepolia";
304
+ BridgeChain["Plume_Testnet"] = "Plume_Testnet";
305
+ BridgeChain["Polygon_Amoy_Testnet"] = "Polygon_Amoy_Testnet";
306
+ BridgeChain["Sei_Testnet"] = "Sei_Testnet";
307
+ BridgeChain["Solana_Devnet"] = "Solana_Devnet";
308
+ BridgeChain["Sonic_Testnet"] = "Sonic_Testnet";
309
+ BridgeChain["Unichain_Sepolia"] = "Unichain_Sepolia";
310
+ BridgeChain["World_Chain_Sepolia"] = "World_Chain_Sepolia";
311
+ BridgeChain["XDC_Apothem"] = "XDC_Apothem";
312
+ })(BridgeChain || (BridgeChain = {}));
313
+
314
+ /**
315
+ * Helper function to define a chain with proper TypeScript typing.
316
+ *
317
+ * This utility function works with TypeScript's `as const` assertion to create
318
+ * strongly-typed, immutable chain definition objects. It preserves literal types
319
+ * from the input and ensures the resulting object maintains all type information.
320
+ *
321
+ * When used with `as const`, it allows TypeScript to infer the most specific
322
+ * possible types for all properties, including string literals and numeric literals,
323
+ * rather than widening them to general types like string or number.
324
+ * @typeParam T - The specific chain definition type (must extend ChainDefinition)
325
+ * @param chain - The chain definition object, typically with an `as const` assertion
326
+ * @returns The same chain definition with preserved literal types
327
+ * @example
328
+ * ```typescript
329
+ * // Define an EVM chain with literal types preserved
330
+ * const Ethereum = defineChain({
331
+ * type: 'evm',
332
+ * chain: Blockchain.Ethereum,
333
+ * chainId: 1,
334
+ * name: 'Ethereum',
335
+ * nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
336
+ * isTestnet: false,
337
+ * usdcAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
338
+ * eurcAddress: null,
339
+ * cctp: {
340
+ * domain: 0,
341
+ * contracts: {
342
+ * TokenMessengerV1: '0xbd3fa81b58ba92a82136038b25adec7066af3155',
343
+ * MessageTransmitterV1: '0x0a992d191deec32afe36203ad87d7d289a738f81'
344
+ * }
345
+ * }
346
+ * } as const);
347
+ * ```
348
+ */
349
+ function defineChain(chain) {
350
+ return chain;
351
+ }
352
+
353
+ /**
354
+ * Algorand Mainnet chain definition
355
+ * @remarks
356
+ * This represents the official production network for the Algorand blockchain.
357
+ */
358
+ defineChain({
359
+ type: 'algorand',
360
+ chain: Blockchain.Algorand,
361
+ name: 'Algorand',
362
+ title: 'Algorand Mainnet',
363
+ nativeCurrency: {
364
+ name: 'Algo',
365
+ symbol: 'ALGO',
366
+ decimals: 6,
367
+ },
368
+ isTestnet: false,
369
+ explorerUrl: 'https://explorer.perawallet.app/tx/{hash}',
370
+ rpcEndpoints: ['https://mainnet-api.algonode.cloud'],
371
+ eurcAddress: null,
372
+ usdcAddress: '31566704',
373
+ usdtAddress: null,
374
+ cctp: null,
375
+ });
376
+
377
+ /**
378
+ * Algorand Testnet chain definition
379
+ * @remarks
380
+ * This represents the official testnet for the Algorand blockchain.
381
+ */
382
+ defineChain({
383
+ type: 'algorand',
384
+ chain: Blockchain.Algorand_Testnet,
385
+ name: 'Algorand Testnet',
386
+ title: 'Algorand Test Network',
387
+ nativeCurrency: {
388
+ name: 'Algo',
389
+ symbol: 'ALGO',
390
+ decimals: 6,
391
+ },
392
+ isTestnet: true,
393
+ explorerUrl: 'https://testnet.explorer.perawallet.app/tx/{hash}',
394
+ rpcEndpoints: ['https://testnet-api.algonode.cloud'],
395
+ eurcAddress: null,
396
+ usdcAddress: '10458941',
397
+ usdtAddress: null,
398
+ cctp: null,
399
+ });
400
+
401
+ /**
402
+ * Aptos Mainnet chain definition
403
+ * @remarks
404
+ * This represents the official production network for the Aptos blockchain.
405
+ */
406
+ defineChain({
407
+ type: 'aptos',
408
+ chain: Blockchain.Aptos,
409
+ name: 'Aptos',
410
+ title: 'Aptos Mainnet',
411
+ nativeCurrency: {
412
+ name: 'Aptos',
413
+ symbol: 'APT',
414
+ decimals: 8,
415
+ },
416
+ isTestnet: false,
417
+ explorerUrl: 'https://explorer.aptoslabs.com/txn/{hash}?network=mainnet',
418
+ rpcEndpoints: ['https://fullnode.mainnet.aptoslabs.com/v1'],
419
+ eurcAddress: null,
420
+ usdcAddress: '0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b',
421
+ usdtAddress: '0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b',
422
+ cctp: {
423
+ domain: 9,
424
+ contracts: {
425
+ v1: {
426
+ type: 'split',
427
+ tokenMessenger: '0x9bce6734f7b63e835108e3bd8c36743d4709fe435f44791918801d0989640a9d',
428
+ messageTransmitter: '0x177e17751820e4b4371873ca8c30279be63bdea63b88ed0f2239c2eea10f1772',
429
+ confirmations: 1,
430
+ },
431
+ },
432
+ forwarderSupported: {
433
+ source: false,
434
+ destination: false,
435
+ },
436
+ },
437
+ });
438
+
439
+ /**
440
+ * Aptos Testnet chain definition
441
+ * @remarks
442
+ * This represents the official test network for the Aptos blockchain.
443
+ */
444
+ defineChain({
445
+ type: 'aptos',
446
+ chain: Blockchain.Aptos_Testnet,
447
+ name: 'Aptos Testnet',
448
+ title: 'Aptos Test Network',
449
+ nativeCurrency: {
450
+ name: 'Aptos',
451
+ symbol: 'APT',
452
+ decimals: 8,
453
+ },
454
+ isTestnet: true,
455
+ explorerUrl: 'https://explorer.aptoslabs.com/txn/{hash}?network=testnet',
456
+ rpcEndpoints: ['https://fullnode.testnet.aptoslabs.com/v1'],
457
+ eurcAddress: null,
458
+ usdcAddress: '0x69091fbab5f7d635ee7ac5098cf0c1efbe31d68fec0f2cd565e8d168daf52832',
459
+ usdtAddress: null,
460
+ cctp: {
461
+ domain: 9,
462
+ contracts: {
463
+ v1: {
464
+ type: 'split',
465
+ tokenMessenger: '0x5f9b937419dda90aa06c1836b7847f65bbbe3f1217567758dc2488be31a477b9',
466
+ messageTransmitter: '0x081e86cebf457a0c6004f35bd648a2794698f52e0dde09a48619dcd3d4cc23d9',
467
+ confirmations: 1,
468
+ },
469
+ },
470
+ forwarderSupported: {
471
+ source: false,
472
+ destination: false,
473
+ },
474
+ },
475
+ });
476
+
477
+ /**
478
+ * Complete swap token registry - single source of truth for all swap-supported tokens.
479
+ *
480
+ * @remarks
481
+ * All packages should import from this registry for swap operations.
482
+ * Adding a new swap token requires updating only this registry.
483
+ *
484
+ * The NATIVE token is handled separately as it resolves dynamically based on chain.
485
+ *
486
+ * @example
487
+ * ```typescript
488
+ * import { SWAP_TOKEN_REGISTRY } from '@core/chains'
489
+ *
490
+ * // Get token decimals
491
+ * const decimals = SWAP_TOKEN_REGISTRY.USDC.decimals // 6
492
+ *
493
+ * // Check if token is stablecoin
494
+ * const isStable = SWAP_TOKEN_REGISTRY.DAI.category === 'stablecoin' // true
495
+ * ```
496
+ */
497
+ const SWAP_TOKEN_REGISTRY = {
498
+ // ============================================================================
499
+ // Stablecoins (6 decimals)
500
+ // ============================================================================
501
+ USDC: {
502
+ symbol: 'USDC',
503
+ decimals: 6,
504
+ category: 'stablecoin',
505
+ description: 'USD Coin',
506
+ },
507
+ EURC: {
508
+ symbol: 'EURC',
509
+ decimals: 6,
510
+ category: 'stablecoin',
511
+ description: 'Euro Coin',
512
+ },
513
+ USDT: {
514
+ symbol: 'USDT',
515
+ decimals: 6,
516
+ category: 'stablecoin',
517
+ description: 'Tether USD',
518
+ },
519
+ PYUSD: {
520
+ symbol: 'PYUSD',
521
+ decimals: 6,
522
+ category: 'stablecoin',
523
+ description: 'PayPal USD',
524
+ },
525
+ // ============================================================================
526
+ // Stablecoins (18 decimals)
527
+ // ============================================================================
528
+ DAI: {
529
+ symbol: 'DAI',
530
+ decimals: 18,
531
+ category: 'stablecoin',
532
+ description: 'MakerDAO stablecoin',
533
+ },
534
+ USDE: {
535
+ symbol: 'USDE',
536
+ decimals: 18,
537
+ category: 'stablecoin',
538
+ description: 'Ethena USD (synthetic dollar)',
539
+ },
540
+ // ============================================================================
541
+ // Wrapped Tokens
542
+ // ============================================================================
543
+ WBTC: {
544
+ symbol: 'WBTC',
545
+ decimals: 8,
546
+ category: 'wrapped',
547
+ description: 'Wrapped Bitcoin',
548
+ },
549
+ WETH: {
550
+ symbol: 'WETH',
551
+ decimals: 18,
552
+ category: 'wrapped',
553
+ description: 'Wrapped Ethereum',
554
+ },
555
+ WSOL: {
556
+ symbol: 'WSOL',
557
+ decimals: 9,
558
+ category: 'wrapped',
559
+ description: 'Wrapped Solana',
560
+ },
561
+ WAVAX: {
562
+ symbol: 'WAVAX',
563
+ decimals: 18,
564
+ category: 'wrapped',
565
+ description: 'Wrapped Avalanche',
566
+ },
567
+ WPOL: {
568
+ symbol: 'WPOL',
569
+ decimals: 18,
570
+ category: 'wrapped',
571
+ description: 'Wrapped Polygon',
572
+ },
573
+ };
574
+ /**
575
+ * Special NATIVE token constant for swap operations.
576
+ *
577
+ * @remarks
578
+ * NATIVE is handled separately from SWAP_TOKEN_REGISTRY because it resolves
579
+ * dynamically based on the chain (ETH on Ethereum, SOL on Solana, etc.).
580
+ * Its decimals are chain-specific.
581
+ */
582
+ const NATIVE_TOKEN = 'NATIVE';
583
+ /**
584
+ * Array of all supported swap token symbols including NATIVE.
585
+ * Useful for iteration, validation, and filtering.
586
+ */
587
+ [
588
+ ...Object.keys(SWAP_TOKEN_REGISTRY),
589
+ NATIVE_TOKEN,
590
+ ];
591
+
592
+ /**
593
+ * The bridge contract address for EVM testnet networks.
594
+ *
595
+ * This contract handles USDC transfers on testnet environments across
596
+ * EVM-compatible chains. Use this address when deploying or testing
597
+ * cross-chain USDC transfers on test networks.
598
+ */
599
+ const BRIDGE_CONTRACT_EVM_TESTNET = '0xC5567a5E3370d4DBfB0540025078e283e36A363d';
600
+ /**
601
+ * The bridge contract address for EVM mainnet networks.
602
+ *
603
+ * This contract handles USDC transfers on mainnet environments across
604
+ * EVM-compatible chains. Use this address for production cross-chain
605
+ * USDC transfers on live networks.
606
+ */
607
+ const BRIDGE_CONTRACT_EVM_MAINNET = '0xB3FA262d0fB521cc93bE83d87b322b8A23DAf3F0';
608
+ /**
609
+ * The adapter contract address for EVM mainnet networks.
610
+ *
611
+ * This contract serves as an adapter for integrating with various protocols
612
+ * on EVM-compatible chains. Use this address for mainnet adapter integrations.
613
+ */
614
+ const ADAPTER_CONTRACT_EVM_MAINNET = '0x7FB8c7260b63934d8da38aF902f87ae6e284a845';
615
+
616
+ /**
617
+ * Arc Testnet chain definition
618
+ * @remarks
619
+ * This represents the test network for the Arc blockchain,
620
+ * Circle's EVM-compatible Layer-1 designed for stablecoin finance
621
+ * and asset tokenization. Arc uses USDC as the native gas token and
622
+ * features the Malachite Byzantine Fault Tolerant (BFT) consensus
623
+ * engine for sub-second finality.
624
+ */
625
+ const ArcTestnet = defineChain({
626
+ type: 'evm',
627
+ chain: Blockchain.Arc_Testnet,
628
+ name: 'Arc Testnet',
629
+ title: 'ArcTestnet',
630
+ nativeCurrency: {
631
+ name: 'USDC',
632
+ symbol: 'USDC',
633
+ // Arc uses native USDC with 18 decimals for gas payments (EVM standard).
634
+ // Note: The ERC-20 USDC contract at usdcAddress uses 6 decimals.
635
+ // See: https://docs.arc.network/arc/references/contract-addresses
636
+ decimals: 18,
637
+ },
638
+ chainId: 5042002,
639
+ isTestnet: true,
640
+ explorerUrl: 'https://testnet.arcscan.app/tx/{hash}',
641
+ rpcEndpoints: ['https://rpc.testnet.arc.network/'],
642
+ eurcAddress: '0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a',
643
+ usdcAddress: '0x3600000000000000000000000000000000000000',
644
+ usdtAddress: null,
645
+ cctp: {
646
+ domain: 26,
647
+ contracts: {
648
+ v2: {
649
+ type: 'split',
650
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
651
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
652
+ confirmations: 1,
653
+ fastConfirmations: 1,
654
+ },
655
+ },
656
+ forwarderSupported: {
657
+ source: true,
658
+ destination: true,
659
+ },
660
+ },
661
+ kitContracts: {
662
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
663
+ },
664
+ });
665
+
666
+ /**
667
+ * Arbitrum Mainnet chain definition
668
+ * @remarks
669
+ * This represents the official production network for the Arbitrum blockchain.
670
+ */
671
+ const Arbitrum = defineChain({
672
+ type: 'evm',
673
+ chain: Blockchain.Arbitrum,
674
+ name: 'Arbitrum',
675
+ title: 'Arbitrum Mainnet',
676
+ nativeCurrency: {
677
+ name: 'Ether',
678
+ symbol: 'ETH',
679
+ decimals: 18,
680
+ },
681
+ chainId: 42161,
682
+ isTestnet: false,
683
+ explorerUrl: 'https://arbiscan.io/tx/{hash}',
684
+ rpcEndpoints: ['https://arb1.arbitrum.io/rpc'],
685
+ eurcAddress: null,
686
+ usdcAddress: '0xaf88d065e77c8cc2239327c5edb3a432268e5831',
687
+ usdtAddress: null,
688
+ cctp: {
689
+ domain: 3,
690
+ contracts: {
691
+ v1: {
692
+ type: 'split',
693
+ tokenMessenger: '0x19330d10D9Cc8751218eaf51E8885D058642E08A',
694
+ messageTransmitter: '0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca',
695
+ confirmations: 65,
696
+ },
697
+ v2: {
698
+ type: 'split',
699
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
700
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
701
+ confirmations: 65,
702
+ fastConfirmations: 1,
703
+ },
704
+ },
705
+ forwarderSupported: {
706
+ source: true,
707
+ destination: true,
708
+ },
709
+ },
710
+ kitContracts: {
711
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
712
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
713
+ },
714
+ });
715
+
716
+ /**
717
+ * Arbitrum Sepolia Testnet chain definition
718
+ * @remarks
719
+ * This represents the official test network for the Arbitrum blockchain on Sepolia.
720
+ */
721
+ const ArbitrumSepolia = defineChain({
722
+ type: 'evm',
723
+ chain: Blockchain.Arbitrum_Sepolia,
724
+ name: 'Arbitrum Sepolia',
725
+ title: 'Arbitrum Sepolia Testnet',
726
+ nativeCurrency: {
727
+ name: 'Sepolia Ether',
728
+ symbol: 'ETH',
729
+ decimals: 18,
730
+ },
731
+ chainId: 421614,
732
+ isTestnet: true,
733
+ explorerUrl: 'https://sepolia.arbiscan.io/tx/{hash}',
734
+ rpcEndpoints: ['https://sepolia-rollup.arbitrum.io/rpc'],
735
+ eurcAddress: null,
736
+ usdcAddress: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',
737
+ usdtAddress: null,
738
+ cctp: {
739
+ domain: 3,
740
+ contracts: {
741
+ v1: {
742
+ type: 'split',
743
+ tokenMessenger: '0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5',
744
+ messageTransmitter: '0xaCF1ceeF35caAc005e15888dDb8A3515C41B4872',
745
+ confirmations: 65,
746
+ },
747
+ v2: {
748
+ type: 'split',
749
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
750
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
751
+ confirmations: 65,
752
+ fastConfirmations: 1,
753
+ },
754
+ },
755
+ forwarderSupported: {
756
+ source: true,
757
+ destination: true,
758
+ },
759
+ },
760
+ kitContracts: {
761
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
762
+ },
763
+ });
764
+
765
+ /**
766
+ * Avalanche Mainnet chain definition
767
+ * @remarks
768
+ * This represents the official production network for the Avalanche blockchain.
769
+ */
770
+ const Avalanche = defineChain({
771
+ type: 'evm',
772
+ chain: Blockchain.Avalanche,
773
+ name: 'Avalanche',
774
+ title: 'Avalanche Mainnet',
775
+ nativeCurrency: {
776
+ name: 'Avalanche',
777
+ symbol: 'AVAX',
778
+ decimals: 18,
779
+ },
780
+ chainId: 43114,
781
+ isTestnet: false,
782
+ explorerUrl: 'https://subnets.avax.network/c-chain/tx/{hash}',
783
+ rpcEndpoints: ['https://api.avax.network/ext/bc/C/rpc'],
784
+ eurcAddress: '0xc891eb4cbdeff6e073e859e987815ed1505c2acd',
785
+ usdcAddress: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',
786
+ usdtAddress: '0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7',
787
+ cctp: {
788
+ domain: 1,
789
+ contracts: {
790
+ v1: {
791
+ type: 'split',
792
+ tokenMessenger: '0x6b25532e1060ce10cc3b0a99e5683b91bfde6982',
793
+ messageTransmitter: '0x8186359af5f57fbb40c6b14a588d2a59c0c29880',
794
+ confirmations: 1,
795
+ },
796
+ v2: {
797
+ type: 'split',
798
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
799
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
800
+ confirmations: 1,
801
+ fastConfirmations: 1,
802
+ },
803
+ },
804
+ forwarderSupported: {
805
+ source: true,
806
+ destination: true,
807
+ },
808
+ },
809
+ kitContracts: {
810
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
811
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
812
+ },
813
+ });
814
+
815
+ /**
816
+ * Avalanche Fuji Testnet chain definition
817
+ * @remarks
818
+ * This represents the official test network for the Avalanche blockchain.
819
+ */
820
+ const AvalancheFuji = defineChain({
821
+ type: 'evm',
822
+ chain: Blockchain.Avalanche_Fuji,
823
+ name: 'Avalanche Fuji',
824
+ title: 'Avalanche Fuji Testnet',
825
+ nativeCurrency: {
826
+ name: 'Avalanche',
827
+ symbol: 'AVAX',
828
+ decimals: 18,
829
+ },
830
+ chainId: 43113,
831
+ isTestnet: true,
832
+ explorerUrl: 'https://subnets-test.avax.network/c-chain/tx/{hash}',
833
+ eurcAddress: '0x5e44db7996c682e92a960b65ac713a54ad815c6b',
834
+ usdcAddress: '0x5425890298aed601595a70ab815c96711a31bc65',
835
+ usdtAddress: null,
836
+ cctp: {
837
+ domain: 1,
838
+ contracts: {
839
+ v1: {
840
+ type: 'split',
841
+ tokenMessenger: '0xeb08f243e5d3fcff26a9e38ae5520a669f4019d0',
842
+ messageTransmitter: '0xa9fb1b3009dcb79e2fe346c16a604b8fa8ae0a79',
843
+ confirmations: 1,
844
+ },
845
+ v2: {
846
+ type: 'split',
847
+ tokenMessenger: '0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa',
848
+ messageTransmitter: '0xe737e5cebeeba77efe34d4aa090756590b1ce275',
849
+ confirmations: 1,
850
+ fastConfirmations: 1,
851
+ },
852
+ },
853
+ forwarderSupported: {
854
+ source: true,
855
+ destination: true,
856
+ },
857
+ },
858
+ rpcEndpoints: ['https://api.avax-test.network/ext/bc/C/rpc'],
859
+ kitContracts: {
860
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
861
+ },
862
+ });
863
+
864
+ /**
865
+ * Base chain definition
866
+ * @remarks
867
+ * This represents the official production network for the Base blockchain.
868
+ */
869
+ const Base = defineChain({
870
+ type: 'evm',
871
+ chain: Blockchain.Base,
872
+ name: 'Base',
873
+ title: 'Base Mainnet',
874
+ nativeCurrency: {
875
+ name: 'Ether',
876
+ symbol: 'ETH',
877
+ decimals: 18,
878
+ },
879
+ chainId: 8453,
880
+ isTestnet: false,
881
+ explorerUrl: 'https://basescan.org/tx/{hash}',
882
+ rpcEndpoints: ['https://mainnet.base.org', 'https://base.publicnode.com'],
883
+ eurcAddress: '0x60a3e35cc302bfa44cb288bc5a4f316fdb1adb42',
884
+ usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
885
+ usdtAddress: null,
886
+ cctp: {
887
+ domain: 6,
888
+ contracts: {
889
+ v1: {
890
+ type: 'split',
891
+ tokenMessenger: '0x1682Ae6375C4E4A97e4B583BC394c861A46D8962',
892
+ messageTransmitter: '0xAD09780d193884d503182aD4588450C416D6F9D4',
893
+ confirmations: 65,
894
+ },
895
+ v2: {
896
+ type: 'split',
897
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
898
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
899
+ confirmations: 65,
900
+ fastConfirmations: 1,
901
+ },
902
+ },
903
+ forwarderSupported: {
904
+ source: true,
905
+ destination: true,
906
+ },
907
+ },
908
+ kitContracts: {
909
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
910
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
911
+ },
912
+ });
913
+
914
+ /**
915
+ * Base Sepolia Testnet chain definition
916
+ * @remarks
917
+ * This represents the official test network for the Base blockchain on Sepolia.
918
+ */
919
+ const BaseSepolia = defineChain({
920
+ type: 'evm',
921
+ chain: Blockchain.Base_Sepolia,
922
+ name: 'Base Sepolia',
923
+ title: 'Base Sepolia Testnet',
924
+ nativeCurrency: {
925
+ name: 'Sepolia Ether',
926
+ symbol: 'ETH',
927
+ decimals: 18,
928
+ },
929
+ chainId: 84532,
930
+ isTestnet: true,
931
+ explorerUrl: 'https://sepolia.basescan.org/tx/{hash}',
932
+ rpcEndpoints: ['https://sepolia.base.org'],
933
+ eurcAddress: '0x808456652fdb597867f38412077A9182bf77359F',
934
+ usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
935
+ usdtAddress: null,
936
+ cctp: {
937
+ domain: 6,
938
+ contracts: {
939
+ v1: {
940
+ type: 'split',
941
+ tokenMessenger: '0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5',
942
+ messageTransmitter: '0x7865fAfC2db2093669d92c0F33AeEF291086BEFD',
943
+ confirmations: 65,
944
+ },
945
+ v2: {
946
+ type: 'split',
947
+ tokenMessenger: '0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa',
948
+ messageTransmitter: '0xe737e5cebeeba77efe34d4aa090756590b1ce275',
949
+ confirmations: 65,
950
+ fastConfirmations: 1,
951
+ },
952
+ },
953
+ forwarderSupported: {
954
+ source: true,
955
+ destination: true,
956
+ },
957
+ },
958
+ kitContracts: {
959
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
960
+ },
961
+ });
962
+
963
+ /**
964
+ * Celo Mainnet chain definition
965
+ * @remarks
966
+ * This represents the official production network for the Celo blockchain.
967
+ */
968
+ defineChain({
969
+ type: 'evm',
970
+ chain: Blockchain.Celo,
971
+ name: 'Celo',
972
+ title: 'Celo Mainnet',
973
+ nativeCurrency: {
974
+ name: 'Celo',
975
+ symbol: 'CELO',
976
+ decimals: 18,
977
+ },
978
+ chainId: 42220,
979
+ isTestnet: false,
980
+ explorerUrl: 'https://celoscan.io/tx/{hash}',
981
+ rpcEndpoints: ['https://forno.celo.org'],
982
+ eurcAddress: null,
983
+ usdcAddress: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',
984
+ usdtAddress: '0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e',
985
+ cctp: null,
986
+ });
987
+
988
+ /**
989
+ * Celo Alfajores Testnet chain definition
990
+ * @remarks
991
+ * This represents the official test network for the Celo blockchain.
992
+ */
993
+ defineChain({
994
+ type: 'evm',
995
+ chain: Blockchain.Celo_Alfajores_Testnet,
996
+ name: 'Celo Alfajores',
997
+ title: 'Celo Alfajores Testnet',
998
+ nativeCurrency: {
999
+ name: 'Celo',
1000
+ symbol: 'CELO',
1001
+ decimals: 18,
1002
+ },
1003
+ chainId: 44787,
1004
+ isTestnet: true,
1005
+ explorerUrl: 'https://alfajores.celoscan.io/tx/{hash}',
1006
+ rpcEndpoints: ['https://alfajores-forno.celo-testnet.org'],
1007
+ eurcAddress: null,
1008
+ usdcAddress: '0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B',
1009
+ usdtAddress: null,
1010
+ cctp: null,
1011
+ });
1012
+
1013
+ /**
1014
+ * Codex Mainnet chain definition
1015
+ * @remarks
1016
+ * This represents the main network for the Codex blockchain.
1017
+ */
1018
+ const Codex = defineChain({
1019
+ type: 'evm',
1020
+ chain: Blockchain.Codex,
1021
+ name: 'Codex Mainnet',
1022
+ title: 'Codex Mainnet',
1023
+ nativeCurrency: {
1024
+ name: 'ETH',
1025
+ symbol: 'ETH',
1026
+ decimals: 18,
1027
+ },
1028
+ chainId: 81224,
1029
+ isTestnet: false,
1030
+ explorerUrl: 'https://explorer.codex.xyz/tx/{hash}',
1031
+ rpcEndpoints: ['https://rpc.codex.xyz'],
1032
+ eurcAddress: null,
1033
+ usdcAddress: '0xd996633a415985DBd7D6D12f4A4343E31f5037cf',
1034
+ usdtAddress: null,
1035
+ cctp: {
1036
+ domain: 12,
1037
+ contracts: {
1038
+ v2: {
1039
+ type: 'split',
1040
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
1041
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
1042
+ confirmations: 65,
1043
+ fastConfirmations: 1,
1044
+ },
1045
+ },
1046
+ forwarderSupported: {
1047
+ source: true,
1048
+ destination: false,
1049
+ },
1050
+ },
1051
+ kitContracts: {
1052
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
1053
+ },
1054
+ });
1055
+
1056
+ /**
1057
+ * Codex Testnet chain definition
1058
+ * @remarks
1059
+ * This represents the test network for the Codex blockchain.
1060
+ */
1061
+ const CodexTestnet = defineChain({
1062
+ type: 'evm',
1063
+ chain: Blockchain.Codex_Testnet,
1064
+ name: 'Codex Testnet',
1065
+ title: 'Codex Testnet',
1066
+ nativeCurrency: {
1067
+ name: 'ETH',
1068
+ symbol: 'ETH',
1069
+ decimals: 18,
1070
+ },
1071
+ chainId: 812242,
1072
+ isTestnet: true,
1073
+ explorerUrl: 'https://explorer.codex-stg.xyz/tx/{hash}',
1074
+ rpcEndpoints: ['https://rpc.codex-stg.xyz'],
1075
+ eurcAddress: null,
1076
+ usdcAddress: '0x6d7f141b6819C2c9CC2f818e6ad549E7Ca090F8f',
1077
+ usdtAddress: null,
1078
+ cctp: {
1079
+ domain: 12,
1080
+ contracts: {
1081
+ v2: {
1082
+ type: 'split',
1083
+ tokenMessenger: '0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa',
1084
+ messageTransmitter: '0xe737e5cebeeba77efe34d4aa090756590b1ce275',
1085
+ confirmations: 65,
1086
+ fastConfirmations: 1,
1087
+ },
1088
+ },
1089
+ forwarderSupported: {
1090
+ source: true,
1091
+ destination: false,
1092
+ },
1093
+ },
1094
+ kitContracts: {
1095
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
1096
+ },
1097
+ });
1098
+
1099
+ /**
1100
+ * Edge Mainnet chain definition
1101
+ * @remarks
1102
+ * This represents the official production network for the Edge blockchain.
1103
+ * Edge is an EVM-compatible blockchain.
1104
+ */
1105
+ defineChain({
1106
+ type: 'evm',
1107
+ chain: Blockchain.Edge,
1108
+ name: 'Edge',
1109
+ title: 'Edge Mainnet',
1110
+ nativeCurrency: {
1111
+ name: 'Ether',
1112
+ symbol: 'ETH',
1113
+ decimals: 18,
1114
+ },
1115
+ chainId: 3343,
1116
+ isTestnet: false,
1117
+ explorerUrl: 'https://pro.edgex.exchange/en-US/explorer/tx/{hash}',
1118
+ rpcEndpoints: ['https://edge-mainnet.g.alchemy.com/public'],
1119
+ eurcAddress: null,
1120
+ usdcAddress: '0x98d2919b9A214E6Fa5384AC81E6864bA686Ad74c',
1121
+ usdtAddress: null,
1122
+ cctp: {
1123
+ domain: 28,
1124
+ contracts: {
1125
+ v2: {
1126
+ type: 'split',
1127
+ tokenMessenger: '0x98706A006bc632Df31CAdFCBD43F38887ce2ca5c',
1128
+ messageTransmitter: '0x5b61381Fc9e58E70EfC13a4A97516997019198ee',
1129
+ confirmations: 65,
1130
+ fastConfirmations: 1,
1131
+ },
1132
+ },
1133
+ forwarderSupported: {
1134
+ source: true,
1135
+ destination: true,
1136
+ },
1137
+ },
1138
+ kitContracts: {
1139
+ bridge: '0x6D1AaE1c34Aeb582022916a67f2A655C6f4eDFF2', //Unique bridge address as CCTP address for Edge is also unique
1140
+ },
1141
+ });
1142
+
1143
+ /**
1144
+ * Edge Testnet chain definition
1145
+ * @remarks
1146
+ * This represents the official test network for the Edge blockchain.
1147
+ * Edge is an EVM-compatible blockchain.
1148
+ */
1149
+ defineChain({
1150
+ type: 'evm',
1151
+ chain: Blockchain.Edge_Testnet,
1152
+ name: 'Edge Testnet',
1153
+ title: 'Edge Testnet',
1154
+ nativeCurrency: {
1155
+ name: 'Ether',
1156
+ symbol: 'ETH',
1157
+ decimals: 18,
1158
+ },
1159
+ chainId: 33431,
1160
+ isTestnet: true,
1161
+ explorerUrl: 'https://edge-testnet.explorer.alchemy.com/tx/{hash}',
1162
+ rpcEndpoints: ['https://edge-testnet.g.alchemy.com/public'],
1163
+ eurcAddress: null,
1164
+ usdcAddress: '0x2d9F7CAD728051AA35Ecdc472a14cf8cDF5CFD6B',
1165
+ usdtAddress: null,
1166
+ cctp: {
1167
+ domain: 28,
1168
+ contracts: {
1169
+ v2: {
1170
+ type: 'split',
1171
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
1172
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
1173
+ confirmations: 65,
1174
+ fastConfirmations: 1,
1175
+ },
1176
+ },
1177
+ forwarderSupported: {
1178
+ source: true,
1179
+ destination: true,
1180
+ },
1181
+ },
1182
+ kitContracts: {
1183
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
1184
+ },
1185
+ });
1186
+
1187
+ /**
1188
+ * Ethereum Mainnet chain definition
1189
+ * @remarks
1190
+ * This represents the official production network for the Ethereum blockchain.
1191
+ */
1192
+ const Ethereum = defineChain({
1193
+ type: 'evm',
1194
+ chain: Blockchain.Ethereum,
1195
+ name: 'Ethereum',
1196
+ title: 'Ethereum Mainnet',
1197
+ nativeCurrency: {
1198
+ name: 'Ether',
1199
+ symbol: 'ETH',
1200
+ decimals: 18,
1201
+ },
1202
+ chainId: 1,
1203
+ isTestnet: false,
1204
+ explorerUrl: 'https://etherscan.io/tx/{hash}',
1205
+ rpcEndpoints: ['https://eth.merkle.io', 'https://ethereum.publicnode.com'],
1206
+ eurcAddress: '0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c',
1207
+ usdcAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
1208
+ usdtAddress: '0xdac17f958d2ee523a2206206994597c13d831ec7',
1209
+ cctp: {
1210
+ domain: 0,
1211
+ contracts: {
1212
+ v1: {
1213
+ type: 'split',
1214
+ tokenMessenger: '0xbd3fa81b58ba92a82136038b25adec7066af3155',
1215
+ messageTransmitter: '0x0a992d191deec32afe36203ad87d7d289a738f81',
1216
+ confirmations: 65,
1217
+ },
1218
+ v2: {
1219
+ type: 'split',
1220
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
1221
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
1222
+ confirmations: 65,
1223
+ fastConfirmations: 2,
1224
+ },
1225
+ },
1226
+ forwarderSupported: {
1227
+ source: true,
1228
+ destination: true,
1229
+ },
1230
+ },
1231
+ kitContracts: {
1232
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
1233
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
1234
+ },
1235
+ });
1236
+
1237
+ /**
1238
+ * Ethereum Sepolia Testnet chain definition
1239
+ * @remarks
1240
+ * This represents the official test network for the Ethereum blockchain on Sepolia.
1241
+ */
1242
+ const EthereumSepolia = defineChain({
1243
+ type: 'evm',
1244
+ chain: Blockchain.Ethereum_Sepolia,
1245
+ name: 'Ethereum Sepolia',
1246
+ title: 'Ethereum Sepolia Testnet',
1247
+ nativeCurrency: {
1248
+ name: 'Sepolia Ether',
1249
+ symbol: 'ETH',
1250
+ decimals: 18,
1251
+ },
1252
+ chainId: 11155111,
1253
+ isTestnet: true,
1254
+ explorerUrl: 'https://sepolia.etherscan.io/tx/{hash}',
1255
+ rpcEndpoints: ['https://sepolia.drpc.org'],
1256
+ eurcAddress: '0x08210F9170F89Ab7658F0B5E3fF39b0E03C594D4',
1257
+ usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
1258
+ usdtAddress: null,
1259
+ cctp: {
1260
+ domain: 0,
1261
+ contracts: {
1262
+ v1: {
1263
+ type: 'split',
1264
+ tokenMessenger: '0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5',
1265
+ messageTransmitter: '0x7865fAfC2db2093669d92c0F33AeEF291086BEFD',
1266
+ confirmations: 65,
1267
+ },
1268
+ v2: {
1269
+ type: 'split',
1270
+ tokenMessenger: '0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa',
1271
+ messageTransmitter: '0xe737e5cebeeba77efe34d4aa090756590b1ce275',
1272
+ confirmations: 65,
1273
+ fastConfirmations: 2,
1274
+ },
1275
+ },
1276
+ forwarderSupported: {
1277
+ source: true,
1278
+ destination: true,
1279
+ },
1280
+ },
1281
+ kitContracts: {
1282
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
1283
+ },
1284
+ });
1285
+
1286
+ /**
1287
+ * Hedera Mainnet chain definition
1288
+ * @remarks
1289
+ * This represents the official production network for the Hedera blockchain.
1290
+ */
1291
+ defineChain({
1292
+ type: 'hedera',
1293
+ chain: Blockchain.Hedera,
1294
+ name: 'Hedera',
1295
+ title: 'Hedera Mainnet',
1296
+ nativeCurrency: {
1297
+ name: 'HBAR',
1298
+ symbol: 'HBAR',
1299
+ decimals: 18,
1300
+ },
1301
+ isTestnet: false,
1302
+ explorerUrl: 'https://hashscan.io/mainnet/transaction/{hash}', // Note: Hedera uses `transaction_id`, not hash. Format is typically `0.0.X-YYYY...`.
1303
+ rpcEndpoints: ['https://mainnet.hashio.io/api'],
1304
+ eurcAddress: null,
1305
+ usdcAddress: '0.0.456858',
1306
+ usdtAddress: null,
1307
+ cctp: null,
1308
+ });
1309
+
1310
+ /**
1311
+ * Hedera Testnet chain definition
1312
+ * @remarks
1313
+ * This represents the official test network for the Hedera blockchain.
1314
+ */
1315
+ defineChain({
1316
+ type: 'hedera',
1317
+ chain: Blockchain.Hedera_Testnet,
1318
+ name: 'Hedera Testnet',
1319
+ title: 'Hedera Test Network',
1320
+ nativeCurrency: {
1321
+ name: 'HBAR',
1322
+ symbol: 'HBAR',
1323
+ decimals: 18,
1324
+ },
1325
+ isTestnet: true,
1326
+ explorerUrl: 'https://hashscan.io/testnet/transaction/{hash}', // Note: Hedera uses `transaction_id`, not hash. Format is typically `0.0.X-YYYY...`.
1327
+ rpcEndpoints: ['https://testnet.hashio.io/api'],
1328
+ eurcAddress: null,
1329
+ usdcAddress: '0.0.429274',
1330
+ usdtAddress: null,
1331
+ cctp: null,
1332
+ });
1333
+
1334
+ /**
1335
+ * HyperEVM Mainnet chain definition
1336
+ * @remarks
1337
+ * This represents the official production network for the HyperEVM blockchain.
1338
+ * HyperEVM is a Layer 1 blockchain specialized for DeFi and trading applications
1339
+ * with native orderbook and matching engine.
1340
+ */
1341
+ const HyperEVM = defineChain({
1342
+ type: 'evm',
1343
+ chain: Blockchain.HyperEVM,
1344
+ name: 'HyperEVM',
1345
+ title: 'HyperEVM Mainnet',
1346
+ nativeCurrency: {
1347
+ name: 'Hype',
1348
+ symbol: 'HYPE',
1349
+ decimals: 18,
1350
+ },
1351
+ chainId: 999,
1352
+ isTestnet: false,
1353
+ explorerUrl: 'https://hyperevmscan.io/tx/{hash}',
1354
+ rpcEndpoints: ['https://rpc.hyperliquid.xyz/evm'],
1355
+ eurcAddress: null,
1356
+ usdcAddress: '0xb88339CB7199b77E23DB6E890353E22632Ba630f',
1357
+ usdtAddress: null,
1358
+ cctp: {
1359
+ domain: 19,
1360
+ contracts: {
1361
+ v2: {
1362
+ type: 'split',
1363
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
1364
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
1365
+ confirmations: 1,
1366
+ fastConfirmations: 1,
1367
+ },
1368
+ },
1369
+ forwarderSupported: {
1370
+ source: true,
1371
+ destination: true,
1372
+ },
1373
+ },
1374
+ kitContracts: {
1375
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
1376
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
1377
+ },
1378
+ });
1379
+
1380
+ /**
1381
+ * HyperEVM Testnet chain definition
1382
+ * @remarks
1383
+ * This represents the official testnet for the HyperEVM blockchain.
1384
+ * Used for development and testing purposes before deploying to mainnet.
1385
+ */
1386
+ const HyperEVMTestnet = defineChain({
1387
+ type: 'evm',
1388
+ chain: Blockchain.HyperEVM_Testnet,
1389
+ name: 'HyperEVM Testnet',
1390
+ title: 'HyperEVM Test Network',
1391
+ nativeCurrency: {
1392
+ name: 'Hype',
1393
+ symbol: 'HYPE',
1394
+ decimals: 18,
1395
+ },
1396
+ chainId: 998,
1397
+ isTestnet: true,
1398
+ explorerUrl: 'https://testnet.hyperliquid.xyz/explorer/tx/{hash}',
1399
+ rpcEndpoints: ['https://rpc.hyperliquid-testnet.xyz/evm'],
1400
+ eurcAddress: null,
1401
+ usdcAddress: '0x2B3370eE501B4a559b57D449569354196457D8Ab',
1402
+ usdtAddress: null,
1403
+ cctp: {
1404
+ domain: 19,
1405
+ contracts: {
1406
+ v2: {
1407
+ type: 'split',
1408
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
1409
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
1410
+ confirmations: 1,
1411
+ fastConfirmations: 1,
1412
+ },
1413
+ },
1414
+ forwarderSupported: {
1415
+ source: true,
1416
+ destination: true,
1417
+ },
1418
+ },
1419
+ kitContracts: {
1420
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
1421
+ },
1422
+ });
1423
+
1424
+ /**
1425
+ * Ink Mainnet chain definition
1426
+ * @remarks
1427
+ * This represents the official production network for the Ink blockchain.
1428
+ * Ink is a Layer 1 blockchain specialized for DeFi and trading applications
1429
+ * with native orderbook and matching engine.
1430
+ */
1431
+ const Ink = defineChain({
1432
+ type: 'evm',
1433
+ chain: Blockchain.Ink,
1434
+ name: 'Ink',
1435
+ title: 'Ink Mainnet',
1436
+ nativeCurrency: {
1437
+ name: 'Ether',
1438
+ symbol: 'ETH',
1439
+ decimals: 18,
1440
+ },
1441
+ chainId: 57073,
1442
+ isTestnet: false,
1443
+ explorerUrl: 'https://explorer.inkonchain.com/tx/{hash}',
1444
+ rpcEndpoints: [
1445
+ 'https://rpc-gel.inkonchain.com',
1446
+ 'https://rpc-qnd.inkonchain.com',
1447
+ ],
1448
+ eurcAddress: null,
1449
+ usdcAddress: '0x2D270e6886d130D724215A266106e6832161EAEd',
1450
+ usdtAddress: null,
1451
+ cctp: {
1452
+ domain: 21,
1453
+ contracts: {
1454
+ v2: {
1455
+ type: 'split',
1456
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
1457
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
1458
+ confirmations: 65,
1459
+ fastConfirmations: 1,
1460
+ },
1461
+ },
1462
+ forwarderSupported: {
1463
+ source: true,
1464
+ destination: true,
1465
+ },
1466
+ },
1467
+ kitContracts: {
1468
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
1469
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
1470
+ },
1471
+ });
1472
+
1473
+ /**
1474
+ * Ink Testnet chain definition
1475
+ * @remarks
1476
+ * This represents the official testnet for the Ink blockchain.
1477
+ * Used for development and testing purposes before deploying to mainnet.
1478
+ */
1479
+ const InkTestnet = defineChain({
1480
+ type: 'evm',
1481
+ chain: Blockchain.Ink_Testnet,
1482
+ name: 'Ink Sepolia',
1483
+ title: 'Ink Sepolia Testnet',
1484
+ nativeCurrency: {
1485
+ name: 'Sepolia Ether',
1486
+ symbol: 'ETH',
1487
+ decimals: 18,
1488
+ },
1489
+ chainId: 763373,
1490
+ isTestnet: true,
1491
+ explorerUrl: 'https://explorer-sepolia.inkonchain.com/tx/{hash}',
1492
+ rpcEndpoints: [
1493
+ 'https://rpc-gel-sepolia.inkonchain.com',
1494
+ 'https://rpc-qnd-sepolia.inkonchain.com',
1495
+ ],
1496
+ eurcAddress: null,
1497
+ usdcAddress: '0xFabab97dCE620294D2B0b0e46C68964e326300Ac',
1498
+ usdtAddress: null,
1499
+ cctp: {
1500
+ domain: 21,
1501
+ contracts: {
1502
+ v2: {
1503
+ type: 'split',
1504
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
1505
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
1506
+ confirmations: 65,
1507
+ fastConfirmations: 1,
1508
+ },
1509
+ },
1510
+ forwarderSupported: {
1511
+ source: true,
1512
+ destination: true,
1513
+ },
1514
+ },
1515
+ kitContracts: {
1516
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
1517
+ },
1518
+ });
1519
+
1520
+ /**
1521
+ * Linea Mainnet chain definition
1522
+ * @remarks
1523
+ * This represents the official production network for the Linea blockchain.
1524
+ */
1525
+ const Linea = defineChain({
1526
+ type: 'evm',
1527
+ chain: Blockchain.Linea,
1528
+ name: 'Linea',
1529
+ title: 'Linea Mainnet',
1530
+ nativeCurrency: {
1531
+ name: 'Ether',
1532
+ symbol: 'ETH',
1533
+ decimals: 18,
1534
+ },
1535
+ chainId: 59144,
1536
+ isTestnet: false,
1537
+ explorerUrl: 'https://lineascan.build/tx/{hash}',
1538
+ rpcEndpoints: ['https://rpc.linea.build'],
1539
+ eurcAddress: null,
1540
+ usdcAddress: '0x176211869ca2b568f2a7d4ee941e073a821ee1ff',
1541
+ usdtAddress: null,
1542
+ cctp: {
1543
+ domain: 11,
1544
+ contracts: {
1545
+ v2: {
1546
+ type: 'split',
1547
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
1548
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
1549
+ confirmations: 1,
1550
+ fastConfirmations: 1,
1551
+ },
1552
+ },
1553
+ forwarderSupported: {
1554
+ source: true,
1555
+ destination: true,
1556
+ },
1557
+ },
1558
+ kitContracts: {
1559
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
1560
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
1561
+ },
1562
+ });
1563
+
1564
+ /**
1565
+ * Linea Sepolia Testnet chain definition
1566
+ * @remarks
1567
+ * This represents the official test network for the Linea blockchain on Sepolia.
1568
+ */
1569
+ const LineaSepolia = defineChain({
1570
+ type: 'evm',
1571
+ chain: Blockchain.Linea_Sepolia,
1572
+ name: 'Linea Sepolia',
1573
+ title: 'Linea Sepolia Testnet',
1574
+ nativeCurrency: {
1575
+ name: 'Sepolia Ether',
1576
+ symbol: 'ETH',
1577
+ decimals: 18,
1578
+ },
1579
+ chainId: 59141,
1580
+ isTestnet: true,
1581
+ explorerUrl: 'https://sepolia.lineascan.build/tx/{hash}',
1582
+ rpcEndpoints: ['https://rpc.sepolia.linea.build'],
1583
+ eurcAddress: null,
1584
+ usdcAddress: '0xfece4462d57bd51a6a552365a011b95f0e16d9b7',
1585
+ usdtAddress: null,
1586
+ cctp: {
1587
+ domain: 11,
1588
+ contracts: {
1589
+ v2: {
1590
+ type: 'split',
1591
+ tokenMessenger: '0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa',
1592
+ messageTransmitter: '0xe737e5cebeeba77efe34d4aa090756590b1ce275',
1593
+ confirmations: 1,
1594
+ fastConfirmations: 1,
1595
+ },
1596
+ },
1597
+ forwarderSupported: {
1598
+ source: true,
1599
+ destination: true,
1600
+ },
1601
+ },
1602
+ kitContracts: {
1603
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
1604
+ },
1605
+ });
1606
+
1607
+ /**
1608
+ * Monad Mainnet chain definition
1609
+ * @remarks
1610
+ * This represents the official production network for the Monad blockchain.
1611
+ * Monad is a high-performance EVM-compatible Layer-1 blockchain featuring
1612
+ * over 10,000 TPS, sub-second finality, and near-zero gas fees.
1613
+ */
1614
+ defineChain({
1615
+ type: 'evm',
1616
+ chain: Blockchain.Monad,
1617
+ name: 'Monad',
1618
+ title: 'Monad Mainnet',
1619
+ nativeCurrency: {
1620
+ name: 'Monad',
1621
+ symbol: 'MON',
1622
+ decimals: 18,
1623
+ },
1624
+ chainId: 143,
1625
+ isTestnet: false,
1626
+ explorerUrl: 'https://monadscan.com/tx/{hash}',
1627
+ rpcEndpoints: ['https://rpc.monad.xyz'],
1628
+ eurcAddress: null,
1629
+ usdcAddress: '0x754704Bc059F8C67012fEd69BC8A327a5aafb603',
1630
+ usdtAddress: null,
1631
+ cctp: {
1632
+ domain: 15,
1633
+ contracts: {
1634
+ v2: {
1635
+ type: 'split',
1636
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
1637
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
1638
+ confirmations: 1,
1639
+ fastConfirmations: 1,
1640
+ },
1641
+ },
1642
+ forwarderSupported: {
1643
+ source: true,
1644
+ destination: true,
1645
+ },
1646
+ },
1647
+ kitContracts: {
1648
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
1649
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
1650
+ },
1651
+ });
1652
+
1653
+ /**
1654
+ * Monad Testnet chain definition
1655
+ * @remarks
1656
+ * This represents the official test network for the Monad blockchain.
1657
+ * Monad is a high-performance EVM-compatible Layer-1 blockchain featuring
1658
+ * over 10,000 TPS, sub-second finality, and near-zero gas fees.
1659
+ */
1660
+ defineChain({
1661
+ type: 'evm',
1662
+ chain: Blockchain.Monad_Testnet,
1663
+ name: 'Monad Testnet',
1664
+ title: 'Monad Testnet',
1665
+ nativeCurrency: {
1666
+ name: 'Monad',
1667
+ symbol: 'MON',
1668
+ decimals: 18,
1669
+ },
1670
+ chainId: 10143,
1671
+ isTestnet: true,
1672
+ explorerUrl: 'https://testnet.monadscan.com/tx/{hash}',
1673
+ rpcEndpoints: ['https://testnet-rpc.monad.xyz'],
1674
+ eurcAddress: null,
1675
+ usdcAddress: '0x534b2f3A21130d7a60830c2Df862319e593943A3',
1676
+ usdtAddress: null,
1677
+ cctp: {
1678
+ domain: 15,
1679
+ contracts: {
1680
+ v2: {
1681
+ type: 'split',
1682
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
1683
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
1684
+ confirmations: 1,
1685
+ fastConfirmations: 1,
1686
+ },
1687
+ },
1688
+ forwarderSupported: {
1689
+ source: true,
1690
+ destination: true,
1691
+ },
1692
+ },
1693
+ kitContracts: {
1694
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
1695
+ },
1696
+ });
1697
+
1698
+ /**
1699
+ * Morph Mainnet chain definition
1700
+ * @remarks
1701
+ * This represents the official production network for the Morph blockchain.
1702
+ * Morph is an EVM-compatible Layer-2 blockchain built on the OP Stack.
1703
+ */
1704
+ defineChain({
1705
+ type: 'evm',
1706
+ chain: Blockchain.Morph,
1707
+ name: 'Morph',
1708
+ title: 'Morph Mainnet',
1709
+ nativeCurrency: {
1710
+ name: 'Ether',
1711
+ symbol: 'ETH',
1712
+ decimals: 18,
1713
+ },
1714
+ chainId: 2818,
1715
+ isTestnet: false,
1716
+ explorerUrl: 'https://explorer.morph.network/tx/{hash}',
1717
+ rpcEndpoints: ['https://rpc.morphl2.io'],
1718
+ eurcAddress: null,
1719
+ usdcAddress: '0xCfb1186F4e93D60E60a8bDd997427D1F33bc372B',
1720
+ usdtAddress: null,
1721
+ cctp: {
1722
+ domain: 30,
1723
+ contracts: {
1724
+ v2: {
1725
+ type: 'split',
1726
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
1727
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
1728
+ confirmations: 64,
1729
+ fastConfirmations: 1,
1730
+ },
1731
+ },
1732
+ forwarderSupported: {
1733
+ source: false,
1734
+ destination: false,
1735
+ },
1736
+ },
1737
+ kitContracts: {
1738
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
1739
+ },
1740
+ });
1741
+
1742
+ /**
1743
+ * Morph Hoodi Testnet chain definition
1744
+ * @remarks
1745
+ * This represents the official test network for the Morph blockchain.
1746
+ * Morph is an EVM-compatible Layer-2 blockchain built on the OP Stack.
1747
+ */
1748
+ defineChain({
1749
+ type: 'evm',
1750
+ chain: Blockchain.Morph_Testnet,
1751
+ name: 'Morph Hoodi',
1752
+ title: 'Morph Hoodi Testnet',
1753
+ nativeCurrency: {
1754
+ name: 'Ether',
1755
+ symbol: 'ETH',
1756
+ decimals: 18,
1757
+ },
1758
+ chainId: 2910,
1759
+ isTestnet: true,
1760
+ explorerUrl: 'https://explorer-hoodi.morphl2.io/tx/{hash}',
1761
+ rpcEndpoints: ['https://rpc-hoodi.morphl2.io'],
1762
+ eurcAddress: null,
1763
+ usdcAddress: '0x7433b41C6c5e1d58D4Da99483609520255ab661B',
1764
+ usdtAddress: null,
1765
+ cctp: {
1766
+ domain: 30,
1767
+ contracts: {
1768
+ v2: {
1769
+ type: 'split',
1770
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
1771
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
1772
+ confirmations: 64,
1773
+ fastConfirmations: 1,
1774
+ },
1775
+ },
1776
+ forwarderSupported: {
1777
+ source: false,
1778
+ destination: false,
1779
+ },
1780
+ },
1781
+ kitContracts: {
1782
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
1783
+ },
1784
+ });
1785
+
1786
+ /**
1787
+ * NEAR Protocol Mainnet chain definition
1788
+ * @remarks
1789
+ * This represents the official production network for the NEAR Protocol blockchain.
1790
+ */
1791
+ defineChain({
1792
+ type: 'near',
1793
+ chain: Blockchain.NEAR,
1794
+ name: 'NEAR Protocol',
1795
+ title: 'NEAR Mainnet',
1796
+ nativeCurrency: {
1797
+ name: 'NEAR',
1798
+ symbol: 'NEAR',
1799
+ decimals: 24,
1800
+ },
1801
+ isTestnet: false,
1802
+ explorerUrl: 'https://nearblocks.io/txns/{hash}',
1803
+ rpcEndpoints: ['https://eth-rpc.mainnet.near.org'],
1804
+ eurcAddress: null,
1805
+ usdcAddress: '17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1',
1806
+ usdtAddress: 'usdt.tether-token.near',
1807
+ cctp: null,
1808
+ });
1809
+
1810
+ /**
1811
+ * NEAR Testnet chain definition
1812
+ * @remarks
1813
+ * This represents the official test network for the NEAR Protocol blockchain.
1814
+ */
1815
+ defineChain({
1816
+ type: 'near',
1817
+ chain: Blockchain.NEAR_Testnet,
1818
+ name: 'NEAR Protocol Testnet',
1819
+ title: 'NEAR Test Network',
1820
+ nativeCurrency: {
1821
+ name: 'NEAR',
1822
+ symbol: 'NEAR',
1823
+ decimals: 24,
1824
+ },
1825
+ isTestnet: true,
1826
+ explorerUrl: 'https://testnet.nearblocks.io/txns/{hash}',
1827
+ rpcEndpoints: ['https://eth-rpc.testnet.near.org'],
1828
+ eurcAddress: null,
1829
+ usdcAddress: '3e2210e1184b45b64c8a434c0a7e7b23cc04ea7eb7a6c3c32520d03d4afcb8af',
1830
+ usdtAddress: null,
1831
+ cctp: null,
1832
+ });
1833
+
1834
+ /**
1835
+ * Noble Mainnet chain definition
1836
+ * @remarks
1837
+ * This represents the official production network for the Noble blockchain.
1838
+ */
1839
+ defineChain({
1840
+ type: 'noble',
1841
+ chain: Blockchain.Noble,
1842
+ name: 'Noble',
1843
+ title: 'Noble Mainnet',
1844
+ nativeCurrency: {
1845
+ name: 'Noble USDC',
1846
+ symbol: 'USDC',
1847
+ decimals: 6,
1848
+ },
1849
+ isTestnet: false,
1850
+ explorerUrl: 'https://www.mintscan.io/noble/tx/{hash}',
1851
+ rpcEndpoints: ['https://noble-rpc.polkachu.com'],
1852
+ eurcAddress: null,
1853
+ usdcAddress: 'uusdc',
1854
+ usdtAddress: null,
1855
+ cctp: {
1856
+ domain: 4,
1857
+ contracts: {
1858
+ v1: {
1859
+ type: 'merged',
1860
+ contract: 'noble12l2w4ugfz4m6dd73yysz477jszqnfughxvkss5',
1861
+ confirmations: 1,
1862
+ },
1863
+ },
1864
+ forwarderSupported: {
1865
+ source: false,
1866
+ destination: false,
1867
+ },
1868
+ },
1869
+ });
1870
+
1871
+ /**
1872
+ * Noble Testnet chain definition
1873
+ * @remarks
1874
+ * This represents the official test network for the Noble blockchain.
1875
+ */
1876
+ defineChain({
1877
+ type: 'noble',
1878
+ chain: Blockchain.Noble_Testnet,
1879
+ name: 'Noble Testnet',
1880
+ title: 'Noble Test Network',
1881
+ nativeCurrency: {
1882
+ name: 'Noble USDC',
1883
+ symbol: 'USDC',
1884
+ decimals: 6,
1885
+ },
1886
+ isTestnet: true,
1887
+ explorerUrl: 'https://www.mintscan.io/noble-testnet/tx/{hash}',
1888
+ rpcEndpoints: ['https://noble-testnet-rpc.polkachu.com'],
1889
+ eurcAddress: null,
1890
+ usdcAddress: 'uusdc',
1891
+ usdtAddress: null,
1892
+ cctp: {
1893
+ domain: 4,
1894
+ contracts: {
1895
+ v1: {
1896
+ type: 'merged',
1897
+ contract: 'noble12l2w4ugfz4m6dd73yysz477jszqnfughxvkss5',
1898
+ confirmations: 1,
1899
+ },
1900
+ },
1901
+ forwarderSupported: {
1902
+ source: false,
1903
+ destination: false,
1904
+ },
1905
+ },
1906
+ });
1907
+
1908
+ /**
1909
+ * Optimism Mainnet chain definition
1910
+ * @remarks
1911
+ * This represents the official production network for the Optimism blockchain.
1912
+ */
1913
+ const Optimism = defineChain({
1914
+ type: 'evm',
1915
+ chain: Blockchain.Optimism,
1916
+ name: 'Optimism',
1917
+ title: 'Optimism Mainnet',
1918
+ nativeCurrency: {
1919
+ name: 'Ether',
1920
+ symbol: 'ETH',
1921
+ decimals: 18,
1922
+ },
1923
+ chainId: 10,
1924
+ isTestnet: false,
1925
+ explorerUrl: 'https://optimistic.etherscan.io/tx/{hash}',
1926
+ rpcEndpoints: ['https://mainnet.optimism.io'],
1927
+ eurcAddress: null,
1928
+ usdcAddress: '0x0b2c639c533813f4aa9d7837caf62653d097ff85',
1929
+ usdtAddress: null,
1930
+ cctp: {
1931
+ domain: 2,
1932
+ contracts: {
1933
+ v1: {
1934
+ type: 'split',
1935
+ tokenMessenger: '0x2B4069517957735bE00ceE0fadAE88a26365528f',
1936
+ messageTransmitter: '0x0a992d191deec32afe36203ad87d7d289a738f81',
1937
+ confirmations: 65,
1938
+ },
1939
+ v2: {
1940
+ type: 'split',
1941
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
1942
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
1943
+ confirmations: 65,
1944
+ fastConfirmations: 1,
1945
+ },
1946
+ },
1947
+ forwarderSupported: {
1948
+ source: true,
1949
+ destination: true,
1950
+ },
1951
+ },
1952
+ kitContracts: {
1953
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
1954
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
1955
+ },
1956
+ });
1957
+
1958
+ /**
1959
+ * Optimism Sepolia Testnet chain definition
1960
+ * @remarks
1961
+ * This represents the official test network for the Optimism blockchain on Sepolia.
1962
+ */
1963
+ const OptimismSepolia = defineChain({
1964
+ type: 'evm',
1965
+ chain: Blockchain.Optimism_Sepolia,
1966
+ name: 'Optimism Sepolia',
1967
+ title: 'Optimism Sepolia Testnet',
1968
+ nativeCurrency: {
1969
+ name: 'Sepolia Ether',
1970
+ symbol: 'ETH',
1971
+ decimals: 18,
1972
+ },
1973
+ chainId: 11155420,
1974
+ isTestnet: true,
1975
+ explorerUrl: 'https://sepolia-optimistic.etherscan.io/tx/{hash}',
1976
+ rpcEndpoints: ['https://sepolia.optimism.io'],
1977
+ eurcAddress: null,
1978
+ usdcAddress: '0x5fd84259d66Cd46123540766Be93DFE6D43130D7',
1979
+ usdtAddress: null,
1980
+ cctp: {
1981
+ domain: 2,
1982
+ contracts: {
1983
+ v1: {
1984
+ type: 'split',
1985
+ tokenMessenger: '0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5',
1986
+ messageTransmitter: '0x7865fAfC2db2093669d92c0F33AeEF291086BEFD',
1987
+ confirmations: 65,
1988
+ },
1989
+ v2: {
1990
+ type: 'split',
1991
+ tokenMessenger: '0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa',
1992
+ messageTransmitter: '0xe737e5cebeeba77efe34d4aa090756590b1ce275',
1993
+ confirmations: 65,
1994
+ fastConfirmations: 1,
1995
+ },
1996
+ },
1997
+ forwarderSupported: {
1998
+ source: true,
1999
+ destination: true,
2000
+ },
2001
+ },
2002
+ kitContracts: {
2003
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
2004
+ },
2005
+ });
2006
+
2007
+ /**
2008
+ * Plume Mainnet chain definition
2009
+ * @remarks
2010
+ * This represents the official production network for the Plume blockchain.
2011
+ * Plume is a Layer 1 blockchain specialized for DeFi and trading applications
2012
+ * with native orderbook and matching engine.
2013
+ */
2014
+ const Plume = defineChain({
2015
+ type: 'evm',
2016
+ chain: Blockchain.Plume,
2017
+ name: 'Plume',
2018
+ title: 'Plume Mainnet',
2019
+ nativeCurrency: {
2020
+ name: 'Plume',
2021
+ symbol: 'PLUME',
2022
+ decimals: 18,
2023
+ },
2024
+ chainId: 98866,
2025
+ isTestnet: false,
2026
+ explorerUrl: 'https://explorer.plume.org/tx/{hash}',
2027
+ rpcEndpoints: ['https://rpc.plume.org'],
2028
+ eurcAddress: null,
2029
+ usdcAddress: '0x222365EF19F7947e5484218551B56bb3965Aa7aF',
2030
+ usdtAddress: null,
2031
+ cctp: {
2032
+ domain: 22,
2033
+ contracts: {
2034
+ v2: {
2035
+ type: 'split',
2036
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
2037
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
2038
+ confirmations: 65,
2039
+ fastConfirmations: 1,
2040
+ },
2041
+ },
2042
+ forwarderSupported: {
2043
+ source: true,
2044
+ destination: false,
2045
+ },
2046
+ },
2047
+ kitContracts: {
2048
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
2049
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
2050
+ },
2051
+ });
2052
+
2053
+ /**
2054
+ * Plume Testnet chain definition
2055
+ * @remarks
2056
+ * This represents the official testnet for the Plume blockchain.
2057
+ * Used for development and testing purposes before deploying to mainnet.
2058
+ */
2059
+ const PlumeTestnet = defineChain({
2060
+ type: 'evm',
2061
+ chain: Blockchain.Plume_Testnet,
2062
+ name: 'Plume Testnet',
2063
+ title: 'Plume Test Network',
2064
+ nativeCurrency: {
2065
+ name: 'Plume',
2066
+ symbol: 'PLUME',
2067
+ decimals: 18,
2068
+ },
2069
+ chainId: 98867,
2070
+ isTestnet: true,
2071
+ explorerUrl: 'https://testnet-explorer.plume.org/tx/{hash}',
2072
+ rpcEndpoints: ['https://testnet-rpc.plume.org'],
2073
+ eurcAddress: null,
2074
+ usdcAddress: '0xcB5f30e335672893c7eb944B374c196392C19D18',
2075
+ usdtAddress: null,
2076
+ cctp: {
2077
+ domain: 22,
2078
+ contracts: {
2079
+ v2: {
2080
+ type: 'split',
2081
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
2082
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
2083
+ confirmations: 65,
2084
+ fastConfirmations: 1,
2085
+ },
2086
+ },
2087
+ forwarderSupported: {
2088
+ source: true,
2089
+ destination: false,
2090
+ },
2091
+ },
2092
+ kitContracts: {
2093
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
2094
+ },
2095
+ });
2096
+
2097
+ /**
2098
+ * Polkadot Asset Hub chain definition
2099
+ * @remarks
2100
+ * This represents the official asset management parachain for the Polkadot blockchain.
2101
+ */
2102
+ defineChain({
2103
+ type: 'polkadot',
2104
+ chain: Blockchain.Polkadot_Asset_Hub,
2105
+ name: 'Polkadot Asset Hub',
2106
+ title: 'Polkadot Asset Hub',
2107
+ nativeCurrency: {
2108
+ name: 'Polkadot',
2109
+ symbol: 'DOT',
2110
+ decimals: 10,
2111
+ },
2112
+ isTestnet: false,
2113
+ explorerUrl: 'https://polkadot.subscan.io/extrinsic/{hash}',
2114
+ rpcEndpoints: ['https://asset-hub-polkadot-rpc.n.dwellir.com'],
2115
+ eurcAddress: null,
2116
+ usdcAddress: '1337',
2117
+ usdtAddress: '1984',
2118
+ cctp: null,
2119
+ });
2120
+
2121
+ /**
2122
+ * Polkadot Westmint chain definition
2123
+ * @remarks
2124
+ * This represents an asset management parachain in the Polkadot ecosystem.
2125
+ */
2126
+ defineChain({
2127
+ type: 'polkadot',
2128
+ chain: Blockchain.Polkadot_Westmint,
2129
+ name: 'Polkadot Westmint',
2130
+ title: 'Polkadot Westmint',
2131
+ nativeCurrency: {
2132
+ name: 'Polkadot',
2133
+ symbol: 'DOT',
2134
+ decimals: 10,
2135
+ },
2136
+ isTestnet: false,
2137
+ explorerUrl: 'https://assethub-polkadot.subscan.io/extrinsic/{hash}',
2138
+ rpcEndpoints: ['https://westmint-rpc.polkadot.io'],
2139
+ eurcAddress: null,
2140
+ usdcAddress: 'Asset ID 31337',
2141
+ usdtAddress: null,
2142
+ cctp: null,
2143
+ });
2144
+
2145
+ /**
2146
+ * Polygon Mainnet chain definition
2147
+ * @remarks
2148
+ * This represents the official production network for the Polygon blockchain.
2149
+ */
2150
+ const Polygon = defineChain({
2151
+ type: 'evm',
2152
+ chain: Blockchain.Polygon,
2153
+ name: 'Polygon',
2154
+ title: 'Polygon Mainnet',
2155
+ nativeCurrency: {
2156
+ name: 'POL',
2157
+ symbol: 'POL',
2158
+ decimals: 18,
2159
+ },
2160
+ chainId: 137,
2161
+ isTestnet: false,
2162
+ explorerUrl: 'https://polygonscan.com/tx/{hash}',
2163
+ rpcEndpoints: ['https://polygon.publicnode.com', 'https://polygon.drpc.org'],
2164
+ eurcAddress: null,
2165
+ usdcAddress: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359',
2166
+ usdtAddress: null,
2167
+ cctp: {
2168
+ domain: 7,
2169
+ contracts: {
2170
+ v1: {
2171
+ type: 'split',
2172
+ tokenMessenger: '0x9daF8c91AEFAE50b9c0E69629D3F6Ca40cA3B3FE',
2173
+ messageTransmitter: '0xF3be9355363857F3e001be68856A2f96b4C39Ba9',
2174
+ confirmations: 200,
2175
+ },
2176
+ v2: {
2177
+ type: 'split',
2178
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
2179
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
2180
+ confirmations: 33,
2181
+ fastConfirmations: 13,
2182
+ },
2183
+ },
2184
+ forwarderSupported: {
2185
+ source: true,
2186
+ destination: true,
2187
+ },
2188
+ },
2189
+ kitContracts: {
2190
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
2191
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
2192
+ },
2193
+ });
2194
+
2195
+ /**
2196
+ * Polygon Amoy Testnet chain definition
2197
+ * @remarks
2198
+ * This represents the official test network for the Polygon blockchain.
2199
+ */
2200
+ const PolygonAmoy = defineChain({
2201
+ type: 'evm',
2202
+ chain: Blockchain.Polygon_Amoy_Testnet,
2203
+ name: 'Polygon Amoy',
2204
+ title: 'Polygon Amoy Testnet',
2205
+ nativeCurrency: {
2206
+ name: 'POL',
2207
+ symbol: 'POL',
2208
+ decimals: 18,
2209
+ },
2210
+ chainId: 80002,
2211
+ isTestnet: true,
2212
+ explorerUrl: 'https://amoy.polygonscan.com/tx/{hash}',
2213
+ rpcEndpoints: ['https://rpc-amoy.polygon.technology'],
2214
+ eurcAddress: null,
2215
+ usdcAddress: '0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582',
2216
+ usdtAddress: null,
2217
+ cctp: {
2218
+ domain: 7,
2219
+ contracts: {
2220
+ v1: {
2221
+ type: 'split',
2222
+ tokenMessenger: '0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5',
2223
+ messageTransmitter: '0x7865fAfC2db2093669d92c0F33AeEF291086BEFD',
2224
+ confirmations: 200,
2225
+ },
2226
+ v2: {
2227
+ type: 'split',
2228
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
2229
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
2230
+ confirmations: 33,
2231
+ fastConfirmations: 13,
2232
+ },
2233
+ },
2234
+ forwarderSupported: {
2235
+ source: true,
2236
+ destination: true,
2237
+ },
2238
+ },
2239
+ kitContracts: {
2240
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
2241
+ },
2242
+ });
2243
+
2244
+ /**
2245
+ * Sei Mainnet chain definition
2246
+ * @remarks
2247
+ * This represents the official production network for the Sei blockchain.
2248
+ * Sei is a Layer 1 blockchain specialized for DeFi and trading applications
2249
+ * with native orderbook and matching engine.
2250
+ */
2251
+ const Sei = defineChain({
2252
+ type: 'evm',
2253
+ chain: Blockchain.Sei,
2254
+ name: 'Sei',
2255
+ title: 'Sei Mainnet',
2256
+ nativeCurrency: {
2257
+ name: 'Sei',
2258
+ symbol: 'SEI',
2259
+ decimals: 18,
2260
+ },
2261
+ chainId: 1329,
2262
+ isTestnet: false,
2263
+ explorerUrl: 'https://seitrace.com/tx/{hash}?chain=pacific-1',
2264
+ rpcEndpoints: ['https://evm-rpc.sei-apis.com'],
2265
+ eurcAddress: null,
2266
+ usdcAddress: '0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392',
2267
+ usdtAddress: null,
2268
+ cctp: {
2269
+ domain: 16,
2270
+ contracts: {
2271
+ v2: {
2272
+ type: 'split',
2273
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
2274
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
2275
+ confirmations: 1,
2276
+ fastConfirmations: 1,
2277
+ },
2278
+ },
2279
+ forwarderSupported: {
2280
+ source: true,
2281
+ destination: true,
2282
+ },
2283
+ },
2284
+ kitContracts: {
2285
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
2286
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
2287
+ },
2288
+ });
2289
+
2290
+ /**
2291
+ * Sei Testnet chain definition
2292
+ * @remarks
2293
+ * This represents the official testnet for the Sei blockchain.
2294
+ * Used for development and testing purposes before deploying to mainnet.
2295
+ */
2296
+ const SeiTestnet = defineChain({
2297
+ type: 'evm',
2298
+ chain: Blockchain.Sei_Testnet,
2299
+ name: 'Sei Testnet',
2300
+ title: 'Sei Test Network',
2301
+ nativeCurrency: {
2302
+ name: 'Sei',
2303
+ symbol: 'SEI',
2304
+ decimals: 18,
2305
+ },
2306
+ chainId: 1328,
2307
+ isTestnet: true,
2308
+ explorerUrl: 'https://seitrace.com/tx/{hash}?chain=atlantic-2',
2309
+ rpcEndpoints: ['https://evm-rpc-testnet.sei-apis.com'],
2310
+ eurcAddress: null,
2311
+ usdcAddress: '0x4fCF1784B31630811181f670Aea7A7bEF803eaED',
2312
+ usdtAddress: null,
2313
+ cctp: {
2314
+ domain: 16,
2315
+ contracts: {
2316
+ v2: {
2317
+ type: 'split',
2318
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
2319
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
2320
+ confirmations: 1,
2321
+ fastConfirmations: 1,
2322
+ },
2323
+ },
2324
+ forwarderSupported: {
2325
+ source: true,
2326
+ destination: true,
2327
+ },
2328
+ },
2329
+ kitContracts: {
2330
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
2331
+ },
2332
+ });
2333
+
2334
+ /**
2335
+ * Sonic Mainnet chain definition
2336
+ * @remarks
2337
+ * This represents the official production network for the Sonic blockchain.
2338
+ */
2339
+ const Sonic = defineChain({
2340
+ type: 'evm',
2341
+ chain: Blockchain.Sonic,
2342
+ name: 'Sonic',
2343
+ title: 'Sonic Mainnet',
2344
+ nativeCurrency: {
2345
+ name: 'Sonic',
2346
+ symbol: 'S',
2347
+ decimals: 18,
2348
+ },
2349
+ chainId: 146,
2350
+ isTestnet: false,
2351
+ explorerUrl: 'https://sonicscan.org/tx/{hash}',
2352
+ rpcEndpoints: ['https://rpc.soniclabs.com'],
2353
+ eurcAddress: null,
2354
+ usdcAddress: '0x29219dd400f2Bf60E5a23d13Be72B486D4038894',
2355
+ usdtAddress: null,
2356
+ cctp: {
2357
+ domain: 13,
2358
+ contracts: {
2359
+ v2: {
2360
+ type: 'split',
2361
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
2362
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
2363
+ confirmations: 1,
2364
+ fastConfirmations: 1,
2365
+ },
2366
+ },
2367
+ forwarderSupported: {
2368
+ source: true,
2369
+ destination: true,
2370
+ },
2371
+ },
2372
+ kitContracts: {
2373
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
2374
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
2375
+ },
2376
+ });
2377
+
2378
+ /**
2379
+ * Sonic Testnet chain definition
2380
+ * @remarks
2381
+ * This represents the official test network for the Sonic blockchain.
2382
+ */
2383
+ const SonicTestnet = defineChain({
2384
+ type: 'evm',
2385
+ chain: Blockchain.Sonic_Testnet,
2386
+ name: 'Sonic Testnet',
2387
+ title: 'Sonic Testnet',
2388
+ nativeCurrency: {
2389
+ name: 'Sonic',
2390
+ symbol: 'S',
2391
+ decimals: 18,
2392
+ },
2393
+ chainId: 14601,
2394
+ isTestnet: true,
2395
+ explorerUrl: 'https://testnet.sonicscan.org/tx/{hash}',
2396
+ rpcEndpoints: ['https://rpc.testnet.soniclabs.com'],
2397
+ eurcAddress: null,
2398
+ usdcAddress: '0x0BA304580ee7c9a980CF72e55f5Ed2E9fd30Bc51',
2399
+ usdtAddress: null,
2400
+ cctp: {
2401
+ domain: 13,
2402
+ contracts: {
2403
+ v2: {
2404
+ type: 'split',
2405
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
2406
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
2407
+ confirmations: 1,
2408
+ fastConfirmations: 1,
2409
+ },
2410
+ },
2411
+ forwarderSupported: {
2412
+ source: true,
2413
+ destination: true,
2414
+ },
2415
+ },
2416
+ kitContracts: {
2417
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
2418
+ },
2419
+ });
2420
+
2421
+ /**
2422
+ * Solana Mainnet chain definition
2423
+ * @remarks
2424
+ * This represents the official production network for the Solana blockchain.
2425
+ */
2426
+ const Solana = defineChain({
2427
+ type: 'solana',
2428
+ chain: Blockchain.Solana,
2429
+ name: 'Solana',
2430
+ title: 'Solana Mainnet',
2431
+ nativeCurrency: {
2432
+ name: 'Solana',
2433
+ symbol: 'SOL',
2434
+ decimals: 9,
2435
+ },
2436
+ isTestnet: false,
2437
+ explorerUrl: 'https://solscan.io/tx/{hash}',
2438
+ rpcEndpoints: ['https://api.mainnet-beta.solana.com'],
2439
+ eurcAddress: 'HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr',
2440
+ usdcAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
2441
+ usdtAddress: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
2442
+ cctp: {
2443
+ domain: 5,
2444
+ contracts: {
2445
+ v1: {
2446
+ type: 'split',
2447
+ tokenMessenger: 'CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3',
2448
+ messageTransmitter: 'CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd',
2449
+ confirmations: 32,
2450
+ },
2451
+ v2: {
2452
+ type: 'split',
2453
+ tokenMessenger: 'CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe',
2454
+ messageTransmitter: 'CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC',
2455
+ confirmations: 32,
2456
+ fastConfirmations: 3,
2457
+ },
2458
+ },
2459
+ forwarderSupported: {
2460
+ source: true,
2461
+ destination: false,
2462
+ },
2463
+ },
2464
+ kitContracts: {
2465
+ bridge: 'DFaauJEjmiHkPs1JG89A4p95hDWi9m9SAEERY1LQJiC3',
2466
+ },
2467
+ });
2468
+
2469
+ /**
2470
+ * Solana Devnet chain definition
2471
+ * @remarks
2472
+ * This represents the development test network for the Solana blockchain.
2473
+ */
2474
+ const SolanaDevnet = defineChain({
2475
+ type: 'solana',
2476
+ chain: Blockchain.Solana_Devnet,
2477
+ name: 'Solana Devnet',
2478
+ title: 'Solana Development Network',
2479
+ nativeCurrency: {
2480
+ name: 'Solana',
2481
+ symbol: 'SOL',
2482
+ decimals: 9,
2483
+ },
2484
+ isTestnet: true,
2485
+ explorerUrl: 'https://solscan.io/tx/{hash}?cluster=devnet',
2486
+ eurcAddress: 'HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr',
2487
+ usdcAddress: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
2488
+ usdtAddress: null,
2489
+ cctp: {
2490
+ domain: 5,
2491
+ contracts: {
2492
+ v1: {
2493
+ type: 'split',
2494
+ tokenMessenger: 'CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3',
2495
+ messageTransmitter: 'CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd',
2496
+ confirmations: 32,
2497
+ },
2498
+ v2: {
2499
+ type: 'split',
2500
+ tokenMessenger: 'CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe',
2501
+ messageTransmitter: 'CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC',
2502
+ confirmations: 32,
2503
+ fastConfirmations: 3,
2504
+ },
2505
+ },
2506
+ forwarderSupported: {
2507
+ source: true,
2508
+ destination: false,
2509
+ },
2510
+ },
2511
+ kitContracts: {
2512
+ bridge: 'DFaauJEjmiHkPs1JG89A4p95hDWi9m9SAEERY1LQJiC3',
2513
+ },
2514
+ rpcEndpoints: ['https://api.devnet.solana.com'],
2515
+ });
2516
+
2517
+ /**
2518
+ * Stellar Mainnet chain definition
2519
+ * @remarks
2520
+ * This represents the official production network for the Stellar blockchain.
2521
+ */
2522
+ defineChain({
2523
+ type: 'stellar',
2524
+ chain: Blockchain.Stellar,
2525
+ name: 'Stellar',
2526
+ title: 'Stellar Mainnet',
2527
+ nativeCurrency: {
2528
+ name: 'Stellar Lumens',
2529
+ symbol: 'XLM',
2530
+ decimals: 7,
2531
+ },
2532
+ isTestnet: false,
2533
+ explorerUrl: 'https://stellar.expert/explorer/public/tx/{hash}',
2534
+ rpcEndpoints: ['https://horizon.stellar.org'],
2535
+ eurcAddress: 'EURC-GDHU6WRG4IEQXM5NZ4BMPKOXHW76MZM4Y2IEMFDVXBSDP6SJY4ITNPP2',
2536
+ usdcAddress: 'USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',
2537
+ usdtAddress: null,
2538
+ cctp: null,
2539
+ });
2540
+
2541
+ /**
2542
+ * Stellar Testnet chain definition
2543
+ * @remarks
2544
+ * This represents the official test network for the Stellar blockchain.
2545
+ */
2546
+ defineChain({
2547
+ type: 'stellar',
2548
+ chain: Blockchain.Stellar_Testnet,
2549
+ name: 'Stellar Testnet',
2550
+ title: 'Stellar Test Network',
2551
+ nativeCurrency: {
2552
+ name: 'Stellar Lumens',
2553
+ symbol: 'XLM',
2554
+ decimals: 7,
2555
+ },
2556
+ isTestnet: true,
2557
+ explorerUrl: 'https://stellar.expert/explorer/testnet/tx/{hash}',
2558
+ rpcEndpoints: ['https://horizon-testnet.stellar.org'],
2559
+ eurcAddress: 'EURC-GB3Q6QDZYTHWT7E5PVS3W7FUT5GVAFC5KSZFFLPU25GO7VTC3NM2ZTVO',
2560
+ usdcAddress: 'USDC-GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5',
2561
+ usdtAddress: null,
2562
+ cctp: null,
2563
+ });
2564
+
2565
+ /**
2566
+ * Sui Mainnet chain definition
2567
+ * @remarks
2568
+ * This represents the official production network for the Sui blockchain.
2569
+ */
2570
+ defineChain({
2571
+ type: 'sui',
2572
+ chain: Blockchain.Sui,
2573
+ name: 'Sui',
2574
+ title: 'Sui Mainnet',
2575
+ nativeCurrency: {
2576
+ name: 'Sui',
2577
+ symbol: 'SUI',
2578
+ decimals: 9,
2579
+ },
2580
+ isTestnet: false,
2581
+ explorerUrl: 'https://suiscan.xyz/mainnet/tx/{hash}',
2582
+ rpcEndpoints: ['https://fullnode.mainnet.sui.io'],
2583
+ eurcAddress: null,
2584
+ usdcAddress: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC',
2585
+ usdtAddress: null,
2586
+ cctp: {
2587
+ domain: 8,
2588
+ contracts: {
2589
+ v1: {
2590
+ type: 'split',
2591
+ tokenMessenger: '0x2aa6c5d56376c371f88a6cc42e852824994993cb9bab8d3e6450cbe3cb32b94e',
2592
+ messageTransmitter: '0x08d87d37ba49e785dde270a83f8e979605b03dc552b5548f26fdf2f49bf7ed1b',
2593
+ confirmations: 1,
2594
+ },
2595
+ },
2596
+ forwarderSupported: {
2597
+ source: false,
2598
+ destination: false,
2599
+ },
2600
+ },
2601
+ });
2602
+
2603
+ /**
2604
+ * Sui Testnet chain definition
2605
+ * @remarks
2606
+ * This represents the official test network for the Sui blockchain.
2607
+ */
2608
+ defineChain({
2609
+ type: 'sui',
2610
+ chain: Blockchain.Sui_Testnet,
2611
+ name: 'Sui Testnet',
2612
+ title: 'Sui Test Network',
2613
+ nativeCurrency: {
2614
+ name: 'Sui',
2615
+ symbol: 'SUI',
2616
+ decimals: 9,
2617
+ },
2618
+ isTestnet: true,
2619
+ explorerUrl: 'https://suiscan.xyz/testnet/tx/{hash}',
2620
+ rpcEndpoints: ['https://fullnode.testnet.sui.io'],
2621
+ eurcAddress: null,
2622
+ usdcAddress: '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC',
2623
+ usdtAddress: null,
2624
+ cctp: {
2625
+ domain: 8,
2626
+ contracts: {
2627
+ v1: {
2628
+ type: 'split',
2629
+ tokenMessenger: '0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb',
2630
+ messageTransmitter: '0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5',
2631
+ confirmations: 1,
2632
+ },
2633
+ },
2634
+ forwarderSupported: {
2635
+ source: false,
2636
+ destination: false,
2637
+ },
2638
+ },
2639
+ });
2640
+
2641
+ /**
2642
+ * Unichain Mainnet chain definition
2643
+ * @remarks
2644
+ * This represents the official production network for the Unichain blockchain.
2645
+ */
2646
+ const Unichain = defineChain({
2647
+ type: 'evm',
2648
+ chain: Blockchain.Unichain,
2649
+ name: 'Unichain',
2650
+ title: 'Unichain Mainnet',
2651
+ nativeCurrency: {
2652
+ name: 'Uni',
2653
+ symbol: 'UNI',
2654
+ decimals: 18,
2655
+ },
2656
+ chainId: 130,
2657
+ isTestnet: false,
2658
+ explorerUrl: 'https://unichain.blockscout.com/tx/{hash}',
2659
+ rpcEndpoints: ['https://mainnet.unichain.org'],
2660
+ eurcAddress: null,
2661
+ usdcAddress: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
2662
+ usdtAddress: null,
2663
+ cctp: {
2664
+ domain: 10,
2665
+ contracts: {
2666
+ v1: {
2667
+ type: 'split',
2668
+ tokenMessenger: '0x4e744b28E787c3aD0e810eD65A24461D4ac5a762',
2669
+ messageTransmitter: '0x353bE9E2E38AB1D19104534e4edC21c643Df86f4',
2670
+ confirmations: 65,
2671
+ },
2672
+ v2: {
2673
+ type: 'split',
2674
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
2675
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
2676
+ confirmations: 65,
2677
+ fastConfirmations: 1,
2678
+ },
2679
+ },
2680
+ forwarderSupported: {
2681
+ source: true,
2682
+ destination: true,
2683
+ },
2684
+ },
2685
+ kitContracts: {
2686
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
2687
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
2688
+ },
2689
+ });
2690
+
2691
+ /**
2692
+ * Unichain Sepolia Testnet chain definition
2693
+ * @remarks
2694
+ * This represents the official test network for the Unichain blockchain.
2695
+ */
2696
+ const UnichainSepolia = defineChain({
2697
+ type: 'evm',
2698
+ chain: Blockchain.Unichain_Sepolia,
2699
+ name: 'Unichain Sepolia',
2700
+ title: 'Unichain Sepolia Testnet',
2701
+ nativeCurrency: {
2702
+ name: 'Sepolia Uni',
2703
+ symbol: 'UNI',
2704
+ decimals: 18,
2705
+ },
2706
+ chainId: 1301,
2707
+ isTestnet: true,
2708
+ explorerUrl: 'https://unichain-sepolia.blockscout.com/tx/{hash}',
2709
+ rpcEndpoints: ['https://sepolia.unichain.org'],
2710
+ eurcAddress: null,
2711
+ usdcAddress: '0x31d0220469e10c4E71834a79b1f276d740d3768F',
2712
+ usdtAddress: null,
2713
+ cctp: {
2714
+ domain: 10,
2715
+ contracts: {
2716
+ v1: {
2717
+ type: 'split',
2718
+ tokenMessenger: '0x8ed94B8dAd2Dc5453862ea5e316A8e71AAed9782',
2719
+ messageTransmitter: '0xbc498c326533d675cf571B90A2Ced265ACb7d086',
2720
+ confirmations: 65,
2721
+ },
2722
+ v2: {
2723
+ type: 'split',
2724
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
2725
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
2726
+ confirmations: 65,
2727
+ fastConfirmations: 1,
2728
+ },
2729
+ },
2730
+ forwarderSupported: {
2731
+ source: true,
2732
+ destination: true,
2733
+ },
2734
+ },
2735
+ kitContracts: {
2736
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
2737
+ },
2738
+ });
2739
+
2740
+ /**
2741
+ * World Chain chain definition
2742
+ * @remarks
2743
+ * This represents the main network for the World Chain blockchain.
2744
+ */
2745
+ const WorldChain = defineChain({
2746
+ type: 'evm',
2747
+ chain: Blockchain.World_Chain,
2748
+ name: 'World Chain',
2749
+ title: 'World Chain',
2750
+ nativeCurrency: {
2751
+ name: 'Ether',
2752
+ symbol: 'ETH',
2753
+ decimals: 18,
2754
+ },
2755
+ chainId: 480,
2756
+ isTestnet: false,
2757
+ explorerUrl: 'https://worldscan.org/tx/{hash}',
2758
+ rpcEndpoints: ['https://worldchain-mainnet.g.alchemy.com/public'],
2759
+ eurcAddress: null,
2760
+ usdcAddress: '0x79A02482A880bCE3F13e09Da970dC34db4CD24d1',
2761
+ usdtAddress: null,
2762
+ cctp: {
2763
+ domain: 14,
2764
+ contracts: {
2765
+ v2: {
2766
+ type: 'split',
2767
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cF5d',
2768
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
2769
+ confirmations: 65,
2770
+ fastConfirmations: 1,
2771
+ },
2772
+ },
2773
+ forwarderSupported: {
2774
+ source: true,
2775
+ destination: true,
2776
+ },
2777
+ },
2778
+ kitContracts: {
2779
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
2780
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
2781
+ },
2782
+ });
2783
+
2784
+ /**
2785
+ * World Chain Sepolia chain definition
2786
+ * @remarks
2787
+ * This represents the test network for the World Chain blockchain.
2788
+ */
2789
+ const WorldChainSepolia = defineChain({
2790
+ type: 'evm',
2791
+ chain: Blockchain.World_Chain_Sepolia,
2792
+ name: 'World Chain Sepolia',
2793
+ title: 'World Chain Sepolia',
2794
+ nativeCurrency: {
2795
+ name: 'Ether',
2796
+ symbol: 'ETH',
2797
+ decimals: 18,
2798
+ },
2799
+ chainId: 4801,
2800
+ isTestnet: true,
2801
+ explorerUrl: 'https://sepolia.worldscan.org/tx/{hash}',
2802
+ rpcEndpoints: [
2803
+ 'https://worldchain-sepolia.drpc.org',
2804
+ 'https://worldchain-sepolia.g.alchemy.com/public',
2805
+ ],
2806
+ eurcAddress: null,
2807
+ usdcAddress: '0x66145f38cBAC35Ca6F1Dfb4914dF98F1614aeA88',
2808
+ usdtAddress: null,
2809
+ cctp: {
2810
+ domain: 14,
2811
+ contracts: {
2812
+ v2: {
2813
+ type: 'split',
2814
+ tokenMessenger: '0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa',
2815
+ messageTransmitter: '0xe737e5cebeeba77efe34d4aa090756590b1ce275',
2816
+ confirmations: 65,
2817
+ fastConfirmations: 1,
2818
+ },
2819
+ },
2820
+ forwarderSupported: {
2821
+ source: true,
2822
+ destination: true,
2823
+ },
2824
+ },
2825
+ kitContracts: {
2826
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
2827
+ },
2828
+ });
2829
+
2830
+ /**
2831
+ * XDC Mainnet chain definition
2832
+ * @remarks
2833
+ * This represents the official production network for the XDC blockchain.
2834
+ * XDC is a Layer 1 blockchain specialized for DeFi and trading applications
2835
+ * with native orderbook and matching engine.
2836
+ */
2837
+ const XDC = defineChain({
2838
+ type: 'evm',
2839
+ chain: Blockchain.XDC,
2840
+ name: 'XDC',
2841
+ title: 'XDC Mainnet',
2842
+ nativeCurrency: {
2843
+ name: 'XDC',
2844
+ symbol: 'XDC',
2845
+ decimals: 18,
2846
+ },
2847
+ chainId: 50,
2848
+ isTestnet: false,
2849
+ explorerUrl: 'https://xdcscan.io/tx/{hash}',
2850
+ rpcEndpoints: ['https://erpc.xdcrpc.com', 'https://erpc.xinfin.network'],
2851
+ eurcAddress: null,
2852
+ usdcAddress: '0xfA2958CB79b0491CC627c1557F441eF849Ca8eb1',
2853
+ usdtAddress: null,
2854
+ cctp: {
2855
+ domain: 18,
2856
+ contracts: {
2857
+ v2: {
2858
+ type: 'split',
2859
+ tokenMessenger: '0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d',
2860
+ messageTransmitter: '0x81D40F21F12A8F0E3252Bccb954D722d4c464B64',
2861
+ confirmations: 3,
2862
+ fastConfirmations: 3,
2863
+ },
2864
+ },
2865
+ forwarderSupported: {
2866
+ source: true,
2867
+ destination: false,
2868
+ },
2869
+ },
2870
+ kitContracts: {
2871
+ bridge: BRIDGE_CONTRACT_EVM_MAINNET,
2872
+ adapter: ADAPTER_CONTRACT_EVM_MAINNET,
2873
+ },
2874
+ });
2875
+
2876
+ /**
2877
+ * XDC Apothem Testnet chain definition
2878
+ * @remarks
2879
+ * This represents the official test network for the XDC Network, known as Apothem.
2880
+ */
2881
+ const XDCApothem = defineChain({
2882
+ type: 'evm',
2883
+ chain: Blockchain.XDC_Apothem,
2884
+ name: 'Apothem Network',
2885
+ title: 'Apothem Network',
2886
+ nativeCurrency: {
2887
+ name: 'TXDC',
2888
+ symbol: 'TXDC',
2889
+ decimals: 18,
2890
+ },
2891
+ chainId: 51,
2892
+ isTestnet: true,
2893
+ explorerUrl: 'https://testnet.xdcscan.com/tx/{hash}',
2894
+ rpcEndpoints: ['https://erpc.apothem.network'],
2895
+ eurcAddress: null,
2896
+ usdcAddress: '0xb5AB69F7bBada22B28e79C8FFAECe55eF1c771D4',
2897
+ usdtAddress: null,
2898
+ cctp: {
2899
+ domain: 18,
2900
+ contracts: {
2901
+ v2: {
2902
+ type: 'split',
2903
+ tokenMessenger: '0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA',
2904
+ messageTransmitter: '0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275',
2905
+ confirmations: 3,
2906
+ fastConfirmations: 1,
2907
+ },
2908
+ },
2909
+ forwarderSupported: {
2910
+ source: true,
2911
+ destination: false,
2912
+ },
2913
+ },
2914
+ kitContracts: {
2915
+ bridge: BRIDGE_CONTRACT_EVM_TESTNET,
2916
+ },
2917
+ });
2918
+
2919
+ /**
2920
+ * ZKSync Era Mainnet chain definition
2921
+ * @remarks
2922
+ * This represents the official production network for the ZKSync Era blockchain.
2923
+ */
2924
+ defineChain({
2925
+ type: 'evm',
2926
+ chain: Blockchain.ZKSync_Era,
2927
+ name: 'ZKSync Era',
2928
+ title: 'ZKSync Era Mainnet',
2929
+ nativeCurrency: {
2930
+ name: 'Ether',
2931
+ symbol: 'ETH',
2932
+ decimals: 18,
2933
+ },
2934
+ chainId: 324,
2935
+ isTestnet: false,
2936
+ explorerUrl: 'https://explorer.zksync.io/tx/{hash}',
2937
+ rpcEndpoints: ['https://mainnet.era.zksync.io'],
2938
+ eurcAddress: null,
2939
+ usdcAddress: '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4',
2940
+ usdtAddress: null,
2941
+ cctp: null,
2942
+ });
2943
+
2944
+ /**
2945
+ * ZKSync Era Sepolia Testnet chain definition
2946
+ * @remarks
2947
+ * This represents the official test network for the ZKSync Era blockchain on Sepolia.
2948
+ */
2949
+ defineChain({
2950
+ type: 'evm',
2951
+ chain: Blockchain.ZKSync_Sepolia,
2952
+ name: 'ZKSync Era Sepolia',
2953
+ title: 'ZKSync Era Sepolia Testnet',
2954
+ nativeCurrency: {
2955
+ name: 'Sepolia Ether',
2956
+ symbol: 'ETH',
2957
+ decimals: 18,
2958
+ },
2959
+ chainId: 300,
2960
+ isTestnet: true,
2961
+ explorerUrl: 'https://sepolia.explorer.zksync.io/tx/{hash}',
2962
+ rpcEndpoints: ['https://sepolia.era.zksync.dev'],
2963
+ eurcAddress: null,
2964
+ usdcAddress: '0xAe045DE5638162fa134807Cb558E15A3F5A7F853',
2965
+ usdtAddress: null,
2966
+ cctp: null,
2967
+ });
2968
+
2969
+ /**
2970
+ * Base schema for common chain definition properties.
2971
+ * This contains all properties shared between EVM and non-EVM chains.
2972
+ */
2973
+ const baseChainDefinitionSchema = zod.z.object({
2974
+ chain: zod.z.nativeEnum(Blockchain, {
2975
+ required_error: 'Chain enum is required. Please provide a valid Blockchain enum value.',
2976
+ invalid_type_error: 'Chain must be a valid Blockchain enum value.',
2977
+ }),
2978
+ name: zod.z.string({
2979
+ required_error: 'Chain name is required. Please provide a valid chain name.',
2980
+ invalid_type_error: 'Chain name must be a string.',
2981
+ }),
2982
+ title: zod.z.string().optional(),
2983
+ nativeCurrency: zod.z.object({
2984
+ name: zod.z.string(),
2985
+ symbol: zod.z.string(),
2986
+ decimals: zod.z.number(),
2987
+ }),
2988
+ isTestnet: zod.z.boolean({
2989
+ required_error: 'isTestnet is required. Please specify whether this is a testnet.',
2990
+ invalid_type_error: 'isTestnet must be a boolean.',
2991
+ }),
2992
+ explorerUrl: zod.z.string({
2993
+ required_error: 'Explorer URL is required. Please provide a valid explorer URL.',
2994
+ invalid_type_error: 'Explorer URL must be a string.',
2995
+ }),
2996
+ rpcEndpoints: zod.z.array(zod.z.string()),
2997
+ eurcAddress: zod.z.string().nullable(),
2998
+ usdcAddress: zod.z.string().nullable(),
2999
+ usdtAddress: zod.z.string().nullable(),
3000
+ cctp: zod.z.any().nullable(), // We'll accept any CCTP config structure
3001
+ kitContracts: zod.z
3002
+ .object({
3003
+ bridge: zod.z.string().optional(),
3004
+ adapter: zod.z.string().optional(),
3005
+ })
3006
+ .optional(),
3007
+ });
3008
+ /**
3009
+ * Zod schema for validating EVM chain definitions specifically.
3010
+ * This schema extends the base schema with EVM-specific properties.
3011
+ *
3012
+ * @example
3013
+ * ```typescript
3014
+ * import { evmChainDefinitionSchema } from '@core/chains/validation'
3015
+ * import { Blockchain } from '@core/chains'
3016
+ *
3017
+ * const ethereumChain = {
3018
+ * type: 'evm',
3019
+ * chain: Blockchain.Ethereum,
3020
+ * name: 'Ethereum',
3021
+ * chainId: 1,
3022
+ * nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
3023
+ * isTestnet: false,
3024
+ * explorerUrl: 'https://etherscan.io/tx/{hash}',
3025
+ * usdcAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
3026
+ * eurcAddress: null,
3027
+ * cctp: null
3028
+ * }
3029
+ *
3030
+ * const result = evmChainDefinitionSchema.safeParse(ethereumChain)
3031
+ * if (result.success) {
3032
+ * console.log('EVM chain definition is valid')
3033
+ * } else {
3034
+ * console.error('Validation failed:', result.error)
3035
+ * }
3036
+ * ```
3037
+ */
3038
+ const evmChainDefinitionSchema = baseChainDefinitionSchema
3039
+ .extend({
3040
+ type: zod.z.literal('evm'),
3041
+ chainId: zod.z.number({
3042
+ required_error: 'EVM chains must have a chainId. Please provide a valid EVM chain ID.',
3043
+ invalid_type_error: 'EVM chain ID must be a number.',
3044
+ }),
3045
+ })
3046
+ .strict(); //// Reject any additional properties not defined in the schema
3047
+ /**
3048
+ * Zod schema for validating non-EVM chain definitions.
3049
+ * This schema extends the base schema with non-EVM specific properties.
3050
+ */
3051
+ const nonEvmChainDefinitionSchema = baseChainDefinitionSchema
3052
+ .extend({
3053
+ type: zod.z.enum([
3054
+ 'algorand',
3055
+ 'avalanche',
3056
+ 'solana',
3057
+ 'aptos',
3058
+ 'near',
3059
+ 'stellar',
3060
+ 'sui',
3061
+ 'hedera',
3062
+ 'noble',
3063
+ 'polkadot',
3064
+ ]),
3065
+ })
3066
+ .strict(); // Reject any additional properties not defined in the schema
3067
+ /**
3068
+ * Discriminated union schema for all chain definitions.
3069
+ * This schema validates different chain types based on their 'type' field.
3070
+ *
3071
+ * @example
3072
+ * ```typescript
3073
+ * import { chainDefinitionSchema } from '@core/chains/validation'
3074
+ * import { Blockchain } from '@core/chains'
3075
+ *
3076
+ * // EVM chain
3077
+ * chainDefinitionSchema.parse({
3078
+ * type: 'evm',
3079
+ * chain: Blockchain.Ethereum,
3080
+ * chainId: 1,
3081
+ * // ... other properties
3082
+ * })
3083
+ *
3084
+ * // Non-EVM chain
3085
+ * chainDefinitionSchema.parse({
3086
+ * type: 'solana',
3087
+ * chain: Blockchain.Solana,
3088
+ * // ... other properties (no chainId)
3089
+ * })
3090
+ * ```
3091
+ */
3092
+ const chainDefinitionSchema = zod.z.discriminatedUnion('type', [
3093
+ evmChainDefinitionSchema,
3094
+ nonEvmChainDefinitionSchema,
3095
+ ]);
3096
+ /**
3097
+ * Zod schema for validating chain identifiers.
3098
+ * This schema accepts either a string blockchain identifier, a Blockchain enum value,
3099
+ * or a full ChainDefinition object.
3100
+ *
3101
+ * @example
3102
+ * ```typescript
3103
+ * import { chainIdentifierSchema } from '@core/chains/validation'
3104
+ * import { Blockchain, Ethereum } from '@core/chains'
3105
+ *
3106
+ * // All of these are valid:
3107
+ * chainIdentifierSchema.parse('Ethereum')
3108
+ * chainIdentifierSchema.parse(Blockchain.Ethereum)
3109
+ * chainIdentifierSchema.parse(Ethereum)
3110
+ * ```
3111
+ */
3112
+ zod.z.union([
3113
+ zod.z
3114
+ .string()
3115
+ .refine((val) => val in Blockchain, 'Must be a valid Blockchain enum value as string'),
3116
+ zod.z.nativeEnum(Blockchain),
3117
+ chainDefinitionSchema,
3118
+ ]);
3119
+ /**
3120
+ * Zod schema for validating swap-specific chain identifiers.
3121
+ *
3122
+ * Validates chains based on:
3123
+ * - CCTPv2 support (adapter contract deployed)
3124
+ * - Mainnet only (no testnets)
3125
+ * - At least one supported token available
3126
+ *
3127
+ */
3128
+ zod.z.union([
3129
+ // String blockchain identifier (accepts SwapChain enum values)
3130
+ zod.z.string().refine((val) => val in SwapChain, (val) => ({
3131
+ message: `"${val}" is not a supported swap chain. ` +
3132
+ `Supported chains: ${Object.values(SwapChain).join(', ')}`,
3133
+ })),
3134
+ // SwapChain enum
3135
+ zod.z.nativeEnum(SwapChain),
3136
+ // ChainDefinition object (checks if chain.chain is in SwapChain)
3137
+ chainDefinitionSchema.refine((chain) => chain.chain in SwapChain, (chain) => ({
3138
+ message: `"${chain.chain}" is not a supported swap chain. ` +
3139
+ `Supported chains: ${Object.values(SwapChain).join(', ')}`,
3140
+ })),
3141
+ ]);
3142
+ /**
3143
+ * Zod schema for validating bridge chain identifiers.
3144
+ *
3145
+ * This schema validates that the provided chain is supported for CCTPv2 bridging.
3146
+ * It accepts either a BridgeChain enum value, a string matching a BridgeChain value,
3147
+ * or a ChainDefinition for a supported chain.
3148
+ *
3149
+ * Use this schema when validating chain parameters for bridge operations to ensure
3150
+ * only CCTPv2-supported chains are accepted at runtime.
3151
+ *
3152
+ * @example
3153
+ * ```typescript
3154
+ * import { bridgeChainIdentifierSchema } from '@core/chains/validation'
3155
+ * import { BridgeChain, Chains } from '@core/chains'
3156
+ *
3157
+ * // Valid - BridgeChain enum value
3158
+ * bridgeChainIdentifierSchema.parse(BridgeChain.Ethereum)
3159
+ *
3160
+ * // Valid - string literal
3161
+ * bridgeChainIdentifierSchema.parse('Base_Sepolia')
3162
+ *
3163
+ * // Valid - ChainDefinition (validated by CCTP support)
3164
+ * bridgeChainIdentifierSchema.parse(Chains.Solana)
3165
+ *
3166
+ * // Invalid - Algorand is not in BridgeChain (throws ZodError)
3167
+ * bridgeChainIdentifierSchema.parse('Algorand')
3168
+ * ```
3169
+ *
3170
+ * @see {@link BridgeChain} for the enum of supported chains.
3171
+ */
3172
+ zod.z.union([
3173
+ zod.z.string().refine((val) => val in BridgeChain, (val) => ({
3174
+ message: `Chain "${val}" is not supported for bridging. Only chains in the BridgeChain enum support CCTPv2 bridging.`,
3175
+ })),
3176
+ chainDefinitionSchema.refine((chainDef) => chainDef.chain in BridgeChain, (chainDef) => ({
3177
+ message: `Chain "${chainDef.name}" (${chainDef.chain}) is not supported for bridging. Only chains in the BridgeChain enum support CCTPv2 bridging.`,
3178
+ })),
3179
+ ]);
3180
+
3181
+ /**
3182
+ * @packageDocumentation
3183
+ * @module SwapTokenSchemas
3184
+ *
3185
+ * Zod validation schemas for supported swap tokens.
3186
+ */
3187
+ // Internal enum used after input normalization.
3188
+ const swapTokenEnumSchema = zod.z.enum([
3189
+ ...Object.keys(SWAP_TOKEN_REGISTRY),
3190
+ NATIVE_TOKEN,
3191
+ ]);
3192
+ /**
3193
+ * Zod schema for validating supported swap token symbols.
3194
+ *
3195
+ * Accepts any token symbol from the SWAP_TOKEN_REGISTRY plus NATIVE.
3196
+ * Input matching is case-insensitive and normalized to uppercase.
3197
+ *
3198
+ * @example
3199
+ * ```typescript
3200
+ * import { supportedSwapTokenSchema } from '@core/chains'
3201
+ *
3202
+ * const result = supportedSwapTokenSchema.safeParse('USDC')
3203
+ * if (result.success) {
3204
+ * console.log('Valid swap token:', result.data)
3205
+ * }
3206
+ * ```
3207
+ */
3208
+ zod.z
3209
+ .string()
3210
+ .transform((value) => value.toUpperCase())
3211
+ .pipe(swapTokenEnumSchema);
3212
+
3213
+ exports.Arbitrum = Arbitrum;
3214
+ exports.ArbitrumSepolia = ArbitrumSepolia;
3215
+ exports.ArcTestnet = ArcTestnet;
3216
+ exports.Avalanche = Avalanche;
3217
+ exports.AvalancheFuji = AvalancheFuji;
3218
+ exports.Base = Base;
3219
+ exports.BaseSepolia = BaseSepolia;
3220
+ exports.Codex = Codex;
3221
+ exports.CodexTestnet = CodexTestnet;
3222
+ exports.Ethereum = Ethereum;
3223
+ exports.EthereumSepolia = EthereumSepolia;
3224
+ exports.HyperEVM = HyperEVM;
3225
+ exports.HyperEVMTestnet = HyperEVMTestnet;
3226
+ exports.Ink = Ink;
3227
+ exports.InkTestnet = InkTestnet;
3228
+ exports.Linea = Linea;
3229
+ exports.LineaSepolia = LineaSepolia;
3230
+ exports.Optimism = Optimism;
3231
+ exports.OptimismSepolia = OptimismSepolia;
3232
+ exports.Plume = Plume;
3233
+ exports.PlumeTestnet = PlumeTestnet;
3234
+ exports.Polygon = Polygon;
3235
+ exports.PolygonAmoy = PolygonAmoy;
3236
+ exports.Sei = Sei;
3237
+ exports.SeiTestnet = SeiTestnet;
3238
+ exports.Solana = Solana;
3239
+ exports.SolanaDevnet = SolanaDevnet;
3240
+ exports.Sonic = Sonic;
3241
+ exports.SonicTestnet = SonicTestnet;
3242
+ exports.Unichain = Unichain;
3243
+ exports.UnichainSepolia = UnichainSepolia;
3244
+ exports.WorldChain = WorldChain;
3245
+ exports.WorldChainSepolia = WorldChainSepolia;
3246
+ exports.XDC = XDC;
3247
+ exports.XDCApothem = XDCApothem;
3248
+ //# sourceMappingURL=chains.cjs.map