tronpy ব্যবহার করে সম্পূর্ণ Python ইন্টিগ্রেশন। প্রতিটি ধাপ একটি স্ট্যান্ডঅ্যালোন কোড ব্লক যা আপনি আপনার প্রকল্পে কপি করতে পারেন। সম্পূর্ণ এন্ড-টু-এন্ড উদাহরণ নীচে রয়েছে।
পূর্বশর্ত: Python 3.8+, tronpy ইনস্টল করা (pip install tronpy), একটি তহবিলপ্রাপ্ত Tron ওয়ালেট।
প্রক্রিয়া
কোন এপিআই কী নেই। কোন সাইন আপ নেই। আপনার কোড TronEnergy পেমেন্ট অ্যাড্রেসে অন-চেইন TRX পাঠায়, মালিকানা প্রমাণ করে একটি বার্তা স্বাক্ষর করে, তারপর ডেলিগেশন দাবি করে। এনার্জি প্রায় 3 সেকেন্ডে আসে। তারপর আপনার কোড ডেলিগেট করা এনার্জি ব্যবহার করে USDT পাঠায়।
মূল্য নির্ধারণ রৈখিক: প্রতি TRX এ 16,250 এনার্জি। ন্যূনতম অর্ডার 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)
৩. ডেলিগেশন দাবি করুন
# 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
৪. 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।