对call调用的一点猜测

call调用是会消耗gas的,所以如果合约A利用call去调用B合约的任何函数(包括view和prue),合约A都不能声明为view。相反如果是通过函数名直接调用另外一个合约的view函数,则该调用过程不会消耗gas。猜测原因为:call调用是在不知道合约abi的情况下进行调用,无法知晓被调用者是否为view函数,所以必须做好修改合约状态(简单的说就是消耗gas)的准备;而通过函数名去进行合约外部调用,也就意味着事先已知晓被调用合约函数的情况(已知ABI),例如是否为view函数,可根据情况对函数进行说明设定。

猜你喜欢

转载自blog.csdn.net/kugool/article/details/123348443