Skip to main content
The Fuse killer demo: take USDC on Arbitrum and end up with a USDC/WETH Uniswap V3 position on Base — without the user signing five transactions.

The bundle

import { DZapClient } from '@dzapio/sdk';

const dzap = DZapClient.getInstance();

const bundleQuote = await dzap.getZapBundleQuote({
  account: '0xUser',
  steps: [
    // Step 1: bridge USDC Arbitrum → Base
    {
      type: 'bridge',
      srcChainId: 42161,
      destChainId: 8453,
      srcToken: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
      destToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
      amount: '500000000',                      // 500 USDC
    },
    // Step 2: zap into the USDC/WETH 0.05% pool
    {
      type: 'zap',
      srcChainId: 8453,
      destChainId: 8453,
      srcToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
      destToken: '0xd0b53D9277642d899DF5C87A3966A349A798F224',
      action: 'add-liquidity',
      pool: '0xd0b53D9277642d899DF5C87A3966A349A798F224',
    },
  ],
  recipient: '0xUser',
  refundee: '0xUser',
  slippage: 1,
});

const tx = await dzap.buildZapBundleTx({
  account: '0xUser',
  bundleId: bundleQuote.bundleId,
});

// Then sign + send tx, OR use signGaslessDzapUserIntent for gasless flow.

Tracking

const status = await dzap.getZapTxnStatus({ txId: tx.txId });

// status.steps => [
//   { type: 'bridge', protocol: 'across', status: 'completed', txHash: '0x...' },
//   { type: 'zap',    protocol: 'uniswap-v3', status: 'completed', txHash: '0x...' },
// ]
For UI: render status.steps with a per-step indicator. The bridge step settles in tens of seconds; the LP-deposit step settles in seconds once the bridge lands.

Gasless variant

Same shape, but the user signs an EIP-712 intent instead of submitting a transaction. The solver pays gas. See Fuse → Gasless.

Variations

  • Replace add-liquidity with deposit for vault flows (Yearn, Beefy, Aave).
  • Add a 3rd step for stake/lock actions on the deposit token.
  • Concentrated liquidity — pass poolDetails: { lowerTick, upperTick } in the zap step.

Caveats

  • LP zaps are pool-specific. Confirm the destination token is a real LP/pool address, not just a token.
  • Slippage applies end-to-end. A tight slippage on a complex bundle can fail more often than a single swap; use 1-2% for typical Uniswap V3 entries.
  • For exotic pools (Balancer weighted, Curve metapools), check that the bundle resolves with protocol you expect.

Next

Last modified on May 4, 2026