solidity的函数修改器(modifier)
modifier的定义
官方文档:modifier可以改变函数的行为。可以被继承和重写。
其实modifier被用于最多的是行为检查,这样可以使得减少检查代码的复用以及让代码看起来更简介易懂。比如,检查调用者是否有权限执行这个函数,传入的参数是否有错误等等。但是modifier不仅仅于此。通过一下一个例子来熟悉了解一下modifier的用法:
// 建立了一个NoteBook的合约,只有NoteBook的拥有者才可以修改其内容record
contract NoteBook{
string public record; // NoteBook的内容
address owner; // NoteBook的拥有者constructor() {owner = msg.sender;
}// 修改record的内容
function changeRecord(string memory _record) public isOwner {record = _record;
}// 函数修改器:判断是否是NoteBook的
modifier isOwner{require(msg.sender == owner, "You are not the owner of this NoteBook");_;
}
}
上述例子中,我们通过关键字 modifier 后面接函数修改器名 NoteBook 来定义一个modifier。在上述定义的modifier中如果调用者不是拥有者则会停止执行接下来的代码,并在控制台输出自定义的原因。如果是的话则执行到 _ 处,_ 代表使用该modifier的函数体,这里即为changeRecord 函数的函数体。在执行changeRecord 函数前先会使用isOwner进行检查,没有问题后才会执行。
modifier对函数参数的操作
执行函数时有时候也会对函数的参数有所要求,为了让函数内的代码更简洁我们便可以写在modifier中。那如何对函数参数进行检查呢?这个和函数的操作一样,调用时传参便可。看如下例子:
// 这个合约可以执行运算
contract Operation{
// 除法运算
function division(uint256 opt1, uint256 opt2) public checkZero(opt2) pure returns(uint256){return opt1 / opt2;
}// 检查除数是否为0
modifier checkZero(uint256 divisor) {require (divisor != 0, "divisor can't be 0");_;
}
}
在以上代码中我们需要做的是检查除法运算中的除数是否为0,若是0则中止运行,并给予提示。代码简单就不啰嗦了。
当然modifier还可以对storage中的变量进行检查,
modifier的执行顺序
一个函数可能需要做多个检查,那么我们可以写多个modifier,调用时只需将每个modifier以空格隔开。而检查顺序也就是modifier们的排列顺序。
但还有一种可能会迷惑大家的写法:
contract modifierOder {
address owner;
uint256 a;
constructor() {owner = msg.sender;
}function test(uint num) public checkPara(num) returns(uint256) {a = 10;return a;
}// 修改a
modifier checkPara(uint number) {a = 1;_;a = 100;
}
}
如以上代码所示:在 _后又有一句代码a = 100 。函数执行完return后,后面的代码则不再执行,但是在modifier中,执行完函数体 _ 还会接着执行 a = 100 这条语句。所以尽管函数返回的a 的值为10,但是最后a的值变成了100。
以上所有代码都是给予solidity 0.7.x的编译器
USB Microphone https://www.soft-voice.com/
Wooden Speakers https://www.zeshuiplatform.com/
亚马逊测评 www.yisuping.cn
深圳网站建设www.sz886.com
solidity的函数修改器(modifier)相关推荐
- solidity modifier函数修改器 智能合约开发知识浅学(三)
环境说明: Ide:在线remix Solidity IDE 语言:solidity solidity 版本号:0.4.20 Tip:如果一点都不懂的建议从头开始看 运行结果截图我不赘述,所有合约代码 ...
- 【solidity】函数修饰器(Function Modifiers)
修饰符可用于以声明方式更改函数的行为.例如,您可以使用修饰符在执行函数之前自动检查条件. 检查调用者权限 // SPDX-License-Identifier: GPL-3.0 pragma soli ...
- Blender2.8入门教程(1): 物体操作、物体编辑、修改器Modifier
目录 说明及效果 快捷键说明 1. 物体基本操作 2. 物体编辑 3. 调整视图 构建模型 A. 制作雪糕筒 1. 新建Cylinder Object 2. 调整Cylinder的大小 3. 进入Ed ...
- Blender基础:阵列修改器、倒角修改器、镜像修改器
1.修改器 修改器Modifier,对模型进行修改 相当于一个函数,类似于y=f(x) 演示: 1.选中一个mesh类型的物体 2.修改器属性,添加修改器|倒角修改器 3.点 实时.打开/关闭修改 ...
- Blender基础:曲线修改器、晶格修改器
目录 1.曲线修改器 2.几个细节 3.半径与倾斜 4.练习锁链 5.晶格 6.晶格修改器 7.练习空间扭曲效果 形变类修改器,使物体产生形变.例如,曲线修改器.晶格修改器 1.曲线修改器 曲线函数修 ...
- 植物大战僵尸 php,植物大战僵尸修改器使用方法 PHP __autoload函数(自动载入类文件)的使用方法...
这也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例子: 复制代码 代码如下: class ClassA{ ...
- 奥德赛修改器_我的奥德赛发现最受欢迎的python函数
奥德赛修改器 介绍(Introduction) The other day while I was running some zip() with some lists through a map() ...
- C++编程思想 第1卷 第9章 内联函数 内联函数 访问器和修改器
一些人进一步访问函数的概念分为访问器 accessor,用于从一个对象读状态 信息和 修改器 mutator 用于修改状态信息. 而且,可以用重载函数为访问器 和修改器提供相同函数名,调用函数的方式决 ...
- ethereum(以太坊)(七)--枚举/映射/构造函数/修改器
pragma solidity ^0.4.10;//枚举类型 contract enumTest{enum ActionChoices{Left,Right,Straight,Still}// 0 1 ...
最新文章
- [20170419]bbed探究数据块.txt
- 用动画实现android app启动界面的渐变效果
- python变量如何使用,python如何使用变量
- 后处理没有pui文件怎么打开_UG后处理添加具体步骤
- 解决windows指纹登录不灵问题
- 郭新华 php,PHP常驻进程编程需知 郭新华 PHPCON2019
- java oracle数据库高效分页查询_Oracle学习之分页查询数据
- getNextElement( )函数——获取下一个特定的元素节点
- 记录一个表,COUNT多列的写法
- 冰点文库下载器,文库免费下载(唯一可用的版)
- 计算机网络在办公自动化的应用,浅析计算机网络在办公自动化中的作用
- win10分屏任务快捷键
- 如何正确在CSDN问答进行提问
- 补天漏洞响应平台基本介绍
- deepstream视频数据流分析工具包安装使用教程
- [转]CreateDIBitmap与CreateDIBSection
- c c++实现restful api服务 c c++实现http服务
- 大数据的四个成功案例(来自IT经理网)
- 中国程序员VS美国程序员,太形象了...
- Linux 安装VMware Tools(open-vm-tools)实现桌面全屏、跨平台复制等功能
热门文章
- MYSQL笔试题(考试题)附带答案
- Spring Boot 3.0.0-M1 Reference Documentation(Spring Boot中文参考文档)-附录A-C
- 苹果手机对html的要求,原神iPhone 8能玩吗?苹果手机最低配置要求一览
- C# 终本案件、综合执行人、裁判文书爬虫
- Ocr 图文识别技术——基于百度云OCR技术学习与总结
- 李兴华内部JAVA培训视频 (难找啊)
- 树莓派水星USB无线网卡MW150US配置
- 从零开始画自己的DAG作业依赖图(四)--节点连线优化版
- 【JAVA长虹键法】第八式 代理模式(23种设计模式)
- 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类_PHP教程...