Solidity

應該為 unix 時間戳聲明什麼 uint 類型?

  • October 27, 2021

在處理時間戳時,我嘗試將 uint 類型指定為 uint16,而不是僅僅執行 uint 或 uint256,但它說我必須至少使用 uint24。它適用於 uint24,但 uint16 不應該足夠嗎?

不是你所問的真正答案,但是……

將 a 的大小減小uint到 256 位以下會增加相關的 gas 成本,而不是像您預期的那樣減少它。最好將其保留為uint256.

請參閱: 為什麼 uint8 比 uint256 花費更多的氣體?


編輯:

注意時間戳是自 Unix 紀元以來的秒數:

  • uint16最大值 = 65536 -> 01/01/1970 @ 6:12pm (UTC)
  • uint24最大值 = 16777216 -> 07/14/1970 @ 4:20am (UTC)

所以這些值太小了。

呼叫block.timestamp(或now)目前返回1508618011,即0b1011001111010111010111100011011。這需要 31 位。uint32因此,如果您想面向未來,您至少要考慮 a ,但要更多。

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