繁体   English   中英

如果一个智能合约从另一个智能合约读取数据,是否需要消耗 gas?

[英]If one smart contract reads data from another smart contract, does it costs gas?

当一个合约的函数从第二个合约的函数读取数据时(即,第二个合约没有状态变化)。 会消耗gas吗?

1)查询

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

2) 交易

如果你想修改状态,那么就会有 gas 成本,你必须发送交易并支付 gas。

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);
   }

我认为它应该产生成本是有道理的,因为可以从单个节点回答查询,但交易调用必须由所有节点验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM