РАЗРАБОТКА УМНОГО КОНТРАКТА ETHEREUM
Основы Solidity
Расположение данных и поведение при назначении
Все ссылочные типы имеют дополнительную аннотацию, расположение данных, о том, где они хранятся. Есть три возможных варианта: memory
, storage
и calldata
.
storage
: Тип местоположения, в котором переменные состояния хранятся в цепочке блоков, что означает, что типы, имеющие storage
местоположение, являются постоянными.
memory
: переменные находятся в memory
, и они существуют во время вызова функции, что означает, что переменные, которые получили это местоположение, являются временными и после завершения выполнения функции они не будут существовать.
calldata
: Неизменяемое, непостоянное расположение данных, в котором хранятся аргументы функции, ведет себя в основном как memory
расположение данных и доступно только для external
функций. Подробнее о типах функций (external
, public
, internal
, private
) позже.
Назначение или преобразование типа, которое изменяет расположение данных, всегда приводит к операции автоматического копирования, в то время как назначения внутри одного и того же местоположения данных копируются только в некоторых случаях для типов хранилищ.
Расположение набора данных важно не только для сохранения данных, но и для семантики назначения. Давайте посмотрим на каждое поведение;
- Присвоения между
storage
иmemory
(или сcalldata
) всегда создают независимую копию. - Назначения с
memory
поmemory
только создают ссылки. В результате изменения одной переменной памяти также видны во всех других переменных памяти, которые относятся к тем же данным. - Присваивания
storage
переменной localstorage
также назначают только ссылку. - Все остальные назначения
storage
всегда создают независимые копии.
Я хотел напомнить вам пару вещей об использовании структур. Давайте посмотрим на пример ниже.
Последние примечания по ссылочным типам. Если мы имеем дело со ссылочными типами, нам следует быть очень осторожными по причинам, указанным ниже.
- Типы ссылок не обязательно умещаются в 32 байта - 256 бит.
- Количество потребляемого газа во время выполнения зависит от местоположения данных. Создание независимых копий из ссылочных типов обходится дорого, поэтому рекомендуется в основном внутри функций выбирать работу с расположением данных в памяти.
- Мы должны быть осторожны в сценарии, когда две или более разных переменных указывают на одно и то же местоположение данных, поскольку любое изменение одной переменной повлияет на другие.
Наконец, давайте рассмотрим немного сложное, но очень ценное использование структур, сопоставлений и перечислений в контракте типа условного депонирования.
Далее мы будем работать над управляющими структурами. Спасибо за прочтение.
Ссылки
Все детали в порядке
- Макет договора
- Типы ценностей: Часть первая
- Типы ценностей: Часть вторая
- Операторы
- Типы ссылок
- Расположение данных и поведение при назначении
- Структуры управления
- Обработка ошибок: утверждение, требование, возврат и исключения
- Функции: Часть первая
- Функции: Часть вторая
Не стесняйтесь задавать любой вопрос.
Будьте в безопасности, делайте хорошую работу и оставайтесь на связи!