> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.0x.org/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.0x.org/_mcp/server.

# Chain-Specific Native Tokens

> How to handle native tokens on Mantle and Arc, the chains that do not follow the standard placeholder-address convention.

Most chains we support represent their native token with the placeholder address `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`, and the flow described in [Handle Native Tokens](/evm/0x-swap-api/additional-topics/handling-native-tokens) applies without changes. This page covers the two chains that behave differently.

## Mantle: MNT has a contract address

Mantle’s native token, **MNT**, does not follow this convention. On the Mantle EVM chain, MNT has a designated contract address: `0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000`.

This address applies only to the native `MNT` token on Mantle and should not be used for wrapped or bridged versions on other networks. Refer to the linked guide for additional [differences between Ethereum and Mantle](https://docs.mantle.xyz/network/for-developers/difference-between-ethereum-and-mantle).

## Arc: USDC is the native gas token

USDC plays two roles on Arc at once. It is the native gas token, and it is also an ERC-20 token that the chain has built in at a fixed address. There is no wrapped-native token, and Circle does not plan to deploy one, so the [ETH/WETH wrapping pattern](/evm/0x-swap-api/additional-topics/handling-native-tokens#wrapping-and-unwrapping-between-eth-and-weth) does not apply. Refer to Arc's own guide for the full details of [USDC as the native gas token](https://docs.arc.io/arc/concepts/stablecoin-native-model#usdc-as-the-native-gas-token).

### The two interfaces of USDC

|                       | Native                                        | ERC-20                                                 |
| --------------------- | --------------------------------------------- | ------------------------------------------------------ |
| Address to pass to 0x | `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`  | `0x3600000000000000000000000000000000000000`           |
| Decimals              | 18                                            | 6                                                      |
| Purpose               | Gas accounting, native sends, and `msg.value` | Application-level transfers, approvals, and allowances |
| Allowance required    | No                                            | Yes                                                    |

Both interfaces are backed by a **single balance**. Sending native USDC and transferring ERC-20 USDC move the same money, and the two forms are entangled at the protocol level: an ERC-20 transfer also emits a native transfer.

### What this means for your integration

Native USDC and ERC-20 USDC differ in scale by a factor of 10^12. One whole USDC (\$1.00) is `1000000` in ERC-20 base units and `1000000000000000000` in native base units. Mixing the two misprices a swap by a factor of one trillion.

The Swap API returns amounts in the base units of whichever interface you requested, and performs no conversion between them. Follow these rules:

#### Pick one interface per request

Use `0x3600000000000000000000000000000000000000` if you want to work in 6
decimals, or `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE` if you want to
work in 18 decimals. Do not mix the two within a single quote.

#### Read decimals from the interface you sent, not from the symbol

`sellAmount`, `buyAmount`, `minBuyAmount` and fee amounts are all
denominated in the base units of the address you passed. Balance checks,
allowance logic and any USD display must use the same decimals.

#### Apply the usual native-token rules only to the native interface

If you requested the ERC-20 interface, the standard ERC-20 flow applies,
including an allowance. If you requested the native interface, skip the
approval and set `transaction.value`, as described in [Handle Native Tokens](/evm/0x-swap-api/additional-topics/handling-native-tokens#steps-for-handling-standard-native-tokens).

#### Set maxFeePerGas to at least 20 gwei

Arc enforces a 20 gwei floor on `maxFeePerGas`. Transactions submitted below
it can stay pending indefinitely or fail outright. A small tip (for example
1 gwei) on `maxPriorityFeePerGas` improves inclusion during high
utilization.

There is no wrap or unwrap step to build on Arc. A quote between the native and ERC-20 interfaces of USDC is not a supported swap; move between them by using the interface you need, since they share one balance.

### Notes for wallets and analytics

* **Show one USDC balance.** Displaying gas balance and USDC balance as separate rows suggests a user holds two assets when they hold one.
* **Expect duplicate transfer logs on ERC-20 moves only.** Moving USDC through the ERC-20 interface emits both a native transfer and an ERC-20 `Transfer` event, so indexers that count both will double-count USDC volume. Moving it through the native interface emits a single log.
* **Avoid `SELFDESTRUCT` patterns.** Arc forbids burning USDC, so a self-destructed account cannot receive value-bearing calls. Contracts that rely on `SELFDESTRUCT` can revert in ways that are hard for users to interpret.