Разница между памятью и памятью?

В чем разница между памятью и хранилищем?

Как с точки зрения EVM, так и с дизайном контракта.

Спасибо!

22 голоса | спросил Hcharlanes 10 FebruaryEurope/MoscowbWed, 10 Feb 2016 15:18:39 +0300000000pmWed, 10 Feb 2016 15:18:39 +030016 2016, 15:18:39

3 ответа


21

Они аналогичны памяти и хранению на жестком диске компьютера. Контракт может использовать любой объем памяти (при условии, что он может заплатить за него, конечно) во время выполнения его кода, но когда выполнение прекращается, весь контент памяти стирается, и следующее выполнение начнется свежим. С другой стороны, хранилище сохраняется в самой блок-цепочке, поэтому в следующий раз, когда контракт выполняет некоторый код, он имеет доступ ко всем данным, которые он ранее хранил в своей области хранения.

ответил Péter Szilágyi 10 FebruaryEurope/MoscowbWed, 10 Feb 2016 17:03:29 +0300000000pmWed, 10 Feb 2016 17:03:29 +030016 2016, 17:03:29
19

Память временная. Хранение является постоянным. Например, вы выполнили бы промежуточные вычисления с использованием памяти , а затем сохранили результат в хранилище .

Подробная информация с точки зрения EVM, их структуры и стоимости газа.

Хранение - это хранилище ключей /значений, в котором ключи и значения равны 32 байтам. Это разреженный (например, хеш-таблица), и нет никакой собственной экономии газа от двух 32-байтовых значений рядом друг с другом. Сохранение одного из значений в ключе 1, а другое на клавише 1000, требует того же количества газа, что и их хранение при нажатии клавиши 1 и клавиши 2. (Сохранение газа из хранилища для хранения все еще возможно, например, установка 2 uint128 в пределах одного ключа вместо двух клавиш.)

Память - это массив байтов . Память начинается с нулевого размера, но может быть расширена в 32-байтовых фрагментах простым доступом или хранением памяти по индексам, превышающим текущий размер. Поскольку память непрерывна , она экономит газ, чтобы сохранить его упакованным и уменьшить его размер, вместо того, чтобы иметь большие участки нулей. Дешевле иметь массив длиной 2, сохраняющий 2 значения, чем массив длиной 1000, где значения находятся на концах массива, а середина - все нули.

викторины тонкостей объясняет дальнейшие затраты на газ для использования памяти:

Плата за расширение памяти определяется методом вычитания-интеграла. В частности, TOTALFEE(SZ) = SZ * 3 + floor(SZ**2 / 512) - общая плата за расширение памяти на SZ 32-байтовые фрагменты (примечание : подсчитаны частично заполненные куски, поэтому 33 байта = 2 куска), и если конкретная операция расширяет память с размера x до y, дополнительная стоимость газа TOTALFEE(y) - TOTALFEE(x)

Расходы на хранение газа немного проще: 20 000 газа, когда значение установлено на ненулевое значение с нуля; 5000 газа при записи в существующее хранилище или установлении значения на ноль; и 15 000 газа возврат , когда ненулевое значение установлено на ноль.

ответил eth 1 MarpmTue, 01 Mar 2016 15:21:30 +03002016-03-01T15:21:30+03:0003 2016, 15:21:30
0

память похожа на ОЗУ вашего кода, в котором хранятся данные в нем до выполнения вашей функции, функции, выполняемые над ней, удаляются. С другой стороны хранилище похожа на базу данных, которая существует в блочной цепочке, независимой от выполнения функции.

ответил cryptoKTM 10 52017vEurope/Moscow11bEurope/MoscowFri, 10 Nov 2017 15:43:04 +0300 2017, 15:43:04

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

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

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