Grant — это не один флажок между двумя адресами
Granter выдаёт полномочие, grantee исполняет разрешённый sdk.Msg через MsgExec. Ключ состояния включает обоих участников и message type, который возвращает Authorization. Поэтому одинаковая пара адресов может иметь несколько независимых grants: перевод, голосование, делегирование или chain-specific действие.
| Поле | Вопрос | Риск пропуска |
|---|---|---|
| granter / grantee | Кто отдаёт и кто получает право | Перепутанная сторона меняет весь вывод |
| Authorization @type | Generic, Send, Stake или custom | Generic может не содержать ожидаемого лимита |
| MsgTypeURL | Какой exact message разрешён | Похожее имя модуля не является тем же правом |
| limits / allow_list | Сумма, denom, validators или иные рамки | UI-ярлык может скрыть фактический protobuf |
| expiration | Когда grant прекращает действовать | Отсутствующее expiration не равно короткому доступу |
- Поле
- granter / grantee
- Вопрос
- Кто отдаёт и кто получает право
- Риск пропуска
- Перепутанная сторона меняет весь вывод
- Поле
- Authorization @type
- Вопрос
- Generic, Send, Stake или custom
- Риск пропуска
- Generic может не содержать ожидаемого лимита
- Поле
- MsgTypeURL
- Вопрос
- Какой exact message разрешён
- Риск пропуска
- Похожее имя модуля не является тем же правом
- Поле
- limits / allow_list
- Вопрос
- Сумма, denom, validators или иные рамки
- Риск пропуска
- UI-ярлык может скрыть фактический protobuf
- Поле
- expiration
- Вопрос
- Когда grant прекращает действовать
- Риск пропуска
- Отсутствующее expiration не равно короткому доступу
Authz не заменяет мультиподпись: grantee подписывает свою MsgExec-транзакцию, а модуль проверяет выданное право от имени granter. Если нужен совместный k-of-n контроль самой подписи, это другая модель.
Инвентаризация начинается с трёх запросов
Runbook перед revoke
- 1Зафиксировать сеть
Сохраните chain ID, node endpoint, latest height, app/SDK version и источник бинарной версии. cosmoshub-4 нельзя подменять другой Cosmos chain.
- 2Найти grants в обе стороны
Запросите grants по granter, затем по grantee и отдельно exact granter–grantee pair. Учитывайте pagination.
- 3Декодировать Authorization
Запишите @type, MsgTypeURL, limits, allow/deny lists, expiration и raw protobuf/JSON. Не выводите scope из иконки dApp.
- 4Проверить фактическую версию
Сопоставьте type registry и message router именно развернутого приложения. Custom Authorization может иметь дополнительные правила.
- 5Сформировать точечный MsgRevoke
Подписывает granter; поля — granter, grantee и exact msg_type_url удаляемого grant.
- 6Доказать результат
После inclusion повторите inventory на новой height и сохраните tx hash, code/log, удалённый MsgTypeURL и оставшиеся grants.
Сценарий похож на API-ключи и scopes только как инвентаризационная привычка: Authz живёт onchain, а не в кабинете провайдера. Компрометация grantee требует не смены его пароля, а проверки и отзыва grants каждого granter на каждой chain.
Revoke закрывает один MsgTypeURL, а не всю связь
MsgRevoke v0.53.4 адресует exact granter, grantee и MsgTypeURL. После успешной транзакции grant этого типа должен исчезнуть, но SendAuthorization, GenericAuthorization на другой message и grants с другими участниками могут остаться. Expired запись тоже нельзя считать единственной причиной безопасности: сначала проверьте состояние и обработку конкретной версии. Если grantee уже отправил MsgExec, revoke и исполнение упорядочиваются фактическим inclusion: статус подписи в кошельке не определяет, какая транзакция вошла первой.
| Состояние | Вывод | Действие |
|---|---|---|
| Grant не найден на одном RPC | Возможен lag или неверная chain | Сверить height и независимый узел |
| GenericAuthorization без лимита | Право шире ожидаемого UI | Остановить MsgExec и оценить немедленный revoke |
| Revoke success, exact grant отсутствует | Один scope снят | Повторить полный inventory по granter и grantee |
| Revoke failed: no authorization | Пара/MsgTypeURL не совпали или grant уже удалён | Не подбирать тип вслепую; перечитать state |
| Custom type не декодируется | Scope неизвестен | Остановиться до ABI/protobuf и версии chain |
- Состояние
- Grant не найден на одном RPC
- Вывод
- Возможен lag или неверная chain
- Действие
- Сверить height и независимый узел
- Состояние
- GenericAuthorization без лимита
- Вывод
- Право шире ожидаемого UI
- Действие
- Остановить MsgExec и оценить немедленный revoke
- Состояние
- Revoke success, exact grant отсутствует
- Вывод
- Один scope снят
- Действие
- Повторить полный inventory по granter и grantee
- Состояние
- Revoke failed: no authorization
- Вывод
- Пара/MsgTypeURL не совпали или grant уже удалён
- Действие
- Не подбирать тип вслепую; перечитать state
- Состояние
- Custom type не декодируется
- Вывод
- Scope неизвестен
- Действие
- Остановиться до ABI/protobuf и версии chain
Для воспроизводимого отчёта сохраните endpoint и height, но сначала выполните проверку RPC-источника. Для cross-chain операции Authz не подтверждает IBC timeout и refund: packet state проверяется отдельно на обеих chains.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Cosmos SDK v0.53.4 — x/authz README Cosmos SDK · Проверено 23 августа 2026 г. в 20:00 GMT+5
- Cosmos SDK v0.53.4 — authz transaction protobuf Cosmos SDK · Проверено 23 августа 2026 г. в 20:00 GMT+5
- Cosmos SDK v0.53.4 — authz query protobuf Cosmos SDK · Проверено 23 августа 2026 г. в 20:00 GMT+5
- Cosmos chain-registry — Cosmos Hub Cosmos · Проверено 23 августа 2026 г. в 21:16 GMT+5
