Skip to main content
CCTP lets you transfer USDC from all supported CCTP domains to HyperCore using a CoreDepositWallet contract deployed on HyperEVM. The CoreDepositWallet handles depositing and withdrawing USDC between HyperEVM and HyperCore. This topic explains how the HyperCore workflow works and covers HyperCore-specific considerations.
Note: HyperCore balances reflect protocol-level credits, not Circle-issued USDC. Native USDC remains in the CoreDepositWallet contract on HyperEVM and withdrawals are required to redeem native USDC from HyperEVM.

How it works

The HyperCore workflow from source chains that are not HyperEVM is a two-step process: funds are transferred in the standard CCTP workflow to HyperEVM, then forwarded to HyperCore by depositing them into the CoreDepositWallet contract. The burn transaction uses one of two contracts depending on the source chain:
  • TokenMessengerV2 contract
  • CctpExtension contract
The burn transaction includes a hook that calls the CctpForwarder contract on HyperEVM to forward the USDC to the recipient address on HyperCore. Here’s how the HyperCore workflow works:
  1. Check the CCTP API for fees. Fast transfers from Arbitrum have no fees.
  2. Calculate the USDC amounts minus fees. Forwarding to HyperCore has a small, fixed forwarding fee.
  3. Approve the contract to spend the amount of USDC you want to burn. If you are interacting with the TokenMessengerV2 contract, you can do this with a call to the approve function on the USDC contract. If you are interacting with the CctpExtension contract, you sign a ReceiveWithAuthorization message.
  4. Sign and broadcast a burn transaction. The type depends on the source domain:
    • CctpExtension contract: Sign and broadcast a batchDepositForBurnWithAuth transaction. Set HyperEVM as the destination. Include hook data to call the CctpForwarder contract on HyperEVM.
    • TokenMessengerV2 contract: Sign and broadcast a depositForBurn transaction. Set HyperEVM as the destination. Include hook data to call the CctpForwarder contract on HyperEVM.

Important considerations

Keep these things in mind when using CCTP with HyperCore.

Testnet recipient address limitations

When you test USDC transfers to HyperCore on testnet, the recipient address has limits:
  • The recipient address must already exist on HyperCore mainnet.
  • Addresses that already exist on mainnet can only receive up to $1000 testnet USDC.
  • Transfers to addresses without mainnet state fail silently.
To check if an address exists on mainnet, use Hyperliquid’s info API:
curl -X POST https://api.hyperliquid.xyz/info \
  -H "Content-Type: application/json" \
  -d '
{
    "type": "userRole",
    "user": "${USER_ADDRESS}"
}
'

Account creation fees on HyperCore

When you transfer USDC from HyperEVM to a new HyperCore address, the protocol creates the account automatically. The protocol takes 1 USDC from the deposit as an account creation fee. This means:
  • Direct transfers from HyperEVM below 1 USDC to a new account will fail.
  • Deposits from other blockchains to new accounts must be large enough. They must cover both the 1 USDC account creation fee and the CCTP forwarding fee. If not, the deposit will fail.

Best practices for account creation fees

Make sure the first transfer to a new HyperCore account includes:
  • Greater than 1 USDC
  • The CCTP forwarding fee (if using the CctpForwarder contract)
  • The amount of USDC you want the recipient to receive
If the transfer is less than or equal to the new account creation fee, the deposit will fail. When you integrate the HyperCore workflow, make sure your transfer logic accounts for these fees. This prevents failed or unusable deposits. After a HyperCore account is created, future transfers to the same account don’t incur the account creation fee.

Multiple transfers to new accounts in the same block

The HyperEVM execution environment reads a snapshot of the HyperCore state for the entire block. If you send multiple transfers to a new HyperCore account in the same block, each transfer treats the account as new and tries to create it. The protocol takes the 1 USDC account creation fee for every transfer.

Best practices for first deposits

When you deposit to a new account on HyperCore, make sure you:
  • Only send one transfer to the new account in a block
  • Wait until the account is created before sending more transfers
Your HyperCore CCTP integration should have safeguards against batching or repeating transfers to the same new account in a single block. This makes sure new accounts are initialized only once. This prevents unnecessary fees.