Размер поля солидности типа отображения - PullRequest
0 голосов
/ 23 июня 2018

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

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

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

1 Ответ

0 голосов
/ 23 июня 2018

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

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

EDIT

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

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

...