Skip to main content

Overview

Cashmere has no /transfer REST endpoint. Transfers happen on-chain, from the sender’s own wallet, with a fee quote from the Gas API. The Cashmere Agent SDK does every step below in one call.
  1. Get a quote from /getEcdsaSig_native (EVM) or /getEd25519Sig_native (Solana, Aptos, Sui).
  2. Fill the contract parameters with it.
  3. Call the Cashmere contract on the source chain.
  4. Track the transfer with /transactionsmainnet until the destination mint succeeds.

Step-by-Step (EVM)

Take the addresses from Contract Addresses and the ABI from Smart Contracts.
Quotes expire about 100 seconds after they are issued. Request one right before the user signs, and send the transaction straight away.
Bridging into Solana? recipient must be the destination wallet’s USDC associated token account, and solanaOwner the wallet itself, both as 32 bytes. See Recipient Encoding.

Step-by-Step (Solana)

  1. Request a quote with localDomain=5 and version=2.
  2. Encode the recipient as 32 bytes (see Recipient Encoding).
  3. Build an Ed25519Program.createInstructionWithPublicKey instruction from the quote’s publicKey, message and signature, and place it right before transfer_v2.
  4. Call transfer_v2 with the quote’s fee and deadline unchanged, max_fee from Circle Iris and min_finality_threshold = 2000.
The full transaction, with every account, is in Smart Contracts → Solana. Aptos (transfer_v2_outer) and Sui (prepare_deposit_for_burn_v2) take the same quote fields: see Aptos and Sui.

Permit Variants

  • On EVM, transferV2WithPermit takes an EIP-2612 PermitParams struct in place of a separate approve. Sign the permit locally, then call the contract with the same quote.
  • Solana, Aptos and Sui have no approval step: the sender signs the transaction that moves the USDC.

Monitoring Settlement

Settlement time depends on the source chain: V2 Fast from Ethereum and its L2s takes about 15 seconds, and V2 Norm from fast-finality chains such as Solana, Aptos, Sui, Avalanche or Polygon takes under a minute. V2 Norm from Ethereum or an L2 waits about 15 minutes for finality. Each row also carries receive_amount, relayer_fee and destination_tx_hash for dashboards and reconciliation: see Analytics.

Common Pitfalls

  • Signature mismatch: isV2, isNative and both domains must match the call you make.
  • Empty hook data: pass hookData: '0x00'. Circle reverts V2 burns whose hook data is 0x.
  • Allowance errors: approve amount USDC before transferV2, or use the permit variant.
  • Native fee shortfall: with isNative=true, send at least fee wei as msg.value.
  • Expired deadline: request a fresh quote if the transaction isn’t sent within about 100 seconds.
  • Wrong recipient format: CCTP accepts any 32 bytes, so a mistake can’t be fixed after the burn. An EVM address sent to Aptos or Sui mints to an account nobody controls, and into Solana the recipient must be the USDC token account.