簡體   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