REST API TronEnergy для аренды Energy: Endpoints и интеграция
Полная документация REST API для аренды Energy TronEnergy. Endpoint /delegate, HMAC-аутентификация, форматы запросов и ответов, коды ошибок и лимиты.
Базовый URL:https://api.tronnrg.comАутентификация: Не требуется. Все endpoints открытые.
Лимит запросов: 20 запросов/сек на один IP
Адрес платежа:TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx (только для API, не для ручной аренды)
Как это работает
Три шага. Без API-ключа, без регистрации, без подключения кошелька. Право собственности доказывается криптографически.
Отправьте TRX — Отправьте 4 TRX (или больше) на адрес платежа. 4 TRX = 65,000 энергии. 8 TRX = 130,000. Линейная шкала.
Подпишите — Подпишите сообщение {tx_hash}:{delegate_to} кошельком, который отправил TRX. Это подтверждает вашу авторизацию делегирования.
Получите энергию — POST /delegate с параметрами tx_hash, delegate_to и signature. Энергия поступит примерно за 3 секунды.
Адрес платежа
TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx
Только для API платежей. Этот адрес предназначен для программных интеграций через API. Не используйте его для ручной аренды энергии. Адрес для ручной аренды отличается и доступен на .tronnrg.com.
Отправьте TRX на этот адрес. Хеш транзакции вашего платежа — это ваш токен для запуска делегирования. Каждый хеш можно использовать только один раз.
Отправлено TRX
Делегировано энергии
Сценарий использования
4 TRX
65,000
Стандартный перевод USDT на существующий кошелёк (минимальный заказ)
8 TRX
130,000
Перевод USDT первому получателю
16 TRX
260,000
Четыре стандартных перевода в одном заказе
40 TRX
650,000
Десять стандартных переводов
100 TRX
1,625,000
~25 стандартных переводов — типично для небольших платформ
1,000 TRX
16,250,000
Максимальный заказ, ~250 стандартных переводов
Любой объём между минимумом и максимумом
trx × 16,250
Полностью линейная шкала. Нет уровней, пакетов или скидок.
Формула:energy = trxSent × 16,250. Ограничения: минимум 4 TRX (65,000 энергии), максимум 1,000 TRX (16,250,000 энергии). Оба ограничения применяются на уровне API — суммы ниже минимума отклоняются с ошибкой below_minimum и возвращаются; суммы выше максимума отклоняются перед делегированием.
POST /delegate
POST/delegate
Требуйте делегирование энергии. Вы должны уже отправить TRX на адрес платежа в блокчейне. Передайте хэш транзакции, адрес получателя и подпись, подтверждающую, что вы отправитель.
Параметр
Тип
Описание
tx_hash
string
обязательно
64-символьный шестнадцатеричный хэш платежа TRX
delegate_to
string
обязательно
Адрес Tron для получения энергии
signature
string
обязательно
tronWeb.trx.signMessageV2() от tronWeb.trx.signMessageV2(). Подтверждает, что вы отправитель платежа.
Идентификатор TronNRG. Сохраняйте его для запросов в поддержку.
energy
number
Всего делегировано энергии
cost
number
Взиматься TRX
status
string
"delegated" при успехе
delegations
array
Хэши транзакций делегирования в блокчейне. Каждый tx проверяется на TronScan. Это ваша квитанция.
GET /health
GET/health
Проверка живости для инструментов мониторинга и анализа доступности. Возвращает 200 OK когда процесс API активен. Не проверяет вышестоящие узлы или провайдеров.
Ответ 200
{ "status": "ok" }
Коды ошибок
Каждый ответ об ошибке содержит error (стабильный, читаемый машиной) и message (читаемый человеком). Всегда переключайтесь на error в вашем коде.
Код
HTTP
Значение
invalid_tx_hash
400
Не 64-символьная шестнадцатеричная строка
invalid_address
400
Неверный адрес Tron
missing_signature
400
Подпись не предоставлена
invalid_signature
401
Подпись не может быть проверена
signature_mismatch
403
Адрес подписывающей стороны не совпадает с отправителем платежа
hash_already_used
409
Хэш транзакции уже заявлен
payment_verification_failed
404 / 400
Проверка платежа в блокчейне не удалась. Прочитайте поле message для уточнения причины: транзакция еще не найдена (404, повторите попытку через несколько секунд), неправильный получатель, не TRX перевод или ниже минимума 4 TRX.
delegation_failed
400 / 500
Провайдер не смог доставить энергию. Если ошибка произошла после проверки платежа, возврат средств автоматически поставлен в очередь. Проверьте объект refund когда это происходит.
rate_limited
429
Слишком много запросов в секунду с этого IP-адреса. Лимит: 20/сек.
server_error
500
Внутренняя ошибка. Повторите попытку через несколько секунд.
const result = awaitfetch('https://api.tronnrg.com/delegate', { ... })
.then(r => r.json());
if (result.error) {
switch (result.error) {
case'payment_verification_failed':
// Most common cause: tx not yet indexed. Wait 3s and retry.// Read result.message for the specific cause.break;
case'hash_already_used':
// Already claimed. Don't retry.break;
case'signature_mismatch':
// Signer != payment sender. Sign with the same key that sent TRX.break;
case'delegation_failed':
// Refund queued automatically if payment was verified.if (result.refund) console.log('Refund queued:', result.refund);
break;
}
}
result = requests.post('https://api.tronnrg.com/delegate', json=data).json()
if'error'in result:
if result['error'] == 'payment_verification_failed':
# Most common cause: tx not yet indexed. Wait 3s and retry.passelif result['error'] == 'hash_already_used':
# Already claimed. Don't retry.passelif result['error'] == 'signature_mismatch':
# Signer != payment sender. Sign with the same key.passelif result['error'] == 'delegation_failed':
# Refund queued automatically if payment was verified.pass
if (isset($result['error'])) {
switch ($result['error']) {
case'payment_verification_failed':
// Most common cause: tx not yet indexed. Wait 3s and retry.break;
case'hash_already_used':
// Already claimed. Don't retry.break;
case'signature_mismatch':
// Signer != payment sender. Sign with the same key.break;
case'delegation_failed':
// Refund queued automatically if payment was verified.break;
}
}
Возвраты
Если делегирование энергии не пройдёт после подтверждения платежа, возврат TRX автоматически ставится в очередь и отправляется на исходный адрес в блокчейне. Объект возврата находится в ответе об ошибке.
Ошибка с возвратом
{
"error": "delegation_failed",
"message": "Energy delegation failed. Your payment will be refunded.",
"ref": "nrg_d_43",
"refund": {
"type": "queued",
"to": "TSenderAddress",
"amount": 4
}
}
Полный пример
Полный процесс от начала до конца: отправить TRX, подписать, забрать делегирование с повторными попытками. Скопируйте и запустите.
const API = 'https://api.tronnrg.com';
const ADDR = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx';
async functionrentEnergy(delegateTo, trxAmount = 4) {
// 1. Send TRX to the payment addressconst payment = await tronWeb.trx.sendTransaction(ADDR, trxAmount * 1e6);
// 2. Sign: proves you are the senderconst message = `${payment.txid}:${delegateTo}`;
const signature = await tronWeb.trx.signMessageV2(message);
// 3. Claim delegation (retry if tx not indexed yet)let result;
for (let i = 0; i < 3; i++) {
result = awaitfetch(`${API}/delegate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
tx_hash: payment.txid,
delegate_to: delegateTo,
signature,
}),
}).then(r => r.json());
if (!result.error) break;
if (result.error !== 'payment_verification_failed') throw newError(result.message);
await newPromise(r => setTimeout(r, 3000));
}
if (result.error) throw newError(result.message);
return result;
}
// Usage — send any amount between 4 and 1,000 TRXconst result = awaitrentEnergy('TWalletThatNeedsEnergy', 4); // 4 TRX → 65k energy// rentEnergy(addr, 8) // → 130,000 energy (new-wallet transfer)// rentEnergy(addr, 40) // → 650,000 energy (10 transfers)// rentEnergy(addr, 1000) // → 16,250,000 energy (max)
console.log(result.energy); // trxAmount × 16,250
console.log(result.delegations[0].tx); // on-chain tx hash
console.log(result.ref); // "nrg_d_42"
import requests
import time
API = 'https://api.tronnrg.com'
ADDR = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx'defrent_energy(delegate_to, trx_amount=4):
# 1. Send TRX to ADDR (via your Tron library)
tx_hash = send_trx(ADDR, trx_amount) # your TRX send function# 2. Sign: proves you are the sender
message = f'{tx_hash}:{delegate_to}'
signature = tron.trx.sign_message_v2(message)
# 3. Claim delegation (retry if tx not indexed yet)for attempt inrange(3):
result = requests.post(f'{API}/delegate', json={
'tx_hash': tx_hash,
'delegate_to': delegate_to,
'signature': signature,
}).json()
if'error'not in result:
return result
if result['error'] != 'payment_verification_failed':
raiseException(result['message'])
time.sleep(3)
raiseException('Transaction not found after retries')
# Usage
result = rent_energy('TWalletThatNeedsEnergy', 4)
print(f"Delegated: {result['energy']} energy")
print(f"Delegation tx: {result['delegations'][0]['tx']}")
print(f"Ref: {result['ref']}")
# 1. Send TRX to TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx# Pricing is linear at 16,250 energy per TRX.# Min 4 TRX (65,000 energy), max 1,000 TRX (16.25M energy).# (use your wallet or tronweb CLI)# 2. Sign the message {tx_hash}:{delegate_to} (proves you are the sender)# (use tronWeb.trx.signMessageV2 in your code)# 3. Claim delegation with tx hash + signature
curl -X POST https://api.tronnrg.com/delegate \
-H "Content-Type: application/json" \
-d '{
"tx_hash": "YOUR_PAYMENT_TX_HASH",
"delegate_to": "TWalletThatNeedsEnergy",
"signature": "YOUR_SIGNATURE"
}'# Response includes delegations[].tx — the on-chain hash you can verify on TronScan