Можно ли предотвратить переполнение параметра в контракте или его нужно решать во внешнем интерфейсе?
Прочность:
contract parameterOverflows {
uint8 selectedCharacter;
modifier onlyCharacter(uint8 _character) {
require(_character < 256);
_;
}
function selectCharacter(uint8 _character) public onlyCharacter(_character) {
selectedCharacter = _character;
}
}
Если вызывается selectCharacter(257), selectedCharacter становится 1, потому что (я думаю) 257 переполняется до 1.
Этого можно было бы избежать, просто не вызывая функцию с чем-либо за пределами предполагаемого диапазона, но возможно ли предотвратить это с помощью контракта? Где именно происходит переполнение?
Просто измените тип вашего параметра, чтобы он принимал любой uint, чтобы предотвратить переполнение, и вы можете сделать свое утверждение.
contract parameterOverflows {
uint8 public selectedCharacter;
modifier onlyCharacter(uint _character) {
require(_character <= 255);
_;
}
function selectCharacter(uint _character) public onlyCharacter(_character) {
selectedCharacter = uint8(_character);
}
}
Рагхав Суд
256
Тоже не переполнится? uint8 идет от 0-255мирг