Solidity pure函数

solidity pure函数,也就是纯函数,是指函数不会读取或修改状态。

换言之,solidity pure函数不会操作链上数据。

如果函数中存在以下语句,则被视为读取状态,编译器将抛出警告。

  • 读取状态变量。
  • 访问 address(this).balance 或 <address>.balance
  • 访问任何区块、交易、msg等特殊变量(msg.sig 与 msg.data 允许读取)。
  • 调用任何不是纯函数的函数。
  • 使用包含特定操作码的内联程序集。

如果发生错误,pure函数可以使用revert()require()函数来还原潜在的状态更改。

声明为pure函数,可以在函数声明里,添加pure关键字。

示例1

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Test {
   function add(uint a, uint b) public pure returns(uint){
      return a + b; 
   }
}

运行上述程序,输入参数 2 和 1,输出:

0: uint256: product 3

示例2

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Test {
   function getResult() public pure returns(uint product, uint sum){
      uint a = 1; 
      uint b = 2;
      product = a * b;
      sum = a + b; 
   }
}

运行上述程序,输出:

0: uint256: product 2
1: uint256: sum 3

solidity view函数,也就是视图函数,是指函数只会读取状态,不会修改状态。换言之,solidity view函数只会读取链上数据,不会修改链上数据。如果函数中存在以下语句,则被视为修改状态,编译器将 ...