Nhật ký phát triển hợp đồng thông minh Rust (7) Kiểm soát quyền hạn trong an toàn hợp đồng
Bài viết này sẽ giới thiệu về kiểm soát quyền hạn trong hợp đồng thông minh Rust từ hai khía cạnh:
Độ khả dụng của phương thức hợp đồng truy cập/gọi
Kiểm soát truy cập của chức năng đặc quyền/Phân chia quyền và trách nhiệm
1. Tính khả dụng của hàm hợp đồng
Việc thiết lập khả năng truy cập của các hàm hợp đồng một cách hợp lý là rất quan trọng để bảo vệ các phần quan trọng. Lấy ví dụ từ sự kiện an ninh của sàn giao dịch Bancor Network vào tháng 6 năm 2020, do nhầm lẫn đặt 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, khả năng hiển thị của hàm cũng quan trọng. Macro #[near_bindgen] trong NEAR SDK định nghĩa các thuộc tính hiển thị như sau:
pub fn: hàm công khai, có thể 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
Cũng có thể định nghĩa phương thức internal thông qua khối impl Contract không được đánh dấu #[near_bindgen].
Đối với hàm gọi lại, cần được thiết lập là public nhưng chỉ cho phép hợp đồng tự gọi. Có thể sử dụng macro #[private] để thực hiện chức năng này.
Cần lưu ý rằng tính khả dụng mặc định trong Rust là private, nhưng các mục trong trait và enum thì ngoại lệ.
2. Kiểm soát truy cập chức năng đặc quyền
Ngoài khả năng nhìn thấy của hàm, cũng cần thiết lập một cơ chế danh sách trắng kiểm soát truy cập hoàn chỉnh. Tương tự như hợp đồng Ownable trong Solidity, một số hàm có quyền đặc quyền chỉ có thể được gọi bởi owner.
Trong hợp đồng Rust, có thể triển khai trait Ownable như sau:
Dựa trên điều này, có thể thực hiện danh sách trắng cho owner. Cũng có thể thiết lập danh sách trắng nhiều người dùng hoặc kiểm soát truy cập theo nhóm thông qua các thiết lập trait phức tạp hơn.
Xem bản gốc
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
10 thích
Phần thưởng
10
4
Chia sẻ
Bình luận
0/400
WhaleWatcher
· 07-13 07:29
Hãy nói về Ownable trước đã.
Xem bản gốcTrả lời0
GateUser-e51e87c7
· 07-13 07:23
Có tay là được, đơn giản vậy thôi.
Xem bản gốcTrả lời0
DecentralizeMe
· 07-13 07:22
Ô ô logic cơ sở
Xem bản gốcTrả lời0
ChainSpy
· 07-13 07:21
Kiểm soát truy cập phức tạp như vậy không bằng công khai hoàn toàn.
Quản lý quyền truy cập và khả năng hiển thị của hàm trong hợp đồng thông minh Rust
Nhật ký phát triển hợp đồng thông minh Rust (7) Kiểm soát quyền hạn trong an toàn hợp đồng
Bài viết này sẽ giới thiệu về kiểm soát quyền hạn trong hợp đồng thông minh Rust từ hai khía cạnh:
1. Tính khả dụng của hàm hợp đồng
Việc thiết lập khả năng truy cập của các hàm hợp đồng một cách hợp lý là rất quan trọng để bảo vệ các phần quan trọng. Lấy ví dụ từ sự kiện an ninh của sàn giao dịch Bancor Network vào tháng 6 năm 2020, do nhầm lẫn đặt 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, khả năng hiển thị của hàm cũng quan trọng. Macro #[near_bindgen] trong NEAR SDK định nghĩa các thuộc tính hiển thị như sau:
Cũng có thể định nghĩa phương thức internal thông qua khối impl Contract không được đánh dấu #[near_bindgen].
Đối với hàm gọi lại, cần được thiết lập là public nhưng chỉ cho phép hợp đồng tự gọi. Có thể sử dụng macro #[private] để thực hiện chức năng này.
Cần lưu ý rằng tính khả dụng mặc định trong Rust là private, nhưng các mục trong trait và enum thì ngoại lệ.
2. Kiểm soát truy cập chức năng đặc quyền
Ngoài khả năng nhìn thấy của hàm, cũng cần thiết lập một cơ chế danh sách trắng kiểm soát truy cập hoàn chỉnh. Tương tự như hợp đồng Ownable trong Solidity, một số hàm có quyền đặc quyền chỉ có thể được gọi bởi owner.
Trong hợp đồng Rust, có thể triển khai trait Ownable như sau:
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); }
Dựa trên điều này, có thể thực hiện danh sách trắng cho owner. Cũng có thể thiết lập danh sách trắng nhiều người dùng hoặc kiểm soát truy cập theo nhóm thông qua các thiết lập trait phức tạp hơn.