• 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

    珍惜时间,只错一次
  • 相关阅读:
    vs2005&sql2005
    根据老外的方法,GridVew实现多列排序.
    @好处多多
    系统启动后,自动启动软件方法.
    A4和B5纸张大小是按什么标准划分的?
    easyui控件的加载顺序
    jQuery模拟点击A标记
    求阶乘
    文件上传
    Andriod:环境搭建与配置
  • 原文地址:https://www.cnblogs.com/TEAM0N/p/15009628.html
Copyright © 2020-2023  润新知