Rust hợp đồng thông minh an toàn thực hành: Giải thích chi tiết về tính khả thi của hàm và kiểm soát quyền truy cập

Rust hợp đồng thông minh养成日记(7)合约安全之计算精度

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:

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

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

Việc thiết lập tính khả thi của hàm hợp đồng thông minh có thể kiểm soát quyền truy cập vào hàm, bảo vệ các phần quan trọng không bị truy cập tùy ý. Lấy ví dụ từ sàn giao dịch Bancor Network, vào tháng 6 năm 2020 đã xảy ra sự cố an toàn tài sản do thiết lập tính khả thi của hàm sai.

Trong hợp đồng thông minh Rust, khả năng truy cập chức năng được kiểm soát bằng các cách sau:

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

Một cách khác để thiết lập phương thức nội bộ là định nghĩa một khối mã impl Contract độc lập, không sử dụng sửa đổi #[near_bindgen] .

Hàm callback cần được thiết lập là pub, nhưng phả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.

Rust mặc định tất cả nội dung là riêng tư, nhưng các thành phần trong trait và enum thì 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 việc thiết lập khả năng hiển thị của hàm, còn cần xây dựng cơ chế danh sách trắng kiểm soát truy cập. Tương tự như modifier onlyOwner trong Solidity, có thể định nghĩa các hàm đặc quyền chỉ có owner mới có thể gọi.

Trong Rust có thể triển khai trait Ownable tương tự:

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

Cách này có thể thực hiện kiểm soát truy cập đối với các chức năng đặc quyền. Có thể mở rộng thêm để thiết lập danh sách trắng nhiều người dùng hoặc nhiều nhóm danh sách trắng.

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

Còn có thể thực hiện:

  • Kiểm soát thời điểm gọi hợp đồng
  • Cơ chế gọi hàm hợp đồng đa chữ ký
  • Cơ chế quản trị ( DAO )

Cụ thể nội dung vui lòng theo dõi các thông báo tiếp theo.

GET-0.29%
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
  • 4
  • Đăng lại
  • Chia sẻ
Bình luận
0/400
EthMaximalistvip
· 08-14 01:11
A ha, đây không phải là lỗ hổng mà Bancor đã gặp phải vào năm đó sao?
Xem bản gốcTrả lời0
HalfBuddhaMoneyvip
· 08-12 19:17
Wuhu, lại đến thời gian viết bug.
Xem bản gốcTrả lời0
GhostAddressMinervip
· 08-12 19:17
Lỗ hổng hợp đồng này thật sự quá sơ đẳng, tôi đã theo dõi 276 ví tiền hacker, từ lâu đã phát hiện dòng tiền của bancor có vấn đề.
Xem bản gốcTrả lời0
CoconutWaterBoyvip
· 08-12 18:50
Làm hợp đồng đã nhiều năm, pub fn cũng đã thất bại vô số lần.
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)