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

  • 12422
  • 0
  • 2025-11-18

在 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

--

本文原文首發於我的個人部落格:如何計算 TRC20 合約交易的 Energy 消耗

---

The bug existed in all possible states.
Until I ran the code.