Размер поля солидности типа отображения
Твердость позволяет отображать типы внутри структуры. Сколько байтов стоит такое поле?
В частности, я хотел бы оптимизировать макет хранилища следующего типа.
struct Balance {
uint40 amount;
mapping(address => uint) allowances;
}
1 ответ
Я думаю, что вы имеете в виду макет хранения, а не макет памяти.
uint
это псевдоним для uint256
, что составляет 256 бит. Таким образом, каждое значение, хранящееся в этом отображении, использует один 32-байтовый слот в хранилище.
РЕДАКТИРОВАТЬ
Для полного Balance
структура, каждый из которых будет занимать два слота в хранилище, но один слот всегда будет нулевым. Первый слот используется uint40
а второй является заполнителем для mapping
это на самом деле не имеет никакого значения хранится. С точки зрения стоимости газа, это бесплатно.
Так что храните новый Balance
запишет одно 32-байтовое слово в хранилище, а затем каждый uint
Вы добавляете в allowances
отображение будет записывать одно 32-байтовое слово в хранилище.