Circle USYC 백서

Circle USYC

원문

bitpro가 원문에서 글자만 모은 내용이에요. 표·그림·수식은 빠지거나 깨질 수 있어요. 전체 75쪽 중 27쪽

on this endpoint, see the [`GET /v2/burn/USDC/fees` API reference](/api-reference/cctp/all/get-burn-usdc-fees). <Note> `includeRecipientSetup` only applies when the destination blockchain is Solana. It has no effect for EVM destination blockchains. </Note> ## Supported blockchains For a full list of supported blockchains, see [CCTP Supported Blockchains](/cctp/concepts/supported-chains-and-domains). # How upfront fees work Source: https://developers.circle.com/cctp/concepts/how-upfront-fees-work Learn how CCTP collects upfront fees and completes Fast Transfer and Forwarding Service transfers. Paying fees upfront starts with requesting a signed fee quote from Circle, then submitting that quote with the burn in a single transaction on the source blockchain. Circle honors the quoted price, so the recipient receives the full transferred amount. For a full walkthrough, see [Transfer USDC with upfront fees](/cctp/howtos/transfer-usdc-with-upfront-fees). ## Transfer flow with upfront fees ```mermaid theme={null} sequenceDiagram actor User participant API as Quote API participant USDC as USDC token participant TMWF as TokenMessengerWithFees participant CCTP as TokenMessengerV2 participant Circle as Circle User->>API: Request fee quote API-->>User: Signed, time-bound quote User->>USDC: approve(TMWF, amount [+ fee]) User->>TMWF: depositForBurnWithFees (quote + fee) TMWF->>TMWF: Verify quote and collect fee TMWF->>CCTP: depositForBurn CCTP-->>Circle: Burn message emitted Circle-->>User: Full amount minted on destination ``` <Steps> <Step title="Request a quote"> Request an [upfront fee quote](/cctp/concepts/upfront-fee-quotes) from the [Quote API](/api-reference/cctp/all/create-usdc-burn-quote) for the fees you want to pay upfront: the Forwarding Service fee, the Fast Transfer fee, or both. See [Paying the fee](#paying-the-fee) for the available fee tokens. </Step> <Step title="Receive a signed quote"> Circle returns a signed, time-bound quote that prices each fee and includes a `signedQuote` blob. </Step> <Step title="Approve USDC"> Approve [`TokenMessengerWithFees`](/cctp/references/contract-interfaces#tokenmessengerwithfees) to spend the USDC amount you're transferring, plus the quoted fee if you're paying it in USDC. The contract pulls the transfer amount for the burn and, if applicable, the fee amount. </Step> <Step title="Submit the burn"> Call `depositForBurnWithFees` (or `depositForBurnWithHookAndFees`) on `TokenMessengerWithFees`, passing the signed quote along with the standard `depositForBurn` parameters, and pay the quoted fee amount: attach it as the transaction's native value, or rely on the USDC approval from the previous step. </Step> <Step title="Fee is collected and tokens are burned"> The contract verifies the quote, collects the fee, and then delegates to `TokenMessengerV2` to complete the CCTP burn. </Step> <Step title="Full amount is minted"> Circle attests the transfer with no fee deducted at mint, and the full amount is minted to the recipient. </Step> </Steps> ## Paying the fee The token you selected on the quote request decides where the fee comes from: * **Native gas token** (default): attach the quoted amount as the transaction's native value. * **USDC**: request the quote with `feeToken` set to the USDC address, then approve `TokenMessengerWithFees` to spend the quoted fee before you submit. This fee approval is on top of the USDC you're transferring, so approve the transfer amount plus the quoted fee. ## Forwarding with upfront fees When a quote includes a `FORWARD` fee, the transfer is forwarded on the destination blockchain the same way as any other [Forwarding Service](/cctp/concepts/forwarding-service) transfer, except that the forwarding fee isn't deducted from the transferred amount. What changes is how you supply the hook data. Forwarding requires a valid `cctp-forward` hook in the submitted hook data. [`depositForBurnWithFees`](/cctp/references/contract-interfaces#depositforburnwithfees) builds this hook for you automatically, as long as you request the quote without passing `hookData`. For custom hook data, use [`depositForBurnWithHookAndFees`](/cctp/references/contract-interfaces#depositforburnwithhookandfees) and submit the same `hookData` you used to request the quote. For the hook structure, including how to append your own frame, see [Forwarding Service hook format](/cctp/concepts/forwarding-service#hook-format). # Supported blockchains and domains Source: https://developers.circle.com/cctp/concepts/supported-chains-and-domains Blockchains and domain identifiers supported by CCTP CCTP is available on multiple blockchains where USDC is natively issued. Each blockchain is assigned a unique domain identifier used in [CCTP contracts](/cctp/references/contract-addresses) and API calls. ## Supported blockchains CCTP provides [Standard Transfer](/cctp/concepts/finality-and-block-confirmations#standard-transfer-attestation-times), [Fast Transfer](/cctp/concepts/finality-and-block-confirmations#fast-transfer-attestation-times), Hooks, [Forwarding Service](/cctp/concepts/forwarding-service), and [upfront fees](/cctp/concepts/upfront-fees) capabilities on the following blockchains. All blockchains listed below are supported as destinations. <Note> **Fast Transfer availability:** [Fast Transfer](/cctp/concepts/fast-transfer-allowance) is available for source chains only when it provides a meaningful speed improvement over standard burn attestation times. For blockchains where standard attestation is already fast, Fast Transfer is not necessary. These chains are marked **N/A** in the Source (Fast transfer) column in the following table. </Note> | Blockchain | Source (Standard transfer) | Source (Fast transfer) | Source (Upfront fees) | Forwarding Service | | - | - | - | - | - | | Aptos | ✅ | N/A | ❌ | ❌ | | Arbitrum | ✅ | ✅ | ✅ | ✅ | | Arc | ✅ | N/A | ✅ | ✅ | | Avalanche | ✅ | N/A | ✅ | ✅ | | Base | ✅ | ✅ | ✅ | ✅ | | BNB Smart Chain (USYC only) | ✅ | N/A | ❌ | ❌ | | Codex | ✅ | ✅ | ✅ | ✅ | | Cronos | ✅ | N/A | ❌ | ❌ | | EDGE | ✅ | ✅ | ❌ | ✅ | | Ethereum | ✅ | ✅ | ✅ | ✅ | | HyperEVM | ✅ | N/A | ✅ | ✅ | | Injective | ✅ | N/A | ❌ | ❌ | | Ink | ✅ | ✅ | ✅ | ✅ | | Linea | ✅ | ✅ | ✅ | ✅ | | Monad | ✅ | N/A | ✅ | ✅ | | Morph | ✅ | ✅ | ❌ | ❌ | | OP Mainnet | ✅ | ✅ | ✅ | ✅ | | Pharos | ✅ | N/A | ❌ | ❌ | | Plasma | ✅ | N/A | ❌ | ❌ | | Plume | ✅ | ✅ | ✅ | ✅ | | Polygon PoS | ✅ | N/A | ✅ | ✅ | | Sei | ✅ | N/A | ✅ | ✅ | | Solana | ✅ | ✅ | ❌ | ✅ | | Sonic | ✅ | N/A | ✅ | ✅ | | Starknet | ✅ | ✅ | ❌ | ❌ | | Stellar | ✅ | N/A | ❌ | ❌ | | Sui | ✅ | N/A | ❌ | ❌ | | Unichain | ✅ | ✅ | ✅ | ✅ | | World Chain | ✅ | ✅ | ✅ | ✅ | | X Layer | ✅ | ✅ | ❌ | ❌ | | XDC | ✅ | N/A | ✅ | ✅ | <Note> On Stellar, USDC precision and address encoding differ from other CCTP-supported blockchains. For inbound transfers, use [`CctpForwarder`](/cctp/references/stellar#use-cctpforwarder-for-stellar-recipients) so funds reach the correct recipient. See [CCTP on Stellar](/cctp/references/stellar). </Note> <Note> **Testnet support:** If a mainnet is listed, its official testnet is also supported. For example, Ethereum includes both Ethereum Mainnet and Ethereum Sepolia. Monad is the exception: upfront fees aren't supported on Monad Testnet. </Note> ### Upfront fees The column labeled "Source (Upfront fees)" indicates whether you can pay fees for Forwarding Service and Fast Transfer services [upfront](/cctp/concepts/upfront-fees) on the source blockchain. The services you pay for must also be supported on your route: Fast Transfer on the source blockchain, and the Forwarding Service on the destination. Upfront fees apply to USDC transfers only; they aren't supported for USYC. ### Forwarding Service The column labeled "Forwarding Service" indicates whether the blockchain is available as a destination for the [Circle Forwarding Service](/cctp/concepts/forwarding-service). ## Domain identifiers A domain is a Circle-issued identifier for a blockchain where CCTP contracts are deployed. Domain identifiers don't map to existing public chain IDs. Use domain identifiers when calling CCTP contracts and API endpoints: | Domain | Blockchain | | :- | :- | | 0 | Ethereum | | 1 | Avalanche | | 2 | OP Mainnet | | 3 | Arbitrum | | 5 | Solana | | 6 | Base | | 7 | Polygon PoS | | 8 | Sui | | 9 | Aptos | | 10 | Unichain | | 11 | Linea | | 12 | Codex | | 13 | Sonic | | 14 | World Chain | | 15 | Monad | | 16 | Sei | | 17 | BNB Smart Chain | | 18 | XDC | | 19 | HyperEVM | | 21 | Ink | | 22 | Plume | | 25 | Starknet | | 26 | Arc | | 27 | Stellar | | 28 | EDGE | | 29 | Injective | | 30 | Morph | | 31 | Pharos | | 32 | Cronos | | 33 | Plasma | | 37 | X Layer | ## Supported tokens Not all domains support the same tokens: * [USDC](/stablecoins/what-is-usdc): Supported on all CCTP domains except BNB Smart Chain * [USYC](/tokenized/usyc/overview): Supported only on Ethereum and BNB Smart Chain ## CCTP V1 (Legacy) only The following blockchains are supported only by CCTP V1 (Legacy). If you are building on these chains, refer to the [V1 documentation](/cctp/v1) for integration guides and contract references. | Blockchain | Domain | Documentation | | - | - | - | | Noble | 4 | [Noble Cosmos module](/cctp/v1/noble-cosmos-module) | # Upfront fee quotes Source: https://developers.circle.com/cctp/concepts/upfront-fee-quotes Request a signed quote for CCTP Fast Transfer and Forwarding Service fees and learn how fee types and quote expiry work. A fee quote is a signed, [time-bound](#quote-expiry) price for the upfront fees on a specific transfer. Requesting one locks in the Fast Transfer fee, the Forwarding Service fee, or both, so you know the exact cost before you submit the transfer. To see where the quote fits in the end-to-end flow, see [How upfront fees work](/cctp/concepts/how-upfront-fees-work). ## Requesting a quote Call [`POST /v2/quote/burn/usdc/{sourceDomainId}/{destDomainId}`](/api-reference/cctp/all/create-usdc-burn-quote) with these request fields: * `amount`: the USDC transfer amount, in minor units. * `feeToken`: the token you want to pay fees in. Use the zero address (the default) to price the fee in the native gas token, or the source blockchain's USDC address to price it in USDC. * `requests`: the fees to price. Include a `FORWARD` request for the Forwarding Service fee, a `PRE_FINALITY` request for the Fast Transfer fee, or both, with at most one of each type. The response includes the `signedQuote` blob you submit onchain, the total fee and fee token, a per-type breakdown, and the quote's issue time and expiry. <Note> A quote is bound to the exact transfer it prices. Request the quote with the same amount and destination domain you submit onchain. For a `FORWARD` fee, also match the destination caller and hook data. If any bound value differs when you submit, the transfer reverts. </Note> ## Fee types You can pay two types of fees upfront, one per service. | Fee type | Service | | - | - | | `FORWARD` | [Forwarding Service](/cctp/concepts/forwarding-service) | | `PRE_FINALITY` | [Fast Transfer](/cctp/concepts/fees) | A `FORWARD` request requires a destination domain where Forwarding Service is supported, and a `PRE_FINALITY` request requires a source blockchain available for Fast Transfers. See [Supported blockchains](/cctp/concepts/supported-chains-and-domains) for the blockchains that support each service. ## Quote expiry Each quote expires after a short, fixed window that depends on the source blockchain. Submit the transfer before the quote expires; otherwise, request a new quote. The following table lists the approximate expiry window for each supported source blockchain. These values are subject to change. | Source blockchain | Approximate quote expiry | | - | - | | Arbitrum | 2 minutes | | Arc testnet | 2 minutes | | Avalanche | 2 minutes | | Base | 2 minutes | | Codex | 2 minutes | | Ethereum | 2 minutes 30 seconds | | HyperEVM | 2 minutes | | Ink | 2 minutes | | Linea | 2 minutes | | Monad | 2 minutes | | OP Mainnet | 2 minutes | | Plume | 2 minutes | | Polygon PoS | 2 minutes | | Sei | 2 minutes | | Sonic | 2 minutes | | Unichain | 2 minutes | | World Chain | 2 minutes | | XDC | 2 minutes | A quote's expiry is either an exact wall-clock time or a source blockchain block number. For a block-number expiry, translating it into remaining time requires knowing the source blockchain and its live block height. # Upfront fees for CCTP Source: https://developers.circle.com/cctp/concepts/upfront-fees Quote and pay CCTP Fast Transfer and Forwarding Service fees upfront on the source blockchain so the recipient receives the full transferred USDC amount. Upfront fees let you pay CCTP Fast Transfer and Forwarding Service fees on the source blockchain, separately from the USDC transfer, instead of having them deducted from the transfer amount. You request a signed quote from Circle, approve the [`TokenMessengerWithFees`](/cctp/references/contract-interfaces#tokenmessengerwithfees) contract to spend the USDC transfer amount plus the fee (if you're paying it in USDC), then pay the quoted fee and submit the burn in one call to that contract on the source blockchain. Because Circle collects the fee separately from the USDC transfer, the recipient receives the full transferred amount. ## Benefits of paying fees upfront By default, CCTP deducts fees from the USDC you move. Both [Fast Transfer](/cctp/concepts/fees) and [Forwarding Service](/cctp/concepts/forwarding-service) fees are set through the `maxFee` parameter on the burn and taken from the transferred amount, so the amount minted is smaller than the amount burned. The exact fee resolves at attestation time. To deliver a specific amount, you have to burn that amount plus the fees and account for fee variability. Paying fees upfront changes this: * **Deliver an exact amount without extra math.** You burn exactly the amount the recipient receives and pay the fees separately, so you don't need to inflate the burn to cover the Fast Transfer and Forwarding Service fees. The recipient receives the full amount, whether the transfer uses Fast Transfer, the Forwarding Service, or both. * **Pay in the native gas token or USDC.** You choose whether the fee is charged in the source blockchain's native gas token or in USDC. * **Predictable pricing.** A signed quote fixes the fee for a short expiry window, so you know the exact cost before you submit the transfer. Circle honors the quote and processes the transfer at the quoted price even if fees rise after you request it, as long as you submit before the quote expires. # CCTP for non-USDC assets Source: https://developers.circle.com/cctp/expanded-assets A permissionless wrapping layer for third-party assets, built on CCTP. CCTP for non-USDC assets is a smart contract layer built on [CCTP](/cctp) that enables permissionless crosschain bridging of third-party assets. It reuses CCTP's message-passing infrastructure and the Iris attestation service to move assets across blockchains using the same attestation model that powers USDC crosschain transfers. <Note> To transfer USDC across blockchains, use standard [CCTP](/cctp). USDC behavior is unchanged. </Note> ## Choose your integration path The right starting point depends on your relationship to the asset. * **Transfer a configured token**: The token is already configured (including pre-configured tokens like EURC). No configuration required on your end. Typical use cases: wallets, DEXs, bridge aggregators, and any app that moves non-USDC assets between blockchains. See [Transfer EURC from Ethereum to Arc](/cctp/expanded-assets/quickstarts/transfer-eurc-ethereum-to-arc). * **Make your token crosschain**: You issue or control the token. Configure it as a custom token to retain full ownership of rate limits, denylist, pause, and upgrades. Circle has no override on custom connections. Typical tokens: fiat-backed stablecoins, RWAs, cirBTC. See [Configure a custom token](/cctp/expanded-assets/quickstarts/configure-custom-token). * **Bridge an unmanaged asset**: You don't own or operate the token. Configure it as an ownerless connection that starts without an owner and runs on protocol defaults. Typical tokens: wrapped Ether (WETH), wrapped SOL. See [Configure an ownerless token](/cctp/expanded-assets/quickstarts/configure-ownerless-token). * **Issue a new token natively crosschain**: You have no existing token and want to launch one that is crosschain from day one. The protocol deploys a `CrossChainToken` ERC-20 and its `TokenManager` at deterministic addresses through CREATE3, using your deployment wallet and a salt you choose. See [Deploy a native crosschain token](/cctp/expanded-assets/quickstarts/deploy-native-crosschain-token). ## Comparison with standard CCTP | Feature | CCTP | CCTP for non-USDC | | - | - | - | | Token scope | USDC | EURC and any configured ERC-20 | | Entry contract | `TokenMessengerV2` | `CrossChainTokenService` | | Fee model | Fee deducted from the transferred amount | Fee paid in native gas on the source blockchain | | Forwarding | Compulsory when used | Optional; requested at quote time | | Attestation | Iris | Iris (shared with CCTP) | | Hooks | Yes | Yes, with atomic on-arrival execution | | Audiences | Anyone moving USDC or EURC | Token issuers, RWA platforms, and apps integrating third-party assets | # CCTP for non-USDC architecture Source: https://developers.circle.com/cctp/expanded-assets/concepts/architecture How the CCTP for non-USDC contracts work together to move non-USDC assets across blockchains. Built on top of CCTP, this layer reuses [`MessageTransmitterV2`](/cctp/references/contract-interfaces#messagetransmitterv2) and [Iris](/cctp/references/attestation-verification) (Circle's attestation API) to move arbitrary ERC-20 tokens across blockchains. Four additional contracts handle token configuration, balance changes, and the developer-facing API. ## Components * **`CrossChainTokenService`**: The singleton entry point on each domain. Configures tokens, deploys remote token contracts, and routes crosschain transfers. * **`TokenManager`**: Deployed per token on each domain. Moves tokens (mint, burn, lock, or unlock) and enforces per-token controls including rate limits, max transfer amount, and pause. * **`CrossChainToken`**: An ERC-20 with `ERC20Permit` deployed for tokens that are natively crosschain. Holders call `crossChainTransfer` directly on the token. * **`CrossChainTokenExecutable`**: Optional abstract helper for destination receivers. Integrators can implement `executeWithCrossChainToken` directly and return `EXECUTE_SUCCESS`. See [Hooks](/cctp/expanded-assets/concepts/hooks). ## Transfer flow The following sequence shows a transfer from a source domain to a destination domain: ```mermaid theme={null} sequenceDiagram participant Sender participant CCTS as CrossChainTokenService<br/>(source) participant TM_S as TokenManager<br/>(source) participant MT_S as MessageTransmitterV2<br/>(source) participant Iris as Iris<br/>(offchain) participant MT_D as MessageTransmitterV2<br/>(destination) participant CCTS_D as CrossChainTokenService<br/>(destination) participant TM_D as TokenManager<br/>(destination) participant Recipient Sender->>TM_S: approve(amount) Sender->>CCTS: crossChainTransfer(tokenId, amount, ...) CCTS->>TM_S: takeToken(sender, amount) TM_S->>TM_S: burn or lock CCTS->>MT_S: sendMessage(...) MT_S-->>Iris: emit MessageSent Iris-->>MT_D: deliver attestation MT_D->>CCTS_D: receiveMessage(...) CCTS_D->>TM_D: giveToken(recipient, amount) TM_D->>Recipient: mint or unlock ``` The exact behavior at the source and destination `TokenManager` depends on the [token's manager type](#token-manager-types). ## Component map ```mermaid theme={null} graph TD CCTS["CrossChainTokenServi
프로젝트로 돌아가기