Как расшифровать разрешённые типы контрактов в active permission TRON

Вес подписей может быть достаточным, но маска operations не разрешает конкретное действие. Проверьте её до поиска недостающих подписей.

Найдите бит для нужного типа контракта

Прочитайте выбранное active permission из аккаунта. Используйте числовые идентификаторы типов контрактов протокола. В примере TransferContract (1) и DelegateResourceContract (57) включены в пустой 32-байтовой маске. Индекс байта начинается с нуля, внутри байта отсчёт идёт от младшего бита.

operations = bytearray(32)
for contract_id in (1, 57):
    operations[contract_id // 8] |= 1 << (contract_id % 8)
assert operations[0] == 0x02 and operations[7] == 0x02
print(operations.hex())

Проверьте и разрешение, и ожидаемый отказ

Получившаяся маска разрешает нативные переводы TRX и делегирование ресурсов. TriggerSmartContract выключен, поэтому вызов transfer токена TRC-20 с этими полномочиями отклонится. Отдельно проверьте ID полномочий и порог подписи в самой транзакции. Бит изменения разрешений даёт более широкие полномочия, чем обычно нужны отправителю платежей.

Источники