Chuyển đến nội dung
BTC—— ETH—— BNB—— SOL—— XRP—— ADA—— DOGE—— AVAX—— DOT—— LINK—— TRX—— LTC—— BCH—— XLM—— UNI—— AAVE—— SUI—— NEAR—— ATOM—— HBAR——
Hướng dẫn

Giao dịch Ethereum thất bại: Cách đọc lỗi và kiểm tra phí gas

Giao dịch Ethereum thất bại có thể vẫn bị trừ phí gas, nhưng một thông báo lỗi trên ứng dụng chưa đủ …

Giao dịch Ethereum thất bại với biểu tượng lỗi trên nền đen vàng EMA Crypto
Ảnh minh họa cho bài viết.

Giao dịch Ethereum thất bại có thể vẫn bị trừ phí gas, nhưng một thông báo lỗi trên ứng dụng chưa đủ để kết luận tiền đã được gửi hay chưa. Cách xử lý phụ thuộc vào việc giao dịch đã vào block, còn Pending hay bị từ chối trước khi mạng tiếp nhận. Bước đầu tiên là kiểm tra TxID trên đúng mạng, sau đó mới quyết định có cần gửi lại.

Đọc trạng thái trước, sửa lỗi sau. Nếu giao dịch vẫn còn chờ, gửi một giao dịch mới có thể khiến cả hai cùng được thực hiện. Nếu đã Fail trong block, cần tìm nguyên nhân; tăng phí không tự sửa được điều kiện của hợp đồng.

Giao dịch Ethereum thất bại khác Pending và lỗi trên ví thế nào?

“Transaction failed” trên một giao diện có thể mô tả nhiều tình huống. Hãy lấy mã giao dịch từ lịch sử ví, xác nhận mạng đang dùng và mở explorer tương ứng. Một TxID trên mạng Layer 2 không được kiểm tra bằng kết quả tìm trên Ethereum mainnet.

Trạng tháiĐiều có thể kết luậnViệc nên kiểm tra tiếp
Bị từ chối trước khi gửiChưa có bằng chứng giao dịch đã được đưa vào mạngLịch sử ví, TxID, số dư và lỗi mô phỏng
PendingĐang chờ, chưa có kết quả thực thi trong blockNonce, phí, giao dịch trước đang chờ
Fail / Reverted trong blockThực thi cấp giao dịch thất bại, đã tiêu tốn gasLý do lỗi và phí thực trả
Success trong blockThực thi cấp giao dịch thành côngToken Transfers, kết quả ứng dụng và các bước riêng
Dropped / ReplacedGiao dịch cũ có thể đã bị loại hoặc thay thếTxID thay thế cùng nonce và trạng thái cuối của nó

Receipt là biên nhận sau khi giao dịch được đưa vào block. Theo EIP-658, trường status phân biệt thành công và thất bại ở cấp thực thi giao dịch. Explorer thường chuyển thông tin này thành nhãn dễ đọc. Trạng thái của một giao dịch không thay thế việc kiểm tra cả quy trình gồm approve, swap và bridge nếu chúng được gửi thành các giao dịch riêng.

Chưa tìm thấy TxID cũng không tự chứng minh giao dịch chưa từng được phát đi. Có thể bạn đang tìm sai mạng, dữ liệu chưa cập nhật hoặc giao dịch đã bị loại. Trước khi gửi lại, đối chiếu lịch sử ví và các giao dịch cùng nonce để tránh tạo thêm một lệnh có thể thực thi.

Mạng Ethereum thực thi giao dịch và ghi nhận trạng thái trên blockchain
Ảnh minh họa Ethereum có sẵn trên EMA Crypto. Kết quả thực thi cần được kiểm tra bằng dữ liệu giao dịch trên đúng mạng.

Những nguyên nhân thường làm giao dịch Ethereum thất bại

Hết gas trong lúc thực thi

