# Protocol Interface

## ARC-20 contract standard

ARC-20 is a set of contract standards for the issuance of token assets, contracts written in compliance with this standard are considered to be a ARC-20 contract. When wallets and exchanges are docking the assets of the ARC-20 contract, from this set of standards, you can know which functions and events the contract defines, so as to facilitate the docking.

### Optional Items

Token Name

```
string public name = "AixChain";
```

Token Abbreviation

```
string public symbol = "Aixc";
```

Token Precision(Decimals)

```
uint8 public decimals = 6;
```

### Required Items

```javascript
contract ARC20 {
             function totalSupply() constant returns (uint theTotalSupply);
             function balanceOf(address _owner) constant returns (uint balance);
             function transfer(address _to, uint _value) returns (bool success);
             function transferFrom(address _from, address _to, uint _value) returns (bool success);
             function approve(address _spender, uint _value) returns (bool success);
             function allowance(address _owner, address _spender) constant returns (uint remaining);
             event Transfer(address indexed _from, address indexed _to, uint _value);
             event Approval(address indexed _owner, address indexed _spender, uint _value);
}
```

**totalSupply()**\
This function returns the total supply of the token.

**balanceOf()**\
This function returns the token balance of the specific account.

**transfer()**\
This function is used to transfer a number of tokens to a specific address.

**approve()**\
This function is used to authorize the third party (like a DAPP smart contract) to transfer the token from the token owner’s account.

**transferFrom()**\
This function is used to allow the third party to transfer the token from an owner account to a receiver account. The owner account must be approved to be called by the third party.

**allowance()**\
This function is used to query the remaining amount of tokens the third party can transfer.

### Event Functions

When the token is successfully transferred, the contract will trigger a Transfer Event.

```
event Transfer(address indexed _from, address indexed _to, uint256 _value)
```

When `approval()` is successfully called, the contract will trigger an `Approval` Event.

```
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
```


---

# 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-20/protocol-interface.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.
