Skip to main content
Version: 0.1.x-legacy


Crosschain Txs

The core flow for sending a transaction through Connext consists of:

  1. Getting a transfer quote: returns an estimated price and commitment for the transfer.
  2. Starting the transfer: sends the user's transaction on chain A and waits for the network to provide liquidity.
  3. Finishing the transfer: completes the user's transaction on chain B.


The getTransferQuote function accepts the following arguments:

  • sendingAssetId: Required. Address of token on the initiating chain. Use Address(0) for native assets like $ETH.
  • sendingChainId: Required. ChainId of the initiating chain.
  • receivingAssetId: Required. Address of token on the receiving chain. Use Address(0) for native assets like $ETH.
  • receivingChainId: Required. ChainId of the receiving chain.
  • receivingAddress: Required. Address that the token will be sent to on receiving chain. If callData and callTo is provided, then receivingAddress acts as a fallback in case of a contract revert on the receiving chain.
  • amount: Required. Amount of funds (as BigNumber) to be sent either as a transaction or along with a calldata payload.
  • expiry: Optional. Fallback duration after which a tx is forcibly reverted if there is no response from the network. Recommended: 72 hours.
  • callTo: Optional. Destination contract address if doing a crosschain contract call.
  • callData: Optional. Calldata for crosschain contract call.

It returns an AuctionResponse object.


const quote = await sdk.getTransferQuote({
sendingAssetId: "0x9aC2c46d7AcC21c881154D57c0Dc1c55a3139198",
sendingChainId: 4,
receivingAssetId: "0x8a1Cad3703E0beAe0e0237369B4fcD04228d1682",
receivingChainId: 5,
receivingAddress: "0x5A9e792143bf2708b4765C144451dCa54f559a11",
amount: utils.parseEther("1"),

// You can validate price paid by user with data from quote
const feeEstimate = amount.sub(;

Executing the Transaction

First, prepareTransfer to initiate the transaction to our contracts. Then, wait for the transaction to be prepared on the receiving chain and call fulfillTransfer.

// start transfer, will either prompt user for sigs/transactions or sign with unlocked account
const transfer = await sdk.prepareTransfer(quote);

// wait for receiver prepared event
const prepared = await sdk.waitFor(
(data) => data.txData.transactionId === transfer.transactionId // filter function

await sdk.fulfillTransfer(prepared);
// done!

Next Steps

See the other sections in this folder for information on events, etc.

Full Example

See the test-ui for a full working example of a React integration of the SDK.