Grant — это не один флажок между двумя адресами

Granter выдаёт полномочие, grantee исполняет разрешённый sdk.Msg через MsgExec. Ключ состояния включает обоих участников и message type, который возвращает Authorization. Поэтому одинаковая пара адресов может иметь несколько независимых grants: перевод, голосование, делегирование или chain-specific действие.

Что извлечь из каждой записи Authz
ПолеВопросРиск пропуска
granter / granteeКто отдаёт и кто получает правоПерепутанная сторона меняет весь вывод
Authorization @typeGeneric, Send, Stake или customGeneric может не содержать ожидаемого лимита
MsgTypeURLКакой exact message разрешёнПохожее имя модуля не является тем же правом
limits / allow_listСумма, denom, validators или иные рамкиUI-ярлык может скрыть фактический protobuf
expirationКогда grant прекращает действоватьОтсутствующее expiration не равно короткому доступу
Что извлечь из каждой записи Authz
Поле
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. 1
    Зафиксировать сеть

    Сохраните chain ID, node endpoint, latest height, app/SDK version и источник бинарной версии. cosmoshub-4 нельзя подменять другой Cosmos chain.

  2. 2
    Найти grants в обе стороны

    Запросите grants по granter, затем по grantee и отдельно exact granter–grantee pair. Учитывайте pagination.

  3. 3
    Декодировать Authorization

    Запишите @type, MsgTypeURL, limits, allow/deny lists, expiration и raw protobuf/JSON. Не выводите scope из иконки dApp.

  4. 4
    Проверить фактическую версию

    Сопоставьте type registry и message router именно развернутого приложения. Custom Authorization может иметь дополнительные правила.

  5. 5
    Сформировать точечный MsgRevoke

    Подписывает granter; поля — granter, grantee и exact msg_type_url удаляемого grant.

  6. 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: статус подписи в кошельке не определяет, какая транзакция вошла первой.

Decision, stop и recovery
СостояниеВыводДействие
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
Decision, stop и recovery
Состояние
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.

Источники

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

  1. Cosmos SDK v0.53.4 — x/authz README Cosmos SDK · Проверено 23 августа 2026 г. в 20:00 GMT+5
  2. Cosmos SDK v0.53.4 — authz transaction protobuf Cosmos SDK · Проверено 23 августа 2026 г. в 20:00 GMT+5
  3. Cosmos SDK v0.53.4 — authz query protobuf Cosmos SDK · Проверено 23 августа 2026 г. в 20:00 GMT+5
  4. Cosmos chain-registry — Cosmos Hub Cosmos · Проверено 23 августа 2026 г. в 21:16 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.