Введение в ERC-20 токены

Блокчейн Ethereum был основан Виталиком Бутериным в 2014 году, как платформа с открытым исходным кодом для запуска децентрализованных приложений. Причиной был тот факт, что у протокола первой криптовалюты Bitcoin были серьёзные проблемы с гибкостью и адаптивностью.

Новый блокчейн очень быстро оценили как разработчики, таки и потенциальные инвесторы, за счёт чего очень быстро образовалась полноценная индустрия, работающая на основе распределённых приложений и смарт-контрактов.

И одним из её важных составляющих стал фреймворк ERC-20, который используется для создания новых токенов или жетонов, способных взаимодействовать с Ethereum. Что интересно – этот адаптивный механизм вдохновил разработчиков Биткоина на создание похожего стандарта - BEP-2.

Что такое ERC-20?

ERC – это «Ethereum Request for Comments» или «Запрос Эфириума в ответ на комментарии». По сути – разновидность технических документов, которые описывают стандарт программирования в этом блокчейне. Их не стоит путать с Ethereum Improvement Proposals (EIPs) (Предложения по улучшению Эфириума), которые, как и BIPs Биткоина, предполагают улучшение и изменение базового протокола. ERC работает иначе – путём установления соглашений, которые обеспечивают и облегчают взаимодействие между отдельными приложениями и смарт-контрактами.

Виталик Бутерин и Фабиан Фогельстеллер предложили простой формат ERC-20 ещё в 2015 году. Согласно их задумке, это нужно было для того, чтобы разработчики не изобретали свои собственные методы взаимодействия, а использовали готовый и универсальный фундамент.

Поэтому каждый новый токен ERC-20 автоматически получает право взаимодействовать с сервисами и программным обеспечением, соответствующим стандарту ERC-20. К ним относятся различные криптовалютные программные и аппаратные кошельки, биржи и другие проекты.

Необходимо отметить, что ERC-20 был вскоре заменён более эффективным EIP-20. Но за пару лет, что на это ушло, разработчики привыкли к старому термину, поэтому он стал «нарицательным», даже несмотря на то, что большинство новых приложений используют его дополненную и расширенную версию.

Общие принципы создания токенов на Ethereum

В отличие от эфира, основы Ethereum, жетоны ERC-20 не хранятся на счетах аккаунтов. Они существуют только внутри смарт-контракта, играющего роль автономной базы данных. Кроме того, он определяет основные правила для них (название, символ, делимость, прочие особенности) и ведёт список, в котором баланс каждого пользователя сопоставляется с его адресом в Ethereum.

Чтобы куда-то свои токены переместить, пользователь обязан переслать запрос на транзакцию в смарт-контракт. По своей форме это идентично обычному запросу, в котором на смарт-контракт вносится 0 ETH, но с дополнительным полем, в котором указаны дополнительные действия. В нашем случае – передачу жетонов новому владельцу.

При этом комиссию всё равно придётся платить, поскольку только так можно добиться включения транзакции в блок. А если эфира нет, то и с токенами ERC-20 работать не получится.

Теперь попробуем разобраться в структуре типичного смарт-контракта ERC-20.

Что лежит в основе токенов ERC-20?

Для соответствия этому стандарту, в контракте должно быть прописано 6 основных функций - totalSupply, balanceOf, transfer, transferFrom, approve и allowance. Также там могут быть и другие - name, symbol, and decimal, но они уже не столь важны. Все эти функции работают в рамках языка программирования, лежащего в основе Ethereum.

totalSupply

function totalSupply() public view returns (uint256)

При вызове, выдаёт на экран общее количество токенов, содержащееся в смарт-контракте.

balanceOf

function balanceOf(address _owner) public view returns (uint256 balance)

Запрашивает конкретный адрес и выдаёт баланс токенов на нём. Поскольку все записи в Ethereum общедоступны, то вы можете посмотреть баланс любого пользователя, если знаете его адрес.

transfer

function transfer(address _to, uint256 _value) public returns (bool success)

Запрашивает адрес для перевода и сумму, затем – осуществляет транзакцию. При вызове запускает «Event transfer», запись о котором необходимо уже добавлять в блокчейн.

transferFrom

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

Эффективная альтернатива transfer, которая обеспечивает возможность настраивать процесс, особенно – в рамках децентрализованных приложений. Тоже используется для перемещения токенов, но они не обязательно должны принадлежать человеку, вызвавшему эту функцию.

