# Deploy a ERC-20 Token

This is a tutorial on how to deploy an ERC-20 token smart contract on the Exzo Network using the Solidity programming language.One of the most significant smart contract standards on Exzo Network is known as ERC-20, which has emerged as the technical standard used for all smart contracts on the Ethereum blockchain for fungible token implementations.ERC-20 defines a common list of rules that all fungible Exzo Network tokens should adhere to. Consequently, this token standard empowers developers of all types to accurately predict how new tokens will function within the larger Exzo Network system. This simplifies and eases developers’ tasks, because they can proceed with their work, knowing that each and every new project won’t need to be redone every time a new token is released, as long as the token follows the rules.pragma solidity ^0.6.0;​interface IERC20 {​function totalSupply() external view returns (uint256);function balanceOf(address account) external view returns (uint256);function allowance(address owner, address spender) external view returns (uint256);​function transfer(address recipient, uint256 amount) external returns (bool);function approve(address spender, uint256 amount) external returns (bool);function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);​​event Transfer(address indexed from, address indexed to, uint256 value);event Approval(address indexed owner, address indexed spender, uint256 value);}​Here is a line-by-line explainer of what every function is for. After this we’ll present a simple implementation of the ERC-20 token.

#### Getters <a href="#getters" id="getters"></a>

function totalSupply() external view returns (uint256);The ERC-20 standard allows an address to give an allowance to another address to be able to retrieve tokens from it. This getter returns the remaining number of tokens that the `spender` will be allowed to spend on behalf of `owner`. This function is a getter and does not modify the state of the contract and should return 0 by default

#### FUNCTIONS <a href="#functions" id="functions"></a>

function transfer(address recipient, uint256 amount) external returns (bool);Moves the `amount` of tokens from the function caller address (`msg.sender`) to the recipient address. This function emits the `Transfer` event defined later. It returns true if the transfer was possible.function approve(address spender, uint256 amount) external returns (bool);Set the amount of `allowance` the `spender` is allowed to transfer from the function caller (`msg.sender`) balance. This function emits the Approval event. The function returns whether the allowance was successfully set.function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);Moves the `amount` of tokens from `sender` to `recipient` using the allowance mechanism. amount is then deducted from the caller’s allowance. This function emits the `Transfer` event.

#### EVENTS <a href="#events" id="events"></a>

event Transfer(address indexed from, address indexed to, uint256 value);This event is emitted when the amount of tokens (value) is sent from the `from` address to the `to` address.In the case of minting new tokens, the transfer is usually `from` the 0x00..0000 address while in the case of burning tokens the transfer is `to` 0x00..0000.event Approval(address indexed owner, address indexed spender, uint256 value);This event is emitted when the amount of tokens (`value`) is approved by the `owner` to be used by the `spender`.

#### A BASIC IMPLEMENTATION OF ERC-20 TOKENS <a href="#a-basic-implementation-of-erc-20-tokens" id="a-basic-implementation-of-erc-20-tokens"></a>

Here is the most simple code to base your ERC-20 token from:pragma solidity ^0.8.0;​interface IERC20 {​function totalSupply() external view returns (uint256);function balanceOf(address account) external view returns (uint256);function allowance(address owner, address spender) external view returns (uint256);​function transfer(address recipient, uint256 amount) external returns (bool);function approve(address spender, uint256 amount) external returns (bool);function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);​​event Transfer(address indexed from, address indexed to, uint256 value);event Approval(address indexed owner, address indexed spender, uint256 value);}​​contract ERC20Basic is IERC20 {​string public constant name = "ERC20Basic";string public constant symbol = "ERC";uint8 public constant decimals = 18;​​mapping(address => uint256) balances;​mapping(address => mapping (address => uint256)) allowed;​uint256 totalSupply\_ = 10 ether;​​constructor() {balances\[msg.sender] = totalSupply\_;}​function totalSupply() public override view returns (uint256) {return totalSupply\_;}​function balanceOf(address tokenOwner) public override view returns (uint256) {return balances\[tokenOwner];}​function transfer(address receiver, uint256 numTokens) public override returns (bool) {require(numTokens <= balances\[msg.sender]);balances\[msg.sender] = balances\[msg.sender]-numTokens;balances\[receiver] = balances\[receiver]+numTokens;emit Transfer(msg.sender, receiver, numTokens);return true;}​function approve(address delegate, uint256 numTokens) public override returns (bool) {allowed\[msg.sender]\[delegate] = numTokens;emit Approval(msg.sender, delegate, numTokens);return true;}​function allowance(address owner, address delegate) public override view returns (uint) {return allowed\[owner]\[delegate];}​function transferFrom(address owner, address buyer, uint256 numTokens) public override returns (bool) {require(numTokens <= balances\[owner]);require(numTokens <= allowed\[owner]\[msg.sender]);​balances\[owner] = balances\[owner]-numTokens;allowed\[owner]\[msg.sender] = allowed\[owner]\[msg.sender]-numTokens;balances\[buyer] = balances\[buyer]+numTokens;emit Transfer(owner, buyer, numTokens);return true;}}​​


---

# 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://ethereals-blockchain.gitbook.io/ethereal-chain-documentation/tutorials/solidity-tutorials/deploy-a-erc-20-token.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.
