# Use Native & Cross-chain Tokens

Smart Contract Dapps deployed in Acala EVM can directly use native and cross-chain assets such as DOT, ACA, aUSD, renBTC, etc. ERC-20 tokens deployed in EVM can also be made available at runtime level, to be listed in the DeX, or (by governance approval) to be used as fee tokens. Read more [here](/learn/acala-evm/acala-evm-composable-defi-stack/composable-defi-stack.md).

## ERC20 Contract Addresses

| Token Ticker | ER20 Address                                 |
| ------------ | -------------------------------------------- |
| ACA          | `0x0000000000000000000000000000000001000000` |
| AUSD         | `0x0000000000000000000000000000000001000001` |
| DOT          | `0x0000000000000000000000000000000001000002` |
| LDOT         | `0x0000000000000000000000000000000001000003` |
| XBTC         | `0x0000000000000000000000000000000001000004` |
| RENBTC       | `0x0000000000000000000000000000000001000005` |
| POLKABTC     | `0x0000000000000000000000000000000001000006` |
| PLM          | `0x0000000000000000000000000000000001000007` |
| PHA          | `0x0000000000000000000000000000000001000008` |
| HDT          | `0x0000000000000000000000000000000001000009` |
| KAR          | `0x0000000000000000000000000000000001000080` |
| KUSD         | `0x0000000000000000000000000000000001000081` |
| KSM          | `0x0000000000000000000000000000000001000082` |
| LKSM         | `0x0000000000000000000000000000000001000083` |
| SDN          | `0x0000000000000000000000000000000001000087` |
| Oracle       | `0x0000000000000000000000000000000000000801` |
| Schedule     | `0x0000000000000000000000000000000000000802` |

## Contract Methods

```javascript
// Returns the currencyId of the token.
function currencyId() public view returns (uint256);

// Returns the name of the token.
function name() public view returns (string memory);

// Returns the symbol of the token, usually a shorter version of the name.
function symbol() public view returns (string memory);

// Returns the number of decimals used to get its user representation.
function decimals() public view returns (uint8);

// Returns the amount of tokens in existence.
function totalSupply() public view returns (uint256);

// Returns the amount of tokens owned by `account`.
function balanceOf(address account) public view returns (uint256);

// Moves `amount` tokens from the caller's account to `recipient`.
// Returns a boolean value indicating whether the operation succeeded.
// Emits a {Transfer} event.
function transfer(address recipient, uint256 amount) public returns (bool);

// Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. 
// This is zero by default.
function allowance(address owner, address spender) public view returns (uint256);

// Sets `amount` as the allowance of `spender` over the caller's tokens.
// Returns a boolean value indicating whether the operation succeeded.
function approve(address spender, uint256 amount) public returns (bool);

// Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.
// Returns a boolean value indicating whether the operation succeeded.
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool);

// Atomically increases the allowance granted to `spender` by the caller.
// This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.
// Emits an {Approval} event indicating the updated allowance.
function increaseAllowance(address spender, uint256 addedValue) public returns (bool);

// Atomically decreases the allowance granted to `spender` by the caller.
// This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}.
// Emits an {Approval} event indicating the updated allowance.
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool);
```

More details and source code [here](https://github.com/AcalaNetwork/predeploy-contracts#erc20-contracts).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.acala.network/build/development-guide/smart-contracts/advanced/use-native-tokens.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
