链眼社区:专注于区块链安全,区块链数据分析, 区块链信息整合,区块链技术服务和区块链技术咨询。

solidity智能合约的pure与view剖析
admin
2021-07-17 15:05:17

pure与view代码例子

如下的一段solidity智能合约中,只要有了pure与view修饰符的函数,那么调用函数就不会消耗gas。

而没有pure与view修饰的函数,如下面的change就会消耗gas。

pragma solidity ^0.4.23;
contract HelloWorld{
    string public name = "jonson";

    function getName() public view returns(string){
        return name;
    }

    function changeName(string _name) public{
        name = _name;
    }

    function testPure(uint a,uint b) public pure returns(uint){
        return a+b;
    }
}

pure与view使用场景

view: 可以自由调用,因为它只是“查看”区块链的状态而不改变它

pure: 也可以自由调用,既不读取也不写入区块链

pure与view原理

pure:不读取更不修改区块上的变量,使用本机的CPU资源计算我们的函数。所以不消耗任何的资源这是很容易的理解的。

view: 但是view既然要读取区块链上的值,为什么也不用消耗gas呢?

其实很简单,因为作为一个全节点来说,会同步保存所有的信息,保存在本地中。

那么我们要查看区块链上的资源,同样可以直接在一个全节点之上查询数据即可。

我不需要全世界的节点都知道。都去同时的处理这笔事务。我也不需要将调用这笔函数的信息记录在区块链上。

所以view仍然不消耗gas。


申请入驻

成为作者,让更多人看到您的观点

入驻
合作伙伴