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