Solidity
用於查看功能的氣體
我在很多地方讀到視圖函式不消耗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 也不起作用(我假設)。
在這種情況下可以做什麼?
在您的情況下,
elementIndex
和returnAllElements
函式都不會花費任何氣體,因為這兩個函式都從區塊鏈中讀取狀態變數並給出預期的結果。您可以優化上述功能以減少它們所花費的時間。
請參閱以下問題以了解 View/Pure Gas 的使用 - 如果由另一個函式在內部呼叫,則成本氣體?
請參閱以下部落格以了解乙太坊中呼叫和交易之間的區別 -
https://blog.b9lab.com/calls-vs-transactions-in-ethereum-smart-contracts-62d6b17d0bc2