Что такое ERC20?
Данная статья предполагает, что, по крайней мере, читатель уже знаком с такими понятиями, как блокчейн, децентрализованные приложения (DApps), эфир, смарт-контракты, ICO и тд.
Говоря вкратце, блокчейн Ethereum – это распределенная вычислительная блокчейн-платформа с открытым кодом. Эта вычислительная платформа (сеть Ethereum) содержит децентрализованные приложения, которые выполняются с помощью небольшого кусочка кода под названием смарт-контракт. Все транзакции в сети Ethereum, как и вычислительные затраты на использование смарт-контрактов, оплачиваются в криптовалюте Ethereum – эфире.
Некоторые децентрализованные приложения используют собственную криптовалюту. Эти приложения создают свою валюту под названием токен и зарабатывают средства на их запуск с помощью первичного предложения коинов (ICO).
Блокчейн-платформа Ethereum поддерживает все виды децентрализованных приложений, включая те, которые требуют создания, обслуживания и передачи цифровых активов. Разработанные на платформе Ethereum токены вводятся с целью создания сети полезных и реально используемых приложений, к примеру, приложений для факторинга счетов, браузерных платежей или приложения дебетовой криптокарты.
Все вышеперечисленные идеи уже давно были воплощены на платформе в виде приложений и токенов с очень схожим стандартом программирования. Фактически, 99% развернутых Ethereum токенов используют именно этот стандарт – ERC-20.
Стандарт токена ERC-20 (Ethereum Requests for Comment) – стандартный набор «правил» программирования, которым должны следовать основанные на Ethereum токены. В качестве минимальных требований к жизнеспособному токену разработчики сошлись на 6 главных функциях и 2-х событиях, чтобы нормализовать движение токенов по всей сети. Создав данный протокол, разработчики Ethereum обеспечили себе возможность без труда работать со внешними смарт-контрактами.
Большинство пользователей хранит свои токены на кошельке MyEtherWallet или ему подобных.
Что такое Solidity
Хотя в данный момент самый популярный клиент Ethereum написан на Google GO, выбор удобного языка для создания смарт-контрактов довольно велик. Ethereum предлагает разработчикам выбор из языков типа Vyper, Bamboo, Serpent или Solidity.
Заострим внимание на последнем языке в нашем списке – Solidity.
Solidity – контракт-ориентированный язык программирования, используемый для реализации смарт-контрактов. Для понимающих что-то в программировании, язык Solidity – это смесь между Javascript, Python и C. Язык Solidity статически типизирован, поддерживает наследование и с самого старта имеет хост библиотек. Чтобы ближе познакомиться с Solidity, вы можете перейти по ссылке.
Пошаговое руководство по ERC-20
Давайте остановимся на этом моменте и выясним в подробностях, что из себя представляет этот стандарт и каким образом он реализует себя в сети Ethereum. Также мы рассмотрим синтаксис Solidity.
В мире Ethereum все начинается и завершается смарт-контрактами. Документация Solidity определяет контракты как «набор кода (его функций) и данных (его состояния), расположенных на определенном адресе на блокчейне Ethereum». Контракты Ethereum поддерживают наследование, поэтому один контракт может быть образцом другого.
Следуя этой логике, контракт, который используется строго для наследования, также может использоваться для отказоустойчивости, определяя, что должен содержать новый контракт для компиляции. Эти контракты также известны как интерфейсные.
Это значит, что любой контракт токена ERC-20 не компилируется без последующего. В свою очередь, это означает, что разработчики Ethereum теперь знают, какие функции и модели поведения ожидать от любого токена ERC20.
Стандарт ERC-20 – это интерфейс-контракт, содержащий в себе 6 исполняемых функций и 2 события в журнале событий.
Allowance (допуск)
Функция Allowance позволяет двум адресам создавать повторяющиеся однонаправленные переводы. Адрес кошелька «владелец» (tokenOwner) и второй адрес – «спендер» (spender – тот, кто тратит средства) определены в качестве двух участвующих в транзакции кошельков. В частности, «спендер» берет средства у «владельца» токенов с некоторым интервалом. Обе эти переменные будут участвовать и далее.
Approve (утверждение)
Функция Approve (функция утверждения) ссылается на предыдущую функцию Allowance: эта функция позволяет двум адресам многократно выводить средства в одном направлении. Approve – простая стандартная функция, запрашивающая у владельца кошелька подтверждение транзакции, осуществляемой с его адреса в контексте Allowance. Эта функция требует две вводные: адрес «спендера» и количество отправляемых токенов. На выходе мы получаем публичное булево число, которое указывает, был ли рассмотренный запрос одобрен или отклонен.
BalanceOf
BalanceOf – это интуитивная функция, которая принимает вводные параметры (адрес «владельца») и возвращает единую общедоступную константу (uint баланс). Возвращенное постоянное число uint или баланс отображает количество токенов на запрашиваемом адресе. Помните: чаще всего транзакции на блокчейнах – публичные и Ethereum – не исключение.
TotalSupply
TotalSupply – это функция анонимного конструктора, запускаемая только единожды в самый первый момент развертывания в сети Ethereum. Функция возвращает паблик константу totalSupply uint, которая действует как общий запас токенов до конца жизни контракта. Константа totalSupply обычно определяется одним из двух способов: с помощью хардкодинга переменной либо финансирования из оригинального кошелька.
Transfer
Функция трансфера – ключевая функция любого токена ERC-20, которая определяет и осуществляет прямой перенос из кошелька владельца на другой адрес. Так как за данный запрос отвечают владельцы кошельков, для этой функции нужно всего два параметра: адрес получателя и количество отправляемых токенов. Эти два параметра обычно выглядят следующим образом: «address to» и «uint tokens». Значение возвращаемого трансфера, также представленное в булевом типе данных, подтверждает, получил ли адресат отправленные токены.
TransferFrom
Функция TransferFrom позволяет смарт-контрактам осуществлять трансфер с параметрами, заданными владельцем кошелька. Стоит заметить, что эта функция принципиально отличается от предыдущей функции Transfer. Предыдущая функция позволяет владельцу кошелька отправлять токены напрямую на другой адрес, а TransferFrom позволяет смарт-контракту отправлять токены от имени владельца кошелька, что, к примеру, применяется при заполнении ордера на бирже, своевременного предоставления средств или выплаты выигрышей в азартных играх.
Функция TransferFrom имеет три вводных параметра: адрес владельца кошелька, адрес получателя и количество отправленных токенов. Чаще всего они инициализируются в следующем синтаксисе: «address from», «address to», «uint tokens». Выход этой функции точно такой же, как выход Transfer: публичное булево число, указывающее на успешную или неудавшуюся транзакцию.
Заключение
Все шесть описанных выше функций являются ключевыми в 99% ныне существующих токенов ERC-20. Не учитывая несколько исключений (типа Golem) разработчики Ethereum могут не волноваться и контролировать ситуацию, зная наперед, что можно ожидать от этих функций при разработке внутренних контрактов или при взаимодействии с внешними паблик контрактами.
Дисклеймер: не рассматривайте эту статью как рекомендацию по инвестиции. Проведите тщательный анализ, прежде чем инвестировать в какую-либо криптовалюту.