Размер поля солидности типа отображения

Твердость позволяет отображать типы внутри структуры. Сколько байтов стоит такое поле?

В частности, я хотел бы оптимизировать макет хранилища следующего типа.

struct Balance {
    uint40 amount;
    mapping(address => uint) allowances;
}

1 ответ

Решение

Я думаю, что вы имеете в виду макет хранения, а не макет памяти.

uint это псевдоним для uint256, что составляет 256 бит. Таким образом, каждое значение, хранящееся в этом отображении, использует один 32-байтовый слот в хранилище.

РЕДАКТИРОВАТЬ

Для полного Balance структура, каждый из которых будет занимать два слота в хранилище, но один слот всегда будет нулевым. Первый слот используется uint40а второй является заполнителем для mapping это на самом деле не имеет никакого значения хранится. С точки зрения стоимости газа, это бесплатно.

Так что храните новый Balance запишет одно 32-байтовое слово в хранилище, а затем каждый uint Вы добавляете в allowances отображение будет записывать одно 32-байтовое слово в хранилище.

Другие вопросы по тегам