Đường đến Neo3: Xử lý ngoại lệ trong hợp đồng thông minh Neo

TIN TỨC NEO
2020-05-08



Trong bài tiếp theo trong loạt bài Đường đến Neo3 này, chúng ta sẽ xem xét cơ chế xử lý ngoại lệ mới đang được phát triển cho máy ảo (VM) Neo3. Việc bổ sung các khả năng xử lý ngoại lệ cho các hợp đồng thông minh Neo nhằm giúp chúng trở nên mạnh mẽ hơn, hoạt động giống như các ứng dụng truyền thống có thể phục hồi từ các lỗi không mong muốn.


Đọc loạt bài Đường đến Neo3 tại đây.


Máy ảo Neo

Tất cả các hợp đồng được triển khai cho chuỗi khối Neo được thực thi trong NeoVM bởi các node trên mạng. Khi một hợp đồng được gọi, các đầu vào liên quan đến giao dịch gọi được chạy thông qua mã byte hợp đồng bên trong VM. Hướng dẫn tương tác về cách NeoVM hoạt động có thể được tìm thấy ở đây.


Mỗi node trên Neo sẽ thực thi cùng một mã với cùng một VM, do đó, kết quả sẽ mang tính quyết định cho dù kết quả của lệnh gọi thành công hay thất bại. Điều này là tốt bởi vì điều đó có nghĩa là nếu giao dịch có đầu vào không hợp lệ (như cố gắng gửi nhiều tài sản hơn địa chỉ sở hữu), nó sẽ không thể được thực hiện tiếp và việc thực hiện hợp đồng sẽ dừng lại.


Trong một số trường hợp, một hợp đồng có thể được mong muốn sẽ xử lý các tình huống bất ngờ một cách duyên dáng và tiếp tục hoạt động của nó. Để thực hiện điều này, các nhà phát triển cần trang bị cho các hợp đồng khả năng dự đoán các sự kiện đó và phản ứng với chúng theo logic của từng trường hợp cụ thể.


Điều này đạt được bằng cách thực hiện các cơ chế xử lý ngoại lệ, cho phép các nhà phát triển viết các hướng dẫn đặc biệt được sử dụng trong trường hợp xảy ra lỗi không mong muốn. Chúng chỉ có thể đăng nhập và thông báo cho nhà phát triển về vấn đề cụ thể gặp phải để giúp gỡ lỗi hoặc họ có thể cung cấp thêm mã để phân tích và xử lý yêu cầu.


Đề xuất bắt-thử ban đầu

Cách tiếp cận phổ biến để xử lý các ngoại lệ là một cơ chế bắt thử, cho phép chương trình kiểm tra các ngoại lệ trước thời hạn thay vì ngẫu nhiên gặp phải một lỗi và gặp sự cố. Chương trình sẽ chạy mã được kiểm tra trong phần thử, sau đó phát hiện và xử lý bất kỳ vấn đề nào trong phần bắt.


Mong muốn bổ sung khả năng xử lý ngoại lệ cho các hợp đồng Neo đã được Erik Zhang, đồng sáng lập và nhà phát triển cốt lõi của Neo thực hiện lần đầu tiên vào tháng 7 năm 2018. Điều này dẫn đến một đề xuất ban đầu về cơ chế thử bắt bởi Igor Coelho của NeoResearch, đề xuất một opcode TRY mới sẽ ghi chú vị trí để VM nhảy tới nếu có ngoại lệ xảy ra.


Mã được theo dõi sau đó có thể được thực thi, nhưng thay vì tạo lỗi trên một lỗi, VM sẽ nhảy đến vị trí bắt trước khi tiếp tục. Điều này có nghĩa là mã thường kích hoạt VM để vào trạng thái FAULT thay vào đó có thể được tiếp nhận và xử lý thêm.


Một ví dụ đơn giản về hành vi này đã được Coelho cung cấp, thể hiện sự phân chia bằng lỗi 0. Trong Neo2 VM hiện tại, các hướng dẫn này sẽ kích hoạt trạng thái FAULT và kết thúc việc thực hiện hợp đồng.


