デベロッパードキュメント
Tronエナジーレンタル API リファレンス:REST エンドポイント&統合
TronEnergyエナジー委任の完全なREST APIドキュメント。POST /delegateエンドポイント、HMAC認証、リクエスト/レスポンス形式、エラーコード、レート制限。
ベースURL:
https://api.tronnrg.com
認証: 不要。すべてのエンドポイントは公開されています。
レート制限: 1秒あたりIP毎20リクエスト
支払いアドレス: TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx (API のみ、手動レンタルではありません) 動作方法
3つのステップ。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を送信してください。ご利用のお支払いのトランザクションハッシュが、委任をトリガーするトークンです。各ハッシュは1回のみ使用できます。
| 送信TRX | 委任されたエナジー | ユースケース |
|---|---|---|
| 4 TRX | 65,000 | 既存のウォレットへの標準USDT送金(最小注文) |
| 8 TRX | 130,000 | 初回受取人へのUSDT送金 |
| 16 TRX | 260,000 | 1回の注文で4件の標準送金 |
| 40 TRX | 650,000 | 10件の標準送金 |
| 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 | 必須 | TRX支払いの64文字16進ハッシュ |
| delegate_to | string | 必須 | エナジーを受け取るTronアドレス |
| signature | string | 必須 | tronWeb.trx.signMessageV2() の tronWeb.trx.signMessageV2()。支払い送信者であることを証明します。 |
curl -X POST https://api.tronnrg.com/delegate \
-H "Content-Type: application/json" \
-d '{"tx_hash":"TX_HASH","delegate_to":"TWallet","signature":"SIG"}'
const result = await fetch('https://api.tronnrg.com/delegate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
tx_hash: 'YOUR_TX_HASH',
delegate_to: 'TWalletAddress',
signature: 'YOUR_SIGNATURE',
}),
}).then(r => r.json());
if (result.error) {
console.error(result.error, result.message);
} else {
console.log('Delegated:', result.energy, 'energy');
console.log('Ref:', result.ref);
}
import requests
response = requests.post('https://api.tronnrg.com/delegate', json={
'tx_hash': 'YOUR_TX_HASH',
'delegate_to': 'TWalletAddress',
'signature': 'YOUR_SIGNATURE',
})
result = response.json()
if 'error' in result:
print(f"Error: {result['error']} - {result['message']}")
else:
print(f"Delegated: {result['energy']} energy")
print(f"Delegation tx: {result['delegations'][0]['tx']}")
print(f"Ref: {result['ref']}")
$ch = curl_init('https://api.tronnrg.com/delegate');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'tx_hash' => 'YOUR_TX_HASH',
'delegate_to' => 'TWalletAddress',
'signature' => 'YOUR_SIGNATURE',
]),
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (isset($result['error'])) {
echo "Error: " . $result['message'];
} else {
echo "Delegated: " . $result['energy'] . " energy";
}
var client = new HttpClient();
var content = new StringContent(
JsonSerializer.Serialize(new {
tx_hash = "YOUR_TX_HASH",
delegate_to = "TWalletAddress",
signature = "YOUR_SIGNATURE"
}),
Encoding.UTF8, "application/json"
);
var response = await client.PostAsync("https://api.tronnrg.com/delegate", content);
var json = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<JsonElement>(json);
if (result.TryGetProperty("error", out var err))
Console.WriteLine($"Error: {err}");
else
Console.WriteLine($"Delegated: {result.GetProperty("energy")} energy");
レスポンス 200
{
"ref": "nrg_d_42",
"delegate_to": "TWalletAddress",
"energy": 65000,
"cost": 4,
"status": "delegated",
"delegations": [
{ "tx": "a1b2c3d4e5f6...your delegation tx hash", "energy": 65000 }
]
}
| フィールド | タイプ | 説明 |
|---|---|---|
| ref | string | TronNRG参照ID。サポート照会時にログに記録してください。 |
| energy | number | 委任されたエナジー総量 |
| cost | number | 請求されたTRX |
| status | string | 成功時は「delegated」 |
| delegations | array | オンチェーン委任トランザクションハッシュ。各 tx は TronScan で検証可能です。これが領収書です。 |
GET /health
GET/health
監視とアップタイムツール用のライブネスチェック。APIプロセスが稼働中の場合 200 OK を返します。アップストリームノードやプロバイダーはチェックしません。
レスポンス 200
{ "status": "ok" }
エラーコード
すべてのエラーレスポンスは error(安定した機械可読形式)および message(人間が読める形式)を持っています。コード内で常に error で切り替えてください。
| コード | HTTP | 意味 |
|---|---|---|
invalid_tx_hash | 400 | 64文字の16進文字列ではありません |
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 = await fetch('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.
pass
elif result['error'] == 'hash_already_used':
# Already claimed. Don't retry.
pass
elif result['error'] == 'signature_mismatch':
# Signer != payment sender. Sign with the same key.
pass
elif 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 function rentEnergy(delegateTo, trxAmount = 4) {
// 1. Send TRX to the payment address
const payment = await tronWeb.trx.sendTransaction(ADDR, trxAmount * 1e6);
// 2. Sign: proves you are the sender
const 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 = await fetch(`${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 new Error(result.message);
await new Promise(r => setTimeout(r, 3000));
}
if (result.error) throw new Error(result.message);
return result;
}
// Usage — send any amount between 4 and 1,000 TRX
const result = await rentEnergy('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'
def rent_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 in range(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':
raise Exception(result['message'])
time.sleep(3)
raise Exception('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']}")
<?php
$api = 'https://api.tronnrg.com';
$addr = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx';
function rentEnergy($api, $txHash, $delegateTo, $signature) {
// 1. Send TRX to $addr (via iexbase/tron-api)
// $payment = $tron->sendTrx($addr, 4);
// $txHash = $payment['txid'];
// 3. Claim delegation (retry if tx not indexed yet)
for ($i = 0; $i < 3; $i++) {
$ch = curl_init("${api}/delegate");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'tx_hash' => $txHash,
'delegate_to' => $delegateTo,
'signature' => $signature,
]),
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (!isset($result['error'])) return $result;
if ($result['error'] !== 'payment_verification_failed')
throw new Exception($result['message']);
sleep(3);
}
throw new Exception('Transaction not found after retries');
}
// Usage
$result = rentEnergy($api, $txHash, 'TWalletThatNeedsEnergy');
echo "Delegated: " . $result['energy'] . " energy\n";
echo "Delegation tx: " . $result['delegations'][0]['tx'] . "\n";
echo "Ref: " . $result['ref'] . "\n";
# 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