paymasterInput выбирает один из двух стандартных режимов

Транзакция EIP-712 указывает ненулевой адрес посредника в поле `paymaster` и байты `paymasterInput`. Для обычного аккаунта ZKsync стандартизирует два входа: `general(bytes)`, когда предварительное действие от пользователя не требуется, и `approvalBased(address token, uint256 minAllowance, bytes innerInput)`, когда посредник ожидает разрешение ERC-20. Он может добавить собственные условия через данные `innerInput`.

Что доказывает каждый режим
РежимЧто передаёт транзакцияЧто всё равно проверяет посредник
generalПроизвольные данные для логики посредникаСвои правила, подпись, лимиты, срок и готовность платить
approvalBasedТокен, minAllowance и innerInputТочный токен, реальное разрешение, баланс и собственные условия
Целевой вызовАдрес, calldata и сумма транзакцииНе входит автоматически в смысл разрешения токена
Что доказывает каждый режим
Режим
general
Что передаёт транзакция
Произвольные данные для логики посредника
Что всё равно проверяет посредник
Свои правила, подпись, лимиты, срок и готовность платить
Режим
approvalBased
Что передаёт транзакция
Токен, minAllowance и innerInput
Что всё равно проверяет посредник
Точный токен, реальное разрешение, баланс и собственные условия
Режим
Целевой вызов
Что передаёт транзакция
Адрес, calldata и сумма транзакции
Что всё равно проверяет посредник
Не входит автоматически в смысл разрешения токена

Обычный внешний аккаунт в режиме approvalBased должен подготовить разрешение не ниже `minAllowance`. Но это только инструкция для аккаунта: документация требует, чтобы посредник не доверял заявленным полям и перепроверял их сам. Разрешение может быть большим, но выданным другому получателю, другому посреднику или другому токен-контракту.

Проверка, оплата и выполнение проходят последовательно

Границы нативной абстракции аккаунта ZKsync
СтадияЧто происходитНаблюдаемый результат отказа
Проверка аккаунтаПроверяются nonce, подпись и правила аккаунтаТранзакция не включается, комиссия не списывается
prepareForPaymasterАккаунт готовит взаимодействие, например разрешениеПосредник ещё не принял оплату
Проверка посредникаПосредник проверяет вход и передаёт требуемую сумму ETH загрузчикуПри откате нет включения и комиссии
ВыполнениеАккаунт выполняет целевой вызовОткат остаётся включённым и расходует комиссию
postTransactionПосредник может обработать контекст после выполненияВызов не гарантирован, например при нехватке газа
Границы нативной абстракции аккаунта ZKsync
Стадия
Проверка аккаунта
Что происходит
Проверяются nonce, подпись и правила аккаунта
Наблюдаемый результат отказа
Транзакция не включается, комиссия не списывается
Стадия
prepareForPaymaster
Что происходит
Аккаунт готовит взаимодействие, например разрешение
Наблюдаемый результат отказа
Посредник ещё не принял оплату
Стадия
Проверка посредника
Что происходит
Посредник проверяет вход и передаёт требуемую сумму ETH загрузчику
Наблюдаемый результат отказа
При откате нет включения и комиссии
Стадия
Выполнение
Что происходит
Аккаунт выполняет целевой вызов
Наблюдаемый результат отказа
Откат остаётся включённым и расходует комиссию
Стадия
postTransaction
Что происходит
Посредник может обработать контекст после выполнения
Наблюдаемый результат отказа
Вызов не гарантирован, например при нехватке газа

ZKsync использует один `gasLimit` для проверки, оплаты и выполнения. Поэтому оценка обычного вызова без параметров посредника не описывает фактическую транзакцию: добавляются его вычисления, передача средств и, при approvalBased, работа с разрешением ERC-20. Первое изменение ячейки хранения из нуля может заметно поднять расход газа; точное значение получают оценкой полного пакета.

Диагностика начинается с исходного пакета и места отказа

