Содержание
С момента своего запуска блокчейн Ethereum привлек множество разработчиков, компаний и предпринимателей и положил тем самым начало растущей индустрии пользователей, запускающих
смарт-контракты и распределенные приложения.
В этой статье мы рассмотрим стандарт
ERC-20 – основу создания
токенов. Стандарт разрабатывался специально для сети Ethereum, но сумел вдохновить и другие стандарты блокчейнов, например,
BEP-2 Binance Chain.
ERC в Ethereum – это запрос на внесение предложений по улучшению сети (англ. Ethereum Request for Comments). ERC представляют собой технические документы, в которых изложены стандарты программирования на Ethereum. Не следует путать их с предложениями по улучшению Ethereum (EIP), которые, как и BIP Биткоина, предлагают улучшения самого протокола. Задача ERC – установление соглашений, которые упрощают взаимодействие приложений и контрактов друг с другом.
ERC-20 был создан в 2015 году Виталиком Бутериным и Фабианом Фогельстеллером с целью предложить относительно простой формат для создания токенов на Ethereum. Опираясь на существующий стандарт, разработчики экономят время и силы. Благодаря ERC-20 они могут создавать новые токены и не беспокоиться о совместимости и безопасности.
Следует отметить, что на базе стандарта ERC-20 был разработан EIP (а именно – EIP-20). Произошло это через несколько лет после запуска ввиду широкого распространения стандарта. Но даже спустя годы название «ERC-20» все еще актуально.
В отличие от ETH (собственной криптовалюты Ethereum), токены ERC-20 не хранятся в аккаунтах. Они существуют только внутри контракта, который представляет собой своеобразную автономную базу данных. Контракт определяет условия для токенов (например, имя, символ, делимость). В нем также содержится список, где сопоставляются балансы пользователей с их адресами Ethereum.
Для перемещения токенов пользователи должны отправить в контракт транзакцию с просьбой переместить часть своего баланса в другое место. Например, если Алиса хочет отправить Бобу 5 000 токенов BinanceAcademy, она запускает функцию внутри смарт-контракта с просьбой сделать это.
Ее запрос помещается внутрь обычной на вид транзакции Ethereum, с которой взимается 0 ETH в пользу смарт-контракта. Запрос добавляется в дополнительное поле в транзакции, где указывается, что именно Алиса хочет сделать – в нашем случае передать токены Бобу.
Несмотря на то, что она не отправляет эфир, она все равно должна заплатить комиссию, выраженную в эфире, чтобы ее транзакция добавилась в
блок. Если у нее нет ETH, то перед совершением транзакции потребуется его приобрести.
Вот реальный пример подобного процесса на Etherscan: кто-то делает запрос к контракту в BUSD. Мы видим, что токены были переведены, а комиссия оплачена, несмотря на то, что ее сумма равна 0 ETH.
Теперь мы можем углубиться в структуру контракта ERC-20.
Для совместимости с ERC-20 ваш контракт должен включать в себя шесть обязательных функций: totalSupply, balanceOf, transfer, transferFrom, approve и allowance. Кроме того, вы можете добавить дополнительные функции, такие как name, symbol и decimal. Из названий функций можно понять их назначение. Далее мы разберем каждую из них подробнее.
Ниже функции представлены в том виде, в котором они пишутся на созданном для Ethereum языке Solidity.
totalSupply
function totalSupply() public view returns (uint256)
При запросе пользователя вышеуказанная функция показывает
общее количество токенов в контракте.
balanceOf
function balanceOf(address _owner) public view returns (uint256 balance)
В отличие от totalSupply, функция balanceOf использует параметр (адрес). Она показывает баланс токенов адреса по запросу. Помните, что учетные записи в сети Ethereum общедоступны, поэтому вы можете запросить баланс любого пользователя, если вам известен его адрес.
перевод
function transfer(address _to, uint256 _value) public returns (bool success)
Функция transfer переводит токены одного пользователя другому. Чтобы ее использовать, нужно указать адрес получателя и сумму перевода.
Функция transfer запускает событие (в нашем случае event transfer), что указывает блокчейну на необходимость включить ссылку на него.
transferFrom
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
Функция transferFrom – более удобная альтернатива функции transfer, которая обеспечивает большую программируемость в децентрализованных приложениях. Как и transfer она используется для перемещения токенов, но они необязательно должны принадлежать лицу, обращающемуся к контракту.
Иными словами, вы можете уполномочить другое лицо или другой контракт переводить средства от вашего имени. Еще один вариант использования включает автоматическую оплату услуг на основе подписки, в случае если вы не хотите вручную отправлять платежи каждый день/неделю/месяц. Программа будет делать это за вас.
Эта функция запускает то же событие, что и transfer.
approve
function approve(address _spender, uint256 _value) public returns (bool success)
Approve – еще одна полезная с точки зрения программируемости функция. С ее помощью можно ограничить количество токенов, которые смарт-контракт сможет снять с вашего баланса. В ее отсутствие возникает риск ненадлежащего использования контракта: кто-то может эксплуатировать его в своих целях или украсть все ваши средства.
Рассмотрим пример с моделью подписки. Предположим, у вас есть много токенов BinanceAcademyTokens и вы хотите настроить еженедельные платежи для стримингового сервиса
DApp. Вы и так днями и ночами изучаете контент
Binance Academy и не хотите каждую неделю тратить время на создание транзакции вручную.
Предположим, у вас есть большой запас токенов BinanceAcademyTokens, намного превышающий сумму оплаты подписки. Чтобы сервис DApp не истощил его, вы можете установить лимит с помощью функции approve. Например, ваша подписка стоит один токен BinanceAcademyToken в неделю. Если вы ограничите максимальную сумму двадцатью токенами, то подписку можно будет оплачивать автоматически в течение пяти месяцев.
В худшем случае, если DApp попытается вывести все ваши средства или произойдет непредвиденная ошибка, вы потеряете только двадцать токенов. Этот вариант не исключает возникновения возможных неполадок, но защищает вас от потери всех активов.
При вызове функции approve запускается событие approval (утверждение). Как и событие transfer, оно записывает данные в блокчейн.
allowance
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
Функция
allowance может использоваться вместе с функцией
approve. Предоставив контракту разрешение на управление своими
токенами, вы можете использовать эту функцию для проверки того, какое количество токенов он все еще может списать. Например, если ваша подписка израсходовала двенадцать токенов из двадцати разрешенных, то при вызове функции
allowance должно отобразиться число восемь.
Дополнительные функции
Функции, которые мы обсудили выше, являются обязательными. Функции name, symbol и decimal включать необязательно, но они могут улучшить ваш контракт ERC-20. Они дают возможность добавить хорошо читаемое имя, установить символ (например, ETH, BTC, BNB) и указать, на сколько знаков после запятой могут делиться токены. Например, токены, которые используются в качестве валюты, могут получить больше выгоды от большей делимости, чем токен, представляющий право собственности.
Увидеть эти элементы в реальном контракте можно в
данном примере на GitHub.
Если объединить все вышеперечисленные функции, мы получим контракт ERC-20. С его помощью можно запрашивать
общее предложение токенов, проверять баланс, переводить средства и давать разрешения другим
DApp-приложениям на управление токенами.
Главное преимущество токенов ERC-20 – гибкость. Используя их, вы также можете внедрять дополнительные функции и задавать определенные параметры в соответствии со своими потребностями.
Стейблкоины
Стейблкоины (токены, привязанные к
фиатным валютам) часто используют стандарт токенов ERC-20. Один из примеров – транзакция с контрактом BUSD, на которую мы ссылались ранее. В этом же формате доступно большинство стейблкоинов.
Эмитент стейблкоина, обеспеченного фиатной валютой, имеет резервы в евро, долларах и т. д. Затем для каждой единицы в своем резерве они создают токен. Это означает, что если бы $10 000 лежали в хранилище, эмитент мог бы создать 10 000 токенов, каждый стоимостью 1 доллар.
Это довольно просто реализовать в Ethereum. Эмитент запускает контракт с 10 000 токенами. Затем они будут распространяться среди пользователей с перспективой дальнейшего выкупа в фиатной валюте.
Токенами пользователи могут оплачивать товары и услуги или использовать их в DApp-приложениях. Кроме того, у пользователей есть возможность запросить у эмитента незамедлительный обмен токенов. В этом случае эмитент
сжигает возвращенные токены (они становятся недоступными) и выводит эквивалентную сумму в фиате из своих резервов.
Контракт, регулирующий этот процесс, как мы уже говорили, относительно простой. Однако запуск стейблкоина связан с множеством внешних факторов, таких как логистика, соответствие законодательству и нормативным требованиям и т. д.
Security-токены
Security-токены похожи на стейблкоины. На уровне контракта их можно считать идентичными, поскольку работают они одинаково. Но есть существенная разница для эмитента. Security-токены представляют собой ценные бумаги (акции, облигации или физические активы). Часто (хотя и не всегда) они предоставляют держателю некоторую долю в бизнесе или товаре.
Utility-токены
Utility-токены – на сегодняшний день наиболее распространенные типы токенов. В отличие от двух предыдущих вариантов, они ничем не подкреплены. Если токены, обеспеченные активами, похожи на акции авиакомпании, то utility-токены больше напоминают программу лояльности для часто летающих пассажиров: они выполняют свою функцию, но не представляют другой ценности. У utility-токенов может быть огромное множество применений. Так, они могут выступать в качестве
внутриигровой валюты, топлива для децентрализованных приложений, баллов лояльности и многого другого.
Пользователи могут майнить эфир (ETH), но не токены – токены создаются. При запуске контракта разработчики распределяют токены в соответствии с имеющимися планами и дорожной картой.
Обычно это делается путем
первичного предложения монет (ICO),
первичного биржевого предложения (IEO) или предложения security-токенов (STO). Вам могут встретиться различные аббревиатуры сокращения, но по сути они все довольно близки. Инвесторы отправляют эфир на адрес контракта и взамен получают новые токены. Полученные средства используются для финансирования дальнейшего развития проекта. Пользователи рассчитывают, что смогут воспользоваться своими токенами (сразу или позже) или перепродавать их для получения прибыли по мере развития проекта.
Процесс распространения токенов не нуждается в автоматизации. Многие краудфандинговые мероприятия позволяют расплачиваться различными цифровыми валютами (например, BNB, BTC, ETH и USDT). Затем, в соответствии с уплаченной суммой, пополняются балансы пользователей на указанных адресах.
Преимущества токенов ERC-20
Взаимозаменяемость
Фиатные валюты
взаимозаменяемы, поскольку каждая единица ничем не отличается от другой эквивалентной единицы. Если у вас есть токен BinanceAcademyToken, то не имеет значения, каким конкретно токеном вы владеете. Такие токены можно продать другим пользователям, и они останутся функционально идентичными, как деньги или золото.
Это очень удобно, если вы хотите использовать токен в качестве валюты. В данном случае вам не подходят отдельные единицы с отличительными чертами, делающие их невзаимозаменяемыми. Различия могут привести к тому, что некоторые токены станут более (или менее) ценными по сравнению с другими, а это, в свою очередь, нарушит их главную функцию.
Плавающая ставка
Как мы выяснили в предыдущем разделе, токены ERC-20 легко настраиваются и могут быть адаптированы для самых разных способов применения. Так, например, их можно использовать в качестве внутриигровой валюты, в программах лояльности, в качестве
цифровых предметов коллекционирования или даже в качестве изобразительного искусства и прав собственности.
Популярное
Популярность ERC-20 в криптовалютной индустрии обуславливает использование этого протокола в качестве основы для создания новых токенов. Именно поэтому существует множество бирж, кошельков и смарт-контрактов, уже совместимых с недавно выпущенными токенами. Более того, они обеспечиваются широкой поддержкой разработчиков и имеют всю необходимую документацию.
Недостатки токенов ERC-20
Масштабируемость
Как и многие сети криптовалют, Ethereum не застрахован от проблем, возникающих по мере роста сети. В настоящее время сеть испытывает проблемы с масштабируемостью, поэтому попытка отправить транзакцию в часы высокой загруженности приводит к высоким комиссиям и задержкам. Если вы запускаете токен ERC-20, когда сеть перегружена, это может повлиять на удобство использования токена.
С такой проблемой сталкивается не только Ethereum. В целях безопасности распределенным системам приходится идти на компромисс. Сообщество планирует решить эту проблему при переходе на
Ethereum 2.0, где будут реализованы обновления
Ethereum Plasma и
Ethereum Casper.
Мошенничество
Несмотря на то, что это не проблема самой технологии, простота запуска токена может считаться недостатком. Создание простого токена ERC-20 требует минимальных усилий, а значит, любой может сделать это, в том числе и в преступных целях.
Таким образом, необходимо очень внимательно относиться к тому, во что вы инвестируете. Существует целый ряд
схем Понци и пирамид, замаскированных под блокчейн-проекты. Прежде чем вкладывать средства,
внимательно всё изучите, чтобы самостоятельно решить, является ли проект надежным.
ERC-20 был первым (и до сих пор остается самым популярным) стандартом токенов Ethereum, но далеко не единственным. За прошедшие годы появилось множество других протоколов, предлагающих улучшения ERC-20 или пытающихся достичь иных целей.
Некоторые из менее распространенных стандартов используются для создания
невзаимозаменяемых токенов (NFT). В зависимости от цели использования вам могут пригодиться уникальные токены с разными атрибутами. Если вы хотите токенизировать уникальное произведение искусства, игровой актив и т. д., вы можете использовать один из этих типов контрактов.
Например, стандарт
ERC-721 использовался для крайне популярного DApp CryptoKitties. Такой контракт предоставляет пользователям
API для создания собственных невзаимозаменяемых токенов и кодирования
метаданных (изображений, описаний и т. д.).
Стандарт ERC-1155 можно рассматривать как улучшение ERC-721, а также ERC-20. Данный стандарт поддерживает как взаимозаменяемые, так и невзаимозаменяемые токены в одном контракте.
Другие варианты, такие как ERC-223 или ERC-621, направлены на повышение удобства использования. ERC-223 реализует меры предосторожности для предотвращения случайной передачи токенов. ERC-621 предлагает дополнительные функции для увеличения и уменьшения запасов токенов.
Стандарт ERC-20 доминировал в пространстве криптоактивов на протяжении многих лет, и это неудивительно. Любой без труда может развернуть простой контракт для различных целей (utility-токены, стейблкоины и т. д.). Тем не менее, ERC-20 лишен некоторых функций, которые присутствуют в других стандартах. И пока нет точного ответа на вопрос, вытеснят его другие типы контрактов в будущем или нет.