这个问题在这里讨论过了: 并且在你提及到的改变中已经被部分实现。
就我理解的,关键点在于constant
令人被误导(constant函数不需要返回constant结果),并且不是特别微妙。完成后的改变会引入两个替代词:更具有含义和实用的view
和pure
。
现在:
- constant函数不应该改变状态(state)(没有完全强制)。
- constant状态变量(比如在类中而不是在方法中的)每次调用时会被评估。
改变之后
- 关键字view被引入(替代constant)。调用view不会改变未来与任何合约的交互行为。这意味着这样的函数不能使用SSTORE,不能发送或接受ether,仅能调用其他view或者pure函数
- 关键字pure被引入. 它们是附加了一个限制的view函数,这个限制是函数中的值仅能够依赖函数参数。这意味着他们不能够使用SSTORE,SLOAD,不能发送和接受ether,不能使用msg或者block并且只能够调用其它pure函数。
- 关键字constant不能用来修饰函数。
- 关键字constant修饰变量意味着它不能够被修改。(可以被优化器放入内存或二进制码)