Как протестировать расход энергии смарт-контракта в Nile

Как оценить и протестировать расход энергии смарт-контракта TRON в тестовой сети Nile: отличия тестовых токенов, RPC-методы и инструменты оценки энергии.

Опубликовано · Обновлено

Тестирование расхода энергии смарт-контракта в тестовой сети TRON Nile позволяет разработчикам измерить стоимость исполнения байткода, проверить fee limit и избежать откатов с ошибкой OUT_OF_ENERGY до того, как тратить средства в мейннете[1]. Поскольку при нехватке энергии на аккаунте исполнение смарт-контракта в TRON сжигает TRX, точный замер до развёртывания критически важен для предсказуемого бюджета приложения.

Важное отличие тестовой сети: в Nile официальный контракт USDT сам оплачивает энергию своих вызывающих. Поэтому при отправке USDT в Nile энергия с аккаунта отправителя не списывается. Чтобы протестировать реалистичный расход газа за счёт отправителя, разработчикам нужно тестировать на других токенах, например JST (TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3), моделировать вызовы через triggerconstantcontract[3] или использовать специальные инструменты оценки[2].

Чтобы смоделировать исполнение контракта без отправки в сеть, воспользуйтесь нашей оценкой энергии контракта. Она моделирует исполнение в TVM и показывает, сколько энергии израсходует вызов и сколько TRX он сожжёт.

Тестовая сеть Nile и мейннет TRON: отличия окружений

Nile близко повторяет среду исполнения виртуальной машины TRON (TVM), но отдельные параметры протокола заметно отличаются от мейннета[1]:

ПараметрТестовая сеть NileМейннет TRONЧто это значит для разработчика
Адрес контракта USDTTXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBfTR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6tВ тестовых скриптах нужно поменять адрес контракта
Оплата энергии USDTКонтракт оплачивает энергию вызывающегоЭнергию платит вызывающийНа USDT в Nile нельзя проверить списание газа с вызывающего
Рекомендуемый тестовый токенJST (TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3)USDTJST списывает энергию с отправителя так же, как USDT в мейннете
Максимальный срок блокировки делегирования5 дней (144 000 блоков)30 дней (864 000 блоков)Более короткие циклы блокировки ресурсов при тестировании аренды
Задержка вывода из стейкинга1 день14 дней (getUnfreezeDelayDays)Более быстрый возврат застейканных TRX в тестовой сети
Публичный адрес нодыhttps://nile.trongrid.iohttps://api.trongrid.ioРазные RPC-шлюзы
Обозреватель блокчейнаnile.tronscan.org[4]tronscan.orgПроверка результатов транзакций и расхода ресурсов

Три способа протестировать энергию контракта

Способ 1: инструмент оценки энергии контракта

Наша оценка энергии контракта выполняет пробный прогон (dry-run) на ноде TRON, не отправляя подписанную транзакцию в сеть[2].

Как пользоваться инструментом:

  1. Введите адрес контракта (например, вашего собственного контракта или токена).
  2. Введите сигнатуру метода (например, transfer(address,uint256)).
  3. Укажите аргументы через запятую (например, адрес получателя и сумму целым числом в минимальных единицах токена).
  4. Укажите адрес вызывающего, чей баланс токенов и права будут учитываться.
  5. Нажмите Estimate energy, чтобы увидеть, сколько энергии израсходует вызов и сколько TRX это составит при сжигании.

Способ 2: пробный прогон через RPC triggerconstantcontract

Если вы разрабатываете бэкенд-ботов или тесты для CI/CD, можно обращаться к ноде TRON напрямую через эндпоинт wallet/triggerconstantcontract. Он моделирует транзакцию в TVM в режиме только для чтения и возвращает energy_used:

bash
curl -X POST https://nile.trongrid.io/wallet/triggerconstantcontract \
  -H "Content-Type: application/json" \
  -d '{
    "owner_address": "41A614F803B6FD7F65EC0F5FF4D6B265BEB0ED6FCF",
    "contract_address": "4137349aeb75a32f8c4c090daff376cf975f5d2eba",
    "function_selector": "transfer(address,uint256)",
    "parameter": "000000000000000000000000a614f803b6fd7f65ec0f5ff4d6b265beb0ed6fcf00000000000000000000000000000000000000000000000000000000000f4240",
    "visible": false
  }'

В ответе найдите:

  • result.result: true означает успешную симуляцию; false — откат.
  • energy_used: количество единиц энергии, необходимое для исполнения инструкций.

Способ 3: тестовое исполнение в сети с JST

Для полноценных интеграционных тестов от начала до конца, включающих делегирование ресурсов и отправку транзакций из кошелька:

  1. Запросите тестовые TRX и токены JST в публичном кране Nile на nileex.io.
  2. Арендуйте или делегируйте энергию на тестовый кошелёк-отправитель через наш тестовый API (https://api-nile.tenergy.me/v1).
  3. Отправьте перевод JST на другой тестовый аккаунт.
  4. Откройте полученную транзакцию на nile.tronscan.org и проверьте:
    • энергия, списанная из делегированного объёма, совпала с ожиданиями;
    • TRX, сожжённые на энергию: ноль.

Что доказывает тестирование в Nile (а что нет)

Тестирование в Nile — обязательный этап разработки, но разработчикам нужно понимать его границы:

  • Что доказывает Nile:
    • Логика контракта и кодирование параметров метода структурно корректны.
    • Оценки расхода энергии близко отражают сложность байткода.
    • Логика интеграции (аутентификация HMAC, создание заказов, вебхуки) правильно обрабатывает ответы API.
  • Чего Nile не доказывает:
    • Наличие предложения в мейннете в реальном времени: в Nile небольшой тестовый объём, поэтому крупные тестовые заказы могут получить ошибку 5001 insufficient_supply.
    • Цены при загрузке мейннета: цены в Nile тестовые, а не прогноз для мейннета.

Подробнее о настройках тестовой сети и примерах интеграции — в нашей документации по окружениям и Quickstart по API.

Вопросы и ответы

Почему перевод USDT в Nile не расходует энергию отправителя?

В тестовой сети Nile официальный контракт USDT настроен так, что сам оплачивает энергию вызывающих. Чтобы увидеть реалистичное списание энергии с вызывающего, как у USDT в мейннете, разработчики тестируют на токенах JST или собственных контрактах TRC20.

Как оценить энергию смарт-контракта до отправки транзакции?

Вызов можно смоделировать через RPC-эндпоинт TRON triggerconstantcontract или ввести контракт, метод и аргументы в наш инструмент оценки энергии контракта — без отправки реальной транзакции.

Где взять бесплатные тестовые TRX и токены для Nile?

Бесплатные TRX и тестовые токены Nile можно получить в публичном кране на nileex.io.

Чем основные параметры Nile отличаются от мейннета?

В Nile максимальный срок блокировки делегирования — 5 дней (против 30 дней в мейннете), задержка вывода из стейкинга — 1 день (против 14 дней в мейннете), а объём тестовых ресурсов меньше.