关于只读方法调用的gas消耗问题
发布于 6 天前 作者 kazaff 93 次浏览 来自 智能合约

在编写以太坊智能合约时,大家肯定最关注的是正确性,其次就是方法是否足够的优化,这里指的优化主要是gas消耗。

之前在看web3js的时候,关注到提到的2个方法:call 和 sendTransaction。可以看一下大牛分享的一篇帖子

在合约语法里,也有三个关键字pure、view、constant。它们用来描述合约中指定方法是否修改了合约的状态。所以,按我的理解,应该是所有简单查询合约状态(而不产生修改)的方法,都应该用这三个关键字来修饰。

在Remix在线合约开发的ide里,我进行了测试,在对应方法上增加修饰符“view”后,界面上就会用call()来调用该方法。观察了一下,确实每次调用并没有减少帐号内的ETH余额,不过查看交易详情的时候,会看到其中有两项:

transaction cost  | 	27664 gas (Cost only applies when called by a contract)
execution cost    | 	4984 gas (Cost only applies when called by a contract)

如何理解这里的两个gas消耗信息的含义?

A:到底,部署到产品环境上后,只读方法在用call()方法是否不会产生gas消耗?(按上面大牛的文章中描述,由于没有在网络中广播,而仅仅是本地节点的数据状态查询,不是不会消耗gas的)

B:若合约的“编辑状态”的方法用call()来调用,会是什么结果?报错?(在IDE里编译合约,会得到一个警告,但依然可以编译) image.png 我猜,这么做的话,这个方法只在本地节点执行,修改的状态是无法得到保存的吧?

回到顶部