Все вы знакомы с токенами ERC20, поскольку, вероятно, у вас есть пара, распределенная посредством какой-то продажи токенов. Но знаете ли вы, что помимо ERC20 существует еще много стандартов? Ethereum имеет долгую историю разработки стандартов.
Чтобы вы лучше понимали, что означает ERC, он расшифровывается как «запрос Ethereum на комментарий». Это предложение, представленное для обсуждения, и предложения по действующему стандарту. Число (например, 20) относится к номеру проблемы на платформе совместного использования кода. Github. Во-первых, давайте взглянем на стандарт ERC20..
Стандарт ERC20
Что такое стандарт ERC20?
Появление токенов ERC20 произвело революцию на рынке криптовалют и открыло двери множеству Криптовалюта ICO проекты, свидетелями которых был мир в течение 2017 года. Введенный в 2015 году код ERC20 излагает определенный список правил, которые должен развертывать данный токен на основе Ethereum, что упрощает процесс программирования функций токенов в блокчейне Ethereum. По сути, токены ERC20 – это особые формы смарт-контрактов, которые используют блокчейн Ethereum..
Наиболее известные примеры токенов ERC20 включают Bancor, EOS, Tronix, BNB, VeChain и Bankex..
До внедрения стандарта ERC20 для токенов Ethereum кодировщикам приходилось создавать определенные стандарты реализации для разработки токена и его запуска в сети Ethereum. Тем не менее, код токена ERC20 упростил процесс создания токенов благодаря оптимизированному протоколу и стандартам смарт-контрактов. Код ERC20 упростил реализацию смарт-контрактов токенов, что значительно снизило вероятность нарушения контрактов токенов..
По состоянию на апрель 2018 г. 66 468 контрактов на токены ERC20, благодаря единообразию кода токена, предусмотренному стандартом ERC20, что упростило криптовалютным биржам размещение различных токенов на своих торговых платформах. Таким образом, стандарт ERC20 помог криптосообществу преодолеть проблемы с ликвидностью, которые могли быть связаны с таким огромным количеством токенов на основе Ethereum..
Функции токена ERC20:
Код ERC20 описывает шесть конкретных функций для токенов, которые
1- Получение общего количества токенов через "totalSupply" функция
2- Получение баланса токена другой учетной записи, связанной с "_владелец" адрес через " Постоянный возврат balanceOf (address _owner) (баланс uint256)" функция.
3- Отправка определенного количества токенов "_ценить" на указанный адрес через " transfer (address _to, uint256 _value) возвращает (bool success)" функция.
4- Отправка определенного количества токенов "_ценить" с адреса одного токена (контракта) на адрес другого токена (контракта) через "transferFrom (address _from, address _to, uint256 _value) возвращает (bool success)" функция.
5- Включение определенной учетной записи для многократного снятия токенов со своей учетной записи, при этом предварительно определив верхний предел количества токенов, которые должны быть сняты с "_ценить" параметр. Этого можно добиться с помощью "Approve (address _spender, uint256 _value) возвращает (bool success)". Верхний предел вывода, т. Е. "_ценить" параметр, может быть перезаписан при вызове функции.
6- Возврат остаточного количества жетонов в пределах предварительно установленной суммы, определенной верхним пределом, разрешенным для использования "_spender" снять со счета "_владелец". Это может быть выполнено через "надбавка (адрес * _owner *, адрес * _spender *) константа возвращает (осталось uint256)" функция.
Эти шесть функций, определенных кодом ERC20, представляют собой краеугольные проблемы функциональности, которые включают в себя то, как эти токены будут передаваться между разными учетными записями, и как пользователи могут извлекать данные, связанные с данным токеном ERC20. Эта группа функций предписана для обеспечения того, чтобы токены на основе Ethereum работали одинаково в любой части платформы Ethereum. Таким образом, все криптокошельки, совместимые с эфирной монетой, также будут поддерживать токены, основанные на стандарте ERC20..
Критическая ошибка:
ERC20 является первым стандартом токенов Ethereum. Как это часто бывает с новым кодом, он содержит ошибки или логические ошибки. ERC20 предполагает два способа выполнения транзакции с токеном. Прежде всего, функция передачи позволяет отправлять токены на чей-то адрес. Если вы хотите внести токены в смарт-контракт, вам следует использовать комбинацию «одобрить + перевод от». Вы должны разрешить этому контракту вывести свои токены с помощью функции утверждения. Затем вам нужно вызвать функцию контракта, которая будет обрабатывать ваш депозит и выводить ваши токены через функцию transferFrom..
Что, если вы случайно внесете токены в контракт с функцией перевода? Транзакция будет успешной, но эта транзакция не будет признана контрактом получателя. Например, если вы отправляете токены в децентрализованный обменный контракт, тогда обменный контракт получит ваши токены, но не зачислит эти токены на баланс вашего обменного токена. Более того, если децентрализованный обменный контракт не реализует функцию экстренного извлечения токенов, то ни в коем случае нельзя будет вернуть свои токены, что приведет к безвозвратной потере токенов. Из-за этой ошибки экосистема Ethereum уже потеряла миллионы долларов..
Почему мы до сих пор используем стандарт ERC20?
Пользователь Reddit u / Дексаран, создатель стандарта ERC223, является одним из первых разработчиков, уведомивших сообщество о вышеупомянутой ошибке. Мы спросили его, почему ERC20 до сих пор так широко используется, даже зная об этой критической ошибке. Он привел следующие причины:
- Из-за преступной безответственности разработчиков токенов за свои действия.
- Потому что Ethereum Foundation по-прежнему продвигает стандарт токенов ERC20, даже если известно, что он содержит ошибки. Та же ситуация, что и раньше с TheDAO. Им нужно сказать "Прекрати это сейчас" но они не будут.
- Потому что основной причиной развития токенов является сбор средств, а не создание продукта..
- Потому что использование другого стандарта приведет к более высоким сетевым эффектам. Это не то, что нам действительно нужно, учитывая, что сеть Ethereum уже имеет проблемы с масштабируемостью..
Стандарт ERC223
В ERC223 Стандарт был предложен u / Dexaran, который помогал создавать эту статью. ERC223 – это стандарт токенов, который позволяет передаче токенов вести себя точно так же, как транзакции эфира. ERC223 использует обработку событий (считает транзакцию событием), чтобы предотвратить потерю токенов в необработанных транзакциях. Этот улучшенный стандарт устраняет критическую ошибку ERC20, заставляя функцию передачи выдавать ошибку при недопустимых переводах и отменяя транзакцию, чтобы средства не терялись. Короче говоря, ERC223 фокусируется на безопасность.
Дополнения и проблемы
ERC223 добавляет дополнительный параметр данных к функции передачи, чтобы разрешить более сложные операции, чем просто передача токена..
Основная проблема Дексарана заключается в том, что слишком много людей могут потерять свои токены, отправив их в контракты с использованием функции передачи, а не методов Approve и transferFrom, как обсуждалось ранее. Его решение состоит в том, чтобы изменить метод передачи, чтобы проверить, является ли адрес получения контрактом (т.е. содержит данные) или нет. Если это контракт, то предполагается, что есть функция tokenFallback для его обратного вызова. Основная слабость заключается в том, что если tokenFallback не существует, то будет вызвана резервная функция получающего контракта, и отправленные токены все равно могут быть потеряны..
Стандарт ERC777
ERC777 – это новый стандарт взаимозаменяемых токенов, который опирается на ERC820 (реестр псевдо-интроспекции контрактов) и пытается решить проблемы ERC20, такие как отсутствие механизмов обработки транзакций, которые привели к потере миллионов долларов из экосистемы Ethereum. Короче говоря, ERC777 фокусируется на принятие предлагая широкий спектр механизмов обработки транзакций.
Преимущества
Основное преимущество ERC777 заключается в том, что он использует новый метод распознавания интерфейса контракта. Этот стандарт предполагает, что в сети Ethereum существует центральный реестр контрактов (это определено в ERC820). Каждый может вызвать этот реестр, чтобы узнать, поддерживает ли определенный адрес (не имеет значения, является ли этот адрес контрактом) определенный набор функций, например, interface..
Одна из основных проблем Ethereum – невозможность узнать, какие функции выполняет контракт. ERC820 призван решить эту проблему. ERC777 использует этот подход, что определенно является хорошей идеей..
С другой стороны, вы можете создать токен, который будет реализовывать функции ERC20 по умолчанию вместе с новыми функциями ERC777 без переопределений (и, при необходимости, унаследовать критическую ошибку ERC20). Это может гарантировать хороший сетевой эффект для этого нового стандарта токенов и более быстрое внедрение. Как показывает практика, основная цель разработчиков токенов – собрать деньги, при этом предполагается, что им нужно продвигать свои токены на биржи. Биржам проще поддерживать токен, реализующий устаревшие функции ERC20 (не имеет значения, содержат ли эти функции ошибки или нет) без каких-либо исследований новых функций новых стандартов токенов. Чем проще биржам поддерживать токены нового стандарта, тем больше разработчиков будут его использовать. Это способствует принятию ERC777, в то время как ERC223 не обладает этим свойством..
Что отличается?
Этот стандарт токенов определяет совершенно новый набор функций, то есть функции send вместо функций transfer. authoriseOperator вместо утверждения. функция-обработчик `tokensReceived` вместо функции-обработчика` tokenFallback`.
Такой подход может гарантировать, что функции этого стандарта не будут пересекаться и отменять функции любого другого стандарта токенов, поэтому можно сделать токен, который будет совместим со стандартами ERC777 и ERC820 одновременно..
Наконец, ERC777 стандартизирует Мята и ожог функциональность токенов.
Точки сбоя и проблемы безопасности
ERC777 реализует функцию `authoriseOperator`, которая позволяет кому-либо управлять токенами от вашего имени. Дексаран объяснил нам, что считает этот метод устаревшим и не должен использоваться. Кроме того, разрешение кому-либо управлять токенами от вашего имени снижает пропускную способность сети и требует больше газа. `authoriseOperator` уже представляет одну транзакцию, а другая транзакция требуется для выполнения "санкционированный вывод". Таким образом, для выполнения перевода требуются две транзакции, которые могут быть выполнены всего за одну транзакцию..
Затем стандарт ERC777 содержит необязательный флаг для предотвращения зависания токенов путем выполнения некоторых проверок интерфейса ITokenRecipient, а также для проверки того, внесен ли адрес в белый список. Поскольку этот стандарт ориентирован на безопасность сети, которая обрабатывает токены стоимостью в миллионы долларов, делать эти проверки необязательными – не лучший вариант..
Прочие стандарты
Есть много других стандартов, например ERC827 который сочетает в себе некоторые преимущества ERC223 с унаследованными функциями ERC20. В ERC664 standard фокусируется на модульности стандарта токенов. Этот стандарт позволяет обновлять токен-контракты, но он унаследовал критическую ошибку ERC20. Другие стандарты включают ERC721, ERC677 и ERC820, но они менее известны..
Совместимость стандартов
Мы спросили Дексарана, какие стандарты обратно совместимы. Он сказал нам, что мы сначала должны понять, что означает «обратная совместимость»: «Обратная совместимость – это свойство системы, продукта или технологии, которое обеспечивает возможность взаимодействия со старой устаревшей системой или с входными данными, предназначенными для такой системы».
ERC20 & ERC223: Токены ERC223 совместимы с ERC20. Все, что предназначено для правильной работы с ERC20 (например, кошельки), также может работать с ERC223. Единственным исключением являются контракты, основанные на схемах депозита токенов одобрение + перевод. Тем не менее, с токенами ERC223 можно реализовать функции Approve + transferFrom, даже если они не включены в стандарт прямо сейчас. Что касается кошельков и любых сторонних сервисов, которые не являются смарт-контрактами, они поддерживают ERC223 автоматически, потому что входные данные вызова токена ERC20 действительны для ERC223..
ERC20 & ERC777: Вы можете найти следующее утверждение в разделе «Обратная совместимость» предложения ERC777: «Этот EIP не вводит обратную несовместимость и совместим со старым стандартом токенов ERC-20».
Однако Дексаран сказал нам прямо противоположное и привел такой пример: «Такие кошельки и сервисы, как MetaMask, Mist и MyEtherWallet, работают с токенами ERC20. Входные данные, предназначенные для токена ERC20, представляют собой вызов контракта, который содержит закодированные параметры и подпись функции. Вызов функций в виртуальной машине Ethereum определяется первыми четырьмя байтами данных, отправленных с транзакцией. Эти 4-байтовые сигнатуры определяются как первые четыре байта хэша канонического представления сигнатуры функции. Это означает, что функции transfer (address, uint256) и send (address, uint256) будут иметь разные подписи. В результате ввод, предназначенный для токена ERC20, не будет действителен для токена ERC777 ». Поскольку мы используем наше определение обратной совместимости, ERC777 несовместим со стандартом токенов ERC20..
Когда использовать какой стандарт
ERC20: Пользователь Reddit u / Dexaran дал нам саркастический совет: «Когда вы хотите, чтобы ваши инвесторы теряли деньги из-за ошибок».
ERC223: Этот стандарт токенов также можно использовать вместе с ERC777. ERC777 имеет некоторые изящные функции, которых не хватает ERC223, но логика ERC223 проста по сравнению с ERC777, что может гарантировать, что он очень полезен. менее подверженный ошибкам код. Более того, ERC223 не полагается на какую-либо центральную службу, а это означает, что ваш токен ERC223 будет зависеть только от вашей собственной реализации. Как мы уже упоминали ранее, ERC223 направлен на улучшение безопасности, но это сделало токены ERC223 несовместимыми со стандартами ERC20..
ERC777: Этот стандарт токенов уже можно использовать. С другой стороны, ERC777 имеет некоторые проблемы с безопасностью, как упоминалось выше. Они также полагаются на центральный реестр контрактов, что также является проблемой безопасности. Централизованный реестр может облегчить жизнь разработчика, но он также действует как центральная точка отказа, точно так же, как это было с Parity Multisig. Все Parity Multisigs опирались на центральную библиотеку кода. Случилось так, что в библиотеке была ошибка, и она была использована. В результате все Parity Multisigs вылетели из строя. Кроме того, ERC777 определяет новый набор функций. Это попытка позволить разработчикам токенов сделать свои токены совместимыми со стандартами ERC20 и ERC777 одновременно для принятия. Это означает, что разработчик может унаследовать ошибку ERC20 в ERC777, но это позволяет разработчику использовать больше событий обработки транзакций..
В целом: Все токены имеют одинаковый вариант использования – ICO. Я бы сказал, что ERC223 и ERC777 по-разному пытаются решить одну проблему ERC20. ERC223 уже занимает свою нишу в Ethereum Classic вместо ERC20.
Эта статья была создана с помощью Dexaran, разработчика ERC223. Также были использованы некоторые комментарии Пола Эджа о стандартах токенов Ethereum..