FAILED — OUT OF ENERGY

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.
Lỗi cụ thể

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.
Vì sao xảy ra

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 đó.
Cách khắc phục

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.
Cho lập trình viên

Phát hiện trước khi mất tiền

Lệnh gọi hợp đồng có thể được mô phỏng trước khi ký. Kết quả ước tính trả về bằng đơn vị năng lượng, nên so sánh với năng lượng khả dụng của tài khoản sẽ cho biết có cần nạp thêm trước không — và bạn không bao giờ phải trả tiền cho một giao dịch thất bại chỉ để biết điều đó.
Ước tính trước khi gửi — javascript
// 1. What the transfer will cost, in Energy
const {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 now
const res = await tronWeb.trx.getAccountResources(sender);
const available = (res.EnergyLimit ?? 0) - (res.EnergyUsed ?? 0);
​
// 3. Top up before signing, never after OUT_OF_ENERGY
if (available < needed) {
throw new Error(`Need ${needed - available} more Energy — rent it first`);
}
API công khai cho phép mua năng lượng từ code, để bước 3 tự nạp thêm thay vì báo lỗi. Tài liệu tại getgas.io/api/v1/docs; câu hỏi xin gửi đến support@getgas.io.
Hỏi đáp

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.