TRON использует уникальную модель ресурсов для управления вычислительной нагрузкой в сети. Одним из ключевых ресурсов является Энергия, которая необходима для выполнения смарт-контрактов. С целью предотвращения перегрузки сети TRON внедрил динамическую модель энергии, основанную на параметре energy_factor, который влияет на итоговое потребление энергии смарт-контрактами (TRON Docs).

Базовые особенности энергии

  • Энергия — ресурс, используемый при вызове смарт-контрактов в сети TRON.
  • Получение: адрес получает энергию за счет заморозки (стейкинга) TRX.
  • Количество энергии рассчитывает по форумуле (TRON Docs):

Energy = (ваши замороженные TRX / общее количество замороженных TRX в сети) × лимит энергии сети

  • Если при выполнении транзакции не хватает энергии - остаток покрывается за счет сжигания TRX (TRON Docs):

TRX_burned = недостающая Energy × 0.00021 TRX

Расход энергии при вызове смарт-контракта

Базовая формула:

Energy_consumed = Base_energy × (1 + energy_factor)

  • Base_energy — стандартное потребление энергии для операции.
  • energy_factor — коэффициент, корректирующий количество требуемой энергии в зависимости от популярности смарт-контракта (TIP-491).

Механизм динамической модели энергии

Цулью использования механизма динамической модели - избежать непропорционального потребления энергии популярными смарт-контрактами и равномерно распределить ресурсы сети.

Параметры, которые используются для расчета модели (TRON Dev Portal):

  • threshold — базовый лимит потребления энергии за цикл (например, 3 000 000 000 Energy).
  • increase_factor — процент увеличения energy_factor, если превышен threshold (обычно 0.2).
  • max_factor — максимум, которого может достичь energy_factor (например, 1.2).
  • decrease_factor — процент снижения energy_factor, если контракт менее активен (обычно = increase_factor / 4).

Алгоритм работы динамической модели (TIP-491):

Если потребление > threshold:

energy_factor = min((1 + energy_factor) × (1 + increase_factor) - 1, max_factor)

Если потребление < threshold:

energy_factor = max((1 + energy_factor) × (1 - decrease_factor) - 1, 0)

Пример:

  • Base_energy = 87 000 - (базовое потребление энергии) устанавливается разработчиком смарт-контракта. Это зависит от логики и сложности конкретной функции контракта. В момент выполнения TRON VM (TVM) рассчитывает фактическое потребление — как количество шагов виртуальной машины, включая чтение/запись в хранилище, арифметику, вызовы и т.д. Это аналогично газу в Ethereum.
  • energy_factor = 0.5 - параметр, который динамически обновляется на уровне сети TRON. Он не задаётся вручную. Он рассчитывается автоматически на основе того, сколько энергии израсходовал контракт в предыдущем цикле (maintenance cycle) по сравнению с threshold. Формулы и параметры описаны в TIP-491 и реализуются в нодах протокола.

Итого:

Energy_used = 87 000 × (1 + 0.5) = 130 500

Данные для расчета energy_factor

Чтобы понять, как работает динамическая модель, TRON предоставляет специальные методы API, которые помогают разработчикам и пользователям получать детальную информацию:

  • getcontractinfo — возвращает сведения о смарт-контракте: текущее значение energy_factor, общее потребление энергии за цикл (energy_usage) и номер цикла (update_cycle). С его помощью можно проверить нагрузку на контракт.
  • gettransactioninfoById — показывает полную информацию о транзакции: итоговое потребление энергии, включая штраф (energy_penalty_total). Это помогает понять реальную стоимость вызова контракта для пользователя.
  • trigger_smart_contract — позволяет симулировать вызов контракта до его отправки в сеть. Такой запрос прогнозирует энергопотребление и учитывает действующий energy_factor, что удобно для планирования затрат.

Эти инструменты входят в официальный API TRON Developers и дают возможность не только замерять текущее потребление, но и прогнозировать расходы.

Описание API: TRON Developers - Trigger Smart Contract, TRON Developers - Get Contract Info

Расчет количества энергии для токена USDT (TRC-20)

  • Базовое потребление: ориентировочно 43 000 – 87 000 Energy. На данный момент фактическое значение базового потребления для USDT напрямую не публикуется в документации. Его можно узнать в реальном времени через API TRON (getcontractinfo, gettransactioninfoById, trigger_smart_contract). Здесь приведён диапазон, рассчитанный обратным способом: исходя из наблюдаемого потребления энергии при вызовах контракта (обычно 65 000 – 130 000 Energy) и предполагаемого energy_factor в пределах 0.5–1.0. При таком подходе:

base_energy = фактическое_потребление / (1 + energy_factor)

  • Пример: если текущий расход 130 000 Energy при energy_factor = 0.5, то:

base_energy = 130 000 / 1.5 ≈ 86 667

И если на адресе получателя есть USDT, расход составляет 65 000 при energy_factor = 0.5, то базовое потребление ≈ 43 333 Energy.

То есть, если бы USDT TRC-20 был бы не так популярен как сейчас, стоимость транзакции бы составляла намного ниже текущих значений.

Заключение

Динамическая модель энергии в TRON — это эффективный способ регулирования нагрузки в сети. Она наказывает чрезмерно популярные контракты, обеспечивая децентрализованную устойчивость и справедливое распределение ресурсов. Разработчики должны учитывать energy_factor при проектировании и оптимизации контрактов, чтобы минимизировать издержки для пользователей.

В более широком контексте эта модель служит инструментом для долгосрочного баланса сети: она стимулирует разработчиков писать оптимизированный код, а пользователей — более рационально подходить к использованию транзакций. Такой подход повышает прозрачность и предсказуемость расходов, укрепляет экономику TRON и снижает риск злоупотреблений ресурсами. В результате создаются условия для масштабируемости и устойчивого роста экосистемы TRON, что особенно важно для приложений с массовым использованием, таких как токены USDT и другие популярные смарт‑контракты.

Полезные ссылки: