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 việc truy cập/gọi phương thức hợp đồng
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. Khả năng hiển thị hàm hợp đồng
Việc kiểm soát khả năng nhìn thấy của các hàm trong hợp đồng là rất quan trọng để bảo vệ các phần chính không bị thao tác sai. 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, do vô tình đặt hàm chuyển tiền quan trọng thành public, đã khiến tài sản của người dùng trị giá 590.000 đô la gặp rủi ro.
Trong hợp đồng thông minh Rust, tính khả dụng của hàm chủ yếu có:
pub fn: hàm công khai, có thể được gọi từ bên ngoài hợp đồng
fn: mặc định là private, chỉ có thể được gọi 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 độc lập mà không thêm sửa đổi #[near_bindgen].
Đối với hàm callback, cần được đặt là public nhưng phải giới hạn chỉ có thể được gọi bởi hợp đồng của chính nó. Có thể sử dụng macro #[private] để thực hiện.
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 của các hàm đặc quyền
Ngoài khả năng hiển thị của hàm, cần phải thiết lập cơ chế danh sách trắng kiểm soát truy cập hoàn chỉnh từ khía cạnh ngữ nghĩa. Tương tự như hợp đồng Ownable của Solidity, một số hàm đặc quyền chỉ có thể được gọi bởi chủ sở hữu.
Trong hợp đồng Rust, có thể thực hiện Trait tùy chỉnh:
Điều này có thể thực hiện kiểm soát truy cập đối với các chức năng đặc quyền. Dựa trên điều này, cũng có thể thiết lập danh sách trắng đa người dùng hoặc nhiều nhóm danh sách trắng.
3. Nhiều phương pháp kiểm soát truy cập hơn
Các phương pháp kiểm soát truy cập khác bao gồm:
Kiểm soát thời điểm gọi hợp đồng
Cơ chế gọi đa chữ ký của hàm hợp đồng
Thực hiện quản trị DAO
Những nội dung này sẽ được giới thiệu chi tiết trong các bài viết tiếp theo.
Xem bản gốc
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.
Phân tích chi tiết về tính khả thi và kiểm soát quyền hạn của hàm trong hợp đồng thông minh Rust
Rust hợp đồng thông minh养成日记(7)合约安全之计算精度
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
Việc kiểm soát khả năng nhìn thấy của các hàm trong hợp đồng là rất quan trọng để bảo vệ các phần chính không bị thao tác sai. 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, do vô tình đặt hàm chuyển tiền quan trọng thành public, đã khiến tài sản của người dùng trị giá 590.000 đô la gặp rủi ro.
Trong hợp đồng thông minh Rust, tính khả dụng của hàm chủ yếu có:
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 độc lập mà không thêm sửa đổi #[near_bindgen].
Đối với hàm callback, cần được đặt là public nhưng phải giới hạn chỉ có thể được gọi bởi hợp đồng của chính nó. Có thể sử dụng macro #[private] để thực hiện.
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 của các hàm đặc quyền
Ngoài khả năng hiển thị của hàm, cần phải thiết lập cơ chế danh sách trắng kiểm soát truy cập hoàn chỉnh từ khía cạnh ngữ nghĩa. Tương tự như hợp đồng Ownable của Solidity, một số hàm đặc quyền chỉ có thể được gọi bởi chủ sở hữu.
Trong hợp đồng Rust, có thể thực hiện Trait tùy chỉnh:
rỉ sét 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ể thực hiện kiểm soát truy cập đối với các chức năng đặc quyền. Dựa trên điều này, cũng có thể thiết lập danh sách trắng đa người dùng hoặc nhiều nhóm danh sách trắng.
3. Nhiều phương pháp kiểm soát truy cập hơn
Các phương pháp kiểm soát truy cập khác bao gồm:
Những nội dung này sẽ được giới thiệu chi tiết trong các bài viết tiếp theo.