ank*_*kur 5 blockchain ethereum solidity tron
当一个合约的函数从第二个合约的函数读取数据时(即第二个合约没有状态更改)。它消耗天然气吗?
如果您只想获取信息而不更改状态,那么您可以免费查询合同。查询意味着您可以调用任何标记为视图或纯的函数,并且没有天然气成本。在这些情况下,您询问的任何节点都可以立即回答查询,而无需询问任何其他节点。
如果你想修改状态,那么就会产生gas费用,你必须发送交易并支付gas费用。
我认为您最初的问题是关于在交易内查询是否有成本。这确实会消耗额外的气体。我在 Remix with Solidity 0.6.1 中尝试了这个实验(为了清楚起见,省略了大部分代码):
// 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);
}
Run Code Online (Sandbox Code Playgroud)
我认为它应该产生成本是有道理的,因为查询可以从单个节点回答,但事务调用必须由所有节点验证。