# Rust 智能合约养成日记(7)合约安全之访问控制本文将从两个角度介绍Rust智能合约中的权限控制:1. 合约方法的可见性2. 特权函数的访问控制## 1. 合约函数可见性在Rust智能合约中,函数可见性控制非常重要。NEAR SDK中#[near_bindgen]宏定义了以下几种可见属性:- pub fn: 公开函数,可从合约外部调用- fn: 内部函数,只能在合约内部调用 - pub(crate) fn: 限制在crate内部调用另外,可以通过独立的impl Contract块来定义内部方法:rust#[near_bindgen]impl Contract { pub fn increment(&mut self) { self.internal_increment(); }}impl Contract { pub fn internal_increment(&mut self) { self.counter += 1; }}对于回调函数,需要设置为pub并使用#[private]宏确保只能被合约自身调用:rust#[near_bindgen]impl Contract { #[private] pub fn resolve_transfer(&mut self) { // 回调逻辑 }}## 2. 特权函数的访问控制除了函数可见性,还需要建立访问控制白名单机制。可以自定义Trait实现:rustpub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } fn get_owner(&self) -> AccountId; fn set_owner(&mut self, owner: AccountId);}在特权函数中调用assert_owner()可以限制只有owner才能执行:rustimpl Contract { pub fn privileged_function(&mut self) { self.assert_owner(); // 特权操作 }}这样可以实现基本的白名单机制,还可以进一步扩展实现多用户、多白名单等复杂的访问控制。合约的安全性需要从多个方面考虑,包括调用时机控制、多签机制等,将在后续文章中详细介绍。
Rust智能合约安全:访问控制与权限管理详解
Rust 智能合约养成日记(7)合约安全之访问控制
本文将从两个角度介绍Rust智能合约中的权限控制:
1. 合约函数可见性
在Rust智能合约中,函数可见性控制非常重要。NEAR SDK中#[near_bindgen]宏定义了以下几种可见属性:
另外,可以通过独立的impl Contract块来定义内部方法:
rust #[near_bindgen] impl Contract { pub fn increment(&mut self) { self.internal_increment(); } }
impl Contract { pub fn internal_increment(&mut self) { self.counter += 1; } }
对于回调函数,需要设置为pub并使用#[private]宏确保只能被合约自身调用:
rust #[near_bindgen] impl Contract { #[private] pub fn resolve_transfer(&mut self) { // 回调逻辑 } }
2. 特权函数的访问控制
除了函数可见性,还需要建立访问控制白名单机制。可以自定义Trait实现:
rust pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } fn get_owner(&self) -> AccountId; fn set_owner(&mut self, owner: AccountId); }
在特权函数中调用assert_owner()可以限制只有owner才能执行:
rust impl Contract { pub fn privileged_function(&mut self) { self.assert_owner(); // 特权操作 } }
这样可以实现基本的白名单机制,还可以进一步扩展实现多用户、多白名单等复杂的访问控制。
合约的安全性需要从多个方面考虑,包括调用时机控制、多签机制等,将在后续文章中详细介绍。