Lỗi OUT_OF_ENERGY: ý nghĩa và cách khắc phục
Giao dịch của bạn đã hết năng lượng trong khi đang thực thi, nên mạng dừng nó lại và đánh dấu FAILED. Không có gì được chuyển đi, nhưng số TRX đã đốt trong quá trình đó thì mất. Cách khắc phục mất khoảng một phút: đưa 65.000 năng lượng vào địa chỉ và chuyển lại.Bạn đang thấy lỗi ở đâu
Cùng một lỗi nhưng hiển thị khác nhau tùy nơi bạn xem.TronScan
Trang giao dịch hiển thị trạng thái FAILED màu đỏ với kết quả OUT OF ENERGY, và phần chuyển token trống trơn.Ví của bạn
Trust Wallet, TronLink và các ví khác thường báo giao dịch thất bại, hoặc không đủ năng lượng hay TRX để trả phí mạng.Code của bạn
Receipt từ tronweb hoặc HTTP API chứa result: 'OUT_OF_ENERGY' bên trong receipt, còn result của chính giao dịch là FAILED.Receipt giao dịch — json{"ret": [{ "contractRet": "OUT_OF_ENERGY" }],"receipt": {"energy_usage": 0,"energy_fee": 5000000,"energy_usage_total": 50000,"net_usage": 345,"result": "OUT_OF_ENERGY"}}
energy_usage bằng 0 nghĩa là địa chỉ không có năng lượng riêng, nên mọi đơn vị đều phải trả bằng cách đốt TRX. energy_fee tính bằng sun: 5.000.000 sun là 5 TRX bị đốt cho một lệnh chuyển không hề xảy ra, và nó dừng ở đó vì đó là giới hạn phí (fee limit) — energy_usage_total bằng 50.000, vẫn thiếu so với 65.000 mà lệnh chuyển cần.Ba nguyên nhân, xếp theo mức độ phổ biến
Địa chỉ hoàn toàn không có năng lượng
Năng lượng không có hạn mức miễn phí hàng ngày — một địa chỉ chỉ có năng lượng từ TRX đã stake hoặc từ ủy quyền. Không có năng lượng, mỗi lệnh chuyển USDT được trả bằng cách đốt TRX, và nếu số dư TRX hoặc giới hạn phí không đủ cho toàn bộ 65.000 năng lượng, giao dịch sẽ chết giữa chừng.Người nhận hóa ra là địa chỉ mới
Chuyển đến địa chỉ chưa có USDT tốn khoảng 131.000 năng lượng thay vì 65.000 — hợp đồng phải tạo một bản ghi số dư mới. Phần lớn địa chỉ nạp tiền của sàn giao dịch hoạt động như vậy, đó là lý do lệnh chuyển lên sàn thất bại thường xuyên hơn.Giới hạn phí đặt quá thấp
Giới hạn phí (fee limit) quy định mức TRX tối đa một giao dịch được phép đốt. Ví thường đặt mặc định một mức từng dư dả cách đây một năm nhưng nay không còn đủ, và giao dịch dừng ngay khi chạm mức trần đó.Việc cần làm ngay
Xác nhận là do năng lượng
Tra địa chỉ bằng công cụ kiểm tra: nó cho thấy năng lượng hiện có so với lượng một lệnh chuyển cần.Lấy năng lượng
Thuê 65.000 năng lượng trong một giờ — 3,03 TRX — hoặc 131.000 nếu người nhận chưa có USDT.Chờ ủy quyền
Năng lượng đến trong 3–10 giây và hiển thị ở tab Tài nguyên (Resources) của địa chỉ trên TronScan.Chuyển lại
Gửi lại đúng lệnh chuyển đó. Khi đã có năng lượng, mạng sẽ dùng phần được ủy quyền thay vì đốt TRX.Phát hiện trước khi mất tiền
Ước tính trước khi gửi — javascript// 1. What the transfer will cost, in Energyconst {energy_used: needed} = await tronWeb.transactionBuilder.estimateEnergy(usdtContract,'transfer(address,uint256)',{},[{type: 'address', value: recipient}, {type: 'uint256', value: amount}],sender,);// 2. What the address has right nowconst res = await tronWeb.trx.getAccountResources(sender);const available = (res.EnergyLimit ?? 0) - (res.EnergyUsed ?? 0);// 3. Top up before signing, never after OUT_OF_ENERGYif (available < needed) {throw new Error(`Need ${needed - available} more Energy — rent it first`);}
Câu hỏi thường gặp
OUT_OF_ENERGY nghĩa là gì?
Nghĩa là giao dịch đã bắt đầu thực thi, dùng hết toàn bộ năng lượng của địa chỉ và toàn bộ số TRX mà giới hạn phí cho phép đốt, nhưng vẫn chưa hoàn thành. Mạng đánh dấu nó là FAILED. Lệnh chuyển không xảy ra, nhưng năng lượng và TRX đã đốt vẫn bị tiêu hao.
Tôi có lấy lại được TRX đã đốt không?
Không. TRON đốt số TRX đó để trả cho phần tính toán mạng đã thực hiện, và giao dịch thất bại cũng không ngoại lệ. Không ai — không phải ví, không phải dịch vụ, không phải các validator — có thể hoàn lại. Cách duy nhất để tránh là có sẵn năng lượng trước khi chuyển.
USDT của tôi đã được chuyển đi chưa?
Chưa. Giao dịch thất bại không làm thay đổi số dư nào: USDT của bạn chưa hề rời đi, và người nhận không nhận được gì. Hãy kiểm tra mã hash trên TronScan — lệnh chuyển thất bại hiển thị trạng thái FAILED màu đỏ và không có biến động token.
Vì sao cùng lệnh chuyển đó hôm qua vẫn thành công?
Năng lượng từ TRX đã stake hồi lại trong 24 giờ, nên một địa chỉ có thể đủ cho một lệnh chuyển mỗi ngày nhưng không đủ cho lệnh thứ hai. Chi phí cũng phụ thuộc vào người nhận: 65.000 năng lượng khi họ đã có USDT, khoảng 131.000 khi chưa có.
Tăng giới hạn phí thì hết lỗi — có nên làm vậy không?
Cách đó ngăn được lỗi, nhưng không làm lệnh chuyển rẻ đi: giới hạn phí cao hơn chỉ cho phép mạng đốt nhiều TRX hơn, khoảng 6,85 TRX cho một lệnh chuyển thông thường. Thuê năng lượng chỉ tốn 3,03 TRX cho cùng kết quả.
Làm sao để không bị lại?
Kiểm tra địa chỉ trước khi chuyển và thuê năng lượng mỗi khi thiếu. Với ví chuyển tiền cả ngày, tính năng tự động nạp sẽ mua năng lượng ngay khi số dư giảm dưới ngưỡng, nên không lệnh chuyển nào bắt đầu mà thiếu năng lượng.