• Solidity constant view pure关键字的区别与联系


    在Solidity中constant、view、pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消耗gas了(是完全不消耗!),因为不需要矿工来验证。所以用好这几个关键词很重要,不言而喻,省gas就是省钱!

    这三个关键词有什么区别和联系,简单来说,在Solidity v4.17之前,只有constant,后来有人嫌constant这个词本身代表变量中的常量,不适合用来修饰函数,所以将constant拆成了view和pure。view的作用和constant一模一样,可以读取状态变量但是不能改;pure则更为严格,pure修饰的函数不能改也不能读状态变量,否则编译通不过。

    测试代码:

    pragma solidity ^0.4.21;
    
    contract constantViewPure{
        string name;
        uint public age;
        
        function constantViewPure() public{
            name = "liushiming";
            age = 29;
        }
        
        function getAgeByConstant() public constant returns(uint){
            age += 1;  //声明为constant,在函数体中又试图去改变状态变量的值,编译会报warning, 但是可以通过
            return age;  // return 30, 但是!状态变量age的值不会改变,仍然为29!
        } 
        
        function getAgeByView() public view returns(uint){
            age += 1; //view和constant效果一致,编译会报warning,但是可以通过
            return age; // return 30,但是!状态变量age的值不会改变,仍然为29!
        }
        
        function getAgeByPure() public pure returns(uint){
            return age; //编译报错!pure比constant和view都要严格,pure完全禁止读写状态变量!
            return 1;
        }
    }

    更多参考 :

    文字版 https://www.youfoundron.com/blog/solidity-constant-vs-view-vs-pure/

    视频版 https://www.youtube.com/watch?v=UIP4h505SEU

  • 相关阅读:
    软件工程概论(课堂作业01)
    java小程序(课堂作业06)
    动手动脑(课堂作业06)
    动手动脑(课堂作业05)
    java小程序(课堂作业04)
    动手动脑(课堂作业04)
    java小程序(课堂作业03)
    动手动脑(课堂作业03)
    动手动脑(课堂作业02)
    Codeforces 178B1-B3 Greedy Merchants
  • 原文地址:https://www.cnblogs.com/huahuayu/p/8604873.html
Copyright © 2020-2023  润新知