Bài viết
Chia sẻ kiến thức của bạn.
điểm của lỗi với thuộc tính # [error] là gì?
Chúng vẫn là những con số trong chuỗi cả trong các mô-đun ví, explorers/move.
- Sui
Câu trả lời
2Thuộc tính # [error] trong Move (đặc biệt là trong Move 2024) cho phép bạn xác định hằng số lỗi là thông báo có thể đọc được của con người (dưới dạng vector
#[error]
const ENotAuthorized: vector<u8> = b"The user is not authorized to perform this action";
public fun update_value(user: &mut User, value: u64) {
assert!(user.is_authorized, ENotAuthorized);
}
Để biết thêm chi tiết, hãy xem Move Book: https://move-book.com/move-basics/assert-and-abort.html#error-messages
Thuộc tính # [error] trong Move (đặc biệt là trong Move 2024) cho phép bạn xác định hằng số lỗi là thông báo có thể đọc được của con người (dưới dạng vector
Tại sao sử dụng # [error]?
-Thông báo lỗi mô tả: Thay vì chỉ trả về một số (như hủy bỏ 1), bạn có thể trả về một chuỗi thông báo giải thích những gì đã xảy ra. -** Gỡ lỗi tốt hơn:** Các nhà phát triển và người dùng có thể thấy lý do rõ ràng cho sự thất bại, giúp dễ hiểu và khắc phục sự cố hơn. -** Cải thiện UX:** Ví, trình thám hiểm và DApps có thể hiển thị thông báo lỗi có ý nghĩa cho người dùng, không chỉ mã lỗi.
Ví dụ
#[error]
const ENotAuthorized: vector<u8> = b"The user is not authorized to perform this action";
public fun update_value(user: &mut User, value: u64) {
assert!(user.is_authorized, ENotAuthorized);
}
Khi xác nhận thất bại, thông báo lỗi “Người dùng không được ủy quyền để thực hiện hành động này” có thể được hiển thị, thay vì chỉ là một số.
Có phải lỗi vẫn là số trong ví vi/trình thám hiểm không?
-** Kiểu cũ:** Lỗi chỉ là số (ví dụ: hủy bỏ 1) và ví vi/nhà thám hiểm sẽ chỉ hiển thị mã. -**Với # [error] :**Nếu ví vi/explorer hỗ trợ thông báo lỗi Move 2024, nó có thể giải mã và hiển thị chuỗi. Nếu không, nó vẫn có thể hiển thị các byte thô hoặc một số.
Vì vậy, thuộc tính # [error] là làm cho việc xử lý lỗi trở nên biểu cảm hơn và thân thiện với người dùng hơn, nhưng hỗ trợ đầy đủ phụ thuộc vào các công cụ (ví, trình khám phá) cập nhật để hiển thị các thông báo này.
Để biết thêm chi tiết, hãy xem Move Book: Error Messages.
Bạn có muốn xem cách xác định cả lỗi số và chuỗi trong mô-đun Move không? Hay bạn quan tâm đến cách làm cho DApp hoặc ví của bạn hiển thị những tin nhắn này?
Cách giải mã # [lỗi] Tin nhắn
Khi bạn thấy lỗi trong ví, trình thám hiểm hoặc nhật ký, nó có thể trông giống như một số hoặc một chuỗi byte (ví dụ: 0x5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726f726d207468697320616374696f6e).
1.** Nếu bạn thấy một số (ví dụ:1
) :**
- Đây là một mã lỗi kế thừa. Bạn cần tra cứu mã trong nguồn của mô-đun để xem ý nghĩa của nó.
2.** Nếu bạn thấy một chuỗi hex (ví dụ:0x546865...
) :**
- Đây là thông báo lỗi được mã hóa UTF-8 dưới dạng vectơ byte.
#####Để giải mã:
- Xóa
0x
tiền tố. - Chuyển đổi chuỗi hex thành byte.
- Giải thích các byte dưới dạng chuỗi UTF-8.
####Ví dụ
Giả sử bạn thấy lỗi này: 0x5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e
- Loại bỏ
0x
. - Chuyển đổi hex sang ASCII/UTF-8:
54 68 65 20 75 73 65 72 20 69 73 20 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20 74 68 69 73 20 61 63 74 69 6f 6e
- Điều này giải mã thành:
- Người dùng không được phép thực hiện hành động này
####** Cách giải mã trong mã (Rust, JS, Python, v.v.) :**
-** Rỉ sét:**
let hex = “5468652075736572206973206e6f7420617574686f72697a656420746f2046f20706572666f726d207468697320616374696f6e”; let byte = hex: :giải mã (hex) .unwrap (); let message = Chuỗi: :from_utf8 (byte) .unwrap (); println! (“{}”, tin nhắn); -** JavaScript:**
const hex = “5468652075736572206973206e6f7420617574686f72697a656420746f20746f20706572666f726d207468697320616374696f6e”; thông báo const = buffer.from (hex, “hex”) .toString (“utf8"); console.log (tin nhắn); -** Trăn:**
hex_str = “5468652075736572206973206e6f7420617574686f72697a656420746f20746f20706572666f726d207468697320616374696f6e” thông báo = bytes.fromhex (hex_str) .decode (“utf-8") in (tin nhắn)
Tóm tắt:
- Nếu bạn thấy một số, hãy tra nó trong mã.
- Nếu bạn thấy một chuỗi hex, hãy giải mã nó thành UTF-8 để nhận được lỗi đọc của con người.
Nếu bạn muốn có một công cụ trực tuyến nhanh chóng, chỉ cần tìm kiếm “hex to text converter” và dán chuỗi hex của bạn.
Bạn có muốn một tập lệnh hoặc công cụ để giải mã các lỗi này tự động không? Hoặc bạn muốn biết làm thế nào để làm cho lỗi của riêng bạn dễ đọc hơn trong mã Move của bạn?
Bạn có biết câu trả lời không?
Hãy đăng nhập và chia sẻ nó.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Kiếm phần của bạn từ 1000 Sui
Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.

- ... SUIBigSneh+1396
- ... SUISuiLover+1333
- ... SUI0xduckmove+1207
- ... SUIThorfin+1202
- ... SUIOwen+970
- ... SUIharry phan+847
- ... SUItheking+742
- Tại sao BCS yêu cầu thứ tự trường chính xác để khử chuỗi khi cấu trúc Move có các trường được đặt tên?53
- Nhiều lỗi xác minh nguồn” trong các ấn phẩm về mô-đun Sui Move - Giải quyết lỗi tự động43
- Giao dịch Sui thất bại: Đối tượng được dành riêng cho giao dịch khác25
- Làm thế nào để các ràng buộc về khả năng tương tác với các trường động trong các bộ sưu tập không đồng nhất?05