Можно ли использовать uint128 или менее для экономии места?

Как я понимаю, EVM управляет блоками из 256 бит. Таким образом, uint256 является естественным размером для вычислений памяти.

Но я не могу найти в документации, как он применяется к транзакциям и для хранения.

Я имею в виду, есть ли преимущества использования:

function x(uint64 a, uint64 b)

вместо:

function x(uint a, uint b)

Сколько займет первая транзакция и секунды? оба будут использовать 512 бит для данных? или первые 128 бит, второй 512? возможно, сначала будет 256 бит, как минимальная длина блока?

Тот же вопрос для структур, используемых при отображении значений, например:

struct something {
  uint8 x, uint64 y
}

по сравнению с:

struct something {
  uint x, uint y
}

Существует ли оптимизация хранения, которую EVM может использовать для первой структуры?

5 голосов | спросил Igor Artamonov 9 J0000006Europe/Moscow 2016, 20:37:46

1 ответ


4

В хранилище переменные упакованы плотно, поэтому ваша структура будет соответствовать одному слову. См. Эту страницу документов: http://solidity.readthedocs.io/en/latest/miscellaneous.html

Для параметров упаковка менее важна, так как это эфемерные данные. Аргументы функции всегда находятся в памяти: https://solidity.readthedocs.io/en/latest/frequently-asked-questions.html#what-is-the-memory-keyword-what-does-it-do

Еще один вопрос - это формат транзакции, проходящей через провод. У меня возникли проблемы с поиском документации для формата, но я нашел страницу с сообщением о том, что в ABI аргументы дополняются 32 байтами: https://github.com/ethereum/wiki/wiki/Solidity-Features

В любом случае это определенно не значительная разница в стоимости. Глядя на цены на газ в желтой бумаге, хранение одного слова - 20 000 газа. Каждый ненулевой байт данных транзакции составляет всего 68 газов. Если каждый параметр заполнен до 256 бит, тогда у нас будет куча нулевых байтов, и они будут стоить всего 4 газа. (Поскольку нули дешевле, я испытываю соблазн подумать, что они упакованы, но я точно не знаю.)

ответил Dennis Peterson 9 J0000006Europe/Moscow 2016, 22:47:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132