Проблемы стандарта ERC20

 

Несмотря на широкое распространение и повсеместное использование, стандарт токена ERC20 имеет свои недостатки: отсутствие механизма обработки транзакции (Event Handling) и возможность осуществления атаки двойной траты (Re-Approval Attack).

Отсутствие механизма обработки транзакции (Event Handling).

Данная проблема заключается в следующем: в любой полноценной валюте поступающий платеж должен создавать так называемое Событие (Event) – это позволяет получать своевременную информацию об изменении баланса держателя и, при необходимости, обрабатывать денежные поступления.

В том числе, так работает и Ethereum, на базе которого функционируют большинство ERC20 токенов.

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

В попытках решить данную проблему было создано множество стандартов токена, самыми удачными из них можно назвать ERC223 и ERC777. Тем не менее, несмотря на многообещающее начало, техническая реализация обработки платежей, представленная в данных стандартах, не стала панацеей и массового применения так и не нашла.

Из проблемы EventHandling возникает множество других. Например, с ERC20 токенами нельзя работать с другими Смарт-Контрактами используя обычный Transfer. Для безопасного взаимодействия необходимо имплементировать функцию ApproveAndCall (подробнее читайте ЗДЕСЬ).

Возможность осуществления атаки двойной траты (Re-Approval Attack).

Вторая проблема связана все с той же функция Approve токенов. Дело в том, что в случае если держатель токенов одобрил к выводу некоторое количество средств для какого-либо адреса, у получателя появляется потенциальная возможность вывести больше средств чем ему положено.

Делается это следующим образом:

— Допустим, Боб одобрил для Алисы 10 своих токенов, но Алиса бездействует и не выводит средства. Вместо этого она каким-либо образом убеждает Боба изменить сумму одобренных токенов с 10 на 12. Предположим, что ей удается подтолкнуть Боба ко второму Approve средств и держатель токенов отправляет транзакцию в майнинг пул для подтверждения.

— В это время Алиса отслеживает появившуюся транзакцию и мгновенно высылает новую с бОльшей стоимостью газа: вывести 10 одобренных токенов на ее счет. В виду того, что стоимость газа у транзакции получателя выше приоритет ее действия повышается и средства успешно выводятся на ее счет до того как сумма одобренных токенов изменяется Бобом с 10 на 12.

— Сразу после успешного подтверждения транзакции по изменению суммы Алиса снова отправляет транзакцию на вывод уже 12 одобренных токенов и в этот раз выводит сумму второй раз. Итого Алиса получает 22 токена.

Данная проблема не является столь критичной так как для предотвращения таких последствий отправителю токенов необходимо всего лишь придерживаться следующего порядка действий: сначала он меняет первоначальную сумму на 0, потом убедившись, что его не пытаются обмануть 0 меняет на необходимую сумму.

К тому же данную проблему можно решить, преобразовав функцию approve внедрив проверку на исходную сумму. Другими словами, сделать так, чтобы изменить сумму одобренных средств можно было только достоверно убедившись, что никто не вывел средства перед транзакцией.

Подытожив вышесказанное, следует отметить что все эти проблемы известны криптосообществу с самого основания стандарта ERC20 и несмотря ни на что, стандарт обрел широкое распространение и успешно выполняет все возложенные на него функции.

С уважением, Grox Solutions.

Статьи. Публичные аудиты

Верификация TRON

Инструкция по верификации контракта на Tronscan

Подробнее

TRON DEPLOYMENT

Инструкция по деплою с помощью TRONLINK & TronScan

Подробнее

TRONex Аудит

Аудит смарт-контракта TRONex

Подробнее

Как опубликовать код Смарт-Контракта?

Инструкция по верификации контракта на Etherscan

Подробнее

Как задеплоить Смарт-Контракт?

Инструкция по деплою с помощью Remix & Metamask

Подробнее

Платформы для реализации Смарт-Контрактов

Свойства и отличия Ethereum, TRON, EOS и Waves

Подробнее

Аудит Смарт-Контракта

Что такое аудит и зачем он нужен? Виды аудитов, цены и пример отчета.

Подробнее

Аудит «Neuromachine Eternal»

Публичный аудит Смарт-Контракта "NRM"

Подробнее

Что требуется для создания собственного токена?

Список вопросов для Технического Задания.

Подробнее

Что такое Смарт Контракт?

В чем заключается суть технологии Смарт-Контрактов? Определение и краткое описание.

Подробнее

Применение Смарт-Контрактов

Где и для чего применяются Смарт-Контракты в реальной жизни?

Подробнее

Пример работы Смарт-Контракта

Конкретная иллюстрация использования Смарт-Контракта на примере Краудфандинга

Подробнее

Функция ApproveAndCall для ERC20

Что такое ApproveAndCall и для чего ее имплементируют в Смарт-Контракты?

Подробнее

Проблемы стандарта ERC20

Каковы минусы и ограничения стандарта ERC20? EventHandling, Re-Approval Attack

Подробнее

ICO (CrowdSale)

Что такое Краудсейл? Что необходимо знать, чтобы провести свое ICO?

Подробнее

Токены

Что такое токены и какими они бывают? ERC20 или ERC223? Utility или Security?

Подробнее
Загрузить еще
Закрыть