По сути, вы даёте смарт-контракту право переводить средства от вашего имени. Например, в рамках подписки на определённые услуги, чтобы каждый раз не вводить данные лично. Также как и при обычном transfer, запись об этом событии должна добавиться в блокчейн.

approve

function approve(address _spender, uint256 _value) public returns (bool success)

Крайне полезная функция с точки зрения программирования. С её помощью вы можете ограничить количество токенов, которые смарт-контракт может вывести с вашего счёта. Иначе повышается риск того, что из-за злоупотребления или технической ошибки вы потеряете свои средства.

В качестве примера, возьмём подписку на какую-нибудь услугу. Предположим, у нас есть большое количество актива, например, EXBASETOKENs, и мы хотим организовать еженедельные регулярные платежи для какого-нибудь приложения DAPP. И нам нужно это как-то автоматизировать, чтобы не тратить своё время на лишние действия.

Сумма EXBASETOKENs на нашем счету значительно превышает стоимость подписки. Поэтому вы запускаете функцию APPROVE и задаёте ограничение. Допустим, подписка стоит 1 жетон в неделю, а вы указали ограничение в 20 токенов. Теперь каждую неделю в течение 5 месяцев с вас будут регулярно списываться средства.

А если приложение DAPP начнёт действовать злонамеренно или будет взломано, то вы всё равно не потеряете более 20 токенов. Это, конечно, не идеальная защита, но намного лучше, чем ничего.

Вызов этой функции, так же как и transfer, запускает событие, которое необходимо добавить в блокчейн.

allowance

function allowance(address _owner, address _spender) public view returns (uint256 remaining)

Отлично работает в сочетании с approve. Если вы дали какому-то смарт-контракту право управлять частью своих токенов, то с помощью этой функции можно посмотреть, сколько ещё он сможет вывести. Берём тот же пример. Вы разрешили списать 20 токенов в рамках еженедельного платежа. Прошло 12 недель, вы про это вспомнили и решили посмотреть, какой ещё резерв у вас остался. Функция allowance должна выдать вам значение 8.

Дополнительные возможности

Указанные выше функции являются обязательными, чтобы соответствовать стандарту ERC-20. С другой стороны, name, symbol, и decimal обязательными не являются, но позволяют сделать смарт-контракт немного красивее и удобнее для восприятия. Они дают возможность добавить удобочитаемое имя, установить символ (ETH, BTC или иной) и указать, сколько знаков после запятой указывать при реакции на запрос. Это может быть важно, поскольку жетоны, использующиеся для быстрой оплаты, могут быть более делимыми, нежели те, что воплощают право собственности на определённое имущество.

Что можно сделать с помощью токенов ERC-20?

Объединив все перечисленные ранее функции, мы получаем полноценный контракт ERC-20. Мы может узнать общее количество активов, проверить свой баланс, перевести средства или дать разрешение другим децентрализованным приложениям управлять нашими токенами в определённых заданных рамках.

Однако это ещё не всё. Разработчики могут внедрять свои функции и устанавливать дополнительные параметры, исходя из своих потребностей. Это делает контракты ERC-20 столь гибкими.

Стейблкоины

Стейблкоины – монеты, привязанные к различным фиатным валютам, очень часто используют стандарт ERC-20. Особенно наиболее крупные и известные.

Выглядит это следующим образом. Типичный эмитент фиатного стейблкоина держит в резерве определённую сумму в евро, долларах или иной валюте. Затем – выпускает эквивалентное количество токенов. Так, например, при наличии резерва в 10000 долларов, можно выпустить 10000 долларовых стейблкоинов.

В рамках Ethereum это очень легко реализовать. Достаточно просто запустить смарт-контракт с этой суммой, а затем – начать распространять токены среди пользователей с обещанием, что те смогут в любой момент выкупить с их помощью соответственное количество фиатной валюты.

Как будут пользователи распоряжаться токенами – их личное дело. Могут платить за товары и услуги, а могут и использовать в рамках DAPPs. Или вернуть их эмитенту с просьбой обменять. В таком случае фиат из резервов переводится на счёт пользователей, а жетоны – сжигаются.

Всё это работает за счёт довольно простых смарт-контрактов. Однако при этом требует значительной работы с внешними факторами – логистикой, соблюдением нормативных требований и прочими вещами, типичными для фиатной валюты.

Токены безопасности

