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

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