LILI.FI Demos

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

1Choose a target vault

TVL / APY are shown as upstream data only, not investment advice.

2Where the funds come from

3Amount & quote

No wallet connected: previewing the quote with a sample address. Connect a wallet to execute.

Select a vault first.

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-14

    Loading 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)
    Step-by-step (from the onchain logs of both transactions)
    1. 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. 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. 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)
    View on LI.FI Scan ↗
  • Base sparkUSDC (Spark USDC Vault) → Arbitrum USDC

    Base → Arbitrum · 2026-10-14

    Loading 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)
    Step-by-step (from the onchain logs of both transactions)
    1. 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. 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. 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
    View on LI.FI Scan ↗
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.