Solidity 合约权限控制模板

文章目录

  • 前言
    • [Solidity 合约权限控制模板](#Solidity 合约权限控制模板)
      • [1. 作用](#1. 作用)
      • [2. demo](#2. demo)
      • [3. 测试](#3. 测试)

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。

  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


Solidity 合约权限控制模板

1. 作用

保证有些函数任何人都可以调用,而有些函数只有owner可以调用。

2. demo

bash 复制代码
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;


/**
* @title Ownable
* @author 自定义作者名(可修改)
* @notice 基础权限控制合约,实现「仅所有者可操作」的核心逻辑
* @dev 该合约通常作为基类被其他业务合约继承,复用权限控制逻辑
*/
contract Ownable {
    // 公开状态变量:存储当前合约所有者的以太坊地址
    // public 修饰会自动生成 getter 函数:owner(),外部可读取该值
    address public owner;

    /**
     * @dev 构造函数:合约部署时执行,仅执行一次
     * 将部署合约的钱包地址(msg.sender)赋值给 owner,作为初始所有者
     */
    constructor() {
        owner = msg.sender;
    }

    /**
     * @dev 核心权限修饰器:限制函数仅所有者可调用
     * 调用被该修饰器标记的函数时,会先执行此处的校验逻辑
     * 校验规则:调用者地址(msg.sender)必须等于 owner,否则抛出异常并提示 "not owner"
     * _; 是修饰器占位符,代表被修饰函数的核心逻辑会在此处执行
     */
    modifier onlyOwner() {
        require(msg.sender == owner, "not owner");
        _;
    }


    /**
     * @notice 安全转移合约所有权的函数
     * @dev 仅当前所有者可调用,且校验新地址非零地址,防止权限锁死
     * @param _newOwner 新的合约所有者地址
     * @dev 校验规则:_newOwner 不能是零地址(address(0)),否则抛出 "invalid address" 异常
     */
    function setOwner(address _newOwner) external onlyOwner {
        // 校验新地址有效性:防止将所有者设置为无效的零地址
        require(_newOwner != address(0), "invalid address");
        // 更新所有者地址为新地址
        owner = _newOwner;
    }


    /**
     * @notice 示例函数:仅所有者可调用的敏感操作
     * @dev 演示 onlyOwner 修饰器的使用,可替换为实际业务逻辑(如参数配置、权限管理)
     */
    function onlyOwnerCanCallThisFunc() external onlyOwner {
        // code:此处编写仅所有者可执行的逻辑(如修改合约核心参数、暂停合约等)
    }


    /**
     * @notice 示例函数:任何人可调用的公开操作
     * @dev 演示无权限限制的函数,可替换为实际公开业务逻辑(如查询数据、普通交易)
     */
    function anyOneCanCall() external {
        // code:此处编写任何人可执行的公开逻辑(如读取合约状态、发起普通交易等)
    }
}

3. 测试

1、在当前地址下,调用只能owner调用的函数成功。

2、切换地址后,在调用只能owner调用的函数时失败。

切换地址。

调用报错。

3、切换为原来的地址,调用setOwner函数,将之前的地址作为参数,让owner变为新地址,
注意的是这里切换原地址的原因是如果不是原地址,没有办法调用setOwner函数。

可以看到地址已经切换到原来的地址了,然后账户换到

0x617F2E2fD72FD9D5503197092aC168c91465E7f2

在调用onlyOwnerCanCallThisFun函数成功。

相关推荐
Web3李李18 小时前
链游想要获得市场认可,核心从来不是极致去中心化
web3·去中心化·区块链·软件开发·链游开发
mykj15511 天前
稳定的DOO算力质押系统DAPP合约底层逻辑
web3·区块链·dapp·rwa·质押挖矿
大鱼>1 天前
以太坊Layer2扩容:Optimistic vs ZK-Rollup完整对比
区块链
汇策研习社2 天前
斐波那契均线交易体系:21/55/89三重均线趋势战法详解
大数据·经验分享·金融·区块链·fastbull
同花顺期货通2 天前
期货新手入门品种筛选:2026年低保证金高流动性品种深度解析
区块链
磐链科技2 天前
从Truffle到Hardhat:DApp开发框架的技术演进与工程化最佳实践
区块链
网渡科技2 天前
智能合约审计流程详解:如何在部署前发现高危漏洞
区块链·智能合约
LedgerNinja4 天前
WEEX 真实情况如何?交易平台如何判断是否可靠
大数据·人工智能·区块链
卡牌RWA研究院4 天前
Relique:一张精品卡牌如何从收藏品变成可交易的链上资产?
设计模式·金融·区块链·创业创新
Web3_Daisy4 天前
Pump.fun 与 FOMO 竞争背后的 Meme 市场变局
大数据·人工智能·金融·web3·区块链