Инструкции

Как снизить комиссию за перевод USDT через API: пошаговое руководство по работе с API TronNRG

Коротко: стандартный перевод USDT TRC-20 потребляет 65,000 Energy. Если на кошельке нет Energy, Tron сжигает около 13 TRX с вашего баланса. С помощью API TronNRG вы делегируете то же количество Energy за 4 TRX — экономия около 70% на каждой транзакции. Интеграция состоит из трёх HTTP-операций: отправьте TRX на адрес диспетчера, подпишите сообщение о праве собственности и выполните POST-запрос к эндпоинту /delegate. В руководстве разобран каждый шаг с примерами кода и четырьмя наиболее частыми ошибками, с которыми вы столкнётесь в продакшене.

Перед началом работы

Перед первым API-запросом вам понадобятся три вещи:

Кошелёк Tron с TRX. Минимум 4 TRX для оплаты одного делегирования. В продакшене — больше: вы платите за каждый перевод, и периодически пополнять горячий кошелёк удобнее, чем пополнять его перед каждой отправкой.

Инструмент для подписи сообщений Tron. TronWeb предоставляет метод tronWeb.trx.signMessageV2(). В Python используется tron.trx.sign_message_v2() через tronpy. В PHP — библиотека iexbase/tron-api. В справочнике по API TronNRG есть рабочие примеры на всех четырёх языках.

Адрес кошелька получателя. Заранее определитесь: вы делегируете энергию на тот же кошелёк, с которого производится оплата (простейший вариант), или на другой подконтрольный вам кошелёк (казначейская схема). Оба варианта поддерживаются. Подпись связывает оба адреса между собой.

Что именно вы строите

Обёртка поверх вашей существующей функции отправки USDT. Обёртка выполняет три HTTP-операции (pay, sign, claim), ожидает зачисления Energy, затем вызывает вашу существующую логику перевода USDT. В этом и состоит вся интеграция. Всё остальное ниже — детали каждого шага.

Шаг 1: Отправьте TRX на адрес диспетчера

Отправьте TRX с кошелька, для которого вы оплачиваете Energy, на адрес диспетчера TronNRG. Минимальная сумма — 4 TRX (даёт 65,000 Energy, чего достаточно для одного стандартного перевода USDT). Максимум за одно делегирование — 1,000 TRX (16.25M Energy). Между этими значениями тариф линейный: 16,250 Energy за каждый TRX.

В TronWeb:

Код шага 1

const DISPATCH = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx';
const payment = await tronWeb.trx.sendTransaction(DISPATCH, 4 * 1e6);
// payment.txid понадобится для подписи на Шаге 2

Частая ошибка: отправка TRX в целых числах, деноминированных в SUN, без учёта конвертации. У TRX 6 знаков после запятой. 4 TRX — это 4_000_000 SUN (4 * 1e6). Ошибка в этом месте либо отправит пыль (делегирование окажется слишком маленьким), либо сотни TRX (делегирование пройдёт, но вы заплатите намного больше, чем нужно). Всегда проверяйте сумму перед передачей в sendTransaction.

Шаг 2: Подпишите авторизационное сообщение

API требует подтверждения того, что лицо, запрашивающее делегирование, является тем же, кто совершил оплату. Для этого необходимо подписать сообщение приватным ключом кошелька, с которого производилась оплата. Формат сообщения:

{payment_tx_hash}:{delegate_to_address}

Где payment_tx_hash — это txid, возвращённый на шаге 1, а delegate_to_address — адрес Tron, на который вы хотите получить делегирование энергии. В TronWeb:

Код шага 2

const message = `${payment.txid}:${delegateTo}`;
const signature = await tronWeb.trx.signMessageV2(message);

Логика решения: такой подход устраняет необходимость в API-ключах, сохраняя при этом безопасность делегирования. Никто другой не может воспользоваться вашим платежом, поскольку только вы владеете приватным ключом. Вы также можете оплатить с кошелька A и делегировать на кошелёк B — при условии, что кошелёк A под вашим контролем. Это удобно для казначейских счетов, которые финансируют энергию для нескольких кошельков-отправителей через единый платёжный аккаунт.

Распространённая ошибка: использование неверного метода подписи. В Tron существует два стандарта подписи сообщений — signMessage (устаревший) и signMessageV2 (совместимый с EIP-191). API ожидает V2. При использовании устаревшего метода будет сформирована внешне корректная подпись, которую API отклонит как несоответствующую.

Шаг 3: Получите делегирование

Отправьте POST-запрос с хешем платежа, целевым кошельком и подписью на api.tronnrg.com/delegate в формате JSON.

