Solidity

查看/純氣體使用情況 - 如果由另一個函式在內部呼叫,成本氣體?

  • January 1, 2022

我知道以前有人問過類似的問題,但是我找不到以下問題的很好解釋,

在其中一個教程中它說:

如果從合約外部呼叫 Pure 和 View 函式,呼叫它們不會花費任何 gas。但是,如果由另一個函式在內部呼叫,它們確實會消耗氣體。

  • 如果他們不更新任何東西,為什麼他們需要gas?
  • 閱讀如何花費汽油?
  • 它不是從我的本地區塊鏈中讀取的嗎?

我認為,

如果從外部呼叫 Pure 和 View 函式,則呼叫它們不會花費任何氣體

在這種情況下,不會啟動任何交易,因為這就像只是在區塊鏈中查詢其目前狀態,並且什麼都不會改變。

但是,如果由另一個函式在內部呼叫,它們確實會消耗氣體。

這意味著已經有一個交易可以改變區塊鏈的狀態,而改變狀態的過程需要使用那個純函式,比如計算。交易的 Gas 成本取決於在完成交易時執行的 EVM 操作碼的數量,因此執行該純函式也在該操作碼集中。這就是為什麼它說它需要汽油。

考慮以下契約:

pragma solidity ^0.4.24;


contract PureFunctionTest {

  uint state;

   function addNumbers(uint a, uint b) public pure returns (uint) {
      return a +b ;
  }

  function updateState(uint a, uint b) public {
      
    uint c = addNumbers(a,b);
    state = c;
  }

  function addThreeNumbers(uint a, uint b, uint c) public pure returns (uint) {
      
      uint temp = addNumbers(a,b);
      uint num  = addNumbers(temp,c);
      return num;
  }
}

只是打電話addNumbers不會花任何錢。但是通話updateState費用也包括費用在內addNumbers(a,b)addThreeNumbers即使在內部呼叫,呼叫也不會花費 gas,addNumbers因為在整個函式呼叫過程中不需要任何事務。

引用自:https://ethereum.stackexchange.com/questions/52885