Solidity
一個視圖公共函式的gas消耗
在我的契約中,我有一個返回 bytes32 元素數組的視圖公共函式。在混音中,它會產生一個警告,說如果我使用此功能,它可能會用完塊氣體限制。
正如我在函式不進行狀態更改時所讀到的,您將其定義為公共視圖。因此,當您呼叫它時,您不必支付乙太幣,因為您的本地節點從合約中呼叫變數並在本地執行它。這是正確的嗎?那為什麼我要擔心gas限制呢?
在 Lauri 的 Peltonen 評論後重新編輯。我使用的程式碼是:
pragma solidity ^0.4.18; contract Project{ bytes32[] array; function addValue(bytes32 element)public{ //only the administrator can add new values array.push(element); } function getAll()view public returns(bytes32[]){ return array; } }
呼叫視圖函式時無需支付 gas。這並沒有改變它仍然有操作要做的事實,這些操作有成本,因此受制於區塊的上限氣體限制,以及時間限制。
嘗試返回整個無界數組是個壞主意,因為呼叫將超時,您將一無所獲。
您可以做的是使用像這裡這樣的游標,解決您面臨的問題的文章。
免責聲明:不是我的部落格或文章!