OpenZeppelin: Matem谩tica y Criptograf铆a

Dentro del repositorio de OpenZeppelin encontrar谩s una serie de contratos 煤tiles para resolver problemas frecuentes. Uno de ellos, es la resoluci贸n de operaciones matem谩ticas y evitar problemas con estas.

Resoluci贸n de problemas matem谩ticos

Las variables num茅ricas, tanto con signo como sin signo, sol铆an tener un problema denominado Overflow y Underflow.

Cuando una variable entera llega a su l铆mite m谩ximo que puede representar, y se le suma uno, se reinicia a cero. Caso contrario, lo mismo ocurre cuando se encuentra en su l铆mite m铆nimo y se le resta uno, pasa al valor m谩ximo que puede representar.

Por ejemplo, si una variable puede almacenar como m谩ximo el valor 999, al sumarle uno pasar谩 a 000 y si le restamos uno a este vuelve a 999.

Afortunadamente, el problema ha sido resuelto a partir de la versi贸n 0.8.0 del compilador de Solidity. Si ocurriese uno de estos tipos de errores, se lanzar谩 un error y se revierte la operaci贸n

Es muy importante tener en cuenta la compatibilidad hacia atr谩s. Contratos inteligentes que fueron desarrollados con versiones anteriores a la 0.8.0 a煤n tienen este problema que puede ser resulto con librer铆as que hagan las respectivas validaciones como Math de OpenZeppelin.

Si te encuentras realizando mantenimiento a contratos inteligentes desarrollados hace algunos a帽os, es posible que te encuentres con librer铆as como SafeMath de OpenZeppelin para resolver estos problemas.

Como desarrollador de contratos inteligentes, ser谩 muy importante que estudies este tipo de vulnerabilidades.

Encriptaci贸n de informaci贸n

Si algo caracteriza a Blockchain es la criptograf铆a. Mucha informaci贸n se encripta de forma sim茅trica o asim茅trica para realizar transferencias y tener privacidad en la informaci贸n. OpenZeppelin implementa una librer铆a para trabajar con informaci贸n encriptada.

La librer铆a ECDSA de OpenZeppelin te servir谩 para hacer validaciones de hashes y verificar informaci贸n encriptada.

No se trata de un caso de uso frecuente, pero podemos encontrarnos con escenarios donde una funci贸n reciba informaci贸n encriptada y debamos validar el emisor de la misma haciendo alguna comparaci贸n de hashes.

Caso contrario, podemos tener la necesidad de encriptar la informaci贸n dentro del contrato para enviarla a alg煤n receptor o almacenarla en este formato.

Nota: Cuando trabajes con hashes en Solidity, tal vez te llame la atenci贸n la palabra Keccak. Keccak se trata de un poderoso algoritmo de encriptaci贸n asim茅trico. Ideal para encriptar contrase帽as o realizar validaciones de datos.

M谩s all谩 de la necesidad que tengamos en nuestro contrato de manipular informaci贸n encriptada. Recuerda que todo en Blockchain es p煤blico, de alguna u otra manera, tanto los datos como el c贸digo fuente del contrato. Te aconsejo estudiar bien la situaci贸n y tal vez trabajar con procesamiento off-chain cuando debas manipular informaci贸n sensible.


Post creado en colaboraci贸n con el Curso de OpenZeppelin de Platzi.