如果一个智能合约从另一个智能合约中读取数据,是否会耗费汽油?

时间:2020-01-21 08:42:55

标签: blockchain ethereum solidity tron

当一个合同的功能从第二个合同的功能中读取数据时(也就是说,第二个合同上没有状态更改)。它消耗汽油吗?

1 个答案:

答案 0 :(得分:1)

1)查询

如果您只想获取信息而不更改状态,则可以免费查询合同。查询意味着您可以调用任何标记为viewpure的函数,并且没有用气成本。在这种情况下,无论您问什么节点,都可以立即回答查询,而不必问其他任何节点。

2)交易

如果您要修改状态,则需要支付汽油费用,并且您必须发送交易并支付汽油费用。

3)交易内部查询

我认为您最初的问题是关于在事务内部进行查询是否存在成本。这确实消耗了额外的气体。我在带有Solidity 0.6.1的Remix中尝试了该实验(为清楚起见,省略了大多数代码):

   // Gas used = 24,656
   function SetSomethingInAnotherContract_WithoutCall() public
   {
       anotherContract.SetSomething(4);
   }

   // Gas used = 28,124
   function SetSomethingInAnotherContract_WithCall() public
   {
       uint temp = anotherContract.GetSomething(); // in a query this would be free
       anotherContract.SetSomething(4);
   }

我认为这应该引起一定的成本,因为可以从单个节点回答查询,但是必须由所有节点验证事务调用。