Domains
Domains are Circle-issued numeric identifiers that map to specific blockchains. They are used in xReserve messages and attestations.- Source domains use small, 0-indexed integers. They represent blockchains where the USDC reserves are held in xReserve contracts for USDC-backed stablecoins.
- Remote domains start at 10001 and represent blockchains where USDC-backed stablecoins are issued and circulated.
Blockchain types
Source chain
The source chain is the blockchain where the xReserve contract exists and USDC is deposited and held in reserve.Remote chain
The remote chain is the xReserve partner blockchain that issues and circulates USDC-backed stablecoins on their blockchain after an xReserve deposit is made.Destination chain
After a remote chain burns USDC-backed stablecoins on its blockchain, xReserve releases the associated USDC on the source chain. The blockchain where the user ultimately withdraws these funds is the destination chain. There are three ways a user can withdraw these funds:- Withdraw USDC on a Gateway supported blockchain: xReserve holds funds in a Circle Gateway wallet. This lets users convert USDC-backed stablecoin into USDC on any Gateway supported blockchain, including the source chain, without needing to perform an additional crosschain transfer.
- Withdraw USDC on a CCTP-supported blockchain: If a user requests to
withdraw USDC on a non-Gateway supported blockchain, xReserve uses Circle’s
Cross-Chain Transfer Protocol to forward the funds to a
CCTP supported blockchain. When preparing
a burn intent, this blockchain is the
finalDestinationDomain. - Withdraw USDC-backed stablecoins on another remote blockchain: Redeposits
let users move USDC-backed stablecoins from one blockchain to another.
xReserve releases the USDC reserve for the remote blockchain and redeposits it
for the destination blockchain. When preparing a burn intent, this blockchain
is the
finalDestinationDomain. xReserve updates its onchain and offchain ledgers to reflect the change in reserve on the remote and destination blockchains.
Contracts
xReserve contract
Circle deploys and audits the xReserve contract on source blockchains such as Ethereum. It holds USDC deposited by users in reserve when USDC-backed stablecoin is minted on a remote chain, and releases USDC when the corresponding token is burned and withdrawn. The full EVM-compatible smart contract source code is available on GitHub.Remote blockchain token contract
The remote blockchain is responsible for deploying, operating, and securing the smart contract that manages its USDC-backed stablecoins. This contract mints and burns the token and manages token logic. It also defines the infrastructure and security for how tokens are handled on its blockchain.Tokens
USDC
USDC is issued by Circle on supported blockchains such as Ethereum. It is fully redeemable for fiat with Circle and serves as the official, native representation of the USDC stablecoin.USDC reserve
USDC reserve represents the USDC held in the xReserve smart contract on the source chain. xReserve uses Circle Gateway wallets to hold these balances for USDC-backed stablecoins on the remote chain.USDC-backed stablecoins
USDC-backed stablecoins are issued on remote blockchains. These tokens are backed 1:1 by USDC held in xReserve and interoperable with the broader USDC network. Each remote blockchain defines its own USDC-backed stablecoins.Attesters
An attester is a cryptographic identity represented by a singlesecp256k1
keypair.
xReserve and remote blockchains operate independent attesters, creating a
dual-attestation model that ensures both sides must validate before any funds
move. These attesters have distinct responsibilities:
- xReserve attesters are operated by Circle. They monitor USDC deposits into the xReserve smart contract on the source blockchain and sign deposit attestations. Remote blockchains use these attestations to mint USDC-backed tokens on their blockchain.
- Remote blockchain attesters are managed by the remote blockchain operator. They monitor burns of USDC-backed stablecoins on their blockchain and sign burn intents. xReserve verifies these burn intents and uses them to release the USDC held in the xReserve contract.
Deposits
Deposit intent
DepositIntent is a structured onchain message created when a user deposits
USDC into the xReserve smart contract on the source blockchain.
The following table shows the message format:
| Field | Offset (bytes) | Solidity Type | Length (bytes) | Description |
|---|---|---|---|---|
magic | 0 | uint32* | 4 | 4-byte constant (0x5a2e0acd, subject to change) |
version | 4 | uint32 | 4 | Always 1 |
amount | 8 | uint256 | 32 | Token amount to deposit |
remoteDomain | 40 | uint32 | 4 | Destination domain ID |
remoteToken | 44 | bytes32 | 32 | Token address or identifier on the destination chain |
remoteRecipient | 76 | bytes32 | 32 | Recipient address or identifier on the destination chain |
localToken | 108 | address | 32 | Source chain token address (left-padded to 32 bytes) |
localDepositor | 140 | address | 32 | Source chain depositor address (left-padded to 32 bytes) |
maxFee | 172 | uint256 | 32 | Maximum fee amount to pay on the destination chain |
nonce | 204 | bytes32 | 32 | 32-byte replay protection nonce |
hookDataLen | 236 | uint32 | 4 | Length of hookData in bytes |
hookData | 240 | bytes | n | Optional hook payload |
Deposit attestation
A deposit attestation is an offchain message signed by xReserve attesters. It can be used by remote blockchains to independently mint corresponding USDC-backed stablecoins. xReserve constructs a deposit attestation in response to receiving a deposit intent.Withdrawals
Withdrawals let users redeem USDC-backed stablecoins for USDC held in xReserve. Users can also withdraw USDC-backed stablecoins on another remote blockchain. All withdrawals are initiated on the remote blockchain.Note: If you’re a remote blockchain partner, you can initiate a
withdrawal on behalf of your
users.
Burn intent
ABurnIntent is a structured message that the remote blockchain creates when a
user requests to burn USDC-backed stablecoins on their blockchain. It includes
the amount of USDC-backed stablecoins burned and the source blockchain on which
the USDC held in xReserve is released.
Message hash and burn intent signature
The message hash is a 32-byte hash of the burn intent payload. It is derived from the transfer specification, fee settings, and forwarding data. The/prepare-withdrawal endpoint
returns a messageHashToSign for each burn intent.
Remote blockchain attesters sign that hash with their attester
keys, producing the burn intent signature. This signature proves the burn intent
is valid. xReserve validates the burn intent and signature before releasing the
corresponding USDC reserve.
Withdrawal attestation
xReserve issues a withdrawal attestation after validating a burn intent signature and independently validating that the burn occurred on the remote blockchain. This attestation is used to release the USDC held in the xReserve smart contract.Withdrawal forwarding
xReserve lets users withdraw funds on a blockchain other than the source chain without performing an additional crosschain transfer. Because xReserve holds funds in a Circle Gateway wallet, users can immediately withdraw USDC on any Gateway supported blockchain. If the destination chain is not supported by Gateway, xReserve can forward the funds in one of two ways:- CCTP forwarding: xReserve forwards funds to a CCTP supported blockchain, which lets users withdraw USDC on that blockchain.
- Redeposits : xReserve redeposits funds, which lets users withdraw USDC-backed stablecoins on another remote blockchain.