Nhật ký phát triển hợp đồng thông minh Rust (7) An toàn hợp đồng và kiểm soát truy cập
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 pháp hợp đồng
Kiểm soát truy cập của hàm đặc quyền
1. Tính khả kiến của hàm hợp đồng
Trong hợp đồng thông minh Rust, việc kiểm soát độ khả dụng của hàm là rất quan trọng. SDK NEAR định nghĩa các thuộc tính khả dụng sau thông qua macro #[near_bindgen]:
pub fn: hàm công khai, có thể được gọi từ bên ngoài hợp đồng
fn: Hàm nội bộ, chỉ có thể được gọi trong hợp đồng.
pub(crate) fn: giới hạn gọi bên trong crate
Ngoài ra, có thể định nghĩa các phương thức nội bộ thông qua khối impl Contract độc lập:
gỉ
#[near_bindgen]
impl Hợp đồng {
pub fn increment(&mut self) {
self.internal_increment();
}
}
impl Hợp đồng {
pub fn internal_increment(&mut self) {
self.counter += 1;
}
}
Đối với hàm callback, cần phải đặt là pub và sử dụng macro #[private] để đảm bảo chỉ có thể được gọi bởi hợp đồng đó.
gỉ
#[near_bindgen]
impl Hợp đồng {
#[private]
pub fn resolve_transfer(&mut self) {
// Logic gọi lại
}
}
2. Kiểm soát quyền 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 cần thiết lập cơ chế danh sách trắng kiểm soát truy cập. Có thể tùy chỉnh Trait để thực hiện:
Trong hàm đặc quyền, việc gọi assert_owner() có thể giới hạn chỉ owner mới có thể thực hiện:
gỉ
impl Hợp đồng {
pub fn privileged_function(&mut self) {
self.assert_owner();
// Hoạt động đặc quyền
}
}
Điều này có thể thực hiện cơ chế danh sách trắng cơ bản, và còn có thể mở rộng hơn để thực hiện kiểm soát truy cập phức tạp với nhiều người dùng, nhiều danh sách trắng.
An ninh của hợp đồng cần được xem xét từ nhiều khía cạnh, bao gồm kiểm soát thời điểm gọi, cơ chế đa chữ ký, v.v., sẽ được giới thiệu chi tiết trong các bài viết tiếp theo.
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.
16 thích
Phần thưởng
16
9
Chia sẻ
Bình luận
0/400
GasWaster
· 07-24 14:55
Lại đang nghiên cứu những điều sâu sắc nữa rồi.
Xem bản gốcTrả lời0
rugdoc.eth
· 07-24 12:22
Cái này quá cũ kỹ rồi.
Xem bản gốcTrả lời0
GateUser-9ad11037
· 07-24 03:37
Có nên bổ sung cơ chế danh sách đen không~
Xem bản gốcTrả lời0
DefiPlaybook
· 07-23 10:17
Dữ liệu tổng hợp cho thấy, kiểm soát truy cập vẫn là một trong ba lỗ hổng hợp đồng hàng đầu.
Xem bản gốcTrả lời0
SeeYouInFourYears
· 07-21 20:27
rust là như vậy đó
Xem bản gốcTrả lời0
OnchainDetective
· 07-21 20:27
Quản lý quyền kiểm soát như một hình thức giả mạo, đã đến lúc cần phải kiểm tra cửa hậu rồi.
An toàn hợp đồng thông minh Rust: Giải thích chi tiết về kiểm soát truy cập và quản lý quyền
Nhật ký phát triển hợp đồng thông minh Rust (7) An toàn hợp đồng và kiểm soát truy cập
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. Tính khả kiến của hàm hợp đồng
Trong hợp đồng thông minh Rust, việc kiểm soát độ khả dụng của hàm là rất quan trọng. SDK NEAR định nghĩa các thuộc tính khả dụng sau thông qua macro #[near_bindgen]:
Ngoài ra, có thể định nghĩa các phương thức nội bộ thông qua khối impl Contract độc lập:
gỉ #[near_bindgen] impl Hợp đồng { pub fn increment(&mut self) { self.internal_increment(); } }
impl Hợp đồng { pub fn internal_increment(&mut self) { self.counter += 1; } }
Đối với hàm callback, cần phải đặt là pub và sử dụng macro #[private] để đảm bảo chỉ có thể được gọi bởi hợp đồng đó.
gỉ #[near_bindgen] impl Hợp đồng { #[private] pub fn resolve_transfer(&mut self) { // Logic gọi lại } }
2. Kiểm soát quyền 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 cần thiết lập cơ chế danh sách trắng kiểm soát truy cập. Có thể tùy chỉnh Trait để thực hiện:
gỉ pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(\u0026mut self, owner: AccountId); }
Trong hàm đặc quyền, việc gọi assert_owner() có thể giới hạn chỉ owner mới có thể thực hiện:
gỉ impl Hợp đồng { pub fn privileged_function(&mut self) { self.assert_owner(); // Hoạt động đặc quyền } }
Điều này có thể thực hiện cơ chế danh sách trắng cơ bản, và còn có thể mở rộng hơn để thực hiện kiểm soát truy cập phức tạp với nhiều người dùng, nhiều danh sách trắng.
An ninh của hợp đồng cần được xem xét từ nhiều khía cạnh, bao gồm kiểm soát thời điểm gọi, cơ chế đa chữ ký, v.v., sẽ được giới thiệu chi tiết trong các bài viết tiếp theo.