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

robot
Đang tạo bản tóm tắt

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 tính

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/khả năng gọi các phương thức hợp đồng
  2. Kiểm soát truy cập của chức năng đặc quyền/phân chia quyền và nghĩa vụ

1. Độ hiển thị của hàm hợp đồng

Việc thiết lập tính khả thi 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ệ an toàn cho hợp đồng. Lấy ví dụ từ sự cố an ninh xảy ra tại sàn giao dịch Bancor Network vào ngày 18 tháng 6 năm 2020, do vô tình thiết lập hàm chuyển tiền quan trọng thành public, dẫn đến việc tài sản của người dùng đối mặt với rủi ro nghiêm trọ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: hàm công khai, bất kỳ ai cũng có thể gọi từ bên ngoài hợp đồng
  • fn: mặc định là private, chỉ có thể được gọi từ bên trong hợp đồng
  • pub(crate) fn: giới hạn gọi bên trong crate

Ngoài ra, có thể thực hiện các phương thức internal bằng cách định nghĩa một khối impl không có #[near_bindgen].

Đối với hàm callback, phải được đặt là public nhưng cần kiểm soát truy cập bổ sung:

gỉ #[private] pub fn resolve_transfer(&mut self) { env::log_str("Đây là một callback"); }

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

Ngoài khả năng hiển thị của các 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. Có thể tùy chỉnh Trait để đạt được hiệu ứng tương tự như modifier onlyOwner trong Solidity:

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); }

Điều này có thể giới hạn chỉ có owner mới có thể gọi một số hàm đặc quyền. Dựa trên điều này, có thể thiết lập danh sách trắng đa người dùng phức tạp hơn hoặc nhiều danh sách trắng, để thực hiện kiểm soát truy cập phân nhóm tinh vi.

Trong hợp đồng thông minh Rust còn có các phương pháp kiểm soát truy cập khác, như kiểm soát thời điểm gọi, cơ chế đa chữ ký, v.v., sẽ được giới thiệu trong các bài viết sau.

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
  • 2
  • Chia sẻ
Bình luận
0/400
DAOdreamervip
· 07-23 12:21
Danh sách cho phép审核要严格
Xem bản gốcTrả lời0
SchroedingerMinervip
· 07-23 12:21
Danh sách cho phép là con dao hai lưỡi
Xem bản gốcTrả lời0
  • Ghim
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)