Что такое ERC20 токен
Для начала стоит разобраться, что такое ERC20 и почему о нем столько разговоров.
Токен ERC20 — это программа учета баланса пользователей. Ничего более. Но есть несколько особенностей, которые и послужили такому набору популярности в широких массах. О них по порядку.
- Сообщество
- Прозрачность
- Простота
Сообщество
Стандарт ERC20 был официально представлен core-team организации Ethereum (подробнее о спецификации можно почитать тут https://eips.ethereum.org/EIPS/eip-20), а значит легче и быстрее признан и адаптирован сообществом. В разработке принял участие и сам основатель — Виталик Бутерин.
Его быстро стали использовать для создания внутриигровых валют, систем геймификации, а позже и в более серьезных финансовых структурах, таких как: ICO и других инвестиционных форматах. Большому распостранению так же поспособствовало появление стейбл коинов, которые были расширением классического ERC20.
Провайдерам криптокошельков не оставалось ничего, кроме как нативно поддерживать основные операции, связанные с отправкой и получением таких криптоактивов.
Прозрачность
Прозрачность — основной маркетинговый лозунг всех крипто-проектов. Эта догма лежит в основе бума криптовалют и блокчейн протоколов, как таковых.
Всё та же прозрачность смарт-контрактов — где каждый записанный байт синхронизирован между тысячами компьютеров и виден всем пользователям — помогла микрофинансовым организациям завоевать доверие клиентов по всему миру, вне зависимости от юрисдикций.
Таким образом, единственный реальный риск — это обесценивание криптоактива и недобросовестные манипуляции курсом со стороны фаундеров подобных проектов.
Простота
Поддержка сообществом — а в особенности провайдерами криптокошельков — обеспечили простоту в использовании. Зайти в метамаск, проверить баланс, отправить 10,000 долларов на другой континент: так же просто для рядового пользователя, как и использование привычного мобильного банка.
Именно благодаря этому, вы сейчас и читаете эту статью. ERC20 — это настоящая инновация в сфере микрофинансов.
Как создать свой токен ERC20
Мы не будем разбираться в причинах создания своего токена. Раз вы тут — вы уже знаете почему и зачем.
Вместо этого, приступим к делу!
ERC20 — это смарт-контракт блокчейна Ethereum. А значит, нам нужно понимать, что такое смартконтракт и блокчейн разработка в целом: для начала разберемся в основных терминах, инструментах и технологиях.
Как работает смарт-контракт
Яркое, новое и таинственное слово “смарт-контракт” — это лишь маркетинг. На деле, он ничем не отличается от обычной программы, кроме способа исполнения и хранения инструкций.
Смарт-контракты - это программные коды, которые запускаются на блокчейне и автоматически выполняют определенные условия, описанные в их коде. Когда смарт-контракт развертывается на блокчейне, он становится доступным для выполнения любыми участниками сети. Контракт содержит логику, определяющую условия его выполнения, а также набор инструкций для автоматического выполнения этих условий.
Исполняется же он с помощью виртуальной машины Ethereum.
В качестве хранилища данных так же используется блокчейн.
Для описания инструкций используется несколько языков программирования, в их числе: Solidity (похож на Си или JavaScript), Vyper и Serpent (похожи на Python), LLL (низкоуровневая версия Лисп), Mutan (основан на Go). Самый популярный - это Solidity; О нем и пойдет речь.
Язык программирования Solidity
Solidity — это объектно-ориентированный язык программирования самовыполняющихся контрактов для платформы Ethereum.
Он статически типизирован, а его синтаксис вдохновлен C-подобными языками, а конкретно - Javascript’ом. По замыслу разработчиков, это бы помогло быстрому принятию языка веб-программистами. Программы транслируются в байткод EVM.
Пример программы на языке
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;
contract HelloWorld {
function sayHelloWorld() public pure returns (string memory) {
return "Hello World";
}
}
Данный смарт контракт имеет метод sayHelloWorld, который бы вернул строку “Hello World” при вызове.
Инструменты для разработки
Почти на месте! Осталось лишь выяснить, что поможет нам эффективно разрабатывать смарт контракты.
Существует множество инструментов для удобной разработки, тестирования, отладки и публикации. Сегодня мы поговорим о Remix (https://remix.ethereum.org) - официальной IDE от Ethereum. Это отличный вариант для начинающих разработчиков и/или проектирования простых смарт контрактов.
Далее, нам нужно разобраться в существующих библиотеках, чтобы не придумывать колесо. Например, OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts) предлагает огромное количество протестированного и оптимизированного кода для всех основных стандартов ERC.
Написание кода
Итак, структура вашего проекта выглядит следующим образом:
Создадим файл в директории /contracts, назовем его MyToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract MyToken { }
В первой строчке мы указали лицензию. В данном случае - это MIT. Подробнее о лицензиях можно почитать тут https://spdx.org/licenses.
Следующая строка говорит компилятору, под какую версию Solidity код должен быть скомпилирован. В данном примере 0.8.4 или выше.
contract MyToken {} обозначает объявление контракта (класса) с названием MyToken; в фигурных скобках будет находится тело класса: свойства, методы и тому подобное.
Контракт спецификации ERC20 должен иметь несколько методов и событий, далее мы рассмотрим их.
event Transfer(address indexed from, address indexed to, uint256 value)
Событие отправляется при успешном трансфере токенов из одного аккаунта в другой.
event Approval(address indexed owner, address indexed spender, uint256 value)
Событие отправляется при вызове метода approve, который разрешает определенному адресу совершать операции в лице одобреющего на N сумму токенов.
function totalSupply() external view returns (uint256)
Метод должен возвращать общее кол-во токенов в обороте.
function balanceOf(address account) external view returns (uint256)
Метод должен возвращать баланс адреса account
function transfer(address to, uint256 amount) external returns (bool)
Метод совершает трансфер amount кол-ва токенов на адрес to. Токены списываются с баланса адреса, вызывающего метод.
function allowance(address owner, address spender) external view returns (uint256)
Метод возвращает разрешенное кол-во токенов для управления spender от лица owner. Это можно описать юридическими терминами, как доверенность на совершение транзакций от лица owner лицу spender.
function approve(address spender, uint256 amount) external returns (bool)
Метод разрешает вызывающему адресу дать разрешение адресу spender совершать транзакции на amount кол-во токенов.
function transferFrom(address from, address to, uint256 amount) external returns (bool)
Метод совершает трансфер amount кол-ва токенов с адреса from на адрес to. При этом, необходимо, чтобы разрешенное кол-во (allowance) для вызывающего адреса было меньше или равно amount.
Подробнее изучить интерфейс и реализацию можно по ссылкам:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol
Так как мы используем библиотеку с уже написанным кодом реализации. Нам не нужно описывать методы самостоятельно. Необходимо лишь импортировать контракты (классы).
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken { }
После этого, осталось лишь расширить наш класс MyToken импортированным контрактом ERC20. Далее, мы передадим параметры в родительский конструктор, чтобы присвоить ему название, символ, разрядность и общее количество в обращении.
Название: MyToken
Символ: MTN
Разрядность: 8
Общее кол-во: 1 000 000
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor() ERC20("MyToken", "MTN") { _mint(msg.sender, 1000000 * (10 ** decimals()));
}
}
Не поверите, но это все! Конечно же, это самый стандартный токен без какой-либо кастомной логики, но для начала - в самый раз!
Теперь нажмите правой кнопкой мыши на файл и выберете “Compile”.
Что делать дальше?
Публикация смарт контракта
Или же, по-другому - деплой. Пока что, это просто описанная кодом бизнес-логика. Нам нужно скомпилировать код в формат понятный EVM (виртуальной машине Ethereum) и отправить байт-код в блокчейн, где он навсегда останется.
Перейдите в раздел “DEPLOY & RUN TRANSACTIONS”, во вкладке “Environment” выберите “Remix VM (London)”, это тестовая EVM. Как аккаунт можно выбрать любой подходящий. Во вкладке “CONTRACT” необходимо выбрать скомпилированный контакт -- в данном случае - MyToken.
Нажмите на кнопку Deploy. Ваш контракт уже в тестовой VM! Теперь списке “Deployed Contracts” должен появиться MyToken. Если все прошло успешно - вы можете проверить работоспособность методов.
Теперь разберемся, как работает деплой в продакшен среду. То есть, в реальный блокчейн, чтобы пользователи могли взаимодействовать с ним, а транзакции были видны в эксполере (например, https://etherscan.io).
Вам необходимо установить metamask, как расширение для браузера, и сгенерировать (или импортировать) кошелек; подробную инструкцию можно найти по адресу https://metamask.io.
Далее, необходимо совершить те же действия, что и для тестовой сети. Появится окно с подтверждением транзакции. Потребуется заплатить комиссию за деплой. После всех операций выше, вам станет доступен адрес контракта в сети Ethereum. Поздравляем!
Что дальше?
Можно продолжить изучение Solidity и разработки Blockchain приложений. Или же, интегрировать этот токен в ваши бизнес-процессы.
https://docs.soliditylang.org - здесь можно найти документацию языка.
Спасибо за прочтение. Мы пишем для того, чтобы люди с крутыми идеями погрузились в технический аспект их реализации.