> ## Documentation Index
> Fetch the complete documentation index at: https://docs.layerzero.network/llms.txt
> Use this file to discover all available pages before exploring further.

# Stargate UX on Tempo

> Consumer-side UX differences when using Stargate on Tempo: fee payment, approvals, and supported tokens.

## What changes for consumers

Stargate on Tempo works the same way as on other chains, with these UX differences:

* **Fees are paid in LZD** (an ERC-20) instead of via `msg.value`
* **Additional approvals required**: asset token, stablecoin to LZD for wrapping, and LZD to Stargate
* **No native drop**: you cannot send native tokens to the destination
* **Bus mode disabled**: all sends are quoted and executed on-chain

## Fee payment

On standard chains, `send()` accepts fees via `msg.value`. On Tempo, `send()` requires an LZD approval instead:

```solidity wrap theme={null}
// Standard chain: fees via msg.value
MessagingFee memory fee = stargate.quoteSend(sendParam, false);
stargate.send{value: fee.nativeFee}(sendParam, fee, refundAddress);

// Tempo: fees via LZD approval
MessagingFee memory fee = stargate.quoteSend(sendParam, false);
IERC20(lzd).approve(address(stargate), fee.nativeFee); // approve LZD
stargate.send{value: 0}(sendParam, fee, refundAddress); // msg.value = 0
```

`quoteSend()` returns both `nativeFee` and `lzTokenFee`. `_payInLzToken` selects the payment token. At the time of writing, `_payInLzToken` is not enabled on Tempo, so set it to `false` and use `nativeFee` (LZD).

## Approval flow

Sending through Stargate on Tempo requires approving **both** the asset token and the LZD fee token:

```solidity wrap theme={null}
// 1. Quote the send
MessagingFee memory fee = stargate.quoteSend(sendParam, false);

// 2. Approve the asset token (e.g., USDC.e) for the bridge amount
IERC20(usdce).approve(address(stargate), bridgeAmount);

// 3. Wrap stablecoin into LZD and approve for the fee
IERC20(usdce).approve(address(lzd), fee.nativeFee);
lzd.wrap(usdce, msg.sender, fee.nativeFee);
IERC20(lzd).approve(address(stargate), fee.nativeFee);

// 4. Send with msg.value = 0
stargate.send{value: 0}(sendParam, fee, refundAddress);
```

<Tip>
  The
  [TempoOFTWrapper](/v2/developers/tempo/reference/lz-endpoint-dollar#tempooftwrapper)
  reduces this to a single approval + one `sendOFT` call by bundling wrap,
  approve, and send into an atomic transaction.
</Tip>

## Supported tokens

| Source token | Tempo token | Can pay gas on Tempo | Can pay LZ fees |
| ------------ | ----------- | -------------------- | --------------- |
| USDC         | USDC.e      | yes                  | yes             |
| EURC         | EURC.e      | **no**               | **no**          |
| USDT         | USDT0       | TBD                  | TBD             |

## The EURC problem

Users who bridge **only EURC** to Tempo will be stuck. EURC.e cannot pay gas on Tempo and is not whitelisted by LZD for LayerZero fee payment. Without a USD stablecoin balance, the user cannot execute any transaction, not even a transfer or swap.

<Warning>
  If your frontend supports EURC bridging to Tempo, display a warning modal
  informing users that they must also bridge USDC to cover transaction fees on
  Tempo.
</Warning>

## Comparison table

| Aspect                 | Standard Stargate          | Stargate on Tempo                                 |
| ---------------------- | -------------------------- | ------------------------------------------------- |
| **Fee payment**        | `msg.value` (native token) | LZD approval (ERC-20)                             |
| **Approvals**          | asset token only           | asset token + stablecoin to LZD + LZD to Stargate |
| **msg.value**          | required for fees          | must be 0                                         |
| **Native drop**        | supported                  | not supported                                     |
| **Quote denomination** | native token (ETH, etc.)   | LZD (USD-denominated)                             |
| **Bus mode**           | supported                  | disabled                                          |

## Bus mode

Bus mode is disabled on Tempo. Sends are executed as direct on-chain transactions with their own quoted fees.
