Introduction
Celer Intent is a next-generation omnichain liquidity protocol designed to deliver seamless trading experiences for users and optimize capital efficiency for institutional market makers. Traditional cross-chain trading can be costly or even impractical, especially when handling large volumes, due to AMM-induced slippage and shallow liquidity in bridge-based pools. Celer Intent changes this by enabling “just-in-time” liquidity, allowing users to execute cross-chain swaps with zero slippage.
At its core, Celer Intent introduces an xRFQ (cross-chain Request For Quote) system. Instead of routing trades through a series of decentralized exchanges and bridges, user intents are broadcast directly to a network of professional market makers. The market maker offering the most competitive quote responds with a verifiable signature, and the transaction is settled atomically through smart contracts and Celer’s inter-chain messaging framework.
The Celer Intent protocol offers the following key benefits:
Low fees.
Since trades are executed directly between users and market makers on separate chains, Celer Intent eliminates the need for intermediate bridges and DEXes—reducing multi-hop fees that typically compound during cross-chain transactions.
Superior capital efficiency.
Unlike AMMs that require liquidity to be locked in pools regardless of activity, Celer Intent only requires capital at the moment of a confirmed user request. This “on-demand” model allows market makers to keep funds productive elsewhere when not in use, resulting in significantly better capital utilization than traditional bridges or DEXes.
Large cross-chain swaps with zero slippage.
Because trades are matched directly with market makers at a locked-in price, Celer Intent avoids the slippage typically seen with intermediate on-chain swaps—particularly when large transaction sizes are involved.
MEV resistance.
By operating outside the bounds of on-chain AMMs, Celer Intent prevents common MEV exploits such as sandwich attacks. All quotes are locked off-chain before execution, preserving pricing integrity.
Celer Intent is already live on mainnet and fully integrated with Celer cBridge. Developers of omnichain dApps—including bridges, DEXes, and aggregators—can easily plug in via the Celer Intent Open API. Market makers can connect through the Celer Intent SDK to start handling quotes and fulfilling cross-chain orders.
Most importantly, Celer Intent is a trustless protocol. Trades are executed only when all conditions are cryptographically verified and met. Neither the user nor the market maker can claim funds from the other without completing the full cross-chain transaction.
Workflow
To illustrate the cross-chain trade process, let’s walk through a common use case: a user wants to swap Token X on Chain A for Token Y on Chain B. This transaction is handled as a Request for Quote (RFQ) order.
Core Flow (cooperative case)
The diagram below outlines the typical RFQ execution process in Celer Intent, where both the user and the selected market maker act cooperatively. Note: The RFQ server operates as a centralized coordinator for communication and quote aggregation.
Core Flow.png)
Step 1
The user submits an RFQ to the RFQ server, specifying the following details:
- Source and destination chains
- Source and destination tokens
- Amount to be swapped
- Two key time constraints:
Source Submission Deadline: The user must confirm the quote and lock their tokens on the source chain before this deadline. If missed, the quote expires and the transaction will revert on-chain.
Destination Fund Release Deadline: The market maker must complete the transfer to the user on the destination chain before this deadline. Failure to do so makes the order eligible for refund.
Step 2
The RFQ server forwards the user’s request to a list of authorized market makers who are currently online and available to quote.
Step 3
Each market maker evaluates the RFQ and, if interested, submits a quote to the RFQ server. The server compares the received quotes and selects the most favorable one—typically the one offering the highest amount of destination tokens. The selected market maker then signs their quote and returns the signed version to the server.
Step 4
The RFQ server delivers the signed quote to the user for confirmation and submission.
Step 5
The user broadcasts the signed quote to the source chain contract, locking their source tokens into the Celer Intent smart contract. This action must occur before the source submission deadline. A delay past this deadline causes the transaction to fail.
This on-chain action also triggers Cross-Chain Message #1, which is dispatched through Celer Inter-chain Messaging to the destination chain. This message notifies the destination that the user has locked funds on the source chain and that the market maker is authorized to release the destination tokens.
Step 6
On the destination chain, the market maker executes a transaction that processes Message #1 and transfers the agreed destination tokens to the user. This must occur before the destination release deadline. If delayed beyond the deadline, the RFQ order becomes refundable and the transaction will revert.
Once successful, this transaction emits Cross-Chain Message #2, which is sent back to the source chain. This message confirms that the user has received their tokens, and instructs the source chain contract to release the locked funds to the market maker.
Step 7
Back on the source chain, the market maker finalizes the process by calling a contract function that processes Message #2. This releases the user’s locked source tokens to the market maker, completing the transaction.
Refund Flow (non-cooperative case)
If the market maker does not complete the transfer of destination tokens to the user before the designated destination release deadline, the RFQ order transitions into a refundable state on the destination chain.
To safeguard users in such cases, a monitoring component known as the RFQ Sentinel implemented using Brevis ZK Coprocessor continuously scans for expired or incomplete orders. When it detects an unfulfilled RFQ past the deadline, the sentinel generate a ZK proof of incomplete transaction and send a Cross-Chain Message #3, which is sent back to the source chain.
Upon receiving this message, the user is able to execute a transaction on the source chain to reclaim their originally locked tokens—ensuring that funds remain secure even when counterparties fail to cooperate.
Refund Flow (1).png)
Fee
Every RFQ order executed through Celer Intent includes two types of fees, both of which are paid in the source chain’s token:
Base Fee
This flat fee covers network-related costs such as gas and cross-chain messaging expenses. It may be charged by either the market maker or the Celer Intent protocol, depending on the setup of the transaction.
Percentage Fee
This fee is calculated as a proportion of the total swap amount. It is split into two parts:
- One portion is retained by the market maker, and may vary across different providers based on their pricing models.
- The remaining portion is collected by the Celer Intent protocol itself to support ongoing infrastructure and development.
Introduction
Market makers are a critical component of the Celer Intent ecosystem. Each participating market maker can adopt its own pricing and execution strategy when responding to RFQs. Below, we provide the key resources needed to build and integrate a market maker with the protocol.
If you’re interested in participating as a liquidity provider, please review the Celer Intent Market Maker SDK and explore the provided reference implementation. During the beta phase, onboarding is conducted via a whitelist process—fill out this formto express interest and become one of the early market makers supporting Celer Intent.
SDK
Please refer to Celer Intent Market Maker SDKfor details.
Sample Implementation
Please refer to Intent MM reference implementation for details.
Open API
This open API doc instructs you to interact with the Celer Intent system to bridge the token from source chain to destination chain
Steps of bridging on Celer Intent:
- Query order price
2. Quote from Celer Intent gateway.
3. Deposit assets to source chain srcDeposit
4. Get transaction status and history
API: rfqPrice
POST https://cbridge-prod2.celer.app/v1/rfqPrice
Request Body
| Name | Type | Description |
|---|---|---|
| srcToken* | JSON | source token description |
| dstToken* | JSON | destination receive token description |
| srcAmount* | String | input amount with source token decimal |
| dstNative* | Bool | true when destination receive token is a native token |
// quote reponse example
{
"price": {
"srcToken": {
"chainId": 5,
"symbol": "USDC",
"address": "0xCbE56b00d173A26a5978cE90Db2E33622fD95A28",
"decimals": 0,
"name": "",
"logoUri": ""
},
"srcAmount": "100000000",
"dstToken": {
"chainId": 97,
"symbol": "USDC",
"address": "0x855fC87f7F14Db747ef27603b02bAe579ba947B6",
"decimals": 0,
"name": "",
"logoUri": ""
},
"srcReleaseAmount": "99900000",
"dstAmount": "99700000",
"feeAmount": "200000",
"validThru": 1665553346,
"mmAddr": "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1",
"sig": "286bc92a206d79c936897a386f0a8cd1486c5f9b2cf6205ca31c7f11634029d507e681cb4a12a41f121b9d4c7bea98631cda34eeb81ae5d982a462c96d315e6100",
"srcDepositPeriod": 250,
"dstTransferPeriod": 720
},
"fee": "300000",
"mmId": "mm003",
"txMsgFee": "132000000000000"
}
Request Parameters
| Name | Type | Description |
|---|---|---|
| srcToken | TokenInfo | source token |
| dstToken | TokenInfo | receiving token on destination chain |
| srcAmount | String | Input amount with token decimal |
| dstNative | Bool | receiving token is native token on destination chain |
Response Parameters
Response Body
| price | Price | rfq price for this quote |
| fee | string | Protocol fee + market maker charged fee |
| mmId | string | The uniq id of market marker |
| txMsgFee | string | SGN charges fees to sync, store, and sign messages |
Price
| Name | type | Description |
|---|---|---|
| src token | TokenInfo | Source token information |
| dst token | TokenInfo | Destination receive token information |
| srcAmount | string | Input amount with src token decimal |
| dstAmount | string | Estimated received amount on destination chain |
| feeAmount | string | market maker fee + msg fee + src tx gas cost + dst tx gas cost |
| validThru | timestamp | Unix epoch milliseconds. the time before which the price response is valid for Quote |
| mmAddr | string | Market maker address |
| sig | string | Market marker uses this signature to verify the price content is agreed by them previously |
| srcDepositPeriod | number | Unit second. The maximum src deposit period that is expected by market maker, will be started from the time when mm receives the quote request. |
| dstTransferPeriod | number | Unit second. The minimum destination transfer period that is expected by market maker, will be started from the time when mm receives the quote request. |
TokenInfo
| Name | Type | Description |
|---|---|---|
| chain_id | number | Chain id |
| symbol | string | Token Symbol |
| address | string | Token address |
API: rfqQuote
POST https://cbridge-prod2.celer.app/v1/rfqQuote
Request Body
| Name | Type | Description |
|---|---|---|
| price* | JSON | refer to the Price Table |
| mmId* | String | market marker uniq id |
| sender* | String | user wallet address |
| receiver* | String | wallet address who receive the token on destination chain |
| refundTo* | String | refund address when source transaction failed |
| srcDeadline* | Number | srcDepositPeriod (price struct) + current timestamp |
| dstDeadline* | Number | dstTransferPeriod (price struct) + current timestamp |
| srcNative* | Bool | true when source token is a native token |
| dstNative* | Bool | true when destination receive token is a native token |
// Response example
{
"srcTokenUsdPrice": 1,
"dstTokenUsdPrice": 1,
"quote": {
"hash": "0x99f8c9969000a8adca8282d278853dcbd822f48873152b2c951317173d656eb1",
"srcToken": {
"chainId": 5,
"symbol": "USDC",
"address": "0xCbE56b00d173A26a5978cE90Db2E33622fD95A28",
"decimals": 6,
"name": "USD Coin",
"logoUri": "https://get.celer.app/cbridge-icons/USDC.png"
},
"srcAmount": "100000000",
"srcReleaseAmount": "99900000",
"dstToken": {
"chainId": 97,
"symbol": "USDC",
"address": "0x855fC87f7F14Db747ef27603b02bAe579ba947B6",
"decimals": 6,
"name": "",
"logoUri": ""
},
"dstAmount": "98826590",
"srcDeadline": 1665563808,
"dstDeadline": 1665564278,
"nonce": 718699599,
"sender": "0x82571c922D3FAaf48df53C74bB0f116e48C34f93",
"receiver": "0x82571c922D3FAaf48df53C74bB0f116e48C34f93",
"refundTo": "0x82571c922D3FAaf48df53C74bB0f116e48C34f93",
"mmAddr": "0x58b529F9084D7eAA598EB3477Fe36064C5B7bbC1"
}
}
Request Parameters
| Name | Type | Description |
|---|---|---|
| price | Price | |
| mmId | String | market marker uniq id |
| sender | String | user wallet address |
| receiver | String | wallet address who receive the token on destination chain |
| refundTo | String | refund address when source transaction failed |
| srcDeadline | Number(Second) | srcDepositPeriod (from priceRfq) + current timestamp in second |
| dstDeadline | Number(Second) | dstTransferPeriod (from priceRfq) + current timestamp in second |
| srcNative | Bool | true when source token is a native token |
| dstNative | Bool | true when destination receive token is a native token |
Response Parameters
| Name | Type | Description |
|---|---|---|
| srcTokenUsdPrice | String | source token usd price |
| dstTokenUsdPrice | String | destination token usd price |
| quote | Quote |
Quote
| Name | Type | Description |
|---|---|---|
| hash | String | The quote hash, uniq id to mark this quote. |
| srcToken | TokenInfo | source token |
| srcAmount | String | Input amount with source token decimal |
| dstToken | TokenInfo | Receiving token on destination chain |
| dstAmount | String | quote received amount |
| srcDeadline | Number(Second) | srcDepositPeriod (from rfqPrice API) + current timestamp |
| dstDeadline | Number(Second) | dstTransferPeriod (from priceRfq) + current timestamp in second |
| nonce | Number | nonce for rfq contract transaction calling |
| sender | String | sender address |
| receiver | String | receive address |
| refundTo | String | refund address when source transaction failed |
| mmAddr | String | market marker address |
Contract: srcDeposit
Requirements
- Get the quote result from rfqQuote API
- Find the corresponding contract address here
ABI (optional if you use the binding like Typechain)
srcDeposit/srcDepositNative
Lock the assets to source rfq contract. if the bridge token is a native token, use the srcDepositNative.
// typechain method example
srcDeposit(
_quote: RFQ.QuoteStruct,
_submissionDeadline: BigNumberish,
overrides?: PayableOverrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
Request Parameters
| Name | Type | Description |
|---|---|---|
| _quote | RFQ.QuoteStruct | refer to RFQ.QuoteStruct |
| _submissionDeadline | Number | get form rfqQuote srcDeadline filed |
| value(msg.value) | String | ERC20 bridge: msgFee, Native token bridge: msgFee + source token amount |
RFQ.QuoteStruct
| Name | Type | Description |
|---|---|---|
| srcChainId | Number | source chain id |
| srcToken | String | source token address |
| srcAmount | String | Input amount with source token decimal |
| srcReleaseAmount | NOT REQUIRED | |
| dstChainId | Number | destination chain id |
| dstToken | String | Destination token address |
| dstAmount | String | get from rfqQuote dstAmount filed |
| deadline | Number(Second) | get from rfqQuote dstDeadline filed |
| nonce | Number | get from rfqQuote nonce filed |
| sender | String | rfq contract sender address |
| receiver | String | receive address |
| refundTo | String | refund address, Usually the user wallet address. |
| liquidityProvider | String | market maker address, get form rfqQuote mmAddr filed |
Once the transaction submitting, same as other EVM bridge, user history can be found in TransferHistory API, and the transaction process status can be found in GetTransferStatus API.
Contract Addresses
| Chain | Celer Intent Contract Address |
|---|---|
| BNB Chain | 0x2b1E704FC7885888E54619Ac58496848ecC7dbB7 |
| Arbitrum | 0x061691567026bf6384Ca1Ab2402346E9bD1d0765 |
Audit Reports
Audit reports:
https://github.com/celer-network/intent-rfq-contract/tree/main/audit
Github
Intent Contracts: