当前位置: 首页 > news >正文

做网站最烂公司/香港百度广告

做网站最烂公司,香港百度广告,网站开发的公司电话,wordpress 修改gravatar方法2019独角兽企业重金招聘Python工程师标准>>> 通过本文学习,熟悉了解以太坊智能合约语言Solidity语法中constant,view,pure的区别。 1 区别总结 在Solidity中constant,view,pure三个函数修饰词的作用是告诉编…

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

image

通过本文学习,熟悉了解以太坊智能合约语言Solidity语法中constant,view,pure的区别。

1

区别总结

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

在Solidity v4.17之前,只有constant,后来有人嫌constant这个词本身代表变量中的常量,不适合用来修饰函数,所以将constant拆成了view和pure。

  • view的作用和constant一模一样,可以读取状态变量但是不能改;

  • pure则更为严格,pure修饰的函数不能改也不能读状态变量,否则编译通不过。

大家可以运行以下测试代码来加深这3个关键字的理解。

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;}}

2

详细描述

2.1 Constant 状态变量

状态变量可以被声明为 constant。在这种情况下,只能使用那些在编译时有确定值的表达式来给它们赋值。 任何通过访问 storage,区块链数据(例如 now, this.balance 或者 block.number)或执行数据( msg.gas ) 或对外部合约的调用来给它们赋值都是不允许的。 在内存分配上有边界效应(side-effect)的表达式是允许的,但对其他内存对象产生边界效应的表达式则不行。 内建(built-in)函数 keccak256,sha256,ripemd160,ecrecover,addmod 和 mulmod 是允许的(即使他们确实会调用外部合约)。

允许带有边界效应的内存分配器的原因是这将允许构建复杂的对象,比如查找表(lookup-table)。 此功能尚未完全可用。

编译器不会为这些变量预留存储,它们的每次出现都会被替换为相应的常量表达式(这将可能被优化器计算为实际的某个值)。

不是所有类型的状态变量都支持用 constant 来修饰,当前支持的仅有值类型和字符串。

pragma solidity ^0.4.0;contract C {uint constant x = 32**22 + 8;string constant text = "abc";bytes32 constant myHash = keccak256("abc");}

2.2 View 函数

可以将函数声明为 view 类型,这种情况下要保证不修改状态。

下面的语句被认为是修改状态:

  • 修改状态变量。

  • 产生事件(https://solidity-cn.readthedocs.io/zh/develop/contracts.html?highlight=view#events)。

  • 创建其它合约(https://solidity-cn.readthedocs.io/zh/develop/control-structures.html#creating-contracts)。

  • 使用 selfdestruct。

  • 通过调用发送以太币。

  • 调用任何没有标记为 view 或者 pure 的函数。

  • 使用低级调用。

  • 使用包含特定操作码的内联汇编。

pragma solidity ^0.4.16;contract C {function f(uint a, uint b) public view returns (uint) {return a * (b + 42) + now;}}

注解:

  • onstant 是 view 的别名。

  • Getter 方法被标记为 view。

  • 编译器没有强制 view 方法不能修改状态。

2.3 Pure 函数

函数可以声明为 pure ,在这种情况下,承诺不读取或修改状态。

除了上面解释的状态修改语句列表之外,以下被认为是从状态中读取:

  • 读取状态变量。

  • 访问 this.balance 或者 <address>.balance。

  • 访问 block,tx, msg 中任意成员 (除 msg.sig 和 msg.data 之外)。

  • 调用任何未标记为 pure 的函数。

  • 使用包含某些操作码的内联汇编。

pragma solidity ^0.4.16;contract C {function f(uint a, uint b) public pure returns (uint) {return a * (b + 42);}
}

警告

编译器没有强制 pure 方法不能读取状态。

本文作者:HiBlock区块链社区技术布道者辉哥

原文发布于简书

区块链马拉松|Blockathon(2018)上海 邀请你来观看路演啦~

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

image

转载于:https://my.oschina.net/u/3782027/blog/2249128

http://www.jmfq.cn/news/5202541.html

相关文章:

  • 一级a做爰片免费网站孕交视频教程/杭州百度推广公司有几家
  • 阿里巴巴的网站怎么做/搜索引擎优化培训免费咨询
  • 可以做兼职的网站/石嘴山网站seo
  • 做一个网站要注意什么东西/百度指数网页版
  • wordpress 评论已关闭/公司网站如何seo
  • 学做土建资料员的网站/专业的制作网站开发公司
  • 菜鸟做网站/怎么注册域名
  • 江苏做网站怎么收费多少/小说推广接单平台
  • 屏山县建设招标网站/现在做推广的新渠道有哪些
  • 淄博外贸网站建设公司/广州seo网站营销
  • 网站建设公司广东/上海牛巨微seo
  • 城市建设鹤岗市网站/交换友情链接前后必须要注意的几点
  • 垃圾桶东莞网站建设/网站推广策划案
  • 用eclipse做网站开发/苏州seo关键词优化方法
  • 品牌包包都有哪些牌子/厦门seo网站排名优化
  • 投资集团网站建设/如何创建公司网站
  • 介绍好的电影网站模板下载/合作seo公司
  • 企业网站怎么做/咸阳seo
  • 建个网站需要多少钱圣宝电动车大架号在哪里/大数据培训班出来能就业吗
  • 闸北做网站公司/常见的网络推广方法
  • 百货商城网站建设/百度导航2023年最新版
  • 政协网站建设申请函/百度推广竞价开户
  • wordpress 子目录 404/上海优化公司有哪些
  • 仪器仪表网站制作/网络营销的特点有几个
  • 我做的网站平台百度搜不到/最新的新闻 今天
  • wordpress卡密/南昌seo排名扣费
  • 建设银行融信通网站/建设网站的步骤
  • 中央广播电视总台2024网络春晚/四川seo快速排名
  • 网站外包公司/搜索引擎营销特点是什么
  • 甘肃交通工程建设监理有限公司网站/网站友链