เอกสารสำหรับนักพัฒนา
เช่าพลังงาน Tron ด้วย Python (tronpy): ตัวอย่างโค้ด
เช่าพลังงาน Tron โดยใช้ tronpy ใน Python ตัวอย่างการบูรณาการที่สมบูรณ์: ชำระ 4 TRX รับการมอบหมายพลังงาน และส่งการโอน USDT บนเครือข่าย Tron
ที่อยู่ API สำหรับการชำระเงิน
TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx
ส่ง TRX ไปที่ที่อยู่นี้ แฮชธุรกรรมของคุณใช้ในการรับการมอบหมายพลังงาน
บูรณาการ Python ที่สมบูรณ์โดยใช้ tronpy แต่ละขั้นตอนเป็นบล็อกโค้ดแบบสแตนด์อโลนที่คุณสามารถคัดลอกลงในโครงการของคุณได้ ตัวอย่างแบบ end-to-end แบบเต็มรูปแบบอยู่ที่ด้านล่าง
ข้อกำหนดเบื้องต้น: Python 3.8+
tronpy ติดตั้ง ()pip install tronpyกระเป๋าเงิน Tron ที่มีเงินทุน
ขั้นตอนการทำงาน
ไม่มีคีย์ API ไม่ต้องลงทะเบียน โค้ดของคุณส่ง TRX บนเชน ไปยังที่อยู่การชำระเงินของ TronEnergy ลงนาม ข้อความเพื่อพิสูจน์ความเป็นเจ้าของ จากนั้นรับการมอบหมายพลังงาน พลังงานมาถึงในเวลาประมาณ 3 วินาที จากนั้นโค้ดของคุณส่ง USDT โดยใช้พลังงานที่มอบหมาย
ราคาเป็นแบบเชิงเส้น: 16,250 Energy ต่อ TRX คำสั่งซื้อขั้นต่ำ 4 TRX (65,000 Energy — การโอน USDT มาตรฐานหนึ่งครั้ง) สูงสุด 1,000 TRX (16.25M Energy) จำนวนที่คุณส่งกำหนดพลังงานกลับมาแน่นอน — ไม่มีแพ็คเกจหรือระดับ สำหรับการโอนครั้งเดียว ให้ส่ง 4 สำหรับการโอนกระเป๋าใหม่ ให้ส่ง 8 สำหรับการทำงานเป็นชุด ให้ส่งมากขึ้น โค้ดด้านล่างใช้
TRX_AMOUNTตัวแปรเพื่อให้คุณเปลี่ยนแปลงได้ในที่เดียว
ทีละขั้นตอน
1. การตั้งค่า
ตั้งค่า
import os, requests
from tronpy import Tron
from tronpy.keys import PrivateKey, keccak256
from coincurve import PrivateKey as CCKey # tronpy already depends on coincurve
client = Tron() # mainnet — pass HTTPProvider(api_key=...) to avoid rate limits
priv = PrivateKey(bytes.fromhex(os.environ['TRON_PRIVATE_KEY']))
sender = priv.public_key.to_base58check_address()
API = 'https://api.tronnrg.com'
ADDR = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx' # API payment address
USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'
2. ส่ง TRX
ส่งการชำระเงิน
TRX_AMOUNT = 4 # Linear: 16,250 energy per TRX. Min 4, max 1000.
# 4 → 65k (standard) · 8 → 130k (new wallet) · 40 → 650k (10 transfers)
payment = (
client.trx.transfer(sender, ADDR, TRX_AMOUNT * 1_000_000)
.build().sign(priv).broadcast()
)
print('Payment tx:', payment.txid)
3. เรียกร้องการมอบหมายพลังงาน
เรียกร้องการมอบหมายพลังงาน
# Sign: proves you are the sender. Must equal TronWeb signMessageV2 exactly:
# keccak256("\x19TRON Signed Message:\n" + len + msg), secp256k1, v = rec + 27.
def sign_message_v2(message, priv):
msg = message.encode()
prefix = b"\x19TRON Signed Message:\n" + str(len(msg)).encode()
digest = keccak256(prefix + msg)
raw = CCKey(priv.to_bytes()).sign_recoverable(digest, hasher=None)
return '0x' + (raw[:64] + bytes([raw[64] + 27])).hex()
msg = f"{payment.txid}:{sender}"
sig = sign_message_v2(msg, priv)
delegation = requests.post(f"{API}/delegate", json={
'tx_hash': payment.txid,
'delegate_to': sender,
'signature': sig,
}).json()
if delegation.get('error'):
raise Exception(delegation['message'])
print('Energy delegated:', delegation['energy']) # TRX_AMOUNT × 16,250
4. ส่ง USDT
ส่ง USDT
recipient = 'TRecipientWallet'
contract = client.get_contract(USDT)
tx = (
contract.functions.transfer(recipient, 10 * 1_000_000)
.with_owner(sender).fee_limit(50_000_000)
.build().sign(priv).broadcast()
)
print('USDT sent:', tx.txid)
การจัดการข้อผิดพลาด
จัดการข้อผิดพลาด
result = requests.post(f"{API}/delegate", json=payload).json()
if result.get('error'):
err = result['error']
if err == 'payment_verification_failed':
pass # Payment not yet indexed on-chain. Wait 3s and retry.
elif err == 'hash_already_used':
pass # Already claimed. Do not retry.
elif err == 'signature_mismatch':
pass # Sender of TRX != signer of the message. Sign with the same key.
elif err == 'delegation_failed':
pass # Provider could not deliver. Retry or contact support with result['ref'].
ตัวอย่างที่สมบูรณ์
คัดลอกลงในไฟล์ ตั้งค่าตัวแปรแวดล้อม TRON_PRIVATE_KEY และเรียกใช้ สคริปต์จะส่ง TRX ลงนามข้อความ เรียกร้องการมอบหมายพลังงานพร้อมการลองใหม่ จากนั้นส่ง USDT
delegate_energy.py
import os, time, requests
from tronpy import Tron
from tronpy.keys import PrivateKey, keccak256
from coincurve import PrivateKey as CCKey
client = Tron() # mainnet — pass HTTPProvider(api_key=...) to avoid rate limits
priv = PrivateKey(bytes.fromhex(os.environ['TRON_PRIVATE_KEY']))
sender = priv.public_key.to_base58check_address()
API = 'https://api.tronnrg.com'
ADDR = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx'
USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'
# Signature must match TronWeb signMessageV2 byte-for-byte.
def sign_message_v2(message, priv):
msg = message.encode()
prefix = b"\x19TRON Signed Message:\n" + str(len(msg)).encode()
digest = keccak256(prefix + msg)
raw = CCKey(priv.to_bytes()).sign_recoverable(digest, hasher=None)
return '0x' + (raw[:64] + bytes([raw[64] + 27])).hex()
def claim_with_retry(tx_hash, delegate_to, signature, retries=3):
for _ in range(retries):
res = requests.post(f"{API}/delegate", json={
'tx_hash': tx_hash, 'delegate_to': delegate_to, 'signature': signature,
}).json()
if not res.get('error'):
return res
if res['error'] != 'payment_verification_failed':
raise Exception(res['message'])
time.sleep(3)
raise Exception('Transaction not found after retries')
def main():
recipient = 'TRecipientWallet'
trx_amount = 4 # min 4, max 1000 — you get trx_amount × 16,250 energy
# 1. Send TRX (linear pricing: 16,250 energy per TRX)
payment = (
client.trx.transfer(sender, ADDR, trx_amount * 1_000_000)
.build().sign(priv).broadcast()
)
print('Payment:', payment.txid)
# 2. Claim delegation (the signature proves you sent the TRX)
signature = sign_message_v2(f"{payment.txid}:{recipient}", priv)
result = claim_with_retry(payment.txid, recipient, signature)
print('Delegated:', result['energy'], 'energy')
print('Delegation tx:', result['delegations'][0]['tx']) # verify on TronScan
print('Ref:', result['ref'])
# 3. Send USDT using the delegated energy
contract = client.get_contract(USDT)
tx = (
contract.functions.transfer(recipient, 10 * 1_000_000)
.with_owner(sender).fee_limit(50_000_000)
.build().sign(priv).broadcast()
)
print('USDT sent:', tx.txid)
if __name__ == '__main__':
main()
รวมลายเซ็นเสมอ มันพิสูจน์ว่าคุณเป็นกระเป๋าเงินที่ส่ง TRX ถ้าไม่มีลายเซ็น API จะปฏิเสธคำขอด้วย
missing_signature.