Я пытаюсь указать тип uint для uint16 вместо того, чтобы просто использовать uint или uint256 при работе с отметками времени, но он говорит, что я должен использовать как минимум uint24. Он работает с uint24, но разве uint16 не должно быть достаточно?
Не совсем ответ на то, что вы спрашиваете, но...
Уменьшение размера uint
до менее чем 256 бит увеличит затраты на попутный газ, а не снизит их, как вы могли бы ожидать. Лучше всего будет оставить его как uint256
.
Смотрите: Почему uint8 стоит больше газа, чем uint256?
Редактировать:
Отметив, что временные метки — это количество секунд, прошедших с эпохи Unix:
uint16
максимальное значение = 65536 -> 01.01.1970, 18:12 (UTC)uint24
максимальное значение = 16777216 -> 14.07.1970, 4:20 (UTC)Так что эти значения слишком малы.
Вызов block.timestamp
(или now
) в настоящее время возвращает 1508618011
, то есть 0b1011001111010111010111100011011
. Для этого требуется 31 бит. Таким образом, вы ищете как минимум uint32
, но больше, если хотите быть ориентированным на будущее.
Согласно документам Solidity block.timestamp
, uint
это псевдоним дляunit256
block.timestamp (uint): current block timestamp
Так что я лично буду использовать то же самое на случай, если Solidity все еще будет в 33658 году :)
NowsyMe
Ричард Хоррокс
Тьяден Хесс
Ричард Хоррокс
NowsyMe
скозин
uint32
на мой взгляд более чем достаточно:2^32 - 1
равно ,4294967295
т.е.Sun Feb 07 2106
Никто из нас, вероятно, не будет жив в то время, и я очень сомневаюсь, что Solidity все еще будет использоваться для написания распределенных приложений :)Кевин
кроносапиенс
odysseas lamtzidis