Skip to main content
When you include fees in your transfer, relayers automatically finalize it on the destination chain. No extra work required.

How It Works

  1. You submit a transfer with fees on the source chain
  2. Relayers detect your transfer and verify it’s profitable
  3. A relayer finalizes the transfer on the destination chain
  4. The relayer claims your fee as payment
Without fees, you’d need to finalize manually (see Manual Finalization).

Getting a Fee Quote

Including Fees in a Transfer

Pass the fee values to validateTransfer():

Two Ways to Pay

You can pay fees in the transfer token, the native token, or both:

Token Fee

Paid in the token you’re transferring. Deducted from the amount.

Native Fee

Paid in the source chain’s native token (ETH, NEAR, SOL). Recipient gets the full amount.

Combined

Split between both. Useful for optimizing costs.
Relayers accept any combination that meets their threshold.

Fee Factors

Fees depend on:
  • Source chain — Gas costs for proof verification
  • Destination chain — Finalization costs
  • Token — Some tokens have different fee structures
  • Amount — Large transfers may have percentage-based fees
Fee quotes are valid for a limited time. Fetch a fresh quote right before sending large transfers.

UI Pattern

Show users what they’ll receive:

Updating Fees on Stuck Transfers

If your transfer isn’t getting picked up (fee too low, market changed), you can increase the fee:
Rules:
  • Only the original sender can update token fees
  • Fees can only increase, never decrease
  • Attach the difference when increasing native fees

Without Fees

Set both to zero:
Relayers will ignore your transfer. You’ll need to finalize it yourself. See Manual Finalization.

Error Handling

Next Steps

Track Status

Monitor your transfer’s progress

Manual Finalization

Finalize without relayers