装饰符

@private @public @constant @payable 这样的装饰符在每个函数的开头声明。

Private

@private 使合约外部的函数无法访问此函数。

Public

@public 使该函数公开可见和可执行。例如,即使是以太坊钱包也会在查看合约时显示公共函数。

Constant

@constant 开始的函数不允许状态变量的改变,实际上,如果函数尝试更改状态变量,编译器将拒绝整个程序(带有适当的警告)。如果该函数用于更改状态变量,则不要在函数的开头使用`@ constant`。

Payable

只有以 @payable 开头声明的函数才能接收价值。

Vyper明确地实现了装饰符的逻辑。例如,如果一个函数前面有一个`@appay`装饰符和一个`@ constant`装饰符,那么Vyper代码编译过程就会失败。当然,这是有道理的,因为常量函数(仅从全局状态读取的函数)永远不需要参与值的转移。此外,每个Vyper函数必须以`@ public`或`@private`装饰符开头,以避免编译失败。同时使用`@public`装饰符和`@private`装饰符的Vyper函数也会导致编译失败。