Solidity: `view` 和 `constant` 有什么不同?

Solidity 0.4.16 引入了viewconstant函数修饰符。文档里说:

constant for functions:Same as view.

这是不是说view只是constant的别名?如果这样,我们为什么需要它?

请先 登录 后评论

1 个回答

会飞的猪

这个问题在这里讨论过了: 并且在你提及到的改变中已经被部分实现。

就我理解的,关键点在于constant令人被误导(constant函数不需要返回constant结果),并且不是特别微妙。完成后的改变会引入两个替代词:更具有含义和实用的viewpure

现在:

  • constant函数不应该改变状态(state)(没有完全强制)。
  • constant状态变量(比如在类中而不是在方法中的)每次调用时会被评估。

改变之后

  1. 关键字view被引入(替代constant)。调用view不会改变未来与任何合约的交互行为。这意味着这样的函数不能使用SSTORE,不能发送或接受ether,仅能调用其他view或者pure函数
  2. 关键字pure被引入. 它们是附加了一个限制的view函数,这个限制是函数中的值仅能够依赖函数参数。这意味着他们不能够使用SSTORE,SLOAD,不能发送和接受ether,不能使用msg或者block并且只能够调用其它pure函数。
  3. 关键字constant不能用来修饰函数。
  4. 关键字constant修饰变量意味着它不能够被修改。(可以被优化器放入内存或二进制码)
请先 登录 后评论
  • 1 关注
  • 0 收藏,5396 浏览
  • 张小风 提出于 2019-12-11 10:39