Код шага 3

const res = await fetch('https://api.tronnrg.com/delegate', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    tx_hash: payment.txid,
    delegate_to: delegateTo,
    signature
  })
}).then(r => r.json());

API возвращает три поля, которые вам понадобятся: res.energy (количество делегированной Energy, равное количеству отправленных TRX, умноженному на 16,250), res.delegations[0].tx (хеш транзакции делегирования в блокчейне — сохраните его для журнала аудита) и res.ref (идентификатор заявки вида nrg_d_42, полезный при обращении в поддержку).

Делегирование попадает в блокчейн примерно через 3 секунды после успешного получения. Оно действует 1 час с этого момента. По истечении 1 часа неиспользованная Energy автоматически возвращается в пул TronNRG — частичный возврат средств не предусмотрен.

Шаг 4: Отправьте USDT-перевод

Перед отправкой USDT-перевода убедитесь, что Energy действительно поступила. Опрашивайте tronWeb.trx.getAccountResources() на целевом кошельке до тех пор, пока EnergyLimit - EnergyUsed не станет не менее 65,000. Стандартный подход — интервал 500 мс с таймаутом 30 секунд.

Затем отправьте USDT в обычном режиме. Energy покроет комиссию. TRX из отправляющего кошелька не сжигается.

Паттерн шага 4

// Ожидаем поступления Energy
await pollUntilEnergyAvailable(delegateTo, 65000, { interval: 500, timeout: 30000 });

// Отправляем USDT-перевод
const contract = await tronWeb.contract().at(USDT_CONTRACT);
const txHash = await contract.transfer(recipient, amount).send({ feeLimit: 20_000_000 });

Всегда задавайте feeLimit. Если Energy по какой-то причине не поступит, а ваш код всё равно отправит транзакцию, feeLimit ограничит максимальное количество TRX, которое сеть может сжечь. 20 TRX (в единицах SUN: 20,000,000 SUN) — разумный потолок: достаточно, чтобы покрыть один перевод в случае сбоя с Energy, и при этом баг не опустошит горячий кошелёк.

Реальная экономия

Экономия на каждом переводе фиксирована в TRX: примерно 9 TRX на каждой стандартной отправке USDT (избегаете сжигания 13 TRX, платите лишь 4 TRX за Energy). Это значение не зависит от рыночной конъюнктуры — оно определяется протоколом сети Tron. Меняется лишь то, сколько долларов составляют эти 9 TRX.

При реальных объёмах бизнеса экономия накапливается быстро:

Переводов в деньСжигание TRX в год (без API)TRX в год через APIЭкономия TRX в годСнижение
10~47,45014,600~32,850~69%
100~474,500146,000~328,500~69%
500~2.37M730,000~1.64M~69%
1,000~4.75M1.46M~3.29M~69%
5,000~23.7M7.30M~16.4M~69%

Для расчёта актуальных сумм в USD по текущему курсу TRX воспользуйтесь калькулятором комиссий TronNRG — введите ваш дневной объём и получите экономию в долларах в реальном времени.

Если вы проводите 500 и более переводов в день, стоит также сравнить аренду энергии с самостоятельным стейкингом TRX для генерации собственной Energy. Самостоятельный стейкинг почти не требует затрат на каждый перевод, однако предполагает замораживание значительного капитала. Калькулятор точки безубыточности стейкинга покажет, при каком объёме API выгоднее самостоятельного стейкинга именно для вашей ситуации.

Устранение неполадок

Четыре ошибки встречаются достаточно часто, чтобы знать о них заранее:

Несовпадение подписи (самая распространённая ошибка). API подписывает запросы по стандарту V2, тогда как вы используете устаревший метод signMessage. Решение: перейдите на signMessageV2. Полный список кодов ошибок приведён в документации TronNRG по ошибкам.

Платёж не найден. Вы вызвали /delegate до того, как транзакция оплаты подтвердилась в блокчейне. Решение: подождите не менее одного блока (около 3 секунд) после шага 1, прежде чем вызывать шаг 3. В коде опрашивайте tronWeb.trx.getTransaction(payment.txid) до получения результата.

Сумма платежа ниже минимума. Вы отправили менее 4 TRX. Система считает любую сумму меньше 4 TRX недействительной и автоматически возвращает её. Решение: проверяйте суммы перед отправкой — минимальный порог строгий.

Энергия не поступила. Делегирование на стороне API прошло успешно, однако целевой кошелёк по-прежнему не показывает Energy. Решение: подождите ещё один блок и проверьте снова — иногда распространение занимает 6 секунд вместо 3. Если Energy не появилась спустя 30 секунд, убедитесь, что адрес целевого кошелька, который вы указали, совпадает с тем, который вы проверяете (чаще всего причина — опечатка).

