Skip to main content
Deposit USDC into an Earn vault from a wallet on a different blockchain. Your wallet on the source blockchain signs once. The deposit completes on the destination blockchain without further action from you, no signing or gas required.

Supported routes

The adapter you use must support EIP-712 typed data signing through signTypedData. The Viem and Ethers adapters support this by default.

Prerequisites

Before you begin, ensure that you’ve: These are required so any example below runs with a valid kit and adapter.

Submit a crosschain deposit

This example deposits 100.00 USDC from Ethereum Sepolia into a vault on Arc Testnet:
TypeScript
transferSpeed is optional and accepts "FAST" or "SLOW". FAST uses CCTP’s pre-finality lane and adds a PRE_FINALITY fee. SLOW uses standard finality with only the FORWARD fee. Omit transferSpeed to use the service default. See How Earn fees work for how these fees appear on the deposit quote.
Preview the expected outcome and fees of a crosschain deposit before submitting with getDepositQuote. Pass the same from, to, vaultAddress, amount, and transferSpeed to the quote.
The result’s kind field is either 'same-chain' or 'cross-chain':
TypeScript
You will see an output similar to:
Shell
The call returns once the bridge submit succeeds, not when the deposit lands on the destination. The status value reflects the submit response. Treat any non-terminal value (such as PENDING, SOURCE_PENDING, or ATTESTING) as in progress. expiresAt is the deadline by which the bundle must settle. If it doesn’t settle by then, the funds return to the source wallet.

Track the deposit status

Pass the returned execId to getCrossChainDepositStatus for a one-shot status check, or to waitForCrossChainDeposit to poll until the deposit reaches a terminal state:
TypeScript
The status payload includes per-hop detail (source, cctp, destination) so you can see where in the bridge the deposit currently is. Both methods accept an optional signal for cancellation.

Confirm the deposit on the destination blockchain

To verify the position landed on the destination, use Check your Earn position with the recipient address you passed in to.recipientAddress.