Как снизить комиссию за перевод 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-операции (оплата, подписание, получение), ожидает поступления Energy , а затем вызывает вашу существующую логику перевода USDT . Это вся интеграция. Ниже приведено подробное описание каждого шага.
Шаг 1: Отправьте TRX на адрес отправителя.
Отправьте TRX с кошелька, за Energy которого вы платите, на адрес отправки TronNRG . Минимальная сумма — 4 TRX (что эквивалентно 65 000 Energy , достаточно для одного стандартного перевода USDT ). Максимальная сумма на делегирование — 1000 TRX (16,25 млн Energy ). Ценообразование линейное: 16 250 Energy за TRX .
В TronWeb :
const DISPATCH = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx';
const payment = await tronWeb.trx.sendTransaction(DISPATCH, 4 * 1e6);
// payment.txid is what you will sign in Step 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 , на который вы хотите делегировать Energy . В TronWeb :
const message = `${payment.txid}:${delegateTo}`;
const signature = await tronWeb.trx.signMessageV2(message);
Почему именно такая конструкция: она устраняет необходимость в ключах API , обеспечивая при этом безопасность делегирования. Никто другой не сможет претендовать на ваш платеж, поскольку только вы владеете закрытым ключом. Вы также можете оплачивать с кошелька A и делегировать средства на кошелек B, если вы контролируете кошелек A — это полезно для казначейств, которые финансируют Energy для нескольких отправляющих кошельков от одного плательщика.
Распространенная ошибка: использование неправильного метода подписи. Tron используются два стандарта подписи сообщений — signMessage (устаревший) и signMessageV2 (совместимый с EIP-191). API ожидает V2. Использование устаревшего стандарта приведет к созданию подписи, которая будет выглядеть корректной, но API отклонит ее как несоответствие подписи.
Шаг 3: Заявите о своем праве на делегирование
Отправьте хэш платежа, целевой кошелек и подпись в формате JSON на адрес api.tronnrg.com/delegate .
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 секунды после успешного запроса. С этого момента она удерживается в течение 15 минут. По истечении 15 минут неиспользованная Energy автоматически возвращается в пул TronNRG — частичное возмещение не производится.
Шаг 4: Отправьте сообщение о вашем переводе USDT
Перед отправкой перевода USDT убедитесь, что Energy действительно поступила. Опрашивайте tronWeb.trx.getAccountResources() на целевом кошельке до тех пор, пока EnergyLimit - EnergyUsed не достигнет значения не менее 65 000. Стандартный интервал составляет 500 мс с таймаутом в 30 секунд.
Затем отправьте USDT как обычно. Energy покрывает комиссию. TRX не сжигаются с кошелька отправителя.
// Wait for Energy to arrive
await pollUntilEnergyAvailable(delegateTo, 65000, { interval: 500, timeout: 30000 });
// Broadcast the USDT transfer
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 (выраженных как 20 000 000 SUN) — это разумный потолок, достаточный для покрытия одного перевода в случае сбоя Energy , и ограниченный таким образом, чтобы ошибка не могла опустошить горячий кошелек.
На самом деле это вам сэкономит деньги.
Экономия на каждом переводе фиксирована в TRX : примерно 9 TRX экономится при каждой стандартной отправке USDT (13 TRX предотвращено сжиганием, минус 4 TRX уплаченные за Energy ). Это число не меняется в зависимости от рыночных условий — это свойство сети Tron на уровне протокола. Меняется лишь то, сколько долларов представляют эти 9 TRX .
При реальном объеме бизнеса экономия быстро накапливается:
| Ежедневные трансферы | Ежегодный расход TRX (без API ) | Ежегодная TRX через API | Сэкономленные TRX в год | Снижение |
|---|---|---|---|---|
| 10 | ~47 450 | 14 600 | ~32 850 | ~69% |
| 100 | ~474 500 | 146 000 | ~328 500 | ~69% |
| 500 | ~2,37 млн. | 730 000 | ~1,64 млн. | ~69% |
| 1000 | ~4,75 млн. | 1,46 М | ~3,29 млн. | ~69% |
| 5000 | ~23,7 млн. | 7,30 млн. | ~16,4 млн. | ~69% |
Для получения актуальных данных о комиссиях в долларах США по текущей цене TRX воспользуйтесь калькулятором комиссий TronNRG — введите свой ежедневный объем, и он покажет вам реальную сумму экономии в долларах.
Если вы совершаете более 500 переводов в день, стоит также сравнить этот вариант с самостоятельным стейкингом TRX для генерации собственной Energy . Самостоятельный стейкинг имеет практически нулевую стоимость за перевод, но требует существенной блокировки капитала. Калькулятор точки безубыточности стейкинга покажет вам, где пересекаются границы между API и самостоятельным стейкингом для вашего конкретного объема.
Поиск неисправностей
Четыре ошибки встречаются достаточно часто, чтобы о них стоило знать заранее:
Несоответствие подписи (наиболее распространенная ошибка). API использует подпись V2, а вы использовали устаревший метод signMessage . Решение: переключитесь на signMessageV2 . Полный список кодов ошибок находится в документации по ошибкам TronNRG .
Платеж не найден. Вы вызвали /delegate до того, как транзакция платежа была подтверждена в блокчейне. Решение: подождите хотя бы один блок (около 3 секунд) после Шага 1, прежде чем вызывать Шаг 3. В коде опрашивайте tronWeb.trx.getTransaction(payment.txid) , пока он не вернет результат.
Оплата ниже минимальной суммы. Вы отправили менее 4 TRX . Система обработки платежей считает сумму менее 4 TRX недействительной и автоматически возвращает деньги. Решение: проверьте сумму перед отправкой — минимальная сумма фиксирована.
Energy не поступила. Делегирование успешно выполнено на стороне API , но в целевом кошельке по-прежнему отсутствует Energy . Решение: подождите еще один блок и перепроверьте — распространение может иногда занимать 6 секунд вместо 3. Если Energy по-прежнему не появляется через 30 секунд, проверьте, совпадает ли указанный вами адрес целевого кошелька с адресом, который вы запрашиваете (обычно это происходит из-за опечатки).
Прочитать полную документацию →
Для корпоративных заказов: свяжитесь с TronNRG в Telegram для подтверждения веб-хуков, получения информации о ценах для оптовых заказов и индивидуальных соглашений об уровне обслуживания (SLA).
Похожие руководства: API Tron Energy для разработчиков · Автоматизация переводов USDT в больших масштабах · Отправка USDT менее чем за 1 доллар
Три вызова API . Скидка 70% на каждый перевод USDT .
TronNRG доступен по адресу api.tronnrg.com. Минимальное количество TRX — 4, линейная тарификация до 1000 TRX . Делегирование за 3 секунды. Аутентификация на основе подписи, ключ API не требуется. Полная документация на всех поддерживаемых языках доступна по адресу support.tronnrg.com.
АРЕНДА ЭНЕРГИИ →