Skip to main content
You can use the Forwarding Service when spending from a Unified Balance on the destination blockchain. When enabled, it fetches the attestations from source blockchains and submits the mint on the destination blockchain. You don’t need to poll for attestations or have access to a wallet on the destination.

Prerequisites

Before you begin, ensure that you’ve: These are required so any example below runs with a valid kit and adapter.

Use with adapters on all blockchains

Set useForwarder: true when you have adapters on all source and destination blockchains but want the Forwarding Service to submit the mint transaction on the destination:
TypeScript
const result = await kit.unifiedBalance.spend({
  amount: "1.00",
  from: {
    adapter,
    allocations: [{ amount: "1.00", chain: "Base_Sepolia" }],
  },
  to: {
    adapter,
    chain: "Arc_Testnet",
    useForwarder: true,
  },
  token: "USDC",
});

Use without a destination adapter

When you don’t have access to a wallet on the destination blockchain, such as with server-side or custodial spend flows, omit the destination adapter and pass recipientAddress with useForwarder: true:
TypeScript
const result = await kit.unifiedBalance.spend({
  amount: "1.00",
  from: {
    adapter,
    allocations: [{ amount: "1.00", chain: "Base_Sepolia" }],
  },
  to: {
    chain: "Arc_Testnet",
    recipientAddress: "0xRecipientAddress",
    useForwarder: true,
  },
  token: "USDC",
});
In this mode, the Forwarding Service submits the mint transaction for you. Use the spend result’s transferId, txHash, or explorerUrl fields to track the destination mint when they are returned.

Forwarding fee

The Forwarding Service charges a fee that is deducted from the amount minted on the destination chain. When you estimate spend fees for a spend transaction, the result includes the forwarding fee. See How Unified Balance fees work for details.