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 и другие популярные смарт‑контракты.
Полезные ссылки: