Solidity

結構中的 Solidity 布爾大小

  • January 13, 2021

我試圖緊緊地打包我的結構數據類型。

出現的問題是bool變數需要多少儲存空間? 如果我們假設它需要 1 個字節,如果我連續放置最多 8 個 bool 變數,EVM 會嘗試將它們打包在 1 個字節中嗎?

範例結構

注意:此答案僅包括實驗數據

請先閱讀@medvedev1088 的答案,因為我的答案只是添加和一些測試數據。

從我在混音中的測試中,我得到了這些數據:

  • 創建 8- true-bool struct花費 58211 gas;20k + 7 * 5k = 55k 氣體;
  • 創建 16- true-bool struct消耗 100807 gas;20k + 15 * 5k = 95k 氣體;
  • 創建 32- true-bool struct花費 186505 gas;20k + 31 * 5k = 175k 氣體;
  • 創建 33- true-bool struct消耗206811 個gas;2 * 20k + 31 * 5k = 195k 氣體;

從這些數據中可以清楚地看出,您可以在一個插槽中儲存的最大 bool 數量是32


$$ Update 1 $$

您可能會注意到這些行中的數字不匹配。這些不匹配實際上是由為不同的操作碼支付的一些較小的費用引起的(這些操作碼是為我們的每個新 bool 執行的struct)。讓我列出最昂貴的:

  • SLOAD花費 200 汽油
  • EXP花費 60 氣體

我在 rinkeby 上執行了交易。查看TxHash 的 GETH Trace

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