> For the complete documentation index, see [llms.txt](https://developers.aixchain.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.aixchain.com/aixc-and-arc-token/arc-10/arc-10-transfer-in-smart-contracts.md).

# ARC-10 Transfer in Smart Contracts

## Introduction

Compared to ARC-20 tokens, ARC-10 tokens face a user experience flexibility issue. In Odyssey 3.2, developers and their smart contract callers can interact with ARC-10 token via smart contracts according to the contract logic, do ARC-10 token transfers in smart contracts, giving them more control to implement their token in business scenarios. Unlike ARC-20 tokens, sending ARC-10 tokens is like transferring Aiix in a contract, AIXCHAIN developers added an interface specifically for ARC-10 transfers and queries in solidity.

**Example of transferring wrc10 in a contract**

Solidity

```javascript
pragma solidity ^0.5.0;

contract transferTokenContract {
    constructor() payable public{}
    
    function() payable external {}
    
    function transferTokenTest(address payable toAddress, uint256 tokenValue, arcToken id) payable public    {
        toAddress.transferToken(tokenValue, id);
    }
    
    function msgTokenValueAndTokenIdTest() public payable returns(arcToken, uint256){
        acToken id = msg.tokenid;
        uint256 value = msg.tokenvalue;
        return (id, value);
    }
    
    function getTokenBalanceTest(address accountAddress) payable public returns (uint256){
        arcToken id = 1000001;
        return accountAddress.tokenBalance(id);
    }
}
```

**ARC10 token type**\
Odyssey\_v3.2 defined a new type (arcToken) for ARC10 token, which represents the tokenId in a token transfer operation. ARC10 token can be converted to uint256 type and vice versa.

```javascript
arcToken id = 1000001;
```

**ARC10 transfer in contract**

```javascript
address.transferToken(uint256 tokenValue, arcToken tokenId)
```

**Query the ARC10 balance in the contract**

```
address.tokenBalance(arcToken) returns(uint256 tokenAmount)
```

Odyssey\_v3.2 defines a new tokenBalance function for ARC10 token balance query.

**TokenValue & TokenID**\
Msg.tokenvalue, represents the token value in the current msg call, with a default value of 0. Msg.tokenid, represents the token id in current msg call, with a default value of 0.

<br>
