Función de multiplicación de DappHub

¿Alguien podría explicar el uso de realizar una multiplicación como esta? Quiero decir que la lógica está bien, pero ¿cuál es la importancia desde el punto de vista de la seguridad?

function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
    }

Esto es de la biblioteca dapphub. He incluido el enlace adjunto: https://github.com/dapphub/ds-math/blob/master/src/math.sol

Respuestas (2)

Desde el punto de vista de la seguridad, garantiza que después de la multiplicación, el valor devuelto no se desborde.

Supongamos que tenemos un entero sin signo de 8 bits que almacena valores de 0 a 255. Entonces, la multiplicación de 130*2devolverá 260 y cuando sea el momento de almacenarlo en la variable, se desbordará y almacenará el valor 5. Entonces, esto requireen cuestión verifica que si realizamos la operación inversa, deberíamos obtener el valor inicial que no será posible en el error de desbordamiento.

y == 0será una excepción en la detección del caso anterior, por lo que el código lo está considerando por separado.

Para obtener más información: https://consensys.github.io/smart-contract-best-practices/known_attacks/#integer-overflow-and-underflow

function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, "ds-math-sub-underflow");
    }

comprueba x-y <= xy si la condición ( x-y <= x) es verdadera, devuelvez(x-y)

en el caso x-y > x, imprima el registro "ds-math-sub-underflow" y arroje

Entiendo la lógica. La lógica no es un problema. Lo he mencionado en mi pregunta. Lo que necesito entender es ¿por qué necesitamos hacer esto? ¿Por qué no simplemente x*y? ¿Cuáles son las implicaciones desde el punto de vista de la seguridad?
algún accidente[ medium.com/smartmesh/… sucede
No se pudo acceder al enlace. dice 404