An toàn hợp đồng thông minh Rust: Giải thích chi tiết về kiểm soát truy cập và khả năng hiển thị hàm

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ề kiểm soát quyền truy cập trong hợp đồng thông minh Rust từ hai khía cạnh:

  1. Độ khả thi của phương pháp hợp đồng
  2. Kiểm soát quyền truy cập của chức năng đặc quyền

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

Thiết lập đúng khả năng hiển thị các chức năng hợp đồng là điều cần thiết để giữ an toàn cho hợp đồng của bạn. Lấy sự cố sàn giao dịch Bancor Network vào tháng 6 năm 2020 làm ví dụ, tài sản của người dùng gặp rủi ro do chức năng chuyển chìa khóa bị đặt nhầm ở chế độ công khai.

Trong hợp đồng thông minh Rust, có một số loại khả năng hiển thị chức năng chính:

  • Pub FN: Chức năng công khai, có thể được gọi từ bên ngoài hợp đồng
  • fn: hàm internal mặc định, chỉ có thể được gọi bên trong hợp đồng
  • pub(crate) fn: Hạn chế cuộc gọi từ bên trong thùng

Ngoài ra, các phương thức được định nghĩa trong khối impl không được sửa đổi bởi #[near_bindgen] cũng là internal.

Đối với hàm callback, cần được thiết lập là public nhưng đồng thời phải kiểm tra người gọi, có thể sử dụng macro #[private] để thực hiện.

Cần lưu ý rằng, Rust mặc định tất cả mọi thứ đều là private, ngoại trừ các mục trong pub trait và pub enum.

2. Kiểm soát truy cập cho các chức năng đặ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ư bộ sửa đổi 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ể thực hiện thông qua trait tùy chỉnh:

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ể đạt được việc kiểm soát quyền sở hữu cơ bản. Nó có thể được mở rộng thêm thành danh sách trắng nhiều người dùng hoặc danh sách trắng nhiều nhóm, để đạt được kiểm soát truy cập tinh vi 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
ser_we_are_ngmivip
· 2giờ trước
Khó hiểu quá, mình đi đây.
Xem bản gốcTrả lời0
NFT_Therapyvip
· 07-17 01:06
Cần phải có kiểm soát quyền! Nếu không hợp đồng sẽ bị cắt xén thì coi như xong.
Xem bản gốcTrả lời0
PonziDetectorvip
· 07-17 01:05
Rust yyds cứng nhất
Xem bản gốcTrả lời0
MetaMuskRatvip
· 07-17 01:02
Lại một người quản lý quyền hạn, chạy thôi chạy thôi
Xem bản gốcTrả lời0
ser_we_are_earlyvip
· 07-17 00:46
Đơn giản và thô bạo, chỉ cần thêm một chút kiểm soát quyền.
Xem bản gốcTrả lời0
MemeEchoervip
· 07-17 00:40
Nhìn là thấy buồn ngủ, có ai thật sự học được không?
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)