如何用Python通过TronAPI合约发送TRC20代币?代码无报错但失效
问题分析与解决方案
你的代码仅完成了TRC20转账交易的构建步骤,但缺少关键的交易签名和广播上链操作,因此代币没有实际完成转账。TRON网络要求所有交易必须经过私钥签名,再广播到区块链节点后才会被执行确认。
具体修正点
- TRC20标准的
transfer(address, uint256)方法中,第二个参数类型应为uint256而非int256,虽然正数不影响,但需严格匹配合约方法定义 - 添加交易签名与广播逻辑
修正后的完整代码
from tronapi import Tron from tronapi import HttpProvider full_node = HttpProvider('https://nile.trongrid.io') solidity_node = HttpProvider('https://nile.trongrid.io') event_server = HttpProvider('https://nile.trongrid.io') tron = Tron(full_node=full_node, solidity_node=solidity_node, event_server=event_server) tron.private_key = '59d4b72df50290d7f78e2c16fc27758d6e235f3959f2212f2497fc55da33e888' tron.default_address = 'TRNDt7bjFoTq7p52iw5u2BLNhsff1ux7Fc' Towallet = 'TFgmQmr31HxkiZ67KBjwZPseT1G5t4tWdT' Amount = 11 Tcontract='TXLAQ63Xg1NAzckPwKHvzw7CSEmLMEqcdj' # 1. 构建TRC20转账交易 send = tron.transaction_builder.trigger_smart_contract( contract_address=tron.address.to_hex(Tcontract), function_selector='transfer(address, uint256)', # 修正方法参数定义 fee_limit=30000000, call_value=0, parameters=[ {'type': 'address', 'value': tron.address.to_hex(Towallet)}, {'type': 'uint256', 'value': int(float(Amount)*pow(10,6))} # 修正参数类型为uint256 ] ) # 2. 用私钥签名交易 signed_tx = tron.trx.sign(send) # 3. 广播签名后的交易到区块链网络 broadcast_result = tron.trx.broadcast(signed_tx) # 打印广播结果 print("广播结果:", broadcast_result)
验证方式
执行代码后,若广播结果中result.result为True,说明交易已成功广播。你可以拿着返回的txID,在Nile测试网区块浏览器中查询交易的最终确认状态。
内容的提问来源于stack exchange,提问作者Mr2C2R
相关产品推荐
相关产品推荐

