/Developers. · 03.

Example: LP on Aave from another chain

Bridge and supply in one signature. WETH on Base in, aUSDC on Arbitrum out, and the solver does the staking.

iLayer.io~5 min4 chapters
Aave v3aUSDCBase → Arbitrum
/Example./Base → Arbitrum./in.WETH on Baseinputs: 0.01 WETH./out.aUSDC on Arbitrumoutputs: 9 aUSDC./solver.Supplies to AaveMints aUSDC, fills the order./you.Hold the positionNever touched Arbitrum.no bridgeno gas on ArbitrumaUSDC = LP tokenone signature
/Example./in.WETH on Baseinputs: 0.01 WETH./out.aUSDC on Arbitrumoutputs: 9 aUSDC./solver.Supplies to AaveMints aUSDC,fills the order./you.Hold the positionNever touched Arbitrum.no bridgeno gas on ArbitrumaUSDC = LP tokenone signature

Say we hold WETH on Base and want to provide USDC liquidity on Aave v3 on Arbitrum. The old way: bridge, wait, swap, approve, supply, four transactions on two chains. The iLayer way: one order whose output is the LP token itself.

/01 · Chapter.

The trick: ask for the receipt token

aUSDC is the token Aave mints when you supply USDC. It is a normal ERC-20 on Arbitrum. So we set aUSDC as the output token of the order and call the OrderHub on Base. We are not asking for USDC and then supplying it; we are asking for the position.

/02 · Chapter.

The order

{
  sourceChainId: "8453",        // Base
  destinationChainId: "42161",  // Arbitrum
  inputs: [
    // WETH on Base
    { tokenType: "FUNGIBLE_TOKEN", tokenAddress: "0x…4200000000000000000000000000000000000006", tokenId: "0", amount: "10000000" }
  ],
  outputs: [
    // aUSDC on Arbitrum
    { tokenType: "FUNGIBLE_TOKEN", tokenAddress: "0x…", tokenId: "0", amount: "9000000" }
  ],
  ...
}

Addresses are bytes32, hence the padded WETH address. Amounts come from the quote you accepted on the RFQ. The rest of the struct (recipient, filler, deadlines, bridge) follows the integration guide.

/03 · Chapter.

What the solver does

Solvers hold a numeraire balance, typically USDC. To fill this order a solver on Arbitrum supplies USDC to Aave, receives aUSDC, and hands exactly the quoted amount to the Spoke in a single multicall with fillOrder(). On Base the Hub releases the WETH to the solver, who consolidates it back into USDC. You never touched Arbitrum, held no gas there, and made one signature.

/04 · Chapter.

Variations

  • Want the position for someone else? Set recipient to their address.
  • Want to enter a vault that has no receipt token? Use outputs for the underlying and an execution hook for the deposit call (Intent 107).
  • Want gasless? Mark the order sponsored; the solver submits it and prices the gas into the quote.
/Read next.

Example: a cross-chain contract call.

Next: an order with no outputs at all, only calldata to run on another chain.

All posts