在 TRC20 協議下,進行 USDT(或其他 TRC20 代幣)的轉帳時,需要消耗 Energy 和 Bandwidth
所以我們在交易的時候,需要智能合約的複雜程度,不同 TRC20 合約的執行邏輯可能消耗不同量的 Energy
尤其是很熱門的合約像是 USDT
,基本上應該就這就是比較常用的...
看了一下官方文件,可以透過 trongird 的 triggerconstantcontract 去模擬執行一筆交易,並且去執行 USDT (TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t) 合約轉帳
然後就可以在欄位抓到其中的 energy_used 就可以知道他要消耗多少 Energy
C# Code:
public static void GetContractNeedEnergy(string contractAddress = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t")
{
// TronGrid API URL
string apiUrl = "https://api.trongrid.io/wallet/triggerconstantcontract";
string ownerAddress = "TS64QAQEL5GfbB61C86ZSJjfkVi6kPFmEA"; // 隨便一個地址
string functionSelector = "transfer(address,uint256)";
string receiverHex = ""; // 接收地址轉為 Hex
string amountHex = "000000000000000000000000000000000000000000000000000000000000000a"; // 金額 10 (Hex)
string parameter = receiverHex + amountHex;
//Nuget : RestSharp
//https://www.nuget.org/packages/restsharp/
var client = new RestSharp.RestClient(apiUrl);
var request = new RestRequest("", Method.Post);
request.AddHeader("Content-Type", "application/json");
//按照文件組裝 JSON
string body = $@"{{
""owner_address"": ""{ownerAddress}"",
""contract_address"": ""{contractAddress}"",
""function_selector"": ""{functionSelector}"",
""parameter"": ""{parameter}"",
""visible"": true
}}";
request.AddJsonBody(body);
// 發送請求
var response = client.Execute(request);
if (response.IsSuccessful)
{
var responseData = JObject.Parse(response.Content);
var energyUsed = responseData["energy_used"];
Console.WriteLine($"模擬交易需要的 Energy: {energyUsed}");
}
else
{
Console.WriteLine("Error:" + response.ErrorMessage);
}
}
回應 JSON
{
"result": {
"result": true
},
"energy_used": 63999,
"constant_result": [
"0000000000000000000000000000000000000000000000000000000000000000"
],
"logs": [
{
"address": "G9AHnMvAgqKJ2eWErupYfdzu6hgWVUZqu",
"data": "0000000000000000000000000000000000000000000000000000000000000000",
"topics": [
"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"000000000000000000000000b0cdbe74e778ad8195c463b2f153a236b088ac3b",
"000000000000000000000000000000000000000000000000000000000000000a"
]
}
],
"energy_penalty": 49415,
"transaction": {
"ret": [
{}
],
"visible": true,
"txID": "19c7ebcd790682b95e87c9af9fed4d36a9ee71f178ab96e5e398438e4547e053",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"data": "a9059cbb000000000000000000000000000000000000000000000000000000000000000a",
"owner_address": "TS64QAQEL5GfbB61C86ZSJjfkVi6kPFmEA",
"contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"
},
"type_url": "type.googleapis.com/protocol.TriggerSmartContract"
},
"type": "TriggerSmartContract"
}
],
"ref_block_bytes": "8347",
"ref_block_hash": "e7321abd09c4f56e",
"expiration": 1736404113000,
"timestamp": 1736404055306
},
"raw_data_hex": "0a0283472208e7321abd09c4f56e40e8ac80cec4325a8e01081f1289010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412540a1541b0cdbe74e778ad8195c463b2f153a236b088ac3b121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2224a9059cbb000000000000000000000000000000000000000000000000000000000000000a708aeafccdc432"
}
}
執行結果:

reference:
https://developers.tron.network/reference/triggerconstantcontract