Работа с переполнением параметров

Можно ли предотвратить переполнение параметра в контракте или его нужно решать во внешнем интерфейсе?

Прочность:

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.

Этого можно было бы избежать, просто не вызывая функцию с чем-либо за пределами предполагаемого диапазона, но возможно ли предотвратить это с помощью контракта? Где именно происходит переполнение?

Ответы (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
о, да, я просто скопировал код операции, но ты прав. код обновлен