Rust hợp đồng thông minh an toàn thực hành: Tính khả thi của hàm và kiểm soát truy cập đặc 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 của phép 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 góc độ:

  1. Tính khả dụng của các phương thức hợp đồng được truy cập/gọi
  2. Kiểm soát truy cập của các chức năng đặc quyền/phân chia quyền và trách nhiệm

1. Khả năng nhìn thấy hàm hợp đồng

Việc thiết lập độ khả kiến của 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 không bị truy cập hoặc thao tác một cách ngẫu nhiên. Lấy ví dụ từ sự kiện bảo mật của sàn giao dịch Bancor Network vào tháng 6 năm 2020, do vô tình đặ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, tính khả thi của hàm chủ yếu có các loại sau:

  • pub fn: public hàm, có thể gọi từ bên ngoài hợp đồng
  • fn: Không thể gọi trực tiếp từ bên ngoài, chỉ có thể gọi trong hợp đồng.
  • pub(crate) fn: Giới hạn gọi trong phạm vi 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, và không sử dụng dấu hiệu #[near_bindgen].

Hàm callback cần được đặt là public, nhưng phải đảm bảo chỉ có thể được gọi bởi hợp đồng. Có thể sử dụng macro #[private] để thực hiện chức năng này.

Cần lưu ý rằng Rust mặc định tất cả nội dung là private, nhưng các mục trong trait và enum thì ngoại lệ.

2. Kiểm soát truy cập của chức năng đặc quyền

Ngoài khả năng hiển thị của hàm, 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ừ cấp độ ngữ nghĩa. Tương tự như onlyOwner trong Solidity, một số hàm đặc quyền chỉ có thể được gọi bởi chủ sở hữu hợp đồng.

Trong hợp đồng thông minh Rust, 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); }

Dựa trên điều này, có thể thực hiện cơ chế danh sách trắng phức tạp hơn, đạt được kiểm soát truy cập nhóm tinh vi.

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, chẳng hạn như:

  • Kiểm soát thời điểm gọi hợp đồng
  • Cơ chế gọi nhiều chữ ký của hàm hợp đồng
  • Quản trị (DAO) của việc thực hiện

Những nội dung này sẽ được trình bày chi tiết trong các bài viết sau.

PUBLIC5.84%
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 thưởng
  • Bình luận
  • Đăng lại
  • Chia sẻ
Bình luận
0/400
Không có bình luận
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)