Solidity

在適用時使用較小的 uint 大小是更好的做法嗎?

  • January 19, 2022

我對 uint 大小的理解是,較小的大小會降低 gas 成本。在我正在建構的目前 dapp 中,我正在處理時間,為此,uint32 似乎足以滿足我的目的(如果時間以秒為單位儲存,則為 136 年)。

在 Solidity 開發中使用最大 uint 大小是標準做法,還是應該在設計應用程序時考慮到合理的 int 範圍並在適用的情況下使用較小的大小。

這實際上取決於您實現它的方式。EVM 以 256 位塊為您分配新的記憶體插槽,以便聲明狀態變數。

因此,如果您這樣聲明它們:

uint32 time;
uint256 money;
uint32 anotherTime;

這些變數將佔用 3 個 256 位插槽:時間將創建第一個 256 位插槽並在其中佔用 32 位,金錢將不適合此插槽中的剩餘位,因此它將創建一個新的 256 位插槽並全部填充, anotherTime 將創建一個 256 位的新插槽。另一方面,

uint32 time;
uint32 anotherTime;
uint256 money;

這將只佔用 2 個插槽,因為編譯器可以將 time 和 anotherTime 壓縮到一個插槽中。

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