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

# Pay fees with a TIP-20 token

> Choose which TIP-20 token pays the fee for a Tempo transaction with the feeToken field of sendTempoTransaction

Tempo has no native token, so every fee is paid in a TIP-20 token. The `feeToken` field of [`sendTempoTransaction`](/docs/javascript/reference/tempo/overview#send-a-tempo-transaction) selects which token pays the fee for a transaction. Embedded Tempo wallets support fee token selection, and `supportsFeeTokenSelection` is `true` on the Tempo wallet provider.

## Choose the fee token

Pass the token's contract address as `feeToken`. It can be the same token the transaction transfers or a different one.

```typescript theme={"system"}
import type { TempoWalletAccount } from '@dynamic-labs-sdk/tempo';
import { sendTempoTransaction } from '@dynamic-labs-sdk/tempo/waas';
import { encodeFunctionData, erc20Abi, parseUnits } from 'viem';

const sendWithFeeToken = async (walletAccount: TempoWalletAccount) => {
  const transferToken = '0xTip20TokenAddress...';
  const feeToken = '0xFeeTip20TokenAddress...';

  const { transactionHash } = await sendTempoTransaction({
    calls: [
      {
        data: encodeFunctionData({
          abi: erc20Abi,
          args: ['0xRecipientAddress...', parseUnits('1.5', 6)],
          functionName: 'transfer',
        }),
        to: transferToken,
      },
    ],
    feeToken,
    walletAccount,
  });

  return transactionHash;
};
```

The fee is charged in the fee token, so the wallet needs a balance of it. When you omit `feeToken`, the SDK leaves the field out of the signed transaction.

An address that is not a valid address throws `TempoTransactionValidationError` with the reason `malformed feeToken address` before the wallet signs.

## How the fee amount is set

The SDK reads the network's current gas price and sets `maxFeePerGas` to at least that price, and `maxPriorityFeePerGas` to at least a tenth of it. If you pass higher values through a viem `sendTransaction` call, the SDK keeps your values. It throws `TempoTransactionValidationError` if the priority fee exceeds the maximum fee.

The gas limit comes from the estimate described in [Send batched calls](/docs/javascript/reference/tempo/send-batched-calls#how-gas-is-estimated).

## Related

* [Tempo](/docs/javascript/reference/tempo/overview) covers `sendTip20Transaction` and `transferAmount`, which move tokens without Tempo-only fields.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.