Несколько слов о enum.
В дальнейших уроках он будет использован не так часто, однако в смарт-контрактах иногда выполняет достаточно значимые функции.
1. С помощью enum можно создавать свои собственные не сложные структуры типов данных.
2. Мы можем использовать enum для создания переменных и статусов для них.
3. В enum, при вызове функций, показывается не сам статус, а его индекс (порядок в списке).
#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
В следующей части обучения мы будет разбирать смарт-контракты, популярные решения и паттерны.
Под каждым уроком есть посты подсказки. Если вы забыли какую-либо часть урока или хотите уточнить тот или иной момент, то попробуйте воспользоваться поиском по тегам. Например, #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
В следующей части обучения мы будет разбирать смарт-контракты, популярные решения и паттерны.
🔥4❤1
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, например:
а затем хотим получить значение choice:
в некотором роде, функция будет выглядеть как
getChoice() returns (uint8)
Значения в enum начинаются с 0, и если не установлено какое-либо другое значение, то функция или запрос к переменной вернем именно ноль. За этим необходимо следить в функциях, где от условия enum зависит ход ее исполнения.
7. Delete keyword is simply a reassignment of elements to their default values (ie.zero)
Ключевой метод delete в функциях фактически обнуляет значение, а не удаляет его.
При изучении Solidity нам часто говорили, что тут нельзя создать ни один тип данных с пустым или несуществующим значением. Например:
Не помню, чтобы я встречал какие-либо критические уязвимости в последнее время, связанные с этим пунктом, так что, думаю, этот пункт можно просто запомнить.
#enum #default
Спасибо всем, кто пережил неделю продаж и остался на канале, понимаю что для многих это действительно испытание. Мы возвращаемся в рабочий ритм и потихоньку продолжаем разбирать репо от 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