▸ TronNRG API доступен по адресу api.tronnrg.com.

Читать полную документацию →

Для корпоративных объёмов: свяжитесь с TronNRG в Telegram для настройки webhook-уведомлений, оптовых тарифов и индивидуальных SLA.

Связанные руководства: Tron Energy API для разработчиков · Автоматизация переводов USDT в больших объёмах · Отправляйте USDT менее чем за $1

ТРИ ВЫЗОВА API. ЭКОНОМИЯ 70% НА КАЖДОМ ПЕРЕВОДЕ USDT.

TronNRG доступен по адресу api.tronnrg.com. Минимум 4 TRX, линейное ценообразование до 1,000 TRX. Делегирование за 3 секунды. Аутентификация на основе подписи — API-ключ не требуется. Полная документация на всех поддерживаемых языках на support.tronnrg.com.

АРЕНДОВАТЬ ЭНЕРГИЮ →

FAQ

Как быстрее всего снизить комиссию за перевод USDT программным способом?
Используйте API делегирования Energy. API TronNRG на api.tronnrg.com делегирует 65,000 Energy (один стандартный перевод USDT) за 4 TRX вместо ~13 TRX, которые иначе сжёг бы сеть — снижение комиссии около 70%. Интеграция состоит из трёх HTTP-операций: отправьте TRX на адрес диспетчера, подпишите сообщение о праве собственности, выполните POST-запрос к /delegate. Полный цикл занимает около 3 секунд до момента, когда можно отправить перевод USDT.
Нужен ли API-ключ для работы с api.tronnrg.com?
Для стандартного потока делегирования API-ключ не требуется. Аутентификация выполняется путём подписи сообщения приватным ключом платящего кошелька. Это подтверждает право собственности на кошелёк в блокчейне и позволяет API верифицировать запрос без регистрации аккаунта, дашбордов и ключей, требующих ротации. Для корпоративных объёмов (500+ переводов в сутки) с подтверждениями через вебхуки и индивидуальными SLA свяжитесь с TronNRG в Telegram.
Можно ли оплатить с одного кошелька, а Energy делегировать на другой?
Да. Подписанное сообщение привязывает хэш транзакции оплаты к адресу кошелька delegate_to. Пока у вас есть приватный ключ от платящего кошелька, вы можете делегировать полученную энергию на любой адрес Tron. Это удобно для казначейских схем, где один финансовый кошелёк оплачивает энергию за несколько отправляющих кошельков.
Какая модель ценообразования — всегда ли я плачу ровно 4 TRX?
Цена линейная: 16,250 энергии за TRX, минимум — 4 TRX (65,000 энергии, один стандартный перевод), максимум — 1,000 TRX (16.25M энергии). Таким образом, 8 TRX хватит на два стандартных перевода или один перевод на новый кошелёк (он стоит вдвое дороже), 40 TRX — на 10 переводов, и так далее. Делегирование действует 1 час, поэтому можно заплатить один раз и отправить несколько транзакций USDT в течение этого времени.
Что произойдёт, если делегирование не удастся после того, как я уже заплатил?
TronNRG автоматически возвращает TRX на адрес отправителя в блокчейне, если делегирование по какой-либо причине не может быть выполнено. Ситуация с заморозкой средств исключена. Тем не менее в продакшне стоит реализовать запасной сценарий: если вызов /delegate завершился ошибкой или энергия не поступила в разумный таймаут — отправьте перевод USDT без энергии (сеть сожжёт TRX, перевод всё равно пройдёт) и зафиксируйте событие для разбора.
Является ли сервис TronNRG некастодиальным?
Да. Энергия делегируется через нативный механизм делегирования на уровне протокола Tron. TronNRG никогда не хранит ваши USDT, не требует подключения кошелька и не запрашивает никаких разрешений на токены. Сервис предоставляет энергию на адрес вашего кошелька. Вы отправляете USDT со своего кошелька. Эти две операции полностью независимы. Единственные токены, с которыми взаимодействует TronNRG, — это TRX, которые вы отправляете для покупки энергии.
На каких языках программирования есть готовые примеры?
В документации для разработчиков TronNRG на support.tronnrg.com есть готовые примеры для копирования на JavaScript (TronWeb), Python (tronpy), PHP (iexbase/tron-api) и cURL. Интегрировать сервис можно на любом языке, способном подписать сообщение Tron и выполнить HTTP-запрос — на этом API уже запущены в продакшн реализации на Go, Rust, Java и C#.
Telegram WhatsApp