q363657448的个人博客分享 http://blog.sciencenet.cn/u/q363657448

博文

智能合约中的modifier和enum

已有 499 次阅读 2019-5-15 09:36 |系统分类:科研笔记| 智能合约, solidity

本次主要简单介绍智能合约的modifier和enum类型

modifier是函数的修改器,可以为函数控制其中的逻辑。例如在智能合约中常常会出现只有谁才能执行这个行为,这个时候可以通过modifier函数修改器,限定某个条件,从而达成权限限定的效果。下面是一段简单的代码解释修改器的使用。

pragma solidity ^0.5.1;

contract testModifier{

    uint256 testNum = 1;

    string status = "验证成功";

    

    modifier OnlyNum(){

        require (testNum == 1);

        _;

    }

    

    function setNum(uint256 a) public{

        testNum = a;

    }

    

    function getNum() view public OnlyNum returns(string memory){

        return status;

    }

}

首先声明solidity版本号,然后声明变量testNum和status。其中关键字为modifier,函数修改器的名字为OnlyNum。另外还有两个函数setNum()和getNum(),其中函数getNum()中加入了OnlyNum函数修改器,因此只有满足(require(testNum == 1))时才能运行函数。这里主要是测试只有testNum为1时,才能返回状态值。由于默认情况先我们已经赋值了testNum为1,因此直接运行getNum()函数时会得到验证成功的状态,而当使用setNum()函数赋值新的值时(1除外),再次执行getNum()函数会显示失败。下面是在Remix测试的图。

2.JPG

从右边的执行结果可知,初试状态下直接执行可以成功,而当我将testNum设置为0的时候,则执行失败了。这就是modifier函数修改器的一个作用,可以限制一定的条件,控制函数的逻辑,从而让项目结构清晰合理。


第二个是enum类型。

enum结构的基本类型如下:

enum tradeProduct{

    New,

    Old

}

这个enum主要是描述产品是否已经交易了(New, Old)(其中返回时New为0,Old为1)。

下面是测试的代码。

pragma solidity ^0.5.1;

contract ProductStatus{

    struct productSta{

        tradeProduct status;

    }

    

    enum tradeProduct{

        New,

        Old

    }


    function getProStatus() pure public returns(tradeProduct){

        productSta memory product = productSta(tradeProduct.New);

        return product.status;

    }

}

其中enum描述的是产品是否已经交易过。另外函数getProStatus()是返回产品的状态,从实例中可以看出,如果构建productSta结构体传入的是tradeProduct.New, 则返回值为0,如果构建productSta结构体传入的是tradeProduct.Old, 则返回值为1。在本次例子中传入的是tradeProduct.New,因此返回值应该是0。通过在Remix中测试可知,本次返回值为0。其结果如下图所示。


上图的右边显示的是uint8 0,因此结果也是正确的。enum通常是用在struct当中,描述struct中的某个状态。

以上是简单介绍智能合约中的modifier关键字和enum类型。具体想往深入的了解可以通过百度搜索。modifier和enum在实现智能合约功能的时候也经常会用到,因此学习区块链智能合约开发的朋友还是要深入去了解solidity代码的编写和相应的规则。



http://blog.sciencenet.cn/blog-3410412-1179101.html

上一篇:在Ubuntn上搭建以太坊平台遇到的几个问题
下一篇:solidity的结构体struct

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的精选博文

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2019-11-19 10:45

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部