[英]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.