Ownable
主要概念
所有权管理
该系统指定一个所有者,该所有者具有对标有 #[only_owner]
宏的函数的独占访问权限。为了使模块正常运行,理想情况下,必须在合约初始化期间设置初始所有者。
与 Access Control 模块一样,所有权转移以两步流程实现,以防止意外或恶意的接管:
-
当前所有者通过指定新所有者和到期时间 (
live_until_ledger
) 发起 转移。 -
指定的新所有者必须*显式接受*转移才能完成它。
在转移被接受之前,原始所有者保留完全控制权,并且可以通过发起新的转移或使用 live_until_ledger
为 0
来覆盖或取消转移。
使用示例
这是一个使用 Ownable 模块的简单示例:
use soroban_sdk::{contract, contractimpl, Address, Env};
use stellar_access::ownable::{self as ownable, Ownable};
use stellar_macros::only_owner;
#[contract]
pub struct MyContract;
#[contractimpl]
impl MyContract {
pub fn __constructor(e: &Env, initial_owner: Address) {
// 设置合约所有者
ownable::set_owner(e, &initial_owner);
}
#[only_owner]
pub fn update_config(e: &Env, new_value: u32) {
// 只有所有者可以调用此函数
// 实现...
}
// 任何人都可以访问此函数
pub fn get_config(e: &Env) -> u32 {
// 实现...
42
}
}