Nhật ký phát triển hợp đồng thông minh Rust (7) An toàn hợp đồng và độ chính xác trong tính toán
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 khía cạnh:
Độ khả dụng của phương thức hợp đồng
Kiểm soát truy cập của chức năng đặc quyền
1. Độ khả dụng của hàm hợp đồng
Tính khả thi của các hàm hợp đồng quyết định ai có thể gọi những hàm này. Việc thiết lập đúng khả năng truy cập là rất quan trọng để bảo vệ các phần quan trọng của hợp đồng.
Trong hợp đồng thông minh Rust, tính khả dụng của hàm chủ yếu có các loại sau:
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 trong nội bộ crate
Ngoài ra, bạn có thể định nghĩa phương thức trong khối mã impl Contract riêng biệt để đặt nó thành phương thức nội bộ:
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 được đặt là pub và sử dụng macro #[private] để giới hạn chỉ có thể được gọi bởi hợp đồng của chính nó:
gỉ
#[near_bindgen]
impl Hợp đồng {
#[private]
pub fn resolve_transfer(&mut self) {
// Logic gọi lại
}
}
2. Kiểm soát truy cập của các hàm đặc quyền
Ngoài việc thiết lập tính khả dụng của hàm, cần thiết lập cơ chế danh sách trắng kiểm soát truy cập để hạn chế việc gọi các hàm đặc quyền.
Sau đó, gọi assert_owner() trong hàm đặc quyền để xác minh danh tính của người gọi:
rỉ sét
impl Hợp đồng {
pub fn privileged_function(&mut self) {
self.assert_owner();
// Logic hàm đặc quyền
}
}
Điều này có thể đạt được kiểm soát quyền sở hữu cơ bản. Có thể mở rộng thêm thành danh sách trắng nhiều người dùng hoặc nhiều nhóm danh sách trắng để thực hiện kiểm soát truy cập tinh vi hơn.
Ngoài ra, bạn cũng có thể xem xét các giải pháp kiểm soát truy cập phức tạp hơn như kiểm soát thời điểm gọi và cơ chế đa chữ ký. Việc thiết lập hợp lý tính khả kiến và kiểm soát truy cập của các hàm trong hợp đồng là rất quan trọng để đảm bảo an toàn cho hợp đồng.
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.
23 thích
Phần thưởng
23
5
Đăng lại
Chia sẻ
Bình luận
0/400
CryingOldWallet
· 07-28 07:37
Cuối cùng cũng thấy liên quan đến rust, ghi lại ghi lại
Xem bản gốcTrả lời0
PumpingCroissant
· 07-28 03:49
Lại là Rust mà không học được
Xem bản gốcTrả lời0
CryptoGoldmine
· 07-25 08:04
Độ sâu kỹ thuật不错 nhưng thực nghiệm ROI còn phải xem tối ưu hóa phân bổ Pool khai thác.
Xem bản gốcTrả lời0
SchrodingerAirdrop
· 07-25 08:01
Hướng dẫn cho người mới này làm tôi cảm thấy đau đầu, rust thường làm những điều cao siêu.
Xem bản gốcTrả lời0
GateUser-2fce706c
· 07-25 08:01
Tiến hóa mới là chân lý, chuỗi Rust đang trỗi dậy như sóng! Hãy nhanh chóng định hình!
Rust hợp đồng thông minh an toàn thực hành: 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à độ chính xác trong tính toán
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 khía cạnh:
1. Độ khả dụng của hàm hợp đồng
Tính khả thi của các hàm hợp đồng quyết định ai có thể gọi những hàm này. Việc thiết lập đúng khả năng truy cập là rất quan trọng để bảo vệ các phần quan trọng của hợp đồng.
Trong hợp đồng thông minh Rust, tính khả dụng của hàm chủ yếu có các loại sau:
Ngoài ra, bạn có thể định nghĩa phương thức trong khối mã impl Contract riêng biệt để đặt nó thành phương thức nội bộ:
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 được đặt là pub và sử dụng macro #[private] để giới hạn chỉ có thể được gọi bởi hợp đồng của chính nó:
gỉ #[near_bindgen] impl Hợp đồng { #[private] pub fn resolve_transfer(&mut self) { // Logic gọi lại } }
2. Kiểm soát truy cập của các hàm đặc quyền
Ngoài việc thiết lập tính khả dụng của hàm, cần thiết lập cơ chế danh sách trắng kiểm soát truy cập để hạn chế việc gọi các hàm đặc quyền.
Có thể thực hiện trait Ownable tương tự như sau:
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); }
Sau đó, gọi assert_owner() trong hàm đặc quyền để xác minh danh tính của người gọi:
rỉ sét impl Hợp đồng { pub fn privileged_function(&mut self) { self.assert_owner(); // Logic hàm đặc quyền } }
Điều này có thể đạt được kiểm soát quyền sở hữu cơ bản. Có thể mở rộng thêm thành danh sách trắng nhiều người dùng hoặc nhiều nhóm danh sách trắng để thực hiện kiểm soát truy cập tinh vi hơn.
Ngoài ra, bạn cũng có thể xem xét các giải pháp kiểm soát truy cập phức tạp hơn như kiểm soát thời điểm gọi và cơ chế đa chữ ký. Việc thiết lập hợp lý tính khả kiến và kiểm soát truy cập của các hàm trong hợp đồng là rất quan trọng để đảm bảo an toàn cho hợp đồng.