BTC
$96,000
5.73%
ETH
$3,521.91
3.97%
HTX
$0.{5}2273
5.23%
SOL
$198.17
3.05%
BNB
$710
3.05%
lang
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
Trang chủ
AI AI
Tin nhanh
Bài viết
Sự kiện
BlockBeats Pro
Thêm
Thông tin tài chính
Chuyên đề
Hệ sinh thái chuỗi khối
Mục nhập
Podcast
Data
OPRR

Giới thiệu đơn giản về Sự vững chắc|Bài 30: Thử bắt

Đọc bài viết này mất 9 phút
Bài viết này giới thiệu cách sử dụng try-catch để xử lý các trường hợp ngoại lệ trong quá trình vận hành hợp đồng thông minh.
Tiêu đề gốc: " Giới thiệu tối giản về Solidity: 30. Hãy thử Catch 》 
Tác giả gốc: 0xAA 


Gần đây tôi đang học lại Solidity, củng cố chi tiết và viết "Giới thiệu về Solidity Minimalist" cho người mới (chuyên gia lập trình có thể tìm bài hướng dẫn khác), cập nhật 1 lần/tuần -3 buổi nói chuyện.


Tất cả các mã và hướng dẫn đều là nguồn mở trên github: github.com/AmazingAng/WTFSolidity


try -catch là một cách tiêu chuẩn để xử lý các ngoại lệ trong hầu hết các ngôn ngữ lập trình hiện đại và nó cũng được thêm vào trong Solidity0.6. Trong bài giảng này, chúng tôi sẽ giới thiệu cách sử dụng try-catch để xử lý các trường hợp ngoại lệ trong hợp đồng thông minh.


try-catch


Về cơ bản, try-catch chỉ có thể được sử dụng cho Chức năng bên ngoài hoặc lệnh gọi hàm tạo (được coi là hàm bên ngoài) khi tạo hợp đồng. Cú pháp cơ bản như sau:



externalContract.f() là lệnh gọi hàm của một hợp đồng bên ngoài. Mô-đun thử chạy khi lệnh gọi thành công và mô-đun bắt chạy khi lệnh gọi không thành công.


Nếu hàm được gọi có giá trị trả về thì trả về (returnType val) phải được khai báo sau lần thử và biến trả về có thể được sử dụng trong mô-đun thử; nếu Tạo một hợp đồng thì giá trị trả về là biến hợp đồng mới được tạo.



Ngoài ra, mô-đun bắt hỗ trợ ghi lại các lý do ngoại lệ đặc biệt:



thử bắt trận chiến thực tế  


OnlyEven


Chúng tôi tạo một hợp đồng bên ngoài OnlyEven và sử dụng try-catch để xử lý các trường hợp ngoại lệ:  



Hợp đồng OnlyEven chứa một hàm tạo hàm và hàm onlyEven.


Hàm tạo có tham số a. Khi a=0, require sẽ đưa ra một ngoại lệ; khi a=1, khẳng định sẽ đưa ra một ngoại lệ; trong các trường hợp khác Tất cả là bình thường. Hàm onlyEven có tham số b. Khi b là số lẻ, require sẽ đưa ra một ngoại lệ.


Xử lý các trường hợp ngoại lệ của lệnh gọi hàm bên ngoài


Đầu tiên, hãy xác định một số sự kiện và trạng thái trong hợp đồng TryCatch Biến:



SuccessEvent là một sự kiện sẽ được phát hành khi lệnh gọi thành công, trong khi CatchEvent và CatchByte là các sự kiện sẽ được phát hành khi một ngoại lệ được ném ra, tương ứng với các ngoại lệ yêu cầu/hoàn nguyên và khẳng định tương ứng. Even là biến trạng thái của loại hợp đồng OnlyEven.


Sau đó, chúng ta sử dụng try-catch trong hàm thực thi để xử lý các ngoại lệ khi chỉ gọi hàm bên ngoàiEven:



Khi thực thi exec(0), vì 0 là số chẵn nên không có ngoại lệ nào được đưa ra, cuộc gọi thành công và sự kiện SuccessEvent được giải phóng; khi thực thi(1) được chạy, vì 1 là số chẵn, một ngoại lệ bị ném đi, cuộc gọi không thành công và sự kiện SuccessEvent được giải phóng.


Xử lý các ngoại lệ trong việc tạo hợp đồng


Ở đây, chúng tôi sử dụng try-catch để xử lý các ngoại lệ trong việc tạo hợp đồng . Chỉ cần viết lại mô-đun thử để tạo hợp đồng OnlyEven:



Bạn có thể chạy execNew(0), execNew(1), execNew(2) để xem sự khác biệt sẽ như thế nào.


Tóm tắt


Trong bài giảng này, chúng tôi đã giới thiệu cách sử dụng try-catch để xử lý Ngoại lệ trong quá trình vận hành hợp đồng thông minh:


Chỉ có thể được sử dụng cho các lệnh gọi hợp đồng bên ngoài và tạo hợp đồng.

Nếu thử thực hiện thành công, biến trả về phải được khai báo và có cùng kiểu với biến được trả về.   


Liên kết gốc


Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:

Nhóm Telegram đăng ký: https://t.me/theblockbeats

Nhóm Telegram thảo luận: https://t.me/BlockBeats_App

Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia

举报 Báo lỗi/Báo cáo
Chọn thư viện
Thêm mới thư viện
Hủy
Hoàn thành
Thêm mới thư viện
Chỉ mình tôi có thể nhìn thấy
Công khai
Lưu
Báo lỗi/Báo cáo
Gửi