[C#] 如何計算 TRC20 合約交易的 Energy 消耗

2025-01-09


在 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



當麻許的碎念筆記 2014 | Donma Hsu Design.