Solidity

用於查看功能的氣體

  • September 25, 2018

我在很多地方讀到視圖函式不消耗gas,但這不是真的,因為即使這些操作不會改變狀態,它們也會為區塊鏈操作消耗gas。如果我錯了,請糾正我例如:

pragma solidity ^0.4.17;

contract myContract {
   uint[] public anArray;   /// assume it has 1,000,000 (1Million) elements

/* function which returns how many times a specific element is in the n array*/

   function elementIndex(uint element) public view returns(uint){
       uint counter;
       for(uint i; i<anArray.length; i++){
           if(anArray[i] == element){
               counter++;
           }
       }
       return counter;
   }
function returnAllElements() public view returns(uint[]){
return anArray;
}}

當數組有 100 萬個元素時,真正的問題出現在前端。執行 elementIndex() 將永遠不會工作,因為迭代將花費太長時間。returnAllElements 也不起作用(我假設)。

在這種情況下可以做什麼?

在您的情況下,elementIndexreturnAllElements函式都不會花費任何氣體,因為這兩個函式都從區塊鏈中讀取狀態變數並給出預期的結果。

您可以優化上述功能以減少它們所花費的時間。

請參閱以下問題以了解 View/Pure Gas 的使用 - 如果由另一個函式在內部呼叫,則成本氣體?

請參閱以下部落格以了解乙太坊中呼叫和交易之間的區別 -

https://blog.b9lab.com/calls-vs-transactions-in-ethereum-smart-contracts-62d6b17d0bc2

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