call调用是会消耗gas的,所以如果合约A利用call去调用B合约的任何函数(包括view和prue),合约A都不能声明为view。相反如果是通过函数名直接调用另外一个合约的view函数,则该调用过程不会消耗gas。猜测原因为:call调用是在不知道合约abi的情况下进行调用,无法知晓被调用者是否为view函数,所以必须做好修改合约状态(简单的说就是消耗gas)的准备;而通过函数名去进行合约外部调用,也就意味着事先已知晓被调用合约函数的情况(已知ABI),例如是否为view函数,可根据情况对函数进行说明设定。
对call调用的一点猜测
于 2022-03-08 11:03:41 首次发布
本文解析了call调用为何会消耗gas,以及为何直接通过函数名调用view函数不消耗。核心观点在于call的不确定性导致gas准备,而预知函数特性的外部调用则可避免。
2460

被折叠的 条评论
为什么被折叠?