Với opcode TRY được đề xuất để nhảy vị trí, thay vào đó, sự thất bại có thể được dự đoán và xử lý. Trước khi thực thi mã cần theo dõi, opcode TRY có thể cung cấp cho VM thông tin về nơi cần hướng dẫn thêm trong trường hợp xảy ra lỗi. Trong thiết kế đề xuất, nó có dạng opcode CATCH có thể cung cấp lý do cho ngoại lệ.


Thảo luận thêm giữa các nhà phát triển Neo đã xem xét tính hữu ích của việc triển khai opcode cuối cùng, trong đó sẽ chứa một phần mã được chạy bất kể ngoại lệ có bị bắt hay không và liệu có thể cho phép nhiều phần bắt được hay không.


Một bộ opcodes hoàn chỉnh để thực hiện thử-bắt-cuối cùng cho các hợp đồng đã được cung cấp bởi Zhang. Cần lưu ý rằng các opcode ném có điều kiện THROWIF và THROWIFNOT được lưu ý ở đây sau đó đã được thay thế bằng các hướng dẫn ABORT và ASSERT, nhằm cải thiện bảo mật hợp đồng và ví.


Trong bài viết tiếp theo, chúng ta sẽ kiểm tra quy trình xử lý ngoại lệ Neo3 chi tiết hơn.


TINTUCNEO – Tham gia các cộng đồng Tin tức NEO tại:





0 bình luận. Để lại câu hỏi & nhận trả lời nhanh qua email.




Bài cùng chủ đề
Tổng quan về AMA của Novem trên Reddit Neo và diễn đàn Cộng đồng Nash
Vào ngày 3/7, Nash đã niêm yết token NNN backed bởi vàng của Novem để giao dịch với USDC. Để quảng bá việc niêm yết, Nash đã tổ chức AMA trên diễn đàn cộng đồng của họ với đại diện từ nhóm Novem. Ngoài ra, vào ngày 6/7, Novem đã tham gia AMA trên sub-Reddit Neo. Novem đã trả lời các câu hỏi liên quan đến lợi ích của việc nắm giữ tài sản được hỗ trợ bằng vàng, việc tuân thủ quy định, xác minh quyền sở hữu vàng, công ty của họ tại Liechtenstein, đổi token NNN lấy vàng vật chất, v.v.

2020-07-08

Bản tin tuần TINTUCNEO: 29/06 - 05/07
Nhà đồng sáng lập Neo, Da Hongfei, đã xuất bản một bản op-ed trên Coin Telegraph, trong đó nêu rõ cách ông tin rằng USDT stablecoin đã tác động đến địa chính trị và sự phát triển của các loại tiền mã hóa có chủ quyền trong tương lai.

2020-07-07

Paul diMarzio của IWA: “Sau 36 năm trong ngành, tôi lại cảm thấy mình như một đứa trẻ."
Sau gần 33 năm làm việc tại IBM, Paul diMarzio được tiếp thêm năng lượng với vai trò là giám đốc marketing cho Liên minh InterWork (IWA) và công việc mà anh ấy làm để phát triển hệ sinh thái. “Sau 36 năm trong ngành, tôi lại cảm thấy như một đứa trẻ. Điều này rất thú vị, đó là một nơi tuyệt vời,” anh ấy nói. NNT đã nói chuyện với diMarzio cho tập 34 của podcast Neo News Today.

2020-07-07

Ví Beta O3 đã sẵn sàng tải xuống cho Windows, Mac, Linux, iOS và Android
O3 Labs đã công bố bản khởi chạy lại beta của ứng dụng ví máy tính để bàn dành cho Windows, Mac và Linux và các ứng dụng ví di động cho iOS và Android. Cùng với thông báo, O3 Labs đã phát hành một hướng dẫn từng bước để tải xuống ví của mình trên các hệ điều hành và hướng dẫn kết nối Ví O3 với Ledger Nano S, Switcheo và Staketology.

2020-07-06

Tham gia Cộng đồng NEO Việt Nam - TINTUCNEO
NEO-based projects? Contact us at [email protected] for collaborations in the Vietnam market