Гайд: Как создать свой Токен ERC-20 (MetaMask)
Что означает Токен ERC-20:
Полное название токена ERC — «Ethereum Request for Comments». Число 20-ть это случайный идентификационный номер предложения. Токены ERC-20 наиболее популярны в сети Эфириума. Они используются для оплаты различных функций, их так же называют служебные токены. Еще они используются для оплаты товаров и услуг различных сетей. В данный момент насчитывается более 300-та криптовалют построенных на сети Эфириум. Существуют и другие стандарты токенов как ERC-223, ERC-721 и ERC-777. Но об этом попозже…
Как создать токен ERC-20:
Используем среду разработки — Remix для написания Смарт-Контракта для нашего токена ERC-20.
Remix — это онлайн-инструмент, который позволяет вам написать смарт контракт на языке Solidity, приступим к его созданию.
Переходим на онлайн-окружения Remix на вашем браузере и мы сможем создать свой токен.

Нажмите кнопку Solidity, полсе кнопку «Плюс» в левом верхнем углу.
Название выбираете любое, мне нравится «YobitCoin», так и оставим :)

Главные правила токена ERC-20:
Стандарт ERC20 состоит из 3 необязательных правил и 6 обязательных правил. Необходимо включить в смарт-контракт токена определенные функции, в соответствии требованиям ERC20. Если вы не включили обязательные функции, вы не сможете запустить смарт контракт.
Обязательные правила следующие:
- totalSupply
- balanceOf
- transfer
- transferFrom
- approve
- allowance
Необязательные правила:
- Token Name
- Symbol
- Decimal (до 18)
pragma solidity ^0.5.0;
// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
//
// ----------------------------------------------------------------------------
contract ERC20Interface {
function totalSupply() public view returns (uint);
function balanceOf(address tokenOwner) public view returns (uint balance);
function allowance(address tokenOwner, address spender) public view returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
// ----------------------------------------------------------------------------
// Safe Math Library
// ----------------------------------------------------------------------------
contract SafeMath {
function safeAdd(uint a, uint b) public pure returns (uint c) {
c = a + b;
require(c >= a);
}
function safeSub(uint a, uint b) public pure returns (uint c) {
require(b 0);
c = a / b;
}
}
contract Yobitcoin is ERC20Interface, SafeMath {
string public name;
string public symbol;
uint8 public decimals; // 18 decimals is the strongly suggested default, avoid changing it
uint256 public _totalSupply;
mapping(address => uint) balances;
mapping(address => mapping(address => uint)) allowed;
/**
* Constrctor function
*
* Initializes contract with initial supply tokens to the creator of the contract
*/
constructor() public {
name = "Yobitcoin";
symbol = "YBC";
decimals = 12;
_totalSupply = 30000000000000;
balances[msg.sender] = _totalSupply;
emit Transfer(address(0), msg.sender, _totalSupply);
}
function totalSupply() public view returns (uint) {
return _totalSupply - balances[address(0)];
}
function balanceOf(address tokenOwner) public view returns (uint balance) {
return balances[tokenOwner];
}
function allowance(address tokenOwner, address spender) public view returns (uint remaining) {
return allowed[tokenOwner][spender];
}
function approve(address spender, uint tokens) public returns (bool success) {
allowed[msg.sender][spender] = tokens;
emit Approval(msg.sender, spender, tokens);
return true;
}
function transfer(address to, uint tokens) public returns (bool success) {
balances[msg.sender] = safeSub(balances[msg.sender], tokens);
balances[to] = safeAdd(balances[to], tokens);
emit Transfer(msg.sender, to, tokens);
return true;
}
function transferFrom(address from, address to, uint tokens) public returns (bool success) {
balances[from] = safeSub(balances[from], tokens);
allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens);
balances[to] = safeAdd(balances[to], tokens);
emit Transfer(from, to, tokens);
return true;
}
}
Вы можете поменять, главные значения на свои:
- totalSupply — общее количество токенов
- name — полное название токена
- decimal — количество занаков после запятой. Дело в том, что в контрактах все хранится только в целых числах. Поэтому вам следует указывать количество знаков, если хотите иметь возможность зачислять нецелое количество токенов
- symbol — символ для бирж

Создаем смарт-контракт нашего токена:
Нам понадобится всеми известный кошелек MetaMask.
Metamask — это расширение, которое позволяет запускать Ethereum dApps прямо в браузере, не запуская полную ноду Ethereum.
Переходим в расширение MetaMask для браузера (Chrome, Firefox или Opera) и устанавливаем его.


Создаем наш кошелек MetaMask:

Придумываем пароль для кошелька, ставим галочку, нажимаем создать.

- В правом нижнем углу, нажимаем сохранить секретную фразу на ПК.
- С лева, нажимаем показать секретную фразу, записываем.
- Нажимаем далее.

- Ставим нашу секретную фразу по счету как они были в начале.
- Нажимаем подтвердить.

Поздравляю, вы создали кошелек, нажимаем «Завершено»
Переключаемся на тестовую сеть.

На нашем кошельке, сейчас 0 ETH, но это не беда мы сейчас все исправим.. Для развертывания контракта в сети Ethereum необходимо некоторое количество эфира.
Мы опубликуем этот контракт в тестовой сети. Переходим на тестовую сеть Ropsten.
В тестовой сети мы работаем с тестовыми бесплатными эфирами. Нужно просто собрать эфириум с крана.
Перейдите по адресу: Кран для тестовой сети, вставьте адрес своего кошелька и нажмите «Отправить мне тестовый эфир».


Перейдите в Remix и скомпилируйте договор. Если все прошло удачно, можно «развертывать» наш смарт-контракт.

- Выбираем Deploy and run transactions.
- Для среды выберите Injected Web3. Он автоматически обнаружит ваш метамаск кошелек.
- Ваш кошелек MetaMask.
- Выбираем название своего токена , в моем случаи «YobitCoin»
- Нажмите кнопку «Развернуть».
Далее подтверждаем нашу транзакцию, для получения смарт-контракта.

После мы получаем хэш транзакции. Нажмите на данный хеш из терминала и переходим далее.

Переходим на Ropsten Testnet Network и здесь вы можете отслеживать все, что происходим с вашим токеном. Возможно отслеживать и другие смарт-контракты так как блокчейн полностью открыт.
Когда мы перешли по ссылке, мы можем изучить все детали о нашей транзакции. Переходим на хеш транзакции.

Нажмите на Token Tracker, и вы увидите наш скомпилированный код


Теперь вы можете перейти к Token Tracer, чтобы увидеть подробную информацию о нашем токене YobitCoin. Все три значения которые мы меняли, все они записали в смарт-контракте.
Если вы все сделали правильно, значит ваш смарт-контракт находится в тестовой сети Эфириум.