Composer × Earn
Deposit into a yield vault from any L2 with a single signature.
Composer compiles several operations (fee collection → bridge → swap → vault deposit) into one transaction. The user signs once; LI.FI contracts execute the rest onchain.
Real onchain execution · every step is confirmed in your wallet
Execute
Connect a wallet to execute.
Developer viewThe requests, calldata and status data behind this transaction
Get a quote first.
Success examples
Real onchain transactions, loaded live from the LI.FI status API.
Arbitrum USDC → Base Spark USDC Vault (Morpho)
Arbitrum → Base · 2026-10-14Loading onchain status…
From the user's side: one signature and one Arbitrum gas payment (~$0.012); a second later, 0.897 sparkUSDC (~$0.98) is in the Base wallet. Bridging, the vault deposit and returning the shares all happen automatically. First-time users without an existing USDC allowance also sign one approval beforehand.
Flow diagram
Your wallet (Arbitrum) │ 1 signature · pays 1 USDC ▼ LI.FI Diamond ──① fee 0.0025 USDC──▶ LI.FI fee address │ ② 0.9975 USDC + "deposit into the vault on Base" instructions ▼ Across SpokePool (Arbitrum) ┊ bridge · ~1 second ▼ Across relayer fronts 0.970929 USDC on Base (Across fees deducted) ▼ LI.FI receiver → Composer execution │ ③ deposits 0.970929 USDC ▼ Spark USDC vault (Morpho) ──④ mints 0.897024 sparkUSDC──▶ your wallet (Base)
View on LI.FI Scan ↗Step-by-step (from the onchain logs of both transactions)
- 1
You (the only signature) · Arbitrum
0x0ead…c581 ↗Call the LI.FI Diamond on Arbitrum, paying 1 USDC
- LI.FI takes a 0.0025 USDC fixed fee (0.25%)
- The remaining 0.9975 USDC goes into the Across SpokePool, together with instructions for Composer to deposit it into the Spark vault on Base
- This is the only transaction you pay gas for: ~$0.012 (Arbitrum ETH)
- 2
Across relayer (automatic, ~1s later) · Base
0x3061…5534 ↗Fronts its own funds on Base, handing 0.970929 USDC to the LI.FI receiver
- Across deducts ~0.0266 USDC relayer fees (covering Base gas); the relayer pays this transaction's gas
- The relayer is later repaid from the SpokePool on Arbitrum; the user does nothing
- 3
Composer (inside the same Base transaction) · Base
0x3061…5534 ↗Deposits 0.970929 USDC into the Spark USDC vault (Morpho), mints 0.897024 sparkUSDC and sends it to your wallet
- The logs show an ERC-4626 Deposit event; the underlying USDC flows into Morpho Blue
- Received 0.897024 sparkUSDC, above the quoted estimate (0.885184) and minimum (0.880758)
- Had the deposit failed, this step would revert and USDC would stay in your Base wallet (the bridge leg does not roll back)
- 1
Base sparkUSDC (Spark USDC Vault) → Arbitrum USDC
Base → Arbitrum · 2026-10-14Loading onchain status…
From the user's side: one signature on Base turns sparkUSDC into 0.961239 USDC in the Arbitrum wallet. Unlike the deposit, Composer works on the source chain here: redeem first, then bridge the actual amount. The vault shares are an ERC-20, so a first-time user also approves them to the LI.FI contract beforehand.
Flow diagram
Your wallet (Base) │ 1 signature · hands over 0.897024 sparkUSDC ▼ LI.FI Diamond ──① fee 0.002242 sparkUSDC──▶ LI.FI fee address │ 0.894782 sparkUSDC ▼ Composer execution │ ② redeem: burn 0.894782 sparkUSDC ▼ Spark USDC vault (Morpho) ──pulled from Morpho Blue──▶ 0.968503 USDC │ ③ hands the actually redeemed amount to Across ▼ Across SpokePool (Base) recipient = your Arbitrum address, no message ┊ bridge · near-instant ▼ Across relayer sends 0.961239 USDC on Arbitrum ──▶ your wallet (Arbitrum)
View on LI.FI Scan ↗Step-by-step (from the onchain logs of both transactions)
- 1
You (the only signature) · Base
0x77b9…8c21 ↗Hand 0.897024 sparkUSDC to the LI.FI Diamond on Base
- LI.FI takes its 0.25% fixed fee in vault shares: 0.002242 sparkUSDC
- This is the only transaction you pay gas for: ~$0.007 (Base ETH)
- 2
Composer (inside the same Base transaction) · Base
0x77b9…8c21 ↗Redeems 0.894782 sparkUSDC for 0.968503 USDC, then deposits that USDC into Across
- The logs show an ERC-4626 Withdraw event: 0.894782 shares burned, 0.968503 USDC pulled from Morpho Blue
- The USDC amount is only known at execution time; Composer passes the actually redeemed amount straight to the bridge step
- The whole Base transaction is atomic: if the redeem or the bridge deposit fails, everything reverts and the sparkUSDC stays in your wallet
- 3
Across relayer (automatic) · Arbitrum
0x6b0b…1441 ↗Sends 0.961239 USDC straight to your wallet on Arbitrum
- The bridge deposit's recipient is you and it carries no message, so nothing needs to execute on the destination chain
- Across deducts ~0.0073 USDC relayer fees (including gas); the two block timestamps are almost identical
- Received 0.961239 USDC, matching the quoted estimate and above the 0.956433 minimum
- 1
What this demo does and does not prove
- Quotes come from LI.FI POST /v1/advanced/routes. The page keeps only routes that include Composer and complete in a single signature; direct DEX swaps and routes needing a second signature on the destination chain are filtered out.
- Same-chain Composer transactions are atomic: everything succeeds or the whole transaction reverts. Cross-chain, each chain's phase is atomic but the flow is eventually consistent; rarely the bridge succeeds while the destination deposit fails, leaving tokens on the destination chain.
- ERC-20 approval is usually a separate transaction; it can only be merged into one signature when the wallet supports EIP-5792 batched calls.
- Simulation cannot prevent every revert: onchain state can change before signing (e.g. a vault fills up), and gas is still spent on failure.
- Live discovery returns at most 10 Composer-supported vaults sorted by TVL. It is not a complete catalog or a yield recommendation.