Rust hợp đồng thông minh an toàn: Hiểu sâu về kiểm soát truy cập và quản lý quyền

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

1. Độ khả thi của hàm (phương thức) hợp đồng

Việc kiểm soát tính khả thi của các hàm hợp đồng là rất quan trọng để bảo vệ các phần quan trọng khỏi bị truy cập hoặc thao tác ngẫu nhiên. Lấy ví dụ về sự cố an ninh của sàn giao dịch Bancor Network vào ngày 18 tháng 6 năm 2020, sự cố này xảy ra do việc thiết lập quyền truy cập không đúng cho các hàm quan trọng trong hợp đồng.

Trong hợp đồng thông minh Rust, có các loại khả năng truy cập hàm sau:

  • pub fn: Biểu thị phương thức này là công khai, thuộc một phần của giao diện hợp đồng, có thể được gọi từ bên ngoài hợp đồng.
  • fn: Nếu không chỉ định rõ pub, thì có nghĩa là hàm này không thể được gọi trực tiếp từ bên ngoài hợp đồng, chỉ có thể được gọi bên trong hợp đồng.
  • pub(crate) fn: Giới hạn phương thức chỉ được gọi trong phạm vi của crate.

Một cách khác để đặt phương thức thành nội bộ là định nghĩa trong khối mã impl Contract không được trang trí bằng #[near_bindgen].

Đối với hàm callback, phải được đặt thành thuộc tính public, nhưng cần đảm bảo chỉ có thể được gọi bởi chính hợp đồng. Có thể sử dụng macro #[private] để thực hiện điều này.

2. Kiểm soát truy cập các hàm đặc quyền( cơ chế danh sách trắng)

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ừ góc độ ngữ nghĩa. Một số hàm đặc quyền ( như khởi tạo hợp đồng, bật/tạm dừng v.v. ) chỉ có thể được gọi bởi chủ sở hữu hợp đồng.

Có thể thực hiện Trait tùy chỉnh để kiểm soát truy cập, kiểm tra xem người gọi có phải là chủ hợp đồng hay không:

rỉ sét pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } fn get_owner(\u0026self) -\u003e AccountId; fn set_owner(&mut self, owner: AccountId); }

Dựa trên nguyên lý này, có thể thiết lập nhiều người dùng hoặc nhiều danh sách trắng, để thực hiện kiểm soát truy cập nhóm tinh vi hơn.

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 trong hợp đồng thông minh Rust bao gồm:

  • Kiểm soát thời điểm gọi hợp đồng
  • Cơ chế gọi đa 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 giới thiệu chi tiết trong các bài viết sau.

GET6.4%
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
  • Đăng lại
  • Chia sẻ
Bình luận
0/400
PumpBeforeRugvip
· 08-09 06:44
Việc Bancor gặp sự cố lần đó cũng do quyền không được thiết lập đúng cách phải không?
Xem bản gốcTrả lời0
OffchainOraclevip
· 08-09 06:32
Bancor sự cố này phải được đưa vào sách giáo khoa cảnh báo.
Xem bản gốcTrả lời0
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)