Solidity中的只读函数

170 阅读2分钟

基本概念

在Solidity中,viewpure是用于修饰函数的两个关键字,它们表明了函数对区块链状态的修改程度:

1. view 函数

  • view函数声明不会修改区块链的状态,但可以读取状态变量的值。
  • 这些函数主要用于返回某些状态变量的当前值或执行一些不会改变状态的计算。

2. pure 函数

  • pure函数声明既不会读取也不会修改区块链的状态。
  • 这些函数完全依赖于其输入参数,并且只执行与状态无关的计算。

view 函数示例

pragma solidity ^0.8.26;

contract ViewExample {
    uint256 public number;

    constructor(uint256 _initialNumber) {
        number = _initialNumber;
    }

    // view函数,读取状态变量number,但不修改它
    function getNumber() public view returns (uint256) {
        return number;
    }

    // 非view函数,修改状态变量number
    function setNumber(uint256 _newNumber) public {
        number = _newNumber;
    }
}

在上面的示例中,getNumber是一个view函数,因为它读取了状态变量number但没有修改它。setNumber则是一个普通的非view函数,因为它修改了状态变量number

pure 函数示例

pragma solidity ^0.8.26;

contract PureExample {

    // pure函数,不读取也不修改任何状态变量
    function add(uint256 a, uint256 b) public pure returns (uint256) {
        return a + b;
    }

    // 非pure函数,读取状态变量但不修改它
    function multiplyWithNumber(uint256 a, uint256 b) public pure returns (uint256) {
        return a * b;
    }
}

在上面的示例中,add是一个pure函数,因为它不依赖于任何状态变量,只依赖于输入参数ab进行计算。类似的,multiplyWithNumber也只依赖于其输入参数,并不读取或修改任何状态变量。

总结

  • view函数可以读取区块链上的状态,但不能修改它。
  • pure函数既不能读取也不能修改区块链上的状态。

这两种函数修饰符有助于优化合约的可读性和安全性,并且在编译时提供额外的错误检查。

最后

写文章不易,如果文章对您有帮助,欢迎点个赞,您的支持是我写作的最大动力。

相关资料、源码已同步github github.com/MagicalBrid… 欢迎star