Solidity
應該為 unix 時間戳聲明什麼 uint 類型?
在處理時間戳時,我嘗試將 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 ,但要更多。