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

results matching ""

    No results matching ""