# 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>


---

# 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://developers.aixchain.com/aixc-and-arc-token/arc-10/arc-10-transfer-in-smart-contracts.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.
