@circle-fin/bridge-kit 1.5.0 → 1.6.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/CHANGELOG.md +28 -0
- package/README.md +107 -10
- package/chains.cjs +175 -3
- package/chains.d.ts +151 -3
- package/chains.mjs +175 -3
- package/index.cjs +1925 -145
- package/index.d.ts +4082 -2171
- package/index.mjs +1919 -148
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# @circle-fin/bridge-kit
|
|
2
2
|
|
|
3
|
+
## 1.6.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add Circle Forwarder support for CCTP v2 bridging.
|
|
8
|
+
|
|
9
|
+
Forwarding is a relay-assisted mode where Circle observes the burn transaction,
|
|
10
|
+
retrieves attestation data, and submits the destination mint on the user's
|
|
11
|
+
behalf. This removes most destination-side orchestration from client code.
|
|
12
|
+
|
|
13
|
+
What this enables:
|
|
14
|
+
- Opt-in forwarding with `useForwarder: true` so Circle handles destination mint
|
|
15
|
+
submission.
|
|
16
|
+
- Forwarder-only destinations (no destination adapter required) using
|
|
17
|
+
`{ recipientAddress, chain, useForwarder: true }`.
|
|
18
|
+
- Forwarding-fee-aware estimation and max-fee calculation when `maxFee` is
|
|
19
|
+
auto-derived.
|
|
20
|
+
- New hook-based burn actions: `cctp.v2.depositForBurnWithHook` and
|
|
21
|
+
`cctp.v2.customBurnWithHook`.
|
|
22
|
+
- New forwarding helpers: `buildForwardingHookData` and
|
|
23
|
+
`buildForwardingHookDataBuffer`.
|
|
24
|
+
- Chain-level forwarding metadata via `cctp.forwarderSupported` for route
|
|
25
|
+
capability checks.
|
|
26
|
+
|
|
27
|
+
Compatibility:
|
|
28
|
+
- Existing non-forwarded bridge flows remain unchanged.
|
|
29
|
+
- If you set `config.maxFee` manually, include any expected forwarding fee.
|
|
30
|
+
|
|
3
31
|
## 1.5.0
|
|
4
32
|
|
|
5
33
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -34,19 +34,22 @@ _Making cross-chain stablecoin (USDC, and soon more tokens) transfers as simple
|
|
|
34
34
|
- [1. **AdapterContext** - Your Transfer Endpoint](#1-adaptercontext---your-transfer-endpoint)
|
|
35
35
|
- [2. **BridgeDestination** - Where Funds Go](#2-bridgedestination---where-funds-go)
|
|
36
36
|
- [3. **BridgeConfig** - Transfer Settings](#3-bridgeconfig---transfer-settings)
|
|
37
|
-
- [Complete Example with All Options](#complete-example-with-all-options)
|
|
38
37
|
- [Bridge Speed Configuration](#bridge-speed-configuration)
|
|
39
38
|
- [Custom Fees](#custom-fees)
|
|
40
39
|
- [How Custom Fees Work](#how-custom-fees-work)
|
|
41
|
-
- [
|
|
40
|
+
- [1,000 USDC Transfer Example](#1000-usdc-transfer-example)
|
|
42
41
|
- [Kit-Level Fee Policies](#kit-level-fee-policies)
|
|
43
42
|
- [Error Handling](#error-handling)
|
|
44
43
|
- [Retrying Failed Transfers](#retrying-failed-transfers)
|
|
45
|
-
|
|
46
|
-
- [Basic
|
|
47
|
-
- [
|
|
48
|
-
- [
|
|
49
|
-
- [
|
|
44
|
+
- [Method signature](#method-signature)
|
|
45
|
+
- [Basic usage (EVM → EVM)](#basic-usage-evm--evm)
|
|
46
|
+
- [When to retry vs manual intervention](#when-to-retry-vs-manual-intervention)
|
|
47
|
+
- [Limitations](#limitations)
|
|
48
|
+
- [Performance and best practices](#performance-and-best-practices)
|
|
49
|
+
- [Troubleshooting](#troubleshooting)
|
|
50
|
+
- [Forwarder Integration](#forwarder-integration)
|
|
51
|
+
- [Standard Bridge with Forwarder](#standard-bridge-with-forwarder)
|
|
52
|
+
- [Forwarder-Only Destination (No Destination Adapter)](#forwarder-only-destination-no-destination-adapter)
|
|
50
53
|
- [API Reference](#api-reference)
|
|
51
54
|
- [Core Methods](#core-methods)
|
|
52
55
|
- [Bridge Parameters](#bridge-parameters)
|
|
@@ -54,8 +57,6 @@ _Making cross-chain stablecoin (USDC, and soon more tokens) transfers as simple
|
|
|
54
57
|
- [Building](#building)
|
|
55
58
|
- [Testing](#testing)
|
|
56
59
|
- [Local Development](#local-development)
|
|
57
|
-
- [Contributing](#contributing)
|
|
58
|
-
- [Quick Contribution Steps](#quick-contribution-steps)
|
|
59
60
|
- [Community \& Support](#community--support)
|
|
60
61
|
- [License](#license)
|
|
61
62
|
|
|
@@ -80,6 +81,8 @@ The Bridge Kit enables cross-chain stablecoin transfers via a type-safe, develop
|
|
|
80
81
|
- **📡 Real-time event monitoring**: Track progress throughout the transfer lifecycle
|
|
81
82
|
- **🛡️ Robust error handling**: Graceful partial success recovery
|
|
82
83
|
- **✈️ Pre-flight validation**: Verify transfers with cost estimation before execution
|
|
84
|
+
- **🤖 Forwarder integration**: Circle's Orbit relayer handles attestation and mint automatically
|
|
85
|
+
- **📭 Forwarder-only destinations**: No destination adapter required - just provide recipient address
|
|
83
86
|
|
|
84
87
|
## Architecture Flow
|
|
85
88
|
|
|
@@ -615,6 +618,93 @@ if (result.state === 'error') {
|
|
|
615
618
|
|
|
616
619
|
> See a runnable example at `examples/basic-usdc-transfer/src/retry.ts` (script: `yarn start:retry`).
|
|
617
620
|
|
|
621
|
+
## Forwarder Integration
|
|
622
|
+
|
|
623
|
+
The Bridge Kit supports Circle's Orbit relayer for automated attestation and mint handling.
|
|
624
|
+
When enabled, the relayer automatically fetches the attestation and submits the mint transaction on the destination chain, simplifying the bridging process.
|
|
625
|
+
|
|
626
|
+
### Standard Bridge with Forwarder
|
|
627
|
+
|
|
628
|
+
Use `useForwarder: true` when you have adapters for both chains but want Circle to handle the mint transaction:
|
|
629
|
+
|
|
630
|
+
```typescript
|
|
631
|
+
import { BridgeKit } from '@circle-fin/bridge-kit'
|
|
632
|
+
import { createViemAdapterFromPrivateKey } from '@circle-fin/adapter-viem-v2'
|
|
633
|
+
|
|
634
|
+
const kit = new BridgeKit()
|
|
635
|
+
const adapter = createViemAdapterFromPrivateKey({
|
|
636
|
+
privateKey: process.env.PRIVATE_KEY as `0x${string}`,
|
|
637
|
+
})
|
|
638
|
+
|
|
639
|
+
const result = await kit.bridge({
|
|
640
|
+
from: { adapter, chain: 'Ethereum' },
|
|
641
|
+
to: {
|
|
642
|
+
adapter,
|
|
643
|
+
chain: 'Base',
|
|
644
|
+
useForwarder: true, // Circle handles attestation + mint
|
|
645
|
+
},
|
|
646
|
+
amount: '100.50',
|
|
647
|
+
})
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
**Benefits:**
|
|
651
|
+
|
|
652
|
+
- No manual attestation polling or destination mint submission
|
|
653
|
+
- Relayer handles destination mint transaction automatically
|
|
654
|
+
- Simplified flow with fewer client-side operations
|
|
655
|
+
|
|
656
|
+
### Forwarder-Only Destination (No Destination Adapter)
|
|
657
|
+
|
|
658
|
+
When you don't have access to a wallet on the destination chain, use forwarder-only mode.
|
|
659
|
+
This is ideal for server-side transfers, custodial services, or when users don't have a wallet on the destination chain:
|
|
660
|
+
|
|
661
|
+
```typescript
|
|
662
|
+
const result = await kit.bridge({
|
|
663
|
+
from: { adapter, chain: 'Ethereum' },
|
|
664
|
+
to: {
|
|
665
|
+
recipientAddress: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', // Recipient on destination
|
|
666
|
+
chain: 'Base',
|
|
667
|
+
useForwarder: true, // Required for forwarder-only
|
|
668
|
+
},
|
|
669
|
+
amount: '100.50',
|
|
670
|
+
})
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
**Key differences from standard bridging:**
|
|
674
|
+
|
|
675
|
+
- No destination adapter required
|
|
676
|
+
- Mint confirmation is based on IRIS API response (not on-chain receipt)
|
|
677
|
+
- Mint step's `data` field will be `undefined`
|
|
678
|
+
|
|
679
|
+
**Relay fee handling:**
|
|
680
|
+
|
|
681
|
+
- Relay fee is automatically included in `maxFee` estimate
|
|
682
|
+
- Fee is deducted from the minted USDC at mint time
|
|
683
|
+
- Net received = burn amount - relay fee
|
|
684
|
+
|
|
685
|
+
```typescript
|
|
686
|
+
// Estimate includes relay fee when forwarder is enabled
|
|
687
|
+
const estimate = await kit.estimate({
|
|
688
|
+
from: { adapter, chain: 'Ethereum' },
|
|
689
|
+
to: {
|
|
690
|
+
recipientAddress: '0x...',
|
|
691
|
+
chain: 'Base',
|
|
692
|
+
useForwarder: true,
|
|
693
|
+
},
|
|
694
|
+
amount: '100.50',
|
|
695
|
+
})
|
|
696
|
+
|
|
697
|
+
console.log(estimate.maxFee) // Includes both burn fee and relay fee
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
> If you provide `config.maxFee` manually, include forwarder fees yourself.
|
|
701
|
+
> Auto-inclusion applies when the kit computes fees from route/speed.
|
|
702
|
+
>
|
|
703
|
+
> You can discover forwarder-capable chains with
|
|
704
|
+
> `kit.getSupportedChains({ forwarderSupported: true })`.
|
|
705
|
+
>
|
|
706
|
+
> See runnable examples at `examples/basic-usdc-transfer/src/forwarder-*.ts`.
|
|
707
|
+
|
|
618
708
|
## API Reference
|
|
619
709
|
|
|
620
710
|
### Core Methods
|
|
@@ -650,7 +740,14 @@ type BridgeDestination =
|
|
|
650
740
|
| {
|
|
651
741
|
adapter: Adapter // Adapter for the destination chain
|
|
652
742
|
chain: ChainIdentifier // Chain identifier
|
|
653
|
-
recipientAddress
|
|
743
|
+
recipientAddress?: string // Custom recipient address
|
|
744
|
+
useForwarder?: boolean // Enable Circle's Orbit relayer
|
|
745
|
+
}
|
|
746
|
+
| {
|
|
747
|
+
// Forwarder-only destination (no adapter required)
|
|
748
|
+
recipientAddress: string // Required: where to receive USDC
|
|
749
|
+
chain: ChainIdentifier // Chain identifier
|
|
750
|
+
useForwarder: true // Required: must be true
|
|
654
751
|
}
|
|
655
752
|
```
|
|
656
753
|
|
package/chains.cjs
CHANGED
|
@@ -302,6 +302,10 @@ defineChain({
|
|
|
302
302
|
confirmations: 1,
|
|
303
303
|
},
|
|
304
304
|
},
|
|
305
|
+
forwarderSupported: {
|
|
306
|
+
source: false,
|
|
307
|
+
destination: false,
|
|
308
|
+
},
|
|
305
309
|
},
|
|
306
310
|
});
|
|
307
311
|
|
|
@@ -335,6 +339,10 @@ defineChain({
|
|
|
335
339
|
confirmations: 1,
|
|
336
340
|
},
|
|
337
341
|
},
|
|
342
|
+
forwarderSupported: {
|
|
343
|
+
source: false,
|
|
344
|
+
destination: false,
|
|
345
|
+
},
|
|
338
346
|
},
|
|
339
347
|
});
|
|
340
348
|
|
|
@@ -394,6 +402,10 @@ const ArcTestnet = defineChain({
|
|
|
394
402
|
fastConfirmations: 1,
|
|
395
403
|
},
|
|
396
404
|
},
|
|
405
|
+
forwarderSupported: {
|
|
406
|
+
source: true,
|
|
407
|
+
destination: true,
|
|
408
|
+
},
|
|
397
409
|
},
|
|
398
410
|
kitContracts: {
|
|
399
411
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -438,6 +450,10 @@ const Arbitrum = defineChain({
|
|
|
438
450
|
fastConfirmations: 1,
|
|
439
451
|
},
|
|
440
452
|
},
|
|
453
|
+
forwarderSupported: {
|
|
454
|
+
source: true,
|
|
455
|
+
destination: true,
|
|
456
|
+
},
|
|
441
457
|
},
|
|
442
458
|
kitContracts: {
|
|
443
459
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -482,6 +498,10 @@ const ArbitrumSepolia = defineChain({
|
|
|
482
498
|
fastConfirmations: 1,
|
|
483
499
|
},
|
|
484
500
|
},
|
|
501
|
+
forwarderSupported: {
|
|
502
|
+
source: true,
|
|
503
|
+
destination: true,
|
|
504
|
+
},
|
|
485
505
|
},
|
|
486
506
|
kitContracts: {
|
|
487
507
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -526,6 +546,10 @@ const Avalanche = defineChain({
|
|
|
526
546
|
fastConfirmations: 1,
|
|
527
547
|
},
|
|
528
548
|
},
|
|
549
|
+
forwarderSupported: {
|
|
550
|
+
source: true,
|
|
551
|
+
destination: true,
|
|
552
|
+
},
|
|
529
553
|
},
|
|
530
554
|
kitContracts: {
|
|
531
555
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -569,6 +593,10 @@ const AvalancheFuji = defineChain({
|
|
|
569
593
|
fastConfirmations: 1,
|
|
570
594
|
},
|
|
571
595
|
},
|
|
596
|
+
forwarderSupported: {
|
|
597
|
+
source: true,
|
|
598
|
+
destination: true,
|
|
599
|
+
},
|
|
572
600
|
},
|
|
573
601
|
rpcEndpoints: ['https://api.avax-test.network/ext/bc/C/rpc'],
|
|
574
602
|
kitContracts: {
|
|
@@ -614,6 +642,10 @@ const Base = defineChain({
|
|
|
614
642
|
fastConfirmations: 1,
|
|
615
643
|
},
|
|
616
644
|
},
|
|
645
|
+
forwarderSupported: {
|
|
646
|
+
source: true,
|
|
647
|
+
destination: true,
|
|
648
|
+
},
|
|
617
649
|
},
|
|
618
650
|
kitContracts: {
|
|
619
651
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -658,6 +690,10 @@ const BaseSepolia = defineChain({
|
|
|
658
690
|
fastConfirmations: 1,
|
|
659
691
|
},
|
|
660
692
|
},
|
|
693
|
+
forwarderSupported: {
|
|
694
|
+
source: true,
|
|
695
|
+
destination: true,
|
|
696
|
+
},
|
|
661
697
|
},
|
|
662
698
|
kitContracts: {
|
|
663
699
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -744,6 +780,10 @@ const Codex = defineChain({
|
|
|
744
780
|
fastConfirmations: 1,
|
|
745
781
|
},
|
|
746
782
|
},
|
|
783
|
+
forwarderSupported: {
|
|
784
|
+
source: true,
|
|
785
|
+
destination: false,
|
|
786
|
+
},
|
|
747
787
|
},
|
|
748
788
|
kitContracts: {
|
|
749
789
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -782,6 +822,10 @@ const CodexTestnet = defineChain({
|
|
|
782
822
|
fastConfirmations: 1,
|
|
783
823
|
},
|
|
784
824
|
},
|
|
825
|
+
forwarderSupported: {
|
|
826
|
+
source: true,
|
|
827
|
+
destination: false,
|
|
828
|
+
},
|
|
785
829
|
},
|
|
786
830
|
kitContracts: {
|
|
787
831
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -826,6 +870,10 @@ const Ethereum = defineChain({
|
|
|
826
870
|
fastConfirmations: 2,
|
|
827
871
|
},
|
|
828
872
|
},
|
|
873
|
+
forwarderSupported: {
|
|
874
|
+
source: true,
|
|
875
|
+
destination: true,
|
|
876
|
+
},
|
|
829
877
|
},
|
|
830
878
|
kitContracts: {
|
|
831
879
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -870,6 +918,10 @@ const EthereumSepolia = defineChain({
|
|
|
870
918
|
fastConfirmations: 2,
|
|
871
919
|
},
|
|
872
920
|
},
|
|
921
|
+
forwarderSupported: {
|
|
922
|
+
source: true,
|
|
923
|
+
destination: true,
|
|
924
|
+
},
|
|
873
925
|
},
|
|
874
926
|
kitContracts: {
|
|
875
927
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -956,6 +1008,10 @@ const HyperEVM = defineChain({
|
|
|
956
1008
|
fastConfirmations: 1,
|
|
957
1009
|
},
|
|
958
1010
|
},
|
|
1011
|
+
forwarderSupported: {
|
|
1012
|
+
source: true,
|
|
1013
|
+
destination: true,
|
|
1014
|
+
},
|
|
959
1015
|
},
|
|
960
1016
|
kitContracts: {
|
|
961
1017
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -995,6 +1051,10 @@ const HyperEVMTestnet = defineChain({
|
|
|
995
1051
|
fastConfirmations: 1,
|
|
996
1052
|
},
|
|
997
1053
|
},
|
|
1054
|
+
forwarderSupported: {
|
|
1055
|
+
source: true,
|
|
1056
|
+
destination: true,
|
|
1057
|
+
},
|
|
998
1058
|
},
|
|
999
1059
|
kitContracts: {
|
|
1000
1060
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -1038,6 +1098,10 @@ const Ink = defineChain({
|
|
|
1038
1098
|
fastConfirmations: 1,
|
|
1039
1099
|
},
|
|
1040
1100
|
},
|
|
1101
|
+
forwarderSupported: {
|
|
1102
|
+
source: true,
|
|
1103
|
+
destination: true,
|
|
1104
|
+
},
|
|
1041
1105
|
},
|
|
1042
1106
|
kitContracts: {
|
|
1043
1107
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -1080,6 +1144,10 @@ const InkTestnet = defineChain({
|
|
|
1080
1144
|
fastConfirmations: 1,
|
|
1081
1145
|
},
|
|
1082
1146
|
},
|
|
1147
|
+
forwarderSupported: {
|
|
1148
|
+
source: true,
|
|
1149
|
+
destination: true,
|
|
1150
|
+
},
|
|
1083
1151
|
},
|
|
1084
1152
|
kitContracts: {
|
|
1085
1153
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -1118,6 +1186,10 @@ const Linea = defineChain({
|
|
|
1118
1186
|
fastConfirmations: 1,
|
|
1119
1187
|
},
|
|
1120
1188
|
},
|
|
1189
|
+
forwarderSupported: {
|
|
1190
|
+
source: true,
|
|
1191
|
+
destination: true,
|
|
1192
|
+
},
|
|
1121
1193
|
},
|
|
1122
1194
|
kitContracts: {
|
|
1123
1195
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -1156,6 +1228,10 @@ const LineaSepolia = defineChain({
|
|
|
1156
1228
|
fastConfirmations: 1,
|
|
1157
1229
|
},
|
|
1158
1230
|
},
|
|
1231
|
+
forwarderSupported: {
|
|
1232
|
+
source: true,
|
|
1233
|
+
destination: true,
|
|
1234
|
+
},
|
|
1159
1235
|
},
|
|
1160
1236
|
kitContracts: {
|
|
1161
1237
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -1196,6 +1272,10 @@ const Monad = defineChain({
|
|
|
1196
1272
|
fastConfirmations: 1,
|
|
1197
1273
|
},
|
|
1198
1274
|
},
|
|
1275
|
+
forwarderSupported: {
|
|
1276
|
+
source: true,
|
|
1277
|
+
destination: true,
|
|
1278
|
+
},
|
|
1199
1279
|
},
|
|
1200
1280
|
kitContracts: {
|
|
1201
1281
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -1236,6 +1316,10 @@ const MonadTestnet = defineChain({
|
|
|
1236
1316
|
fastConfirmations: 1,
|
|
1237
1317
|
},
|
|
1238
1318
|
},
|
|
1319
|
+
forwarderSupported: {
|
|
1320
|
+
source: true,
|
|
1321
|
+
destination: true,
|
|
1322
|
+
},
|
|
1239
1323
|
},
|
|
1240
1324
|
kitContracts: {
|
|
1241
1325
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -1317,6 +1401,10 @@ defineChain({
|
|
|
1317
1401
|
confirmations: 1,
|
|
1318
1402
|
},
|
|
1319
1403
|
},
|
|
1404
|
+
forwarderSupported: {
|
|
1405
|
+
source: false,
|
|
1406
|
+
destination: false,
|
|
1407
|
+
},
|
|
1320
1408
|
},
|
|
1321
1409
|
});
|
|
1322
1410
|
|
|
@@ -1349,6 +1437,10 @@ defineChain({
|
|
|
1349
1437
|
confirmations: 1,
|
|
1350
1438
|
},
|
|
1351
1439
|
},
|
|
1440
|
+
forwarderSupported: {
|
|
1441
|
+
source: false,
|
|
1442
|
+
destination: false,
|
|
1443
|
+
},
|
|
1352
1444
|
},
|
|
1353
1445
|
});
|
|
1354
1446
|
|
|
@@ -1390,6 +1482,10 @@ const Optimism = defineChain({
|
|
|
1390
1482
|
fastConfirmations: 1,
|
|
1391
1483
|
},
|
|
1392
1484
|
},
|
|
1485
|
+
forwarderSupported: {
|
|
1486
|
+
source: true,
|
|
1487
|
+
destination: true,
|
|
1488
|
+
},
|
|
1393
1489
|
},
|
|
1394
1490
|
kitContracts: {
|
|
1395
1491
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -1434,6 +1530,10 @@ const OptimismSepolia = defineChain({
|
|
|
1434
1530
|
fastConfirmations: 1,
|
|
1435
1531
|
},
|
|
1436
1532
|
},
|
|
1533
|
+
forwarderSupported: {
|
|
1534
|
+
source: true,
|
|
1535
|
+
destination: true,
|
|
1536
|
+
},
|
|
1437
1537
|
},
|
|
1438
1538
|
kitContracts: {
|
|
1439
1539
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -1474,6 +1574,10 @@ const Plume = defineChain({
|
|
|
1474
1574
|
fastConfirmations: 1,
|
|
1475
1575
|
},
|
|
1476
1576
|
},
|
|
1577
|
+
forwarderSupported: {
|
|
1578
|
+
source: true,
|
|
1579
|
+
destination: false,
|
|
1580
|
+
},
|
|
1477
1581
|
},
|
|
1478
1582
|
kitContracts: {
|
|
1479
1583
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -1513,6 +1617,10 @@ const PlumeTestnet = defineChain({
|
|
|
1513
1617
|
fastConfirmations: 1,
|
|
1514
1618
|
},
|
|
1515
1619
|
},
|
|
1620
|
+
forwarderSupported: {
|
|
1621
|
+
source: true,
|
|
1622
|
+
destination: false,
|
|
1623
|
+
},
|
|
1516
1624
|
},
|
|
1517
1625
|
kitContracts: {
|
|
1518
1626
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -1603,6 +1711,10 @@ const Polygon = defineChain({
|
|
|
1603
1711
|
fastConfirmations: 13,
|
|
1604
1712
|
},
|
|
1605
1713
|
},
|
|
1714
|
+
forwarderSupported: {
|
|
1715
|
+
source: true,
|
|
1716
|
+
destination: true,
|
|
1717
|
+
},
|
|
1606
1718
|
},
|
|
1607
1719
|
kitContracts: {
|
|
1608
1720
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -1647,6 +1759,10 @@ const PolygonAmoy = defineChain({
|
|
|
1647
1759
|
fastConfirmations: 13,
|
|
1648
1760
|
},
|
|
1649
1761
|
},
|
|
1762
|
+
forwarderSupported: {
|
|
1763
|
+
source: true,
|
|
1764
|
+
destination: true,
|
|
1765
|
+
},
|
|
1650
1766
|
},
|
|
1651
1767
|
kitContracts: {
|
|
1652
1768
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -1687,6 +1803,10 @@ const Sei = defineChain({
|
|
|
1687
1803
|
fastConfirmations: 1,
|
|
1688
1804
|
},
|
|
1689
1805
|
},
|
|
1806
|
+
forwarderSupported: {
|
|
1807
|
+
source: true,
|
|
1808
|
+
destination: true,
|
|
1809
|
+
},
|
|
1690
1810
|
},
|
|
1691
1811
|
kitContracts: {
|
|
1692
1812
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -1726,6 +1846,10 @@ const SeiTestnet = defineChain({
|
|
|
1726
1846
|
fastConfirmations: 1,
|
|
1727
1847
|
},
|
|
1728
1848
|
},
|
|
1849
|
+
forwarderSupported: {
|
|
1850
|
+
source: true,
|
|
1851
|
+
destination: true,
|
|
1852
|
+
},
|
|
1729
1853
|
},
|
|
1730
1854
|
kitContracts: {
|
|
1731
1855
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -1764,6 +1888,10 @@ const Sonic = defineChain({
|
|
|
1764
1888
|
fastConfirmations: 1,
|
|
1765
1889
|
},
|
|
1766
1890
|
},
|
|
1891
|
+
forwarderSupported: {
|
|
1892
|
+
source: true,
|
|
1893
|
+
destination: true,
|
|
1894
|
+
},
|
|
1767
1895
|
},
|
|
1768
1896
|
kitContracts: {
|
|
1769
1897
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -1802,6 +1930,10 @@ const SonicTestnet = defineChain({
|
|
|
1802
1930
|
fastConfirmations: 1,
|
|
1803
1931
|
},
|
|
1804
1932
|
},
|
|
1933
|
+
forwarderSupported: {
|
|
1934
|
+
source: true,
|
|
1935
|
+
destination: true,
|
|
1936
|
+
},
|
|
1805
1937
|
},
|
|
1806
1938
|
kitContracts: {
|
|
1807
1939
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -1845,6 +1977,10 @@ const Solana = defineChain({
|
|
|
1845
1977
|
fastConfirmations: 3,
|
|
1846
1978
|
},
|
|
1847
1979
|
},
|
|
1980
|
+
forwarderSupported: {
|
|
1981
|
+
source: true,
|
|
1982
|
+
destination: false,
|
|
1983
|
+
},
|
|
1848
1984
|
},
|
|
1849
1985
|
kitContracts: {
|
|
1850
1986
|
bridge: 'DFaauJEjmiHkPs1JG89A4p95hDWi9m9SAEERY1LQJiC3',
|
|
@@ -1887,6 +2023,10 @@ const SolanaDevnet = defineChain({
|
|
|
1887
2023
|
fastConfirmations: 3,
|
|
1888
2024
|
},
|
|
1889
2025
|
},
|
|
2026
|
+
forwarderSupported: {
|
|
2027
|
+
source: true,
|
|
2028
|
+
destination: false,
|
|
2029
|
+
},
|
|
1890
2030
|
},
|
|
1891
2031
|
kitContracts: {
|
|
1892
2032
|
bridge: 'DFaauJEjmiHkPs1JG89A4p95hDWi9m9SAEERY1LQJiC3',
|
|
@@ -1970,6 +2110,10 @@ defineChain({
|
|
|
1970
2110
|
confirmations: 1,
|
|
1971
2111
|
},
|
|
1972
2112
|
},
|
|
2113
|
+
forwarderSupported: {
|
|
2114
|
+
source: false,
|
|
2115
|
+
destination: false,
|
|
2116
|
+
},
|
|
1973
2117
|
},
|
|
1974
2118
|
});
|
|
1975
2119
|
|
|
@@ -2003,6 +2147,10 @@ defineChain({
|
|
|
2003
2147
|
confirmations: 1,
|
|
2004
2148
|
},
|
|
2005
2149
|
},
|
|
2150
|
+
forwarderSupported: {
|
|
2151
|
+
source: false,
|
|
2152
|
+
destination: false,
|
|
2153
|
+
},
|
|
2006
2154
|
},
|
|
2007
2155
|
});
|
|
2008
2156
|
|
|
@@ -2024,7 +2172,7 @@ const Unichain = defineChain({
|
|
|
2024
2172
|
chainId: 130,
|
|
2025
2173
|
isTestnet: false,
|
|
2026
2174
|
explorerUrl: 'https://unichain.blockscout.com/tx/{hash}',
|
|
2027
|
-
rpcEndpoints: ['https://
|
|
2175
|
+
rpcEndpoints: ['https://mainnet.unichain.org'],
|
|
2028
2176
|
eurcAddress: null,
|
|
2029
2177
|
usdcAddress: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
|
|
2030
2178
|
cctp: {
|
|
@@ -2044,6 +2192,10 @@ const Unichain = defineChain({
|
|
|
2044
2192
|
fastConfirmations: 1,
|
|
2045
2193
|
},
|
|
2046
2194
|
},
|
|
2195
|
+
forwarderSupported: {
|
|
2196
|
+
source: true,
|
|
2197
|
+
destination: true,
|
|
2198
|
+
},
|
|
2047
2199
|
},
|
|
2048
2200
|
kitContracts: {
|
|
2049
2201
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -2088,6 +2240,10 @@ const UnichainSepolia = defineChain({
|
|
|
2088
2240
|
fastConfirmations: 1,
|
|
2089
2241
|
},
|
|
2090
2242
|
},
|
|
2243
|
+
forwarderSupported: {
|
|
2244
|
+
source: true,
|
|
2245
|
+
destination: true,
|
|
2246
|
+
},
|
|
2091
2247
|
},
|
|
2092
2248
|
kitContracts: {
|
|
2093
2249
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -2114,7 +2270,7 @@ const WorldChain = defineChain({
|
|
|
2114
2270
|
explorerUrl: 'https://worldscan.org/tx/{hash}',
|
|
2115
2271
|
rpcEndpoints: ['https://worldchain-mainnet.g.alchemy.com/public'],
|
|
2116
2272
|
eurcAddress: null,
|
|
2117
|
-
usdcAddress: '
|
|
2273
|
+
usdcAddress: '0x79A02482A880bCE3F13e09Da970dC34db4CD24d1',
|
|
2118
2274
|
cctp: {
|
|
2119
2275
|
domain: 14,
|
|
2120
2276
|
contracts: {
|
|
@@ -2126,6 +2282,10 @@ const WorldChain = defineChain({
|
|
|
2126
2282
|
fastConfirmations: 1,
|
|
2127
2283
|
},
|
|
2128
2284
|
},
|
|
2285
|
+
forwarderSupported: {
|
|
2286
|
+
source: true,
|
|
2287
|
+
destination: true,
|
|
2288
|
+
},
|
|
2129
2289
|
},
|
|
2130
2290
|
kitContracts: {
|
|
2131
2291
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -2167,6 +2327,10 @@ const WorldChainSepolia = defineChain({
|
|
|
2167
2327
|
fastConfirmations: 1,
|
|
2168
2328
|
},
|
|
2169
2329
|
},
|
|
2330
|
+
forwarderSupported: {
|
|
2331
|
+
source: true,
|
|
2332
|
+
destination: true,
|
|
2333
|
+
},
|
|
2170
2334
|
},
|
|
2171
2335
|
kitContracts: {
|
|
2172
2336
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|
|
@@ -2193,7 +2357,7 @@ const XDC = defineChain({
|
|
|
2193
2357
|
chainId: 50,
|
|
2194
2358
|
isTestnet: false,
|
|
2195
2359
|
explorerUrl: 'https://xdcscan.io/tx/{hash}',
|
|
2196
|
-
rpcEndpoints: ['https://erpc.xinfin.network'],
|
|
2360
|
+
rpcEndpoints: ['https://erpc.xdcrpc.com', 'https://erpc.xinfin.network'],
|
|
2197
2361
|
eurcAddress: null,
|
|
2198
2362
|
usdcAddress: '0xfA2958CB79b0491CC627c1557F441eF849Ca8eb1',
|
|
2199
2363
|
cctp: {
|
|
@@ -2207,6 +2371,10 @@ const XDC = defineChain({
|
|
|
2207
2371
|
fastConfirmations: 3,
|
|
2208
2372
|
},
|
|
2209
2373
|
},
|
|
2374
|
+
forwarderSupported: {
|
|
2375
|
+
source: true,
|
|
2376
|
+
destination: false,
|
|
2377
|
+
},
|
|
2210
2378
|
},
|
|
2211
2379
|
kitContracts: {
|
|
2212
2380
|
bridge: BRIDGE_CONTRACT_EVM_MAINNET,
|
|
@@ -2245,6 +2413,10 @@ const XDCApothem = defineChain({
|
|
|
2245
2413
|
fastConfirmations: 1,
|
|
2246
2414
|
},
|
|
2247
2415
|
},
|
|
2416
|
+
forwarderSupported: {
|
|
2417
|
+
source: true,
|
|
2418
|
+
destination: false,
|
|
2419
|
+
},
|
|
2248
2420
|
},
|
|
2249
2421
|
kitContracts: {
|
|
2250
2422
|
bridge: BRIDGE_CONTRACT_EVM_TESTNET,
|