Solidity 修饰参数
constant
- constant 用于变量: 表明当前变量不可修改。如果修改,编辑器会报错。
- constant 用于函数: 表明当前函数中,不应该修改状态。即便修改了,编译器也不会报错。
- solc 0.4.17 之后,被废弃。取而代之的是 view 和 pure。
view 和 pure
二者相同之处在于不可修改变量。
view 是用在没有对状态(storage) 进行修改的函数上。加了 view
的函数,调用时所做的修改不会对合约的状态产生影响,只是起一个查看状态的作用。和 constant 用于函数时功能一样。另外使用 Remix 时,可以方便查看函数返回值。使用 view 时,Remix 会把调用函数的输出值放在函数右边显示,而不是在 details 里。
用途在于:
- 告诉你的同伴:这块 storage 不能乱改。或者告诉其他引用做 library 的人:这块 storage 不能乱改。
- 触发 events
- 创建其他合约
- 使用 selfdestruct
- 通过 call 方法发送 ether
- 通过 call 方法调用其他没有 view 修饰的方法
- 使用包含某些操作码的内联汇编。
pure 更加严格,表明它甚至不会读取和存储 stroage 状态,只能操作方法中本地变量。
用途在于:
- 调用
this.balance
或者<address>.balance
- 访问其他 block , tx, msg 的成员变量
- 通过 call 方法调用其他没有 pure 修饰的方法
- 使用包含某些操作码的内联汇编。
注意:
阻止函数读取 EVM 级别的状态是不可能的,只能防止它们写入状态(只能在 EVM 级别执行 view,pure 不能)。
payable
表明调用该函数可以接受以太币。当别人向你的合约地址转账时就会触发。
如果合约中不声明 payable 方法,也会有个匿名方法:fallback function 被触发。
这个方法想要正常工作最少需要 2300 gas。
下列操作会花费大于 2300gas:
- 存储 storage
- 创建合约
- 调用外部方法
- 发送 ether
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Solidity 可见性修饰符
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论