РАЗРАБОТКА УМНОГО КОНТРАКТА 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 бит.
  • Количество потребляемого газа во время выполнения зависит от местоположения данных. Создание независимых копий из ссылочных типов обходится дорого, поэтому рекомендуется в основном внутри функций выбирать работу с расположением данных в памяти.
  • Мы должны быть осторожны в сценарии, когда две или более разных переменных указывают на одно и то же местоположение данных, поскольку любое изменение одной переменной повлияет на другие.

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

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

Ссылки



Все детали в порядке

Не стесняйтесь задавать любой вопрос.

Будьте в безопасности, делайте хорошую работу и оставайтесь на связи!

Ферди Курт