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

 

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

Так как на контракты нельзя было высылать токены напрямую, для правильной работы было необходимо делать это в 2 шага: Approve и TransferFrom. Approve – означает одобрить определенное количество токенов для вывода определенному кошельку. TransferFrom – означает осуществить перевод одобренных к выводу токенов.

Получается следующий набор действий:
1) Держатель токенов вызывает Approve своих токенов на адрес смарт контракт.

2) Держатель токенов вызывает функцию в контракте, внутри которой осуществляется TransferFrom на адрес контракта и полученные токены успешно обрабатываются контрактом.

Как видите все довольно запутанно и осуществляется только в две транзакции. Решением проблемы работы со Смарт-Контрактами же стало внедрение функции ApproveAndCall в ERC20 токены.

Дополнительная функция ApproveAndCall позволяет упростить вышеописанный порядок действий и оставить только 1 транзакцию: Вызов функции ApproveAndCall внутри которой произойдет как Approve токенов так и transferFrom.

Пример реализации функции ApproveAndCall в коде:

Interface ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 amount, address token, bytes data) external;
}

...
    function approveAndCall(address spender, uint256 amount, bytes calldata extraData) external returns (bool) {
        require(approve(spender, amount));

        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, amount, address(this), extraData);

        return true;
    }
...

Итого для отсылки токенов на Смарт-Контракт требуется чтобы контракт имел функцию receiveApproval. Транзакция происходит в один шаг: вызов функции approveAndCall в контракте токена с адресом Смарт-Контракта куда средства отправляются (spender), количеством отправляемых токенов (amount) и дополотительными данными, если требуются (extraData).

Если у вас остались вопросы или вас интересует разработка/аудит Смарт-Контрактов, свяжитесь с нами и мы проконсультируем вас по всем вопросам.

С уважением, 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?

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