Кто платит и кто подписывает
`Granter` выделяет баланс только на сетевую комиссию. Сообщения внутри транзакции подписывает `grantee` и другие обязательные участники. `Feegrant` не разрешает отправлять токены, голосовать или стейкать от имени плательщика. Для таких полномочий нужен отдельный `Authz grant`. Перед подписью проверьте, что именно показывает кошелёк.
Запросите запись по упорядоченной паре `granter`–`grantee`. Одновременно сохраните идентификатор сети (`chain-id`) и высоту ответа. Для пары может существовать только одна запись, а выдать её самому себе нельзя. Переставленные адреса или другая Cosmos-сеть дадут другой результат.
Три вида разрешения на оплату комиссии отвечают на разные вопросы
| Тип | Как устроен | Что сверить перед отправкой |
|---|---|---|
| `BasicAllowance` | Общий остаток `spend_limit` и необязательный срок `expiration` | Точный `denom`, сумму комиссии и время блока |
| `PeriodicAllowance` | Общий предел плюс бюджет на каждый период | `period_can_spend`, `period_reset` и внутренний базовый лимит |
| `AllowedMsgAllowance` | Оборачивает один из двух видов и фильтрует сообщения | Внутренний `allowance` и каждый `type URL` из `allowed_messages` |
- Тип
- `BasicAllowance`
- Как устроен
- Общий остаток `spend_limit` и необязательный срок `expiration`
- Что сверить перед отправкой
- Точный `denom`, сумму комиссии и время блока
- Тип
- `PeriodicAllowance`
- Как устроен
- Общий предел плюс бюджет на каждый период
- Что сверить перед отправкой
- `period_can_spend`, `period_reset` и внутренний базовый лимит
- Тип
- `AllowedMsgAllowance`
- Как устроен
- Оборачивает один из двух видов и фильтрует сообщения
- Что сверить перед отправкой
- Внутренний `allowance` и каждый `type URL` из `allowed_messages`
Сначала посмотрите поле `@type`. У `AllowedMsgAllowance` затем раскройте внутренний `allowance`. Пустой `spend_limit` означает отсутствие общего лимита, а пустой `expiration` — отсутствие срока. Если пусты оба поля, запись действует до отзыва. Значение `null` здесь не равно нулю.
Проверьте будущую транзакцию по текущему состоянию
Пять сверок перед подписью
- комиссия указана в том же `denom`, который есть в остатке `allowance`;
- сумма помещается и в общий предел, и в текущий периодический остаток;
- `expiration` и `period_reset` сравниваются со временем блока, а не с часами телефона;
- каждый `sdk.Msg` разрешён фильтром `allowed_messages`, если он установлен;
- в подписанных байтах указан нужный `fee granter`; в интерфейсе командной строки (`CLI`) для этого часто служит `--fee-granter`.
`Feegrant` проверяется и расходуется предварительным обработчиком (`ante handler`) модуля `x/auth`. Это происходит до исполнения сообщений. Поэтому новый остаток подтверждает оплату комиссии, но не успех `sdk.Msg`. После включения транзакции проверьте её `code`, события и ожидаемое изменение состояния. Затем отдельно запросите новый остаток `allowance`. Устройство RPC поможет разобрать расхождение ответов.
Если запись не найдена, снова сверьте сеть, порядок адресов и высоту. При нехватке бюджета проверьте точный `denom` и текущий период. Запрещённое сообщение удалите или явно измените `allowance`. Если платит `grantee`, пересоберите транзакцию и проверьте подписанные байты.
Как отозвать запись и не принять отправку за результат
Короткий путь отзыва
- 1Соберите `MsgRevokeAllowance`
Укажите исходного `granter` и нужного `grantee`. Транзакцию подписывает плательщик; для неё нужна собственная комиссия.
- 2Получите сетевой результат
Сохраните хеш транзакции, итоговый `code` и события. Одна отправка на RPC-узел ещё ничего не отозвала.
- 3Повторите запрос
На более поздней высоте снова запросите `allowance` для той же пары. Отзыв завершён, когда запись отсутствует.
Когда лучше остановиться
- неизвестны `chain-id`, точные адреса или высота ответа;
- интерфейс скрывает `@type` либо внутреннюю обёртку `allowance`;
- пустые `spend_limit` и `expiration` без оснований считают нулевым лимитом;
- `Feegrant` смешивают с `Authz` и обещают полномочия плательщика;
- для проверки просят seed-фразу, закрытый ключ или удалённый доступ;
- отзыв отправлен, но нет успешного `code` и свежего запроса без записи.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Cosmos SDK Feegrant — concepts, queries and transactions Cosmos SDK · Проверено 25 августа 2026 г. в 00:08 GMT+5
- Cosmos SDK feegrant protobuf types Cosmos SDK · Проверено 25 августа 2026 г. в 00:08 GMT+5
- Cosmos SDK feegrant transaction messages Cosmos SDK · Проверено 25 августа 2026 г. в 00:08 GMT+5
- Cosmos SDK keeper — consuming and removing grants Cosmos SDK · Проверено 25 августа 2026 г. в 00:08 GMT+5
