solidity函数修饰符概览

概览

本文用于记录目前接触到的函数修饰符。

可见性修饰符

决定函数何时和被谁调用。

private :只能被合约内部调用;
internal :只能被合约内部调用或者被继承的合约调用;

public :可以在任何地方调用,不管是内部还是外部;
external:只能从合约外部调用;

状态修饰符

用来表示函数如何和区块链交互。

view :运行这个函数不会更改和保存任何数据;
pure :运行这个函数不仅不会往区块链写数据,甚至不从区块链读取数据;
这两种在被合约外部调用的时候都不花费任何gas,但是它们在被内部其他函数调用的时候将会耗费gas。

自定义modifiers

如onlyowner、aboveLevel等自定义的modifiers,对于这些修饰符我们可以自定义其对函数的约束逻辑。

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    
    
    require(msg.sender == owner);
    _;
  }

这些修饰符可以同时作用于一个函数定义上,如:

function test() external view onlyOwner anotherModifier {
    
     /* ... */ }

payable修饰符

可以接收以太的特殊函数

contract OnlineStore {
    
    
  function buySomething() external payable {
    
    
    // 检查以确定0.001以太发送出去来运行函数:
    require(msg.value == 0.001 ether);
    // 如果为真,一些用来向函数调用者发送数字内容的逻辑
    transferThing(msg.sender);
  }
}

msg.value 是一种可以查看向合约发送了多少以太的方法,另外 ether 是一个內建单元。

注意: 如果一个函数没标记为payable, 而你尝试利用上面的方法发送以太,函数将拒绝你的事务。

猜你喜欢

转载自blog.csdn.net/qq_35784487/article/details/123324276