solidity 关键字constant/view/pure/payable的区别
学习资源: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的区别相关推荐
- Solidity constant view pure关键字的区别
在Solidity中constant.view.pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消耗gas了(是完全不消耗!) constant view p ...
- Oracle public view,【易错概念】以太坊Solidity函数的external/internal,public/private,view/pure/payable区别...
1. 函数类型:内部(internal)函数和外部(external)函数 函数类型是一种表示函数的类型.可以将一个函数赋值给另一个函数类型的变量,也可以将一个函数作为参数进行传递,还能在函数调用中返 ...
- python方法和函数的格式是完全一样的_【python基础语法】常用内置函数、关键字、方法和之间的区别(小结)...
'''关键字: False:bool数据类型 True:bool数据类型 None:表示数据的内容为空 and:逻辑运算符:与 or:逻辑运算符:或 not:逻辑运算符:非 in:身份运算符,判断变量 ...
- 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)...
1. SurfaceView 游戏框架实例 实例效果:就是屏幕上的文本跟着点击的地方移动,效果图如下: 步骤: 新建项目"GameSurfaceView",首先自定义一个类&quo ...
- SurfaceView和View最本质的区别
SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面. 那么在UI的主线程中更新画面 可能会引发问题, ...
- 9. solidity 常数 constant 与 immutable
9. 常数 constant 与 immutable 状态变量在声明constant(常量)和immutable(不变量)这个两个关键字之后,就不能在合约后更改数值.这样做还可以节省gas. 另外,i ...
- SOLIDITY关键字EMIT
引入emit背景: ERC20 token标准介绍了一种Transfer事件以及一个transfer()方法. 它们的调用语法不完全相同: transfer(address to, uint valu ...
- java重写和重载 关键字_Java重写和重载的区别
一.重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 二.重载(Overload) 重载(overloading) 是 ...
- Flutter中关键字Const和Final之间的区别
main() { // 同时赋值已经确定好的值const和final是没有区别的 const date = '2020-09-01'; final date2 = '2020-09-0 ...
- Solidity-constant、view、pure的区别
最近在学智能合约的编写,其中,对constant view pure的认识很模糊,于是查了些资料总结一下. 首先,这三个修饰词都意味着不需要消耗gas. 1.constant 常量,意味着不可变化.可 ...
最新文章
- JAVA基础14-Java接口及其使用
- JAVA实现链表的反转(《剑指offer》)
- 07. 分页写法小结
- 成为Java GC专家(5)—Java性能调优原则
- Android插件化开发之动态加载的类型
- linux 下i2c读写命令,S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作
- (爱加密系列教程十二) 如何防止jd-gui查看代码
- OpenCV笔记之六(4)——图像处理之颜色通道拆分、合并及颜色空间
- Python办公自动化实战 01 | Python优势与自动化思维让你的工作化繁为简
- 电子凸轮追剪曲线生成算法 理解后可转成其他品牌PLC或任何一种编程语言
- 女生转行软件测试难吗?
- 2017年中兴捧月神算师算法精英挑战赛之阿尔法勒克斯特派(AlphaNext派)-----进来加群咯
- SpringCloudGateway路由定义存至Mysql数据库
- HTML(二) -- 表格设计
- xpath常见错误:Opening and ending tag mismatch: meta line 4 的处理方法【Python爬虫】
- 2021年金属非金属矿山(小型露天采石场)安全管理人员复审考试及金属非金属矿山(小型露天采石场)安全管理人员考试申请表
- 啦啦外卖独立版41.7完美运营版!全功能插件
- 【解决】GitHub 客户端下载后安装在哪里?
- 猜数字游戏(Python下的jupyter)
- 计算机视觉方向如何写文章
热门文章
- 给Android平板添加字体,以华为平板为例
- ftp免费空间,1种适合小白级别的搭建ftp免费空间的方法
- 助力运动:实时乒乓球视频分析
- 软件需求分析——非功能性需求
- Tungsten Fabric知识库丨更多组件内部探秘
- Python练习题答案: 第一步,成为百万富翁 - 汇率卡塔【难度:2级】--景越Python编程实例训练营,1000道上机题等你来挑战
- Stack和Queue:后进先出和先进先出和Java 实现后进先出(LIFO)及Stac和Java集合类: Set、List、Map、Queue使用场景梳理 - .Little Hann
- 【解读基金-我的投资观与实践】阅读笔记
- c语言空白不占位置的符号,不占位置的符号_空白代码不占位置
- 【谷粒学院】通过对象存储OSS上传图片