30.Solidity-modifier_3

本文展示了一个使用Solidity编写的智能合约示例,重点介绍了如何利用modifier来增强代码的重用性和拓展性。示例中定义了不同级别的访问控制,并应用于修改合约状态的函数。
 pragma solidity 0.8.0;

 contract modifierTest{
    uint public level = 10;
    string public name;
    uint public Dna;
函数的modifier是可以有参数的
modifier controllevel(uint needlevel){
    require(level > = needlevel);
    _;
}
使用modifier。增加代码的重用性和拓展性
    function changeName()public controllevel(2){
       // require(level >= 2);
        name = "csb";
    }
    function changeDna()public controllevel(10){
        //require(level >=10);
        Dna= 999;
    }
 }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; contract PermissionSystem { // 角色枚举 enum Role { None, Breeder, // 养殖场 Processor, // 加工厂 Logistics, // 物流商 Consumer, // 消费者 Admin // 系统管理员 } // 权限枚举 enum Permission { SubmitBreedData, // 提交养殖数据 ReadOwnHistory, // 读取自身历史记录 SubmitBatchData, // 提交生产批次数据 ProvideInspectionReport, // 提供质检报告 TriggerStatusChange, // 触发"可出厂"状态变更 UpdateTransportInfo, // 更新运输节点信息 QueryTraceability, // 查询产品溯源 ManageRoles, // 角色管理 EmergencyFreeze, // 紧急冻结批次 UpgradeContract // 合约升级 } // 角色-权限映射 mapping(Role => Permission[]) private _rolePermissions; // 用户-角色映射 mapping(address => Role) private _userRoles; // 事件定义 event RoleUpdated(address indexed user, Role role); event ContractUpgraded(); constructor() { _initializePermissions(); // 部署者自动获得 Admin 角色 _userRoles[msg.sender] = Role.Admin; } // 初始化权限配置 function _initializePermissions() private { _rolePermissions[Role.Breeder] = [ Permission.SubmitBreedData, Permission.ReadOwnHistory ]; _rolePermissions[Role.Processor] = [ Permission.SubmitBatchData, Permission.ProvideInspectionReport, Permission.TriggerStatusChange ]; _rolePermissions[Role.Logistics] = [ Permission.UpdateTransportInfo ]; _rolePermissions[Role.Consumer] = [ Permission.QueryTraceability ]; _rolePermissions[Role.Admin] = [ Permission.ManageRoles, Permission.EmergencyFreeze, Permission.UpgradeContract ]; // 明确初始化 None 角色为空权限数组 _rolePermissions ; } // 权限校验修饰符 modifier hasPerm(Permission perm) {
03-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值