Una de las principales preocupaciones que tienen los desarrolladores de DApps y smart contracts es la seguridad de las mismas en el momento en el que se pongan en explotación. El proyecto OpenZeppelin ofrece un entorno de desarrollo y un conjunto de herramientas que tienen como objetivo dotar de la mayor seguridad a las aplicaciones descentralizadas desarrolladas en el ecosistema Ethereum con Solidity.

¿Qué es OpenZeppelin?

OpenZeppelin es un proyecto que proporciona un conjunto de herramientas para desarrollar aplicaciones descentralizadas y smart contracts poniendo el foco en la seguridad de las mismas.

Para ello, aplican en sus soluciones patrones estándar de seguridad y buenas prácticas de desarrollo aprendidas de la experiencia que han ido cogiendo los desarrolladores de Zeppelin y de la comunidad, gracias a auditar centenares de smart contracts y de aplicaciones descentralizadas a los largo de los últimos años.

El proyecto es liderado por el equipo de Zeppelin y cuenta con decenas de desarrolladores que ayudan con contribuciones al crecimiento del mismo.

¿Qué herramientas ofrece?

OpenZeppeling ofrece un SDK (Software Development Kit) que incluye un conjunto de herramientas para ayudar a desarrollar, probar, actualizar e implementar contratos inteligentes. Tiene las siguientes características:

  • Permite la ejecución de comandos interactivos para acelerar el desarrollo local.
  • Permite realizar una  sencilla corrección de errores e iteraciones rápidas a través de actualizaciones de los smart contracts.
  • Permite una integración perfecta con todos los contratos que ofrece el proyecto OpenZeppelin.
  • Da soporte a múltiples redes.
  • Es totalmente compatible con Truffle.

Además de lo anterior, OpenZeppelin ofrece una biblioteca de contratos inteligentes modulares, reutilizables y seguros para la red Ethereum escritos en Solidity, ofreciendo al desarrollador las siguientes ventajas:

  • Un conjunto de contratos estándar, probados y revisados ​​por la comunidad.
  • Aprender de las mejores prácticas adoptadas por el ecosistema en el ámbito de la seguridad de los smart contracts.
  • Reducir el riesgo de ataques al reutilizar código auditado.
  • Utilizar la biblioteca más popular de smart contracts en el ecosistema Blockchain.

La biblioteca de contratos OpenZeppelin

Como hemos visto en el punto anterior, OpenZeppelin ofrece una biblioteca de smart contracts que permite el desarrollo seguro de los mismos. Dicha seguridad se construye sobre una base sólida de código examinado por la comunidad a los largo de años.

Ofrece las implementaciones de los siguientes estándares: ERC20 (tokens fungibles), ERC721 (tokens no fungibles), y ERC777 (tokens fungibles con mejoras respecto al ERC20).

En cuanto al estándar ERC20, OpenZeppelin ofrece los siguientes contratos y herramientas:

  • Contratos principales que implementan el comportamiento especificado en el EIP:
    • IERC20: interfaz a la que deben ajustarse todas las implementaciones de ERC20.
    • ERC20: implementación de la interfaz ERC20.
  • Extensiones personalizadas:
    • ERC20Pausable: designación de direcciones que pueden pausar transferencias de tokens para todos los usuarios.
    • ERC20Snapshot: almacenamiento eficiente de saldos de tokens pasados ​​para consultar posteriormente en cualquier momento.
    • ERC20Burnable: destrucción de tokens propios.
    • ERC20Capped: aplicación de un límite del suministro total al acuñar tokens.
  • Utilidades para interactuar con los contratos ERC20:
    • SafeERC20: elimina la necesidad de manejar valores de retorno booleanos.
    • TokenTimelock: permite retener tokens para un beneficiario hasta un tiempo específico.
En cuanto al estándar ERC721, OpenZeppelin ofrece los siguientes contratos y herramientas:
  • Contratos principales que implementan el comportamiento especificado en el EIP:
  • Extensiones personalizadas:
    • ERC721Pausabledesignación de direcciones que pueden pausar transferencias de tokens para todos los usuarios.
    • ERC721Burnable: permite la destrucción de tokens propios.

Contratos compatibles con GSN

Los contratos del proyecto OpenZeppelin son compatibles con GSN (Gas Station Network).

Como consecuencia de lo anterior, se permite crear aplicaciones donde se paga el gas correspondiente a las transacciones que realizan los usuarios. Los usuarios de las DApps no necesitan mantener ETH para pagar el gas por las transacciones que realicen, lo que facilita en gran medida el proceso de incorporación a la misma. 

Se permite crear nuevas estrategias GSN, o bien utilizar las estrategias más comunes para aceptar llamadas retransmitidas a través de la red de estaciones de servicio (GSN) utilizando contratos OpenZeppelin.

 

Utilidades

El proyecto OpenZeppelin, además, proporciona un conjunto de utilidades que pueden ser muy útiles para el desarrollo de DApps y smart contractas. A continuación, pasamos a describir algunas de ellas:

  • Utilidades criptográficas:
    • ECDSA: biblioteca criptográfica que permite gestionar funciones de algoritmo de firma digital de curva elíptica (ECDSA). Estas funciones se pueden usar para verificar que un mensaje fue firmado por el titular de las claves privadas de una dirección determinada.
    • MerkleProof: biblioteca de funciones que se ocupan de la verificación de árboles Merkle.
  • Utilidades Matemáticas:
    • SafeMathbiblioteca que proporciona funciones matemáticas que protegen a los smart contracts de desbordamientos.
  • Utilidades para realizar pagos:
    • PaymentSplyttercontrato que permite dividir los pagos de Ether entre un grupo de cuentas. El remitente no necesita ser consciente de que el Ether se dividirá de una cierta manera, ya que el contrato maneja el proceso de manera transparente. La división puede ser en partes iguales o en cualquier otra proporción.
    • PullPayment: implementación simple de una estrategia de pago por extracción, donde el contrato de pago no interactúa directamente con la cuenta del receptor, la cual debe retirar sus pagos. En términos de seguridad, los pagos por extracción, a menudo, se consideran la mejor práctica cuando se trata de enviar Ether. Se evita que los destinatarios bloqueen la ejecución y elimina los problemas de reentrada.
  • Utilidades para la gestión de fideicomisos:
    • Escrow: contrato de custodia que retiene los fondos designados para un beneficiario hasta que los retire.
    • ConditinalEscrow: contrato de custodia que permite solo el retiro de los fondos si se cumple una determinada condición.
    • RefundEscrow: contrato de custodia que retiene fondos para un beneficiario depositados de múltiples partes. 
  • Otras utilidades:
    • Colecciones: EnumerableSet y EnumerableMap definen colecciones más potentes que los «arrays» y los «mappings» que aporta Solidity. Son capaces de almacenar y eliminar elementos en tiempo constante y no permiten entradas repetidas. Admiten enumeración, lo que significa que se pueden consultar fácilmente todas las entradas almacenadas.
    • Address: colección de funciones que permiten determinar si una dirección pertenece a un smart contract o no.

En conclusión

El proyecto OpenZeppelin ofrece a los desarrolladores de DApss y smart contracts en Ethereum un kit de desarrollo, un conjunto de utilidades y una serie de herramientas, que permiten asegurar un alto grado de seguridad en los mismos.

Referencias