Алгоритм без повторной подписи вслепую

  1. 1
    Сохранить один объект

    Зафиксируйте сеть, nonce, адрес назначения, calldata, сумму, поля газа, адрес посредника, полный paymasterInput и исходную ошибку RPC до изменения формы.

  2. 2
    Декодировать селектор

    Установите, выбран general или approvalBased. Для второго режима извлеките точные токен, minAllowance и innerInput; не угадывайте их по интерфейсу.

  3. 3
    Сверить состояние токена

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

  4. 4
    Повторить оценку газа

    Оцените тот же целевой вызов с теми же параметрами посредника. Если проверка стабильно отвергает пакет, увеличение gasLimit не исправит правила или подпись.

  5. 5
    Разделить отказ до включения и при выполнении

    Нет хеша транзакции и есть ошибка проверки — исправляйте входные условия. Есть включённая квитанция со статусом отката — разбирайте целевой вызов контракта отдельно.

  6. 6
    Собрать новый пакет

    После изменения разрешения, nonce, котировки или innerInput заново получите оценку и подпишите только свежую транзакцию EIP-712.

Исправление зависит от доказанного слоя ошибки

Симптом → проверка → действие → подтверждение
СимптомЧто проверитьИсправление и контроль
Разрешение ниже minAllowanceВладелец, токен и получатель-посредникВыдать ограниченное разрешение; повторно прочитать состояние
Разрешение достаточно, проверка падаетБаланс, innerInput, котировка, подпись и правила посредникаОбновить параметры провайдера; оценка проходит с тем же пакетом
estimateGas падает сразуВключены ли paymaster и paymasterInputОценить полный вызов; сохранить успешный результат и блок
Транзакция включена со статусом откатаКвитанция и данные отката целевого вызоваИсправить calldata или состояние; не менять разрешение без причины
Неизвестный посредник просит безлимитное одобрениеОфициальный адрес и условия списанияОстановиться; не подписывать неизвестного получателя
Не хватило газа после проверкиgasLimit полного режима и отсутствие postTransactionПересчитать пакет; не считать отсутствие завершающего вызова возвратом
Симптом → проверка → действие → подтверждение
Симптом
Разрешение ниже minAllowance
Что проверить
Владелец, токен и получатель-посредник
Исправление и контроль
Выдать ограниченное разрешение; повторно прочитать состояние
Симптом
Разрешение достаточно, проверка падает
Что проверить
Баланс, innerInput, котировка, подпись и правила посредника
Исправление и контроль
Обновить параметры провайдера; оценка проходит с тем же пакетом
Симптом
estimateGas падает сразу
Что проверить
Включены ли paymaster и paymasterInput
Исправление и контроль
Оценить полный вызов; сохранить успешный результат и блок
Симптом
Транзакция включена со статусом отката
Что проверить
Квитанция и данные отката целевого вызова
Исправление и контроль
Исправить calldata или состояние; не менять разрешение без причины
Симптом
Неизвестный посредник просит безлимитное одобрение
Что проверить
Официальный адрес и условия списания
Исправление и контроль
Остановиться; не подписывать неизвестного получателя
Симптом
Не хватило газа после проверки
Что проверить
gasLimit полного режима и отсутствие postTransaction
Исправление и контроль
Пересчитать пакет; не считать отсутствие завершающего вызова возвратом

Проверка закончена, когда сохранены точный пакет, разрешение и баланс на одном блоке, результат оценки и конечная квитанция либо воспроизводимая ошибка проверки. Если вызов включён, комиссия может быть потрачена даже при откате — это тот же диагностический рубеж, что у обычной контрактной транзакции, но со своей предварительной зоной посредника.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. ZKsync Docs — Paymasters ZKsync · Проверено 28 августа 2026 г. в 00:04 GMT+5
  2. ZKsync Docs — Native account abstraction design ZKsync · Проверено 28 августа 2026 г. в 00:04 GMT+5
  3. ZKsync paymasters pinned source — 2ca25505 Matter Labs · Проверено 28 августа 2026 г. в 00:04 GMT+5
  4. ZKsync AA design pinned source — 2ca25505 Matter Labs · Проверено 28 августа 2026 г. в 00:04 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.