Gas limit là giới hạn lượng gas mà giao dịch được phép dùng. Nếu quá trình thực thi cần nhiều hơn giới hạn đó, giao dịch có thể gặp lỗi out of gas. Khác với tăng mức phí cho mỗi đơn vị gas, tăng gas limit chỉ thay đổi lượng công việc tối đa được phép thực hiện.

Không nên tự đặt giới hạn rất cao để xử lý mọi lỗi. Cần xác nhận đúng hợp đồng, loại thao tác và ước lượng từ ví hoặc ứng dụng đáng tin cậy. Nếu lỗi đến từ điều kiện hợp đồng, cung cấp thêm gas vẫn không làm điều kiện ấy hợp lệ.

Giá thay đổi, trượt giá hoặc lệnh quá hạn

Khi swap, hợp đồng có thể yêu cầu nhận tối thiểu một lượng token hoặc thực hiện trước một hạn nhất định. Giá di chuyển trong lúc chờ có thể làm điều kiện không còn đạt và khiến giao dịch Ethereum thất bại. Mức trượt giá, thanh khoản và tuyến swap đều cần xem lại.

Tài liệu Uniswap về giao dịch thất bại nêu nhiều nhóm nguyên nhân, thay vì một cách sửa áp dụng cho mọi lệnh. Tăng slippage quá rộng có thể chấp nhận mức giá xấu hơn; đọc thêm slippage và price impact trước khi thay đổi.

Không đủ số dư, allowance hoặc token có hạn chế

Bạn cần đủ token để chuyển và đủ ETH trả phí trên Ethereum mainnet, trừ trường hợp cơ chế tài trợ phí cụ thể đang được hỗ trợ. Việc thiếu tiền có thể khiến ví từ chối ngay trước khi gửi. Với thao tác từ hợp đồng, điều kiện số dư hoặc quyền sử dụng token cũng có thể thất bại trong lúc thực thi.

Approve phải cấp cho đúng hợp đồng và đủ hạn mức. Một số token có thuế chuyển, giới hạn hoặc logic riêng khiến tuyến swap không hỗ trợ. Không phải token nào hiện trong ví cũng có thể giao dịch như một token ERC-20 thông thường.

Điều kiện ứng dụng hoặc lỗi kết nối

Hợp đồng có thể đang tạm dừng, chức năng yêu cầu quyền riêng hoặc dữ liệu đầu vào không còn hợp lệ. Trong khi đó, lỗi RPC hoặc ví mất kết nối có thể chỉ làm giao diện không lấy được kết quả. Vì vậy, một popup đỏ cần được đối chiếu với dữ liệu on-chain trước khi gọi đó là giao dịch Ethereum thất bại.

Hợp đồng thông minh, nơi điều kiện thực thi có thể khiến giao dịch Ethereum thất bại
Minh họa tương tác với hợp đồng. Một điều kiện trong logic có thể khiến lệnh bị hoàn tác, dù đã tiêu tốn tài nguyên xử lý.

Vì sao giao dịch Ethereum thất bại vẫn mất phí gas?

Mạng đã dùng tài nguyên để kiểm tra và thực thi lệnh, nên giao dịch vào block rồi thất bại vẫn phải trả gas đã dùng. Với giao dịch bị revert ở cấp cao nhất, các thay đổi trạng thái do phần thực thi đó tạo ra bị hoàn tác. Tuy nhiên, phí gas vẫn được tính và nonce của giao dịch đã đưa vào block vẫn được sử dụng.

Ví dụ, một lệnh chuyển ETH thông thường bị thất bại không có nghĩa toàn bộ số ETH định chuyển đã sang bên nhận. Bạn có thể thấy số dư giảm đúng phần phí. Với token, hãy kiểm tra cả lịch sử chuyển token và số dư đúng hợp đồng để hiểu phần nào đã xảy ra.

Cần tách các bước độc lập: nếu approve thành công ở giao dịch thứ nhất rồi swap thất bại ở giao dịch thứ hai, quyền approve trước đó không tự bị hủy. Tương tự, trong một quy trình nhiều giao dịch, kết quả của bước sau không hoàn tác giao dịch đã xác nhận trước đó.

