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`. Но это только инструкция для аккаунта: документация требует, чтобы посредник не доверял заявленным полям и перепроверял их сам. Разрешение может быть большим, но выданным другому получателю, другому посреднику или другому токен-контракту.
Проверка, оплата и выполнение проходят последовательно
| Стадия | Что происходит | Наблюдаемый результат отказа |
|---|---|---|
| Проверка аккаунта | Проверяются nonce, подпись и правила аккаунта | Транзакция не включается, комиссия не списывается |
| prepareForPaymaster | Аккаунт готовит взаимодействие, например разрешение | Посредник ещё не принял оплату |
| Проверка посредника | Посредник проверяет вход и передаёт требуемую сумму ETH загрузчику | При откате нет включения и комиссии |
| Выполнение | Аккаунт выполняет целевой вызов | Откат остаётся включённым и расходует комиссию |
| postTransaction | Посредник может обработать контекст после выполнения | Вызов не гарантирован, например при нехватке газа |
- Стадия
- Проверка аккаунта
- Что происходит
- Проверяются nonce, подпись и правила аккаунта
- Наблюдаемый результат отказа
- Транзакция не включается, комиссия не списывается
- Стадия
- prepareForPaymaster
- Что происходит
- Аккаунт готовит взаимодействие, например разрешение
- Наблюдаемый результат отказа
- Посредник ещё не принял оплату
- Стадия
- Проверка посредника
- Что происходит
- Посредник проверяет вход и передаёт требуемую сумму ETH загрузчику
- Наблюдаемый результат отказа
- При откате нет включения и комиссии
- Стадия
- Выполнение
- Что происходит
- Аккаунт выполняет целевой вызов
- Наблюдаемый результат отказа
- Откат остаётся включённым и расходует комиссию
- Стадия
- postTransaction
- Что происходит
- Посредник может обработать контекст после выполнения
- Наблюдаемый результат отказа
- Вызов не гарантирован, например при нехватке газа
ZKsync использует один `gasLimit` для проверки, оплаты и выполнения. Поэтому оценка обычного вызова без параметров посредника не описывает фактическую транзакцию: добавляются его вычисления, передача средств и, при approvalBased, работа с разрешением ERC-20. Первое изменение ячейки хранения из нуля может заметно поднять расход газа; точное значение получают оценкой полного пакета.
Диагностика начинается с исходного пакета и места отказа
Алгоритм без повторной подписи вслепую
- 1Сохранить один объект
Зафиксируйте сеть, nonce, адрес назначения, calldata, сумму, поля газа, адрес посредника, полный paymasterInput и исходную ошибку RPC до изменения формы.
- 2Декодировать селектор
Установите, выбран general или approvalBased. Для второго режима извлеките точные токен, minAllowance и innerInput; не угадывайте их по интерфейсу.
- 3Сверить состояние токена
На том же блоке прочитайте баланс токена и разрешение владельца для получателя, равного точному адресу посредника. Сравните разрешение с minAllowance.
- 4Повторить оценку газа
Оцените тот же целевой вызов с теми же параметрами посредника. Если проверка стабильно отвергает пакет, увеличение gasLimit не исправит правила или подпись.
- 5Разделить отказ до включения и при выполнении
Нет хеша транзакции и есть ошибка проверки — исправляйте входные условия. Есть включённая квитанция со статусом отката — разбирайте целевой вызов контракта отдельно.
- 6Собрать новый пакет
После изменения разрешения, nonce, котировки или innerInput заново получите оценку и подпишите только свежую транзакцию EIP-712.
Исправление зависит от доказанного слоя ошибки
| Симптом | Что проверить | Исправление и контроль |
|---|---|---|
| Разрешение ниже minAllowance | Владелец, токен и получатель-посредник | Выдать ограниченное разрешение; повторно прочитать состояние |
| Разрешение достаточно, проверка падает | Баланс, innerInput, котировка, подпись и правила посредника | Обновить параметры провайдера; оценка проходит с тем же пакетом |
| estimateGas падает сразу | Включены ли paymaster и paymasterInput | Оценить полный вызов; сохранить успешный результат и блок |
| Транзакция включена со статусом отката | Квитанция и данные отката целевого вызова | Исправить calldata или состояние; не менять разрешение без причины |
| Неизвестный посредник просит безлимитное одобрение | Официальный адрес и условия списания | Остановиться; не подписывать неизвестного получателя |
| Не хватило газа после проверки | gasLimit полного режима и отсутствие postTransaction | Пересчитать пакет; не считать отсутствие завершающего вызова возвратом |
- Симптом
- Разрешение ниже minAllowance
- Что проверить
- Владелец, токен и получатель-посредник
- Исправление и контроль
- Выдать ограниченное разрешение; повторно прочитать состояние
- Симптом
- Разрешение достаточно, проверка падает
- Что проверить
- Баланс, innerInput, котировка, подпись и правила посредника
- Исправление и контроль
- Обновить параметры провайдера; оценка проходит с тем же пакетом
- Симптом
- estimateGas падает сразу
- Что проверить
- Включены ли paymaster и paymasterInput
- Исправление и контроль
- Оценить полный вызов; сохранить успешный результат и блок
- Симптом
- Транзакция включена со статусом отката
- Что проверить
- Квитанция и данные отката целевого вызова
- Исправление и контроль
- Исправить calldata или состояние; не менять разрешение без причины
- Симптом
- Неизвестный посредник просит безлимитное одобрение
- Что проверить
- Официальный адрес и условия списания
- Исправление и контроль
- Остановиться; не подписывать неизвестного получателя
- Симптом
- Не хватило газа после проверки
- Что проверить
- gasLimit полного режима и отсутствие postTransaction
- Исправление и контроль
- Пересчитать пакет; не считать отсутствие завершающего вызова возвратом
Проверка закончена, когда сохранены точный пакет, разрешение и баланс на одном блоке, результат оценки и конечная квитанция либо воспроизводимая ошибка проверки. Если вызов включён, комиссия может быть потрачена даже при откате — это тот же диагностический рубеж, что у обычной контрактной транзакции, но со своей предварительной зоной посредника.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- ZKsync Docs — Paymasters ZKsync · Проверено 28 августа 2026 г. в 00:04 GMT+5
- ZKsync Docs — Native account abstraction design ZKsync · Проверено 28 августа 2026 г. в 00:04 GMT+5
- ZKsync paymasters pinned source — 2ca25505 Matter Labs · Проверено 28 августа 2026 г. в 00:04 GMT+5
- ZKsync AA design pinned source — 2ca25505 Matter Labs · Проверено 28 августа 2026 г. в 00:04 GMT+5
