Как протестировать расход энергии смарт-контракта в Nile
Как оценить и протестировать расход энергии смарт-контракта TRON в тестовой сети Nile: отличия тестовых токенов, RPC-методы и инструменты оценки энергии.
Опубликовано · Обновлено
Тестирование расхода энергии смарт-контракта в тестовой сети TRON Nile позволяет разработчикам измерить стоимость исполнения байткода, проверить fee limit и избежать откатов с ошибкой OUT_OF_ENERGY до того, как тратить средства в мейннете[1]. Поскольку при нехватке энергии на аккаунте исполнение смарт-контракта в TRON сжигает TRX, точный замер до развёртывания критически важен для предсказуемого бюджета приложения.
Важное отличие тестовой сети: в Nile официальный контракт USDT сам оплачивает энергию своих вызывающих. Поэтому при отправке USDT в Nile энергия с аккаунта отправителя не списывается. Чтобы протестировать реалистичный расход газа за счёт отправителя, разработчикам нужно тестировать на других токенах, например JST (TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3), моделировать вызовы через triggerconstantcontract[3] или использовать специальные инструменты оценки[2].
Тестовая сеть Nile и мейннет TRON: отличия окружений
Nile близко повторяет среду исполнения виртуальной машины TRON (TVM), но отдельные параметры протокола заметно отличаются от мейннета[1]:
| Параметр | Тестовая сеть Nile | Мейннет TRON | Что это значит для разработчика |
|---|---|---|---|
| Адрес контракта USDT | TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf | TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t | В тестовых скриптах нужно поменять адрес контракта |
| Оплата энергии USDT | Контракт оплачивает энергию вызывающего | Энергию платит вызывающий | На USDT в Nile нельзя проверить списание газа с вызывающего |
| Рекомендуемый тестовый токен | JST (TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3) | USDT | JST списывает энергию с отправителя так же, как USDT в мейннете |
| Максимальный срок блокировки делегирования | 5 дней (144 000 блоков) | 30 дней (864 000 блоков) | Более короткие циклы блокировки ресурсов при тестировании аренды |
| Задержка вывода из стейкинга | 1 день | 14 дней (getUnfreezeDelayDays) | Более быстрый возврат застейканных TRX в тестовой сети |
| Публичный адрес ноды | https://nile.trongrid.io | https://api.trongrid.io | Разные RPC-шлюзы |
| Обозреватель блокчейна | nile.tronscan.org[4] | tronscan.org | Проверка результатов транзакций и расхода ресурсов |
Три способа протестировать энергию контракта
Способ 1: инструмент оценки энергии контракта
Наша оценка энергии контракта выполняет пробный прогон (dry-run) на ноде TRON, не отправляя подписанную транзакцию в сеть[2].
Как пользоваться инструментом:
- Введите адрес контракта (например, вашего собственного контракта или токена).
- Введите сигнатуру метода (например,
transfer(address,uint256)). - Укажите аргументы через запятую (например, адрес получателя и сумму целым числом в минимальных единицах токена).
- Укажите адрес вызывающего, чей баланс токенов и права будут учитываться.
- Нажмите Estimate energy, чтобы увидеть, сколько энергии израсходует вызов и сколько TRX это составит при сжигании.
Способ 2: пробный прогон через RPC triggerconstantcontract
Если вы разрабатываете бэкенд-ботов или тесты для CI/CD, можно обращаться к ноде TRON напрямую через эндпоинт wallet/triggerconstantcontract. Он моделирует транзакцию в TVM в режиме только для чтения и возвращает energy_used:
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
Для полноценных интеграционных тестов от начала до конца, включающих делегирование ресурсов и отправку транзакций из кошелька:
- Запросите тестовые TRX и токены JST в публичном кране Nile на nileex.io.
- Арендуйте или делегируйте энергию на тестовый кошелёк-отправитель через наш тестовый API (
https://api-nile.tenergy.me/v1). - Отправьте перевод JST на другой тестовый аккаунт.
- Откройте полученную транзакцию на nile.tronscan.org и проверьте:
- энергия, списанная из делегированного объёма, совпала с ожиданиями;
- TRX, сожжённые на энергию: ноль.
Что доказывает тестирование в Nile (а что нет)
Тестирование в Nile — обязательный этап разработки, но разработчикам нужно понимать его границы:
- Что доказывает Nile:
- Логика контракта и кодирование параметров метода структурно корректны.
- Оценки расхода энергии близко отражают сложность байткода.
- Логика интеграции (аутентификация HMAC, создание заказов, вебхуки) правильно обрабатывает ответы API.
- Чего Nile не доказывает:
- Наличие предложения в мейннете в реальном времени: в Nile небольшой тестовый объём, поэтому крупные тестовые заказы могут получить ошибку
5001 insufficient_supply. - Цены при загрузке мейннета: цены в Nile тестовые, а не прогноз для мейннета.
- Наличие предложения в мейннете в реальном времени: в 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 дней в мейннете), а объём тестовых ресурсов меньше.