Cơ chế REVERT cho phép dừng thực thi và hoàn tác mà không nhất thiết tiêu hết gas còn lại. Vì thế, “Fail” không đồng nghĩa mọi trường hợp đều dùng hết gas limit. Ngược lại, hết gas trong lúc thực thi thường tiêu hết lượng gas đã cấp cho giao dịch.

Một nhãn Success cũng cần đọc đúng phạm vi. Hợp đồng có thể xử lý một lỗi bên trong mà toàn bộ giao dịch vẫn thành công; một số ứng dụng lại cần thêm bước xử lý khác. Muốn xác nhận đã nhận đúng tài sản, phải xem kết quả chuyển và trạng thái ứng dụng, không chỉ nhãn trên đầu trang.

Phí của giao dịch Ethereum thất bại được tính thế nào?

Với phí thực thi của một giao dịch Ethereum mainnet thông thường, cách đọc cơ bản là gasUsed × effectiveGasPrice. GasUsed là lượng đã dùng; effectiveGasPrice là giá thực trả cho mỗi đơn vị gas. Nếu giá được hiển thị bằng gwei, đổi về ETH theo tỷ lệ 1 gwei = 0,000000001 ETH.

Ví dụ giả định

Gas limit: 160.000
Gas used: 90.000
Effective gas price: 21 gwei

Phí thực thi = 90.000 × 21 × 10−9 = 0,00189 ETH

Các số trên chỉ minh họa cách tính, không phải mức gas hiện tại hay khuyến nghị đặt phí.

Lấy 160.000 nhân 21 gwei trong ví dụ sẽ ra mức tương ứng với toàn bộ giới hạn, không phải phí đã dùng của giao dịch này. Ngoài ra, max fee per gas là trần người gửi đặt, không tự đồng nhất với effective gas price cuối cùng.

Trên explorer, nên đọc mục Transaction Fee cùng Gas Used và Effective Gas Price. Nếu xem dữ liệu kỹ thuật, không nhầm cumulativeGasUsed của nhiều giao dịch trong block với gasUsed của riêng giao dịch. Tài liệu Ethereum JSON-RPC giải thích các trường của receipt.

Ví dụ này không bao gồm giao dịch blob hoặc cấu trúc phí riêng của Layer 2. Nếu dùng mạng khác, xem đầy đủ các thành phần phí mà explorer của mạng đó công bố. Tài liệu gas của Ethereum giúp phân biệt lượng gas, giá gas và giới hạn phí.

5 bước kiểm tra khi giao dịch Ethereum thất bại

  1. Xác định đúng mạng và TxID. Mở từ lịch sử ví, kiểm tra explorer và địa chỉ From là ví của bạn. Không tìm một mã trên nhiều mạng rồi lấy kết quả đầu tiên.
  2. Đọc trạng thái cuối. Có block và Fail, vẫn Pending hay đã Replaced? Nếu thay thế, mở TxID mới. Với giao dịch chưa có receipt, chưa thể đọc kết quả thực thi cuối cùng.
  3. Đọc lý do và thao tác thực tế. Tìm nhãn lỗi, địa chỉ To, phương thức tương tác và phần dữ liệu được explorer giải mã. Thông báo chung như execution reverted chưa chỉ ra nguyên nhân cụ thể.
  4. Đối chiếu phí và tài sản. Xem ETH trả gas, Token Transfers và số dư đúng token. Tách giá trị định chuyển khỏi Transaction Fee; kiểm tra cả bước approve trước đó nếu có.
  5. Chỉ thay đổi yếu tố liên quan. Cập nhật báo giá khi lệnh quá hạn, kiểm tra allowance khi thiếu quyền, hoặc xác nhận gas limit khi thật sự out of gas. Sau đó mô phỏng lại bằng ứng dụng chính thức.

Nếu chưa rõ vì sao giao dịch Ethereum thất bại, lưu TxID và thông báo nguyên văn để hỏi kênh hỗ trợ chính thức. Không cần đưa seed phrase hoặc private key để người khác đọc một giao dịch công khai. Cũng không cần kết nối ví với trang “sửa lỗi blockchain” do tài khoản lạ gửi.

