Материал проверен 25 октября 2026?
БК

ГЛАВНАЯ / ИНСТРУКЦИИ / ERC-3156 FLASH LOAN: LENDER, RECEIVER И ПРОВЕРКА CALLBACK

ERC-3156 flash loan: lender, receiver и проверка callback

ERC-3156 стандартизирует интерфейс flash loan для одного актива. Его полезно разбирать отдельно от общей идеи атомарного займа: здесь важны конкретные роли, проверка обратного вызова и возможность кредитора забрать сумму с комиссией до завершения транзакции.

Участники

Lender, receiver и initiator могут быть разными адресами

Lender предоставляет flashLoan и вызывает принимающий контракт receiver. Initiator – тот, кто вызвал flashLoan у кредитора. В callback msg.sender является вызывающим контрактом, поэтому проверка только параметра initiator не подтверждает, что сообщение пришло от настоящего lender.

Receiver должен реализовать onFlashLoan. Он получает управление на время обратного вызова и выполняет предусмотренную логику с заёмными средствами. Название ERC-3156 не означает, что любой известный протокол использует именно этот интерфейс: у площадок бывают собственные API и условия. Сначала подтвердите совместимость конкретного контракта.

ЭлементРольПроверка
LenderВыдаёт актив и организует возвратАдрес и реализация
ReceiverПолучает callbackОжидаемая функция и ограничения
InitiatorНачинает запрос flashLoanРазрешён ли такой инициатор
msg.sender в callbackНепосредственный вызывающийСовпадает ли с доверенным lender
Перед вызовом

MaxFlashLoan и flashFee не заменяют проверку исполнения

maxFlashLoan(token) показывает доступный предел для указанного актива по интерфейсу lender. Для неподдерживаемого токена стандарт предусматривает ноль. flashFee(token, amount) возвращает дополнительную плату для суммы, а для неподдерживаемого актива должен завершаться ошибкой. Нельзя считать нулевую комиссию универсальным свойством flash loan.

После выдачи суммы кредитор передаёт в onFlashLoan параметры initiator, token, amount, fee и data. Сумма и произвольные данные должны относиться к ожидаемому запросу. Учебный пример с amount = 1000 и fee = 2 требует подготовить 1002 базовые единицы того же token; это не тариф реального сервиса.

  • сеть и token установлены до запроса;
  • предельная сумма и fee прочитаны у нужного lender;
  • единицы соответствуют decimals токена;
  • параметры callback совпадают с ожидаемыми.
Проверка доверия

Аргументам onFlashLoan нельзя доверять только из-за имени функции

Посторонний контракт может вызвать открытый callback и передать собственные token, amount, fee или data. Receiver должен удостовериться в источнике вызова и допустимом инициаторе до обработки данных и выдачи разрешений. Иначе автоматический approve способен создать право расходования, не соответствующее настоящему займу.

Стандартный успешный ответ callback – заданный keccak256-хэш строки ERC3156FlashBorrower.onFlashLoan, который проверяет lender. Но правильное возвращаемое значение само по себе не подтверждает доверенность отправителя для receiver и не доказывает прибыльность действий. Это разные стороны проверки.

Проверка lender и проверка initiator решают разные задачи. Нельзя считать параметры callback достоверными без проверки контекста вызова.
Завершение

Кредитор должен получить amount + fee, иначе операция откатывается

В модели ERC-3156 после callback lender забирает amount + fee у receiver либо откатывает операцию. Принимающая сторона должна иметь средства и предоставить достаточный allowance для предусмотренного возврата. Одного наличия суммы на балансе может быть недостаточно, если кредитор не может выполнить расходование.

При ошибке стратегия и выдача займа не завершаются как успешная операция, однако исполненная reverted-транзакция всё равно может расходовать gas. Проверяйте receipt, возврат и конечные остатки, а не только успешный ответ промежуточного вызова. В рабочей интеграции нужны также защита от повторного входа, контроль сторонних контрактов и корректная обработка особенностей токена; стандарт интерфейса не заменяет аудит.

  • amount плюс fee доступны к возврату;
  • allowance выдан ожидаемому lender;
  • вся транзакция проверена по receipt;
  • прибыль не предполагается из-за атомарности;
  • расходы gas учтены и при неуспехе.
FAQ

Частые вопросы

ERC-3156 охватывает все flash loan API?

Нет. Это конкретный стандарт; протокол может предоставлять иной интерфейс.

Initiator и receiver обязаны совпадать?

Нет. Нужно отдельно установить и проверить их роли.

Правильный callback означает, что займ возвращён?

Нет. После callback должен успешно завершиться возврат amount + fee.

Достаточно иметь деньги на балансе receiver?

Нужно также обеспечить предусмотренное разрешение для возврата кредитору.

Revert делает попытку бесплатной?

Нет. Если транзакция исполнялась в сети, gas может быть потрачен.

Итоговая проверка

Чек-лист: erc-3156 flash loan: lender, receiver и проверка callback

  • совместимость ERC-3156 подтверждена;
  • lender и token проверены;
  • receiver ожидаемый;
  • msg.sender и initiator контролируются отдельно;
  • fee и единицы суммы понятны;
  • возврат и allowance обеспечены;
  • проверен конечный receipt и расходы.

Материал подготовлен редакцией сайта и проверен 25 октября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.