Solidity

在 Solidity 中使用 uint40 時間?

  • February 17, 2022

我的問題是:我應該uint40在 Solidity 中使用時間嗎?

我見過的所有例子都使用uint256了時間,但是,我認為這太浪費了——雖然使用uint32可能有點激進,因為它的 86-year-til-overflow,34K-year-till-overflow fromuint40似乎相當安全對我來說。

使用我不知道的 uint40 會不會有任何潛在的垮台?

編輯:

很抱歉之前沒有讓自己足夠清楚。考慮以下結構——

struct User {
   address user;   // 20 bytes
   uint40 userRegisterTime;    // 5 bytes
   uint40 userDepositTime;     // 5 bytes
   uint256 userBalanceWei;     // 32 bytes
}

如果將兩個時間變數定義為uint256,則結構將需要 4 * 32 字節,而在 的情況下uint40,前三個變數可以打包成一個 32 字節,節省 2 * 32 字節(參考,我有已驗證——https: //medium.com/@novablitz/storing-structs-is-costing-you-gas-774da988895e

大家同意嗎?

Solidity 的 VM 是 256 位的,所以 uint40 將被填充到 256 位並佔用更多的氣體

為什麼 uint8 比 uint256 消耗更多的氣體?

我一直在想同樣的事情。在我的情況下它是有效的,在你的情況下也是如此。

如果 34,000 年後的人們仍然使用與我們相同的技術,那麼他們無論如何都注定要失敗。:-D 所以當你的軟體停止工作時,它實際上是一個功能,而不是一個錯誤。

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