Существующие стандарты ERC, и что нужно о них знать
Спецпроект «Стандарты токенов Ethereum: от ERC-20 к ERC-721» подготовлен журналом ForkLog в партнерстве с блокчейн-платформой для спортивных ставок CryptoCup.
Во втором материале спецпроекта мы поговорим о различных видах стандартов ERC, их особенностях и существующих имплементациях.
Блокчейн-индустрия развивается с астрономической скоростью, и на пути этого развития неизбежно возникают проблемы, которые необходимо решать. Как отмечалось в предыдущей статье, введение стандарта ERC-20 стало переломным событием в криптовалютном мире. Простота платформы Ethereum, открытый код и наличие множества сервисов привели к формированию и распространению тысяч новых токенов.
В предыдущей статье упоминались проблемы, которые возникли при использовании традиционного стандарта ERC-20. Одной из наиболее серьезных уязвимостей оказалось отсутствие регулирующего механизма отправки токенов, созданных на основе стандарта ERC-20, на другие адреса, которые этот стандарт не поддерживают. Все переданные таким образом токены сгорают.
Подробнее этот механизм можно описать так: пользователи, которые используют в контракте функцию под названием transfer при отправке монет ERC-20 в контракты, которые не ожидают поступления и не распознают входящие токены, теряют свои средства, так как они попросту уходят в никуда. Эта функция отличается от функции автоматической передачи transferFrom, введенной ранее, которая не приводит к потере средств. Стандарт ERC20 использует обе функции — transfer и transferFrom. Итогом обсуждения данной проблемы в сети разработчиков GitHub стало создание других видов стандартов для смарт-контрактов.
Стандарт ERC-223
В 2017 году пользователь с никнеймом Dexaran выложил в открытый доступ GitHub код предложения нового стандарта ERC-223, который был призван решить описанную выше проблему несоответствия. Элегантное решение заключало в себе объединение двух функций transfer и transferFrom стандарта ERC-20 в одну функцию под названием transfer, но теперь с тремя параметрами — address _to, unit _value, bytes data. Эти параметры позволили исключить возможность неправильного использования функции пользователями.
Другим важным усовершенствованием стало введение функции tokenFallback, которая подготавливает контракт для принятия любого отправляемого вида монет и предотвращает их отправку, если не получает ответа от адреса получателя. На данный момент платформа Ethereum имеет схожую функцию для всей сети — модификатор контрактов payable, который подготавливает контракты к получению монет Ether.
На деле имплементация стандарта ERC-223 идет медленно, и большинство проектов продолжают пользоваться стандартом ERC-20. Отчасти это вызвано популярностью второго и недостаточной осведомленностью о первом, а также недоверием создателей проектов к другим вариантам стандартов. Важным фактором является и то, что упомянутые баги довольно редки и сама сеть Ethereum теперь является дополнительным защитным фактором от такого рода ошибок.
Тем не менее среди проектов, использующих стандарт ERC-223, можно отметить несколько интересных: AmigoCoin, CargoCoin, Expercoin, ORCA.
Стандарт ERC-777
Созданное в конце 2017 года новое предложение стандарта было призвано решить сразу несколько задач. Благодаря новой функции tokenReceived, которая позволяла не использовать повторную функцию одобрения (second verifying transaction), время транзакции сокращалось в два раза. Также в данном стандарте появилась возможность помечать неблагонадежные или несовместимые адреса, которые могут быть связаны с хакерами или мошенниками. Данный стандарт решил и проблему несовместимости путем использования метода обратной совместимости, что сделало его кросс-стандарт совместимым на платформе Ethereum.
Среди минусов этого довольно нового стандарта можно назвать его код, который все еще претерпевает изменения, а также создание большого количества взаимозависимых вызовов контрактов в случае его использования, что может создать проблемы с безопасностью в будущем.
Стандарт ERC-721
Этот стандарт появился в 2017 году благодаря игре Cryptokitties, где можно обмениваться и собирать коллекции виртуальных котят, обладающих уникальными генотипами или 256-битными беззнаковыми кодами. Необычным в этой игре стало то, что каждый котенок являлся уникальной криптовалютой различной цены, в зависимости от его популярности и редкости.
Стандарт ERC-721 стал первым примером non-fungible tokens (NFT) — уникальных или невзаимозаменяемых токенов, который был предложен для электронных предметов коллекционирования. Fungibility — это характерная особенность валюты, каждая денежная единица которой может быть заменена другой точно такой же. Например, 5 или 20 долларов хороши точно так же, как и любые другие 5 и 20 долларов.
Все фиатные деньги являются взаимозаменяемыми, а также делимыми. Второе означает, что валюта имеет делимость до определенного предела. Например, у доллара это 1/100, что означает, что каждый доллар делится на 100, в его случае, центов.
Функции approve и takeOwnership, а также два вида событий: Transfer и Approval делают транзакции более защищенными от случайной потери средств, как в случае со стандартом ERC-20.
Данный вид стандарта сейчас претерпевает настоящий взрыв использования, не только из-за популярности криптокотят, но еще и потому, что многие критики увидели важность создания уникальных токенов не только для процесса коллекционирования, но и для применения в реальной жизни, например для недвижимости, реальных ценных предметов или защиты интеллектуальной собственности.
Среди прочих проектов, созданных на основе стандарта ERC-721, стоит упомянуть: CryptoPunks, Decentraland, Rare Pepes, WePower и Cryptocup.
Стандарты ERC-821 и ERC-875
Ставшие продолжением стандарта ERC-721, стандарты ERC-821 и ERC-875, каждый по-своему, подошли к улучшению смарт-контрактов для невзаимозаменяемых токенов.
ERC-821 имеет такую же, как у ERC-777 функцию transferAndCall, которая позволяет контрактам реагировать на входящие токены. Также он предложил использовать более конкретизированный нейминг, чтобы не вызывать путаницы между разными видами предметов коллекционирования. Сигналы совместимости со всеми остальными стандартами сейчас находятся в разработке.
ERC-875 предложил возможность отправки нескольких NFT (non-fungible tokens) в одной транзакции, при помощи присвоения каждому из них персонального индекса. Стандарт также предполагает безопасные отправку и обмен токенов, как и в случае с ERC-721.
Заключение
На данный момент можно выделить два основных типа стандартов. К первому относятся все предложения, созданные для улучшения ERC-20, а ко второму стандарты занимающийся унификацией NFT или электронных предметов коллекционирования.
Каждый стандарт требует времени на разработку, а также проверку, одобрение и имплементацию сообществом платформы. Эти и многие другие стандарты платформы Ethereum выступают двигателями развития всей криптоэкосистемы и призваны сделать взаимодействие в сети легче, безопаснее и дешевле.
Возможно, уже в скором времени мы увидим каталогизацию совместимых и проверенных стандартов ERC, для использования в различных проектах по децентрализации.