Bạn có thể tìm hiểu thêm về Ethereum Virtual Machine để hiểu vì sao cùng một mạng vẫn có nhiều lỗi do từng hợp đồng tạo ra. Explorer cung cấp bằng chứng; lý do nghiệp vụ đôi khi vẫn cần tài liệu của ứng dụng.

Nên sửa gì theo từng nhóm lỗi?

  • Pending lâu: kiểm tra giao dịch nonce trước và tùy chọn tăng tốc hoặc hủy do ví cung cấp. Lệnh thay thế cần được mạng chấp nhận và có thể mất phí khi vào block; không bảo đảm thắng giao dịch cũ.
  • Out of gas: kiểm tra ước lượng cho đúng thao tác. Chỉ tăng giới hạn sau khi hiểu yêu cầu và tin cậy hợp đồng; tăng giá gas không bổ sung lượng gas.
  • Slippage hoặc deadline: lấy báo giá mới, xem thanh khoản và mức chấp nhận giá. Không tự mở slippage rất rộng chỉ để hết thông báo lỗi.
  • Allowance hoặc số dư: đối chiếu đúng token, đúng mạng, đúng spender và khoản ETH trả phí. Không cấp quyền cho một địa chỉ mới do người hỗ trợ không xác minh cung cấp.
  • Lỗi hợp đồng hoặc token bị hạn chế: xem thông báo chính thức. Gửi lại nhiều lần có thể tiếp tục trả phí mà không thay đổi kết quả.

Giao dịch đã xác nhận không thể bị hủy bằng nút Cancel trong ví. Tùy chọn hủy thường chỉ áp dụng cho giao dịch còn chờ, bằng một cơ chế thay thế; xem hướng dẫn của ví bạn dùng. Sau mỗi lần xử lý, kiểm tra kết quả cuối của cả giao dịch gốc lẫn giao dịch thay thế trước khi tiếp tục.

Câu hỏi thường gặp khi giao dịch Ethereum thất bại

Fail có được hoàn phí gas không?

Giao dịch Ethereum thất bại đã vào block vẫn phải trả phần gas đã dùng. Phần giới hạn chưa sử dụng không phải phí thực trả. Nếu ví từ chối lệnh trước khi được đưa vào block, tình huống đó khác với Fail on-chain.

Tăng gas fee có sửa được lỗi execution reverted không?

Không tự động. Phí cao hơn có thể liên quan đến khả năng được đưa vào block, còn revert thường đến từ điều kiện thực thi. Cần xem lỗi cụ thể trước khi thay đổi số dư, quyền token, báo giá hoặc dữ liệu gửi.

Giao dịch thất bại nhưng approve còn hiệu lực có bình thường không?

Có, nếu approve là một giao dịch riêng đã thành công. Swap thất bại sau đó không tự thu hồi quyền đã cấp. Kiểm tra lại allowance và quản lý quyền qua công cụ tin cậy khi không còn nhu cầu sử dụng.

Explorer báo Success nhưng ứng dụng báo lỗi thì tin bên nào?

Success phản ánh thực thi cấp giao dịch đã thành công; giao diện có thể chưa cập nhật hoặc quy trình còn bước khác. Hãy đối chiếu token chuyển, địa chỉ nhận và trạng thái của ứng dụng. Không gửi lại chỉ để làm popup biến mất.

Khi gặp giao dịch Ethereum thất bại, hãy giữ TxID và đi theo thứ tự: trạng thái, nguyên nhân, tài sản, phí rồi mới cách sửa. Một lần đọc đúng receipt thường hữu ích hơn nhiều lần bấm lại cùng một lệnh.

Chia sẻ bài viết

Cảnh báo rủi ro Nội dung chỉ nhằm mục đích cung cấp thông tin, không phải lời khuyên đầu tư.

crypto ema
Tác giả

crypto ema