Quản lý quyền truy cập và khả năng hiển thị của hàm trong hợp đồng thông minh Rust

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) Kiểm soát quyền hạn trong an toàn hợp đồng

Bài viết này sẽ giới thiệu về kiểm soát quyền hạn trong hợp đồng thông minh Rust từ hai khía cạnh:

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

1. Tính khả dụng của hàm hợp đồng

Việc thiết lập khả năng truy cập 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ệ các phần quan trọng. Lấy ví dụ từ sự kiện an ninh của sàn giao dịch Bancor Network vào tháng 6 năm 2020, do nhầm lẫn đặ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, khả năng hiển thị của hàm cũng quan trọng. Macro #[near_bindgen] trong NEAR SDK định nghĩa các thuộc tính hiển thị như sau:

  • pub fn: hàm công khai, có thể gọi từ bên ngoài hợp đồng
  • fn: chỉ có thể gọi bên trong hợp đồng
  • pub(crate) fn: giới hạn gọi bên trong crate

Cũng có thể định nghĩa phương thức internal thông qua khối impl Contract không được đánh dấu #[near_bindgen].

Đối với hàm gọi lại, cần được thiết lập là public nhưng chỉ cho phép hợp đồng tự gọi. Có thể sử dụng macro #[private] để thực hiện chức năng này.

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

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

Ngoài khả năng nhìn thấy của hàm, cũng 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ương tự như hợp đồng Ownable trong Solidity, một số hàm có quyền đặc quyền chỉ có thể được gọi bởi owner.

Trong hợp đồng Rust, có thể triển khai trait Ownable như sau:

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 danh sách trắng cho owner. Cũng có thể thiết lập danh sách trắng nhiều người dùng hoặc kiểm soát truy cập theo nhóm thông qua các thiết lập trait phức tạp hơn.

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
  • 6
  • Chia sẻ
Bình luận
0/400
CryptoTarotReadervip
· 07-16 04:56
Cấm nó có cấm được không~
Xem bản gốcTrả lời0
FloorSweepervip
· 07-15 01:10
Không thể nào, lại phải học nhiều như vậy sao?
Xem bản gốcTrả lời0
WhaleWatchervip
· 07-13 07:29
Hãy nói về Ownable trước đã.
Xem bản gốcTrả lời0
GateUser-e51e87c7vip
· 07-13 07:23
Có tay là được, đơn giản vậy thôi.
Xem bản gốcTrả lời0
DecentralizeMevip
· 07-13 07:22
Ô ô logic cơ sở
Xem bản gốcTrả lời0
ChainSpyvip
· 07-13 07:21
Kiểm soát truy cập phức tạp như vậy không bằng công khai hoàn toàn.
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)