Solidity

此程式碼的氣體使用量是否為 O(1)?

  • August 2, 2021

無論映射/數組大小如何(假設非零數組條目),此函式的氣體使用量是否恆定?

items是一個數組,並且presence是一個映射

function clear() public {
   for (uint i = 0; i < items.length; i++) {
       presence[items[i]] = 0;
   }

   delete items;
}

也就是說,刪除數據的gas返還是否大於迭代查詢數據時消耗的gas?

這個函式是這個 Set 實現的一個片段。

快速分析表明,函式呼叫 gas 使用量不是 O(1),也不接近 O(1)。超過 2 個項目後,每增加一個項目,gas 使用量就會開始上升。

這是用於清除不同數量項目的氣體使用表(使用https://remix.ethereum.org測試):

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