学习资源:https://learnblockchain.cn/docs/solidity

https://remix.ethereum.org/

https://github.com/OpenZeppelin/openzeppelin-contracts/

view 修饰的函数 ,是constant的别名,只能读取storage变量的值,不能写入。以下表示状态进行了更改:

  • 修改状态变量。
  • 产生事件(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 的函数。
  • 使用低级调用。
  • 使用包含特定操作码的内联汇编。

pure 修饰的函数 ,不能对storage变量进行读写。以下被认为是从状态中读取:

  • 读取状态变量。
  • 访问 this.balance 或者 <address>.balance。
  • 访问 block,tx, msg 中任意成员 (除 msg.sig 和 msg.data 之外)。
  • 调用任何未标记为 pure 的函数。
  • 使用包含某些操作码的内联汇编。

constant 常量,意味着不可变化。可以读取状态变量但是不能改变,5.0之后会废除。

以上本地执行均不需要消耗gas

payable  当一个函数被 payable 修饰,表示调用这个函数时,可以附加发送一些 ETH(当然也可以不发)。

没有加 payable 的函数,则没有方法接受 ETH, 附加 ETH 调用会出错。

说明:在5.0之后,address被分成address payable 和 address, 用于区分是否接收金额,都是使用底层call()方法,

不同点是只有payable修饰的才能调用.transfer()和.send() 。

address payable 可以隐式转为 address,address转为address payable 需要先转化为整数类型(如unit160)

address payable[] 可转address[],但是直接数组转换

solidity的内置变量中,一下都是address payable

  • msg.sender
  • tx.origin
  • block.coinbase

solidity 关键字constant/view/pure/payable的区别相关推荐

  1. Solidity constant view pure关键字的区别

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

  2. Oracle public view,【易错概念】以太坊Solidity函数的external/internal,public/private,view/pure/payable区别...

    1. 函数类型:内部(internal)函数和外部(external)函数 函数类型是一种表示函数的类型.可以将一个函数赋值给另一个函数类型的变量,也可以将一个函数作为参数进行传递,还能在函数调用中返 ...

  3. python方法和函数的格式是完全一样的_【python基础语法】常用内置函数、关键字、方法和之间的区别(小结)...

    '''关键字: False:bool数据类型 True:bool数据类型 None:表示数据的内容为空 and:逻辑运算符:与 or:逻辑运算符:或 not:逻辑运算符:非 in:身份运算符,判断变量 ...

  4. 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)...

    1. SurfaceView 游戏框架实例 实例效果:就是屏幕上的文本跟着点击的地方移动,效果图如下: 步骤: 新建项目"GameSurfaceView",首先自定义一个类&quo ...

  5. SurfaceView和View最本质的区别

    SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面. 那么在UI的主线程中更新画面 可能会引发问题, ...

  6. 9. solidity 常数 constant 与 immutable

    9. 常数 constant 与 immutable 状态变量在声明constant(常量)和immutable(不变量)这个两个关键字之后,就不能在合约后更改数值.这样做还可以节省gas. 另外,i ...

  7. SOLIDITY关键字EMIT

    引入emit背景: ERC20 token标准介绍了一种Transfer事件以及一个transfer()方法. 它们的调用语法不完全相同: transfer(address to, uint valu ...

  8. java重写和重载 关键字_Java重写和重载的区别

    一.重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 二.重载(Overload) 重载(overloading) 是 ...

  9. Flutter中关键字Const和Final之间的区别

    main() {     // 同时赋值已经确定好的值const和final是没有区别的   const date = '2020-09-01';   final date2 = '2020-09-0 ...

  10. Solidity-constant、view、pure的区别

    最近在学智能合约的编写,其中,对constant view pure的认识很模糊,于是查了些资料总结一下. 首先,这三个修饰词都意味着不需要消耗gas. 1.constant 常量,意味着不可变化.可 ...

最新文章

  1. JAVA基础14-Java接口及其使用
  2. JAVA实现链表的反转(《剑指offer》)
  3. 07. 分页写法小结
  4. 成为Java GC专家(5)—Java性能调优原则
  5. Android插件化开发之动态加载的类型
  6. linux 下i2c读写命令,S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作
  7. (爱加密系列教程十二) 如何防止jd-gui查看代码
  8. OpenCV笔记之六(4)——图像处理之颜色通道拆分、合并及颜色空间
  9. Python办公自动化实战 01 | Python优势与自动化思维让你的工作化繁为简
  10. 电子凸轮追剪曲线生成算法 理解后可转成其他品牌PLC或任何一种编程语言
  11. 女生转行软件测试难吗?
  12. 2017年中兴捧月神算师算法精英挑战赛之阿尔法勒克斯特派(AlphaNext派)-----进来加群咯
  13. SpringCloudGateway路由定义存至Mysql数据库
  14. HTML(二) -- 表格设计
  15. xpath常见错误:Opening and ending tag mismatch: meta line 4 的处理方法【Python爬虫】
  16. 2021年金属非金属矿山(小型露天采石场)安全管理人员复审考试及金属非金属矿山(小型露天采石场)安全管理人员考试申请表
  17. 啦啦外卖独立版41.7完美运营版!全功能插件
  18. 【解决】GitHub 客户端下载后安装在哪里?
  19. 猜数字游戏(Python下的jupyter)
  20. 计算机视觉方向如何写文章

热门文章

  1. 给Android平板添加字体,以华为平板为例
  2. ftp免费空间,1种适合小白级别的搭建ftp免费空间的方法
  3. 助力运动:实时乒乓球视频分析
  4. 软件需求分析——非功能性需求
  5. Tungsten Fabric知识库丨更多组件内部探秘
  6. Python练习题答案: 第一步,成为百万富翁 - 汇率卡塔【难度:2级】--景越Python编程实例训练营,1000道上机题等你来挑战
  7. Stack和Queue:后进先出和先进先出和Java 实现后进先出(LIFO)及Stac和Java集合类: Set、List、Map、Queue使用场景梳理 - .Little Hann
  8. 【解读基金-我的投资观与实践】阅读笔记
  9. c语言空白不占位置的符号,不占位置的符号_空白代码不占位置
  10. 【谷粒学院】通过对象存储OSS上传图片