[英]If one smart contract reads data from another smart contract, does it costs gas?
当一个合约的函数从第二个合约的函数读取数据时(即,第二个合约没有状态变化)。 会消耗gas吗?
如果您只想在不更改状态的情况下获取信息,那么是的,您可以免费查询合同。 查询意味着您可以调用任何标记为view或pure的函数,并且没有 gas 成本。 在这些情况下,您询问的任何节点都可以立即回答查询,而无需询问任何其他节点。
如果你想修改状态,那么就会有 gas 成本,你必须发送交易并支付 gas。
我认为您最初的问题是关于在事务内部查询是否有成本。 这确实会消耗额外的气体。 我在使用 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.