BlogCrosschain Swaps Explained: Swap and Bri...
Crosschain swaps let you trade one token on Chain A for another on Chain B in a single transaction. Here is how Across composes the swap and bridge into one action.
Jul 22, 20265 min read

Crosschain Swaps Explained: Swap and Bridge in One Transaction

Share this article

TL;DR

  • A crosschain swap turns the old multi-step routine (bridge, then swap, then maybe bridge again, paying gas on two chains) into one signed transaction with one declared outcome.

  • You specify an input token on Chain A and the minimum output token you want on Chain B. The Across Swap API computes the required input and returns ready-to-sign calldata.

  • The default tradeType is minOutput: you say "I want at least this much on the destination," and the API works backward to the input amount.

  • After the fill, tokens land in the MulticallHandler contract on the destination, which can run follow-on calls (transfer, deposit into a lending pool) in the same transaction. Across calls these embedded crosschain actions.

  • The protocol routes through one of three settlement pathways and picks the best one; you do not choose. Fills settle in roughly 2 seconds across 20+ chains, on infrastructure built by Risk Labs with no user funds ever lost since 2021.

  • Build on Across

The old way took three transactions and two gas tokens

Say you hold ETH on Arbitrum and you want USDC on Base. The pre-intent path: bridge the ETH to Base, wait for it to arrive, keep enough ETH on Base to pay gas, then open a DEX and swap ETH for USDC. Land on the wrong chain or the wrong asset, and you bridged again. Three transactions. Two gas balances to babysit. A window in the middle where your funds sat as the wrong token on a chain you never wanted them on.

A crosschain swap collapses that into one signed transaction. You declare the outcome you want, at least 2,000 USDC on Base, sign once on Arbitrum, and the swap and the bridge resolve together. The intermediate hops still happen. You just never touch them. The shift is from specifying every step to declaring one result.

A crosschain swap is one declared outcome

An intent is an order where you state the result you want instead of the execution path. Traditional bridges make you specify the path: lock tokens here, mint there, wait for finality, then swap. Intents invert that. You say "I want at least 2,000 USDC on Base," and a competitive network of relayers works out how to deliver it.

Across specializes exclusively in crosschain intents, outcomes that span more than one chain. A crosschain swap is the case where the input asset and the output asset differ and sit on different chains. ETH on Arbitrum in, USDC on Base out, one transaction.

How the swap and bridge resolve in one transaction

The whole thing runs through the Across Swap API. One call handles route discovery, the quote, and the executable calldata. You do not stitch a DEX aggregator and a bridge together yourself.

You pass an input token and chain, an output token and chain, and a tradeType. The recommended default is minOutput: "I want at least this much of the output token on the destination." The API computes the input amount needed to clear that floor and returns the calldata to sign. Want to pin the input instead and let the output float? exactInput runs it the other way. You fix what you spend, the API quotes what you receive.

So for ETH on Arbitrum to USDC on Base, minOutput lets you set 2,000 USDC as the floor and lets the API tell you how much ETH that costs. exactInput lets you spend exactly 1 ETH and quotes the USDC you would get back. A request carries originChainId, destinationChainId, the input and output token addresses, the amount, and your wallet as depositor. The response is one transaction. From your side, the swap and the bridge are a single action.

The protocol then routes through one of three settlement pathways, its own intents system, CCTP, or OFT, and picks the best one for the route automatically. You never configure it. A relayer fronts the output on the destination, which is why fills land in about 2 seconds instead of waiting on source-chain finality.

Embedded actions let the swap do something the moment it lands

The Across intent model has moved through three phases since 2021. Phase 1 was same-asset transfer: send USDC from Arbitrum to Base, same token on both ends. Phase 2 added execution, bridge an asset and then run a call on the destination, like depositing the bridged USDC into Aave. Phase 3 is the current state, swap plus execution: swap asset X on Chain A for a minimum amount of asset Y on Chain B, optionally followed by a transaction on the destination.

The MulticallHandler is what makes that follow-on call possible. Attach an actions array to the swap and set the recipient to the MulticallHandler contract on the destination chain. Once the relayer fills the intent, the destination SpokePool calls into the MulticallHandler, which runs your actions: a token transfer, a deposit into a lending pool, an arbitrary contract call. Across calls these embedded crosschain actions.

Each action names a target contract, a functionSignature, and its args. Arguments can be static, like a fixed recipient address, or dynamic. A dynamic argument with populateDynamically: true injects the actual swapped balance at execution time, pointed at a balanceSourceToken, so an action can deposit exactly what arrived without you knowing the amount in advance. Swap, bridge, and destination call settle atomically, in one transaction.

What you can build on top of it

The Swap API turns "any token in, any token out, on any supported chain" into a single integration point. The MulticallHandler turns the destination into a place where things happen, not just a place tokens land.

An app can let someone enter a position on Base while holding only ETH on Arbitrum, in one click: swap to the position's input token and deposit it, no manual bridging, no second gas balance. A wallet can offer "receive USDC on Base" against whatever the user already holds elsewhere. A protocol can accept deposits from any chain in any token without writing a line of bridge logic, because the declared output and the follow-on call ride in the same intent. The full mechanics, request format, and action schema live in the Across docs.

Across runs across 20+ chains and is built by Risk Labs, the foundation behind UMA. It has processed billions in volume since 2021 with no user funds ever lost.

One transaction, one outcome

The point of a crosschain swap is not that the steps got faster. It is that the steps stopped being yours to manage. You declare the token you want and the chain you want it on, sign once, and the bridge, the swap, and any follow-on call resolve underneath as one action. The intermediate transactions never had to be smoother for you. They were just taken off your desk.