当前位置: 首页 > news >正文

solidity的modifier修饰符

文章目录

  • solidity的modifier修饰符
    • 什么是modifier修饰符
    • 定义修饰符
      • onlyOwner示例
      • 定义isOwner,确保只有 NFT 的所有者才能执行相应的操作
    • 参考

solidity的modifier修饰符

什么是modifier修饰符

修饰器(modifier)是solidity特有的语法,类似于面向对象编程中的decorator,声明函数拥有的特性,并减少代码冗余。

Solidity 中关键字 modifier 用于声明一个函数修改器。当它作用于一个函数上,可以在函数执行前或后(依赖于具体实现)预先执行modifier中的逻辑。

结合现实场景中的应用。在一些敏感操作中,我们需要设定特定的权限才允许执行相关操作;再者我们可以利用函数修改器进行数据的校验;

常用于如:检查输入条件、权限控制、重入控制、防止重复初始化等场景。

定义修饰符

函数修改器的定义语法如下:

modifier 修改器名 {条件体.._;
}function a() 修改器名 {函数体..
}

函数修改器中有一行代码只有下划线 _ ,在实际执行中,我们可以将被修饰函数的代码视为下划线处的代码。即,下划线实际上帮我们标记了被modifier修饰函数的执行位置。

onlyOwner示例

pragma solidity >=0.8.0;contract owned {function owned() public { owner = msg.sender; }address owner;modifier onlyOwner {require(msg.sender == owner, "Only owner can call this function.");_;}function transferOwner(address _newO) public onlyOwner {owner = _newO;}
}

在这个示例中,onlyOwner修饰器用于限制只有合约所有者可以调用该函数。如果条件满足就继续往下走,不满足返回字符串“Not owner”。

“_;” 表示在执行修饰器之后将控制流交给被修饰函数的实际执行代码块。

定义isOwner,确保只有 NFT 的所有者才能执行相应的操作

modifier isOwner(address nftAddress,uint256 tokenId,address spender
) {IERC721 nft = IERC721(nftAddress);address owner = nft.ownerOf(tokenId);if (spender != owner) {revert NotOwner();}_;
}

它接受三个参数:NFT 地址、NFT 的标识符和调用者地址,并在调用者不是 NFT 的所有者时回滚事务。这个修饰器的逻辑清晰简洁,可以有效地确保只有 NFT 的所有者才能执行相应的操作。

参考

[推荐,视频讲解清晰]【20】Solidity的modifier函数修改器
参考URL: https://www.bilibili.com/video/BV1am411k7VW/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【杂记-浅谈缺省VLAN】
  • Visual Studio Code的安装与配置
  • Web前端引言:探索数字世界的无限可能
  • Nginx+KeepAlived高可用负载均衡集群的部署
  • JAVAEE值网络编程(2)_TCP流套接字及通信模型、TCP网络编程及代码实例
  • 经典的网站系统架构(入门级)
  • 积累和消耗,人生本质的两件事
  • 12 款 Android 照片恢复应用程序列表
  • Civil 3d中 三角网曲面求取二维和三维面积
  • redis03 补充 redis驱动模型:事件驱动
  • RapidMiner数据挖掘4 —— 决策树
  • 深入理解MySQL分区技术
  • 工业烤箱设备厂家:专业制造,助力工业发展
  • Java-开发技巧
  • hcache缓存查看工具
  • ----------
  • [case10]使用RSQL实现端到端的动态查询
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • co.js - 让异步代码同步化
  • egg(89)--egg之redis的发布和订阅
  • JAVA并发编程--1.基础概念
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 初识 webpack
  • 对象管理器(defineProperty)学习笔记
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 数组大概知多少
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 问题之ssh中Host key verification failed的解决
  • 阿里云服务器购买完整流程
  • 昨天1024程序员节,我故意写了个死循环~
  • #ifdef 的技巧用法
  • #pragam once 和 #ifndef 预编译头
  • #考研#计算机文化知识1(局域网及网络互联)
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (LeetCode 49)Anagrams
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (回溯) LeetCode 131. 分割回文串
  • (蓝桥杯每日一题)love
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十一)手动添加用户和文件的特殊权限
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原创)可支持最大高度的NestedScrollView
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转载)Linux网络编程入门
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 药厂业务系统 CPU爆高分析
  • .NET6实现破解Modbus poll点表配置文件
  • .pop ----remove 删除