Solidity

考慮 Gas 成本的儲存模式

  • August 24, 2021

我在關注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 操作都會消耗大量的氣體。您是在處理記憶體數組還是真正儲存它?

用松露做了一些測試,看起來將數據插入數組的成本保持不變,並且不依賴於數組的大小。但是請記住,如果您有一個函式需要遍歷整個數組來進行一些計算,那麼該函式消耗的氣體將隨著數組的大小線性增加。

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