Skip to content

Commit 68ceb49

Browse files
authored
CCTP routes: Ensure source token is USDC (#555)
* ensure source token is USDC * use isSameToken
1 parent 9a2ef36 commit 68ceb49

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

connect/src/routes/cctp/automatic.ts

+17-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import type { Chain, Network } from "@wormhole-foundation/sdk-base";
22
import { amount, circle, contracts } from "@wormhole-foundation/sdk-base";
3-
import type {
4-
ChainAddress,
5-
ChainContext,
6-
CircleTransferDetails,
7-
Signer,
8-
TokenId,
3+
import {
4+
isSameToken,
5+
type ChainAddress,
6+
type ChainContext,
7+
type CircleTransferDetails,
8+
type Signer,
9+
type TokenId,
910
} from "@wormhole-foundation/sdk-definitions";
1011
import { CircleTransfer } from "../../protocols/cctp/cctpTransfer.js";
1112
import { TransferState } from "../../types.js";
@@ -85,6 +86,16 @@ export class AutomaticCCTPRoute<N extends Network>
8586
fromChain: ChainContext<N>,
8687
toChain: ChainContext<N>,
8788
): Promise<TokenId[]> {
89+
// Ensure the source token is USDC
90+
const sourceChainUsdcContract = circle.usdcContract.get(fromChain.network, fromChain.chain);
91+
if (!sourceChainUsdcContract ) return [];
92+
if (!isSameToken(
93+
sourceToken,
94+
Wormhole.tokenId(fromChain.chain, sourceChainUsdcContract),
95+
)){
96+
return [];
97+
}
98+
8899
const { network, chain } = toChain;
89100
if (!circle.usdcContract.has(network, chain)) return [];
90101
return [Wormhole.chainAddress(chain, circle.usdcContract.get(network, chain)!)];

connect/src/routes/cctp/manual.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type {
66
Signer,
77
TokenId,
88
} from "@wormhole-foundation/sdk-definitions";
9-
import { CircleBridge } from "@wormhole-foundation/sdk-definitions";
9+
import { CircleBridge, isSameToken } from "@wormhole-foundation/sdk-definitions";
1010
import { signSendWait } from "../../common.js";
1111
import { CircleTransfer } from "../../protocols/cctp/cctpTransfer.js";
1212
import type { TransferReceipt } from "../../types.js";
@@ -79,6 +79,16 @@ export class CCTPRoute<N extends Network>
7979
fromChain: ChainContext<N>,
8080
toChain: ChainContext<N>,
8181
): Promise<TokenId[]> {
82+
// Ensure the source token is USDC
83+
const sourceChainUsdcContract = circle.usdcContract.get(fromChain.network, fromChain.chain);
84+
if (!sourceChainUsdcContract ) return [];
85+
if (!isSameToken(
86+
sourceToken,
87+
Wormhole.tokenId(fromChain.chain, sourceChainUsdcContract),
88+
)){
89+
return [];
90+
}
91+
8292
const { network, chain } = toChain;
8393
if (!circle.usdcContract.has(network, chain)) return [];
8494
return [Wormhole.chainAddress(chain, circle.usdcContract.get(network, chain)!)];

0 commit comments

Comments
 (0)