Во многом напоминают стейблкоины. Настолько, что смарт-контракты у них могут быть идентичными, поскольку функционируют они одинаково. Разница начинается на уровне эмитента. Security tokens – это различные ценные бумаги, типа акций, облигаций или прав собственности на физические активы. Но в остальном, различия практически не наблюдаются.

Служебные токены

Пожалуй, наиболее распространены на данный момент. В отличие от описанных выше, они не подкреплены реальными активами. Если проводить аналогию, то стейблкоины и Security tokens – это как акции крупной авиакомпании, а Utility tokens – особые «льготные» программы для часто летающих пассажиров. У них есть определённая внутренняя функция, но внешней ценности нет. Примером могут служить многочисленные внутриигровые валюты, «топливо» для децентрализованных приложений, баллы лояльности и много чего ещё. И всё это отлично сочетается со смарт-контрактами.

Существует ли майнинг жетонов ERC-20?

Если кратко, то нет. Токены «чеканятся» или выпускаются в момент запуска смарт-контракта, исходя из планов разработчиков и «дорожной карты» проекта. А затем – распределяются между инвесторами и пользователями.

Как правило, в рамках первичного предложения монет (ICO), Initial Exchange Offering - первичного предложения обмена (IEO) и предложения токенов безопасности (STO). К счастью, суть у этих методов очень схожа. Инвесторы отправляют эфир на смарт-контракты, а в ответ получают новые жетоны. ETH идёт на дальнейшее финансирование и развитие проекта, а что делать с полученными токенами, пользователи решают сами. Чаще всего – перепродают их по более высокой цене, если проект удачно развивается.

Но это распределение не обязательно должно быть автоматическим. Некоторые краудфандинговые проекты сами распределяют жетоны между инвесторами и пользователями, исходя из их активности и участия в развитии идеи.

Преимущества и недостатки

Начнём, пожалуй, с преимуществ.

Но и недостатки тоже присутствуют.

Масштабируемость. Блокчейн Ethereum не застрахован от типичных проблем, связанных с ростом. Даже сейчас они уже активно мешают. Попытка отправить транзакцию в пиковое время чревата либо длительным ожиданием, либо повышением платы. И всё это напрямую касается токенов ERC-20, которые, как мы помним, обязаны отправлять в блокчейн информацию о переводах. Впрочем, над этой проблемой активно работают. И при переходе на Ethereum 2.0, по мнению сообщества, с ней получится справиться.

Аферы. Это, конечно, не проблема технологии, но не вспомнить про неё нельзя. Тот факт, что любой может создать токен ERC-20, наобещать кучу всего, получить эфир в рамках ICO, а потом – исчезнуть в неизвестном направлении, несколько напрягает. А можно ещё вспомнить различные проекты на основе финансовых пирамид и схем Понци, которые маскируются под классические блокчейн-проекты. Так что перед инвестированием лучше провести собственный анализ рынка и понять, что именно перед вами – афера или реальная идея.

ERC-20, ERC-1155, ERC-223, ERC-721 – в чём между ними разница?

ERC-20 был первым и до сих пор является самым популярным стандартом токенов блокчейна Ethereum. Но он далеко не единственный. За годы разработок, появились новые, либо усовершенствующие его, либо предлагающие принципиально новые цели и подходы.

Некоторые из таких стандартов используются в non-fungible tokens (NFTs) – несменяемых токенах. Особенно удачно они работают в ситуациях, когда необходимо токенизировать единственный в своём роде актив.

Пример – стандарт ERC-721. Используется в приложении CryptoKitties DApp, предоставляет пользователям API для чеканки собственных токенов и кодирования метаданных (изображение, описание и т.д)

Стандарт ERC-1155 – улучшение одновременно и ERC-20, и ERC-721. Он позволяет в одном и том же контракте описывать как взаимозаменяемые, так и невзаимозаменяемые единицы.

ERC-223 и ERC-621 направлены на повышение удобства использования. Первый добавляет меры предосторожности против случайной передачи жетонов, второй – дополнительные функции для увеличения или уменьшения предложения токенов.

Заключение

В течение долгих лет стандарт ERC-20 доминировал в мире криптовалют – и это вполне закономерно. Любой, кто хоть немного разбирается в программировании, мог запустить собственный смарт-контракт с широким спектром вариантов использования. Однако этот стандарт не идеален – в нём не хватает многих важных функций, интегрированных в более поздние по времени разработки. Но смогут ли они вытеснить ERC-20? Пока что, у экспертов нет единого мнения на этот счёт.