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函数只会读取链上数据,不会修改链上数据。如果函数中存在以下语句,则被视为修改状态,编译器将 ...