Solidity
考慮 Gas 成本的儲存模式
我在關注Solidity 是否有解決良好且簡單的儲存模式?並最終創建
Mapped Structs with Delete-enabled Index
以確保我的數組不會無限增長,當我在任何時候只需要幾個索引時,但結果證明在實施後氣體成本翻了一番!所以現在我已經切換回將
Simple List Using Array
索引作為元素的 id。我將刪除(基本上設置為 0)數組元素,但不會移動元素。在這種情況下,gas 成本是固定的還是與陣列的大小成線性關係。如果數組的大小超過 10K、100K 或更多怎麼辦!
您可能會發現以下使用文章:http: //ieeexplore.ieee.org/application/enterprise/entconfirmation.jsp ?arnumber=7884650&icp=false (免費版本可在https://arxiv.org/abs/1703.03994獲得,但它可能是較早的版本。)
它討論了使用過多氣體的某些模式,尤其是循環中的儲存操作。我不完全同意這個評估,因為我認為循環中的儲存操作在某些情況下是合適的,但肯定有浪費精力的時候。
我很驚訝您的測試表明插入數據不取決於數組的大小。我認為每個 STORE 操作都會消耗大量的氣體。您是在處理記憶體數組還是真正儲存它?
用松露做了一些測試,看起來將數據插入數組的成本保持不變,並且不依賴於數組的大小。但是請記住,如果您有一個函式需要遍歷整個數組來進行一些計算,那麼該函式消耗的氣體將隨著數組的大小線性增加。