Contract-Design

數組或映射,哪個消耗更多的gas?

  • October 29, 2019

我一直在struct為我的契約使用數組。在帶有專用網路的 Remix IDE 中,一個功能花費了我大約 300,000 gas。但是,如果我從 web3js 呼叫相同的函式,它會花費我很多,有時成本會超過設置為 9,999,999 的塊氣體限制。

您能否讓我知道陣列是否比實際成本更高mapping

數組確實比映射成本更高,但那是因為它沒有做同樣的事情。Solidity 中的 Array 基本上是具有這種結構的結構

struct Array{
 mapping(uint => someType) items;
 uint length;
}

最重要的是,數組有圍繞長度的邊界檢查,以便嘗試使用將斷言訪問items映射中的項目。0>index>length-1如果您不需要邊界檢查功能,您可以像上面的結構一樣滾動您自己的“數組”

編輯:為了澄清,將數組比作映射+長度變數只是一個例子。數組確實將實際元素按順序儲存在儲存中,從插槽開始,該插槽是儲存數組長度的位置的雜湊值。另一方面,映射儲存就像您所期望的那樣,作為映射根 (r) 和單個鍵 (k) 的儲存位置的雜湊,即鍵 k 的值 v 的位置是 keccak256(r +k)

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