სრული Python ინტეგრაცია tronpy-ის გამოყენებით. თითოეული ნაბიჯი არის ცალკე კოდის ბლოკი, რომელიც შეგიძლია თქვენს პროექტში დააკოპიროთ. სრული end-to-end მაგალითი ქვემოთ არის.
წინაპირობები: Python 3.8+, tronpy დაინსტალირებული (pip install tronpy), დაფინანსებული Tron საფულე.
ნაკადი
API გასაღები არ არის. რეგისტრაცია არ არის. თქვენი კოდი აგზავნის TRX ჯაჭვში TronEnergy გადახელის მისამართზე, ხელმოწერს გამოთქმას, რომელიც მालკიანობას ამტკიცებს, შემდეგ აკრეფს დელეგაციას. ენერგია ჩამოდის დაახლოებით 3 წამში. შემდეგ თქვენი კოდი აგზავნის USDT დელეგირებული ენერგიის გამოყენებით.
ფასი ხაზოვანია: 16,250 ენერგია თითო TRX. მინიმალური შეკვეთა 4 TRX (65,000 ენერგია — ერთი სტანდარტული USDT გადახელი), მაქსიმუმ 1,000 TRX (16.25M ენერგია). თქვენი მიერ გაგზავნილი თანხა განსაზღვრავს ზუსტად რამდენი ენერგია დაბრუნდება — პაკეტი ან დონე არ აქვს. ერთი სტანდარტული გადახელისთვის აგზავნეთ 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-ის გაგზავნა
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-ს.
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.