Tratar con el desbordamiento de parámetros

¿Se puede evitar el desbordamiento de parámetros en el contrato o tiene que tratarse en la interfaz?

Solidez:

contract parameterOverflows {

    uint8 selectedCharacter;

    modifier onlyCharacter(uint8 _character) {
        require(_character < 256);
           _;
    }

    function selectCharacter(uint8 _character) public onlyCharacter(_character) {
        selectedCharacter = _character;
    }

}

Si se llama a selectCharacter(257), selectedCharacter se convierte en 1 porque (creo) el 257 se desborda a 1.

Esto podría evitarse simplemente no llamando a la función con nada fuera del rango previsto, pero ¿es posible evitar esto desde el contrato? ¿Dónde exactamente está ocurriendo el desbordamiento?

Respuestas (1)

Simplemente cambie el tipo de su parámetro para aceptar cualquier uint para evitar el desbordamiento y pueda hacer su afirmación.

contract parameterOverflows {

    uint8 public selectedCharacter;

    modifier onlyCharacter(uint _character) {
        require(_character <= 255);
           _;
    }

    function selectCharacter(uint _character) public onlyCharacter(_character) {
        selectedCharacter = uint8(_character);
    }

}
¿ No se 256desbordaría también? uint8 va de 0-255
oh, sí, acabo de copiar y pegar el código de operación, pero tienes razón. código actualizado