• solidity学习(六)-- 实例证明require


    pragma solidity ^0.4.21;
    
    contract GuessTheNewNumberChallenge {
        bool public flag;
       //定义了flag这个变量是bool类型的
    function setFlag() external { require(msg.sender == address(this));//判断调用者的发送地址 是否等于当前地址,成立则继续运行。 //msg.sender指的最近的调用者,“谁调用,谁负责“ //如果是setflag运行的话,则调用的账号是metemask里面的
         //按理说这里会运行,external是外部调用,运行完如果不相等的话,本地运行时先setflag--run--flag一定会是false。
         //但是这里:external是 只能 外部调用,下面又判断”最近调用者“=”当前调用者“???所以这个function一定是错误的,如果在web上运行则会报错。
    flag
    = true; } function run() public { GuessTheNewNumberChallenge(address(this)).setFlag(); //这里要求输出true,则这里首先声明合约,再写谁调用的。
         //remix可以根据按钮运行,这里我们有三个按钮:函数setFlag、函数run、变量flag。
    }
    //所有类型的默认值 require等四个关键字的区别 }

    上述代码实现了,使得最后run函数的输出结果为true。跳过了setflag函数,全部都是public,畅通无阻。

    but:

    bool没有external,想想也是,bool就合约内部判断就行了啊。

    1.当红框部分为private、internal等相关内部调用函数,则在deploy后不会显示内部调用的按钮。

     2.当bool flag的调用权限(公开) > run函数,则会显示bool flag的按钮:

     所以,每次看代码的时候,想一下怎么调用的,符不符合逻辑。看权限大小、看调用规则是否符合函数具体的require。

    资料:https://ethfans.org/posts/when-to-use-revert-assert-and-require-in-solidity

    珍惜时间,只错一次
  • 相关阅读:
    centos7添加firewalld规则
    centos7安装redis5
    Oracle 监听
    创建Oracle表空间及用户
    nginx+keepalive
    oracle 修改端口
    Oracle新建数据库
    Redhat7.5安装JBOSS4.2.0
    kubernetes的一些基本命令
    安装python3.6后使用pip报错
  • 原文地址:https://www.cnblogs.com/TEAM0N/p/15009628.html
Copyright © 2020-2023  润新知