Solidity. Смарт контракты и аудит
2.63K subscribers
246 photos
7 videos
18 files
549 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
Несколько слов о enum.

В дальнейших уроках он будет использован не так часто, однако в смарт-контрактах иногда выполняет достаточно значимые функции.

1. С помощью enum можно создавать свои собственные не сложные структуры типов данных.

2. Мы можем использовать enum для создания переменных и статусов для них.

3. В enum, при вызове функций, показывается не сам статус, а его индекс (порядок в списке).

#enum #типданных
👍3🔥1
Базовый курс по Solidity

Под каждым уроком есть посты подсказки. Если вы забыли какую-либо часть урока или хотите уточнить тот или иной момент, то попробуйте воспользоваться поиском по тегам. Например, #enum, #event, #call и так далее.

Урок 1 - Введение в Solidity

Урок 2 - Типы данных: Bool, uint, int

Урок 3 - Типы данных: String, address, mapping

Урок 4 - Типы данных: array, enum, bytes, struct

Урок 5 - Функции

Урок 6 - События и модификаторы

Урок 7 - Работа с терминалом, основы node.js и npm

Урок 8 - Тестирование с Hardhat, Ethers & Waffle

Урок 9 - Оптимизация смарт-контрактов

Урок 10 - Вопросы для собеседования. Часть 1

Урок 11 - Наследование

Урок 12 - Интерфейсы и библиотеки

Урок 13 - Древо Меркла

Урок 14 - Низкоуровневые вызовы

Урок 15 - Работа с памятью в Solidity

Урок 16 - Hardhat tasks

В следующей части обучения мы будет разбирать смарт-контракты, популярные решения и паттерны.
🔥41
Solidity hints. Часть 5

Спасибо всем, кто пережил неделю продаж и остался на канале, понимаю что для многих это действительно испытание. Мы возвращаемся в рабочий ритм и потихоньку продолжаем разбирать репо от Chinmaya, который делал свои заметки по Solidity во время своего обучения. И следующий пункт:

6. enum types are not part of the ABI, they are just a solidity abstraction

Тип данных enum не является частью ABI, это всего лишь абстракция Solidity.

Действительно, enum - это один из способов создания пользовательского типа данных в Solidity. Они явно преобразуются во все целочисленные типы и из них. При этом во время выполнения преобразования проверяется, что значение лежит внутри диапазона перечисления, и в противном случае возникает ошибка Panic.

Enum требуют наличия хотя бы одного значения и не могут иметь более 256 значений, что фактически означает равенство к типу данных uint8 (так он и будет отображаться в ABI).

Когда мы создаем enum, например:

enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill }
ActionChoices choice;


а затем хотим получить значение choice:

function getChoice() public view returns (ActionChoices) {
return choice;
}


в некотором роде, функция будет выглядеть как

getChoice() returns (uint8)

Значения в enum начинаются с 0, и если не установлено какое-либо другое значение, то функция или запрос к переменной вернем именно ноль. За этим необходимо следить в функциях, где от условия enum зависит ход ее исполнения.


7. Delete keyword is simply a reassignment of elements to their default values (ie.zero)

Ключевой метод delete в функциях фактически обнуляет значение, а не удаляет его.

При изучении Solidity нам часто говорили, что тут нельзя создать ни один тип данных с пустым или несуществующим значением. Например:

- boolean: false

- string: ""

- int / uint / enum: 0

- address: 0x0000000000000000000000000000000000000000 (or address(0))


Не помню, чтобы я встречал какие-либо критические уязвимости в последнее время, связанные с этим пунктом, так что, думаю, этот пункт можно просто запомнить.

#enum #default
👍4