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

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

Rust hợp đồng thông minh养成日记(7)合约安全之权限控制

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

  1. Tính khả thi của phương pháp hợp đồng
  2. Kiểm soát truy cập của các hàm đặc quyền

1. Độ khả thi của hàm hợp đồng

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 chức năng then chốt. Lấy ví dụ về sự cố 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, có các loại khả năng truy cập hàm như sau:

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

Ngoài ra, việc định nghĩa hàm trong khối impl không được đánh dấu bằng #[near_bindgen] cũng có thể làm cho nó trở thành hàm nội bộ.

Đối với hàm callback, cần đặt là public nhưng đồng thời đả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 chức năng này.

Cần lưu ý rằng tính khả dụng mặc định trong Rust là riêng tư, khác với tính công khai mặc định trong một số phiên bản Solidity. Ngoại lệ là các mục trong pub trait và pub enum mặc định là công khai.

2. Kiểm soát truy cập của các hàm đặc quyền

Ngoài khả năng hiển thị của hàm, cần phải thiết lập cơ chế danh sách trắng để kiểm soát quyền truy cập vào các hàm đặc quyền. Tương tự như modifier onlyOwner trong Solidity, có thể thực hiện một trait Ownable:

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

Sử dụng trait này có thể hạn chế chỉ có owner mới có thể gọi một số hàm quyền riêng. Dựa trên nguyên lý này, có thể thiết lập danh sách trắng phức tạp hơn để thực hiện kiểm soát truy cập chi tiết.

3. Các phương pháp kiểm soát truy cập khác

Cũng có thể xem xét việc kiểm soát thời điểm gọi hợp đồng, cơ chế gọi đa chữ ký, quản trị DAO và các phương pháp kiểm soát truy cập khác, những điều này sẽ được giới thiệu chi tiết 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
  • 10
  • Chia sẻ
Bình luận
0/400
Anon32942vip
· 07-14 23:24
Mã này hơi khó nhằn.
Xem bản gốcTrả lời0
GasFeeCriervip
· 07-14 20:16
Sự an toàn này thực sự an toàn đến mức nào?
Xem bản gốcTrả lời0
MeaninglessApevip
· 07-14 14:35
Cái này cũng phải cuốn? Đã viết Rust rồi.
Xem bản gốcTrả lời0
LootboxPhobiavip
· 07-12 09:38
Bị kẹt rồi, không học nổi hợp đồng thông minh nữa.
Xem bản gốcTrả lời0
GasOptimizervip
· 07-12 09:38
Việc trực quan hóa tiêu thụ gas cho đa chữ ký lại là một chủ đề lớn.
Xem bản gốcTrả lời0
BridgeJumpervip
· 07-12 09:37
Mã đã an toàn rồi chứ? Vẫn bị tiêm vào.
Xem bản gốcTrả lời0
UncleLiquidationvip
· 07-12 09:37
Độ an toàn của đa ký thì cũng ổn.
Xem bản gốcTrả lời0
UncleWhalevip
· 07-12 09:30
An toàn vẫn cần phải làm nghiêm túc.
Xem bản gốcTrả lời0
BankruptcyArtistvip
· 07-12 09:22
Đa ký có tác dụng gì, có lỗ hổng vẫn bị khai thác.
Xem bản gốcTrả lời0
MEVSandwichvip
· 07-12 09:14
Tốt quá! Đa chữ ký trông an toàn quá~
Xem bản gốcTrả lời0
Xem thêm
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)