> For the complete documentation index, see [llms.txt](https://docs.ambient.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ambient.finance/developers/token-transfers.md).

# Token Transfers

### ERC20 Tokens

Standard ERC20 token transfers to and from the DEX contract are paid to users with `transfer()` calls and collected from users with `transferFrom()`calls. Users need to `approve()` or `permit()` against the `CrocSwapDex` contract for any tokens they're planning to deposit or sell in a swap.&#x20;

Tokens being received from the DEX do not require any approval calls. Tokens that are traded through the surplus collateral facility do not recall any approval. For example a short-term speculator could buy a token, have it settle to their surplus collateral deposit, and sell it back for USDC without ever needing to approve the token.

### &#x20;Native Ethereum

Ambient supports the use of the chain's native token (e.g. ETH on Ethereum) without resorting to ERC20 wrappers.

Native ETH paid by the DEX to the user is sent directly to the user's wallet address.

Native ETH deposited or swapped into the DEX must be sent in the `msg.value` of the contract call or transaction. If the user knows the exact quantity of ETH required by the transaction they can set `msg.value` exactly. Otherwise the user should attach the upper-bound of the ETH debit they expect the contract to incur. All DEX transactions involving ETH will refund any overpaid amount in `msg.value` to the end-user.

**WARNING:** ETH refunds for `msg.value` will not be paid for any transaction not involving native ETH. (E.g. a swap between USDC and DAI.) `msg.value` should only be attached on transactions involving ETH deposits or pools.
