Bài viết này sẽ giới thiệu về kiểm soát quyền trong hợp đồng thông minh Rust từ hai góc độ:
Độ khả thi của phương thức hợp đồng
Kiểm soát truy cập của hàm đặc quyền
1. Khả năng hiển thị hàm hợp đồng
Trong phát triển hợp đồng thông minh, việc thiết lập đúng khả năng truy cập của hàm là rất quan trọng. Lấy ví dụ từ sự kiện an ninh của sàn giao dịch Bancor Network vào ngày 18 tháng 6 năm 2020, việc đặt sai hàm chuyển tiền quan trọng thành public đã dẫn đến rủi ro cho tài sản của người dùng.
Trong hợp đồng thông minh Rust, việc kiểm soát tính khả dụng của hàm cũng rất quan trọng. Macro #[near_bindgen] trong NEAR SDK định nghĩa các loại khả năng tiếp cận sau:
pub fn: hàm công khai, có thể được gọi từ bên ngoài hợp đồng
fn: Chỉ có thể gọi bên trong hợp đồng
pub(crate) fn: Giới hạn gọi bên trong crate
Một cách khác để thiết lập phương thức internal là định nghĩa một khối mã impl Contract riêng biệt, không sử dụng #[near_bindgen] để trang trí.
Đối với hàm callback, cần thiết lập là public nhưng đồng thời hạn chế chỉ có thể được gọi bởi hợp đồng tự thân. Có thể sử dụng macro #[private] để thực hiện điều này.
Cần lưu ý rằng, trong Rust, mặc định tất cả nội dung đều là private, ngoại trừ các mục trong pub Trait và pub Enum.
2. Kiểm soát truy cập chức năng đặc quyền
Ngoài khả năng hiển thị của hàm, cần phải thiết lập một cơ chế danh sách trắng kiểm soát truy cập đầy đủ. Tương tự như bộ sửa đổi onlyOwner trong Solidity, trong hợp đồng Rust cũng có thể triển khai Trait tùy chỉnh để kiểm soát quyền truy cập vào các hàm đặc quyền:
Điều này có thể hạn chế chỉ có owner mới có thể gọi một số hàm đặc quyền. Dựa trên nguyên tắc này, có thể thiết lập danh sách trắng và kiểm soát truy cập theo nhóm phức tạp hơn.
3. Các phương pháp kiểm soát truy cập khác
Còn một số phương pháp kiểm soát truy cập khác, như kiểm soát thời điểm gọi hợp đồng, cơ chế gọi đa chữ ký, thực hiện DAO, sẽ được giới thiệu chi tiết trong các bài viết sau.
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
17 thích
Phần thưởng
17
4
Đăng lại
Chia sẻ
Bình luận
0/400
MetaNomad
· 08-04 05:07
rust người mới hỏi cái nào an toàn hơn?
Xem bản gốcTrả lời0
NftPhilanthropist
· 08-04 05:02
*thở dài* lại một vụ lùm xùm về bảo mật nữa vì ai đó quên quyền cơ bản... khi nào các nhà phát triển mới học được cách đúc một cách có ý thức smh
Xem bản gốcTrả lời0
BearMarketGardener
· 08-04 04:57
Quản lý quyền mà gặp sự cố thì xong rồi.
Xem bản gốcTrả lời0
RuntimeError
· 08-04 04:45
Kiểm soát quyền không đúng quy định, hãy quỳ xuống để Debug.
Rust hợp đồng thông minh quyền kiểm soát: khả năng hiển thị hàm và quản lý quyền truy cập đặc quyền
Quyền kiểm soát trong hợp đồng thông minh Rust
Bài viết này sẽ giới thiệu về kiểm soát quyền trong hợp đồng thông minh Rust từ hai góc độ:
1. Khả năng hiển thị hàm hợp đồng
Trong phát triển hợp đồng thông minh, việc thiết lập đúng khả năng truy cập của hàm là rất quan trọng. Lấy ví dụ từ sự kiện an ninh của sàn giao dịch Bancor Network vào ngày 18 tháng 6 năm 2020, việc đặt sai hàm chuyển tiền quan trọng thành public đã dẫn đến rủi ro cho tài sản của người dùng.
Trong hợp đồng thông minh Rust, việc kiểm soát tính khả dụng của hàm cũng rất quan trọng. Macro #[near_bindgen] trong NEAR SDK định nghĩa các loại khả năng tiếp cận sau:
Một cách khác để thiết lập phương thức internal là định nghĩa một khối mã impl Contract riêng biệt, không sử dụng #[near_bindgen] để trang trí.
Đối với hàm callback, cần thiết lập là public nhưng đồng thời hạn chế chỉ có thể được gọi bởi hợp đồng tự thân. Có thể sử dụng macro #[private] để thực hiện điều này.
Cần lưu ý rằng, trong Rust, mặc định tất cả nội dung đều là private, ngoại trừ các mục trong pub Trait và pub Enum.
2. Kiểm soát truy cập chức năng đặc quyền
Ngoài khả năng hiển thị của hàm, cần phải thiết lập một cơ chế danh sách trắng kiểm soát truy cập đầy đủ. Tương tự như bộ sửa đổi onlyOwner trong Solidity, trong hợp đồng Rust cũng có thể triển khai Trait tùy chỉnh để kiểm soát quyền truy cập vào các hàm đặc quyền:
gỉ pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Điều này có thể hạn chế chỉ có owner mới có thể gọi một số hàm đặc quyền. Dựa trên nguyên tắc này, có thể thiết lập danh sách trắng và kiểm soát truy cập theo nhóm phức tạp hơn.
3. Các phương pháp kiểm soát truy cập khác
Còn một số phương pháp kiểm soát truy cập khác, như kiểm soát thời điểm gọi hợp đồng, cơ chế gọi đa chữ ký, thực hiện DAO, sẽ được giới thiệu chi tiết trong các bài viết sau.