Rust智能合约安全:访问控制与函数可见性详解

robot
摘要生成中

Rust 智能合约养成日记(7)合约安全之访问控制

本文将从两个方面介绍Rust智能合约中的权限控制:

  1. 合约方法的可见性
  2. 特权函数的访问控制

1. 合约函数可见性

正确设置合约函数可见性对于保护合约安全至关重要。以2020年6月Bancor Network交易所的事件为例,由于将关键转账函数误设为public,导致用户资产面临风险。

在Rust智能合约中,函数可见性主要有以下几种:

  • pub fn: public函数,可从合约外部调用
  • fn: 默认internal函数,只能在合约内部调用
  • pub(crate) fn: 限制在crate内部调用

另外,在未被#[near_bindgen]修饰的impl块中定义的方法也是internal的。

对于回调函数,需要设为public但同时要进行调用者检查,可以使用#[private]宏实现。

值得注意的是,Rust默认所有内容都是private的,除了pub trait和pub enum中的项。

2. 特权函数的访问控制

除了设置函数可见性,还需要建立访问控制白名单机制。类似Solidity中的onlyOwner modifier,可以定义只有owner才能调用的特权函数。

在Rust中可以通过自定义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); }

这样可以实现基本的owner权限控制。可以进一步扩展为多用户白名单或多组白名单,实现更精细的访问控制。

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 7
  • 分享
评论
0/400
养老笑看大饼vip
· 35分钟前
合约安全第一个重量级
回复0
ser_we_are_ngmivip
· 10小时前
好难懂 溜了溜了
回复0
NFT_Therapyvip
· 07-17 01:06
权限控制得有!不然合约被薅可就GG了
回复0
Ponzi Detectorvip
· 07-17 01:05
Rust yyds 最硬核
回复0
MetaMuskRatvip
· 07-17 01:02
又见一个管理权限的,溜了溜了
回复0
ser_we_are_earlyvip
· 07-17 00:46
简单粗暴 就是加个权限控制
回复0
Meme复读机vip
· 07-17 00:40
看着就困 有谁真学了吗
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)