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 theCoreDepositWallet contract.
The burn transaction uses one of two contracts depending on the source chain:
TokenMessengerV2contractCctpExtensioncontract
CctpForwarder contract on
HyperEVM to forward the USDC to the recipient address on HyperCore.
Here’s how the HyperCore workflow works:
- Check the CCTP API for fees. Fast transfers from Arbitrum have no fees.
- Calculate the USDC amounts minus fees. Forwarding to HyperCore has a small, fixed forwarding fee.
- Approve the contract to spend the amount of USDC you want to burn. If you are
interacting with the
TokenMessengerV2contract, you can do this with a call to theapprovefunction on the USDC contract. If you are interacting with theCctpExtensioncontract, you sign aReceiveWithAuthorizationmessage. - Sign and broadcast a burn transaction. The type depends on the source domain:
- CctpExtension contract: Sign and broadcast a
batchDepositForBurnWithAuthtransaction. Set HyperEVM as the destination. Include hook data to call theCctpForwardercontract on HyperEVM. - TokenMessengerV2 contract: Sign and broadcast a
depositForBurntransaction. Set HyperEVM as the destination. Include hook data to call theCctpForwardercontract on HyperEVM.
- CctpExtension contract: Sign and broadcast a
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.
Account activation fee on HyperCore
New HyperCore accounts are subject to a one-time 1 USDC activation fee, managed entirely by the Hyperliquid protocol. Circle’sCoreDepositWallet contract does
not collect or enforce this fee.
When a new user first deposits USDC to HyperCore, the full deposit amount is
credited to their tradable balance. The 1 USDC activation fee is earmarked at
the account level and charged on the user’s first outbound action, such as a
withdrawal or SendAsset transfer. Until that first outbound action, the
account is considered unactivated and cannot perform
CoreWriter actions.
This means:
- There is no minimum deposit amount. Deposits of any size, including less than 1 USDC, will succeed.
- The user’s first outbound action (withdrawal, transfer, etc.) requires a balance of at least 1 USDC. If the balance is below 1 USDC at that time, the action will fail.
- After the activation fee is paid, subsequent outbound actions are not subject to it.
The activation fee is separate from CCTP forwarding fees. When calculating
total costs for a new user’s first withdrawal, account for both the 1 USDC
activation fee (charged by Hyperliquid) and any applicable CCTP forwarding
fee.
Best practices for new account deposits
When your integration deposits USDC to a new HyperCore account:- Ensure the deposit is large enough that the recipient will have at least 1 USDC available for their first outbound action.
- Inform end users that their first withdrawal or transfer from HyperCore includes a one-time 1 USDC activation fee deducted by the Hyperliquid protocol.
- If your integration creates accounts programmatically (for example, contract addresses), you can pre-activate the account by sending an activation transaction to the EVM contract address on HyperCore, as described in Hyperliquid’s documentation.