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

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

                  https://remix.ethereum.org/

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

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

 

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

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值