WEB3DEV Español

Cover image for Fortaleciendo con OpenZeppelin: Desencadenando Contratos Seguros
Juan José Gouvêa
Juan José Gouvêa

Posted on

Fortaleciendo con OpenZeppelin: Desencadenando Contratos Seguros

img1

En esta era dinámica de la tecnología blockchain, OpenZeppelin emerge como un baluarte confiable para contratos seguros. Descubre el poder de las robustas soluciones de OpenZeppelin que fortifican tus proyectos contra vulnerabilidades y garantizan la máxima protección. Sumérgete en el mundo de los contratos seguros y desbloquea el potencial para una seguridad intransigente. Protege tu viaje con OpenZeppelin.

Estos contratos tienen como objetivo abarcar prácticas de seguridad ampliamente adoptadas.

PullPayment: Un enfoque diseñado para mitigar efectivamente los ataques de reentrada.

ReentrancyGuard: Un modificador que actúa como protector, previniendo vulnerabilidades de reentrada en funciones específicas.

Pausable: Un mecanismo de respuesta a emergencias que puede detener temporalmente la funcionalidad mientras se espera acciones correctivas necesarias.

PullPayment

import “@openzeppelin/contracts/security/PullPayment.sol”;

Esta es una implementación simplificada de una estrategia de pull-payment, donde el contrato pagador evita la interacción directa con la cuenta del destinatario, que es responsable de retirar los pagos de forma independiente.

En términos de seguridad, los pull-payments son ampliamente considerados el enfoque recomendado al enviar Ether. Evita eficazmente que los destinatarios obstruyan la ejecución y alivia cualquier preocupación sobre la reentrada.

Para utilizar esta estrategia, hereda del contrato PullPayment y utiliza la función _asyncTransfer en lugar de la función de transferencia de Solidity. Los beneficiarios pueden consultar convenientemente sus pagos pendientes usando la función de pagos y retirarlos con la función de retiro de pagos.

Funciones

  • withdrawPayments(dirección payee)
  • payments(dirección dest)
  • _asyncTransfer(dirección dest, uint256 amount)

withdrawPayments

Retirar saldo acumulado.

function withdrawPayments(address payee) public undefined
Enter fullscreen mode Exit fullscreen mode

diagrama

payments

Devuelve el crédito debido a una dirección.

function payments(address dest) public
returns(uint256)
Enter fullscreen mode Exit fullscreen mode

diagrama2

_asyncTransfer

Llamada por el pagador para almacenar el valor enviado como crédito para ser retirado.

function _asyncTransfer(address dest, uint256 amount) internal undefined
Enter fullscreen mode Exit fullscreen mode

diagrama3

ReentrancyGuard

import “@openzeppelin/contracts/security/ReentrancyGuard.sol”;

Este módulo de contrato sirve como una herramienta valiosa para protegerse contra llamadas reentrantes a una función.

Al heredar de ReentrancyGuard, los desarrolladores tienen acceso al modificador nonReentrant, que puede ser aplicado a funciones para asegurar que no sean llamadas de manera encadenada (reentrante).

Es importante señalar que, debido a la presencia de un único guardia nonReentrant, funciones marcadas como nonReentrant no deben llamarse directamente entre sí. Sin embargo, esta limitación puede superarse designando estas funciones como privadas y creando puntos de entrada externos nonReentrant para ellas.

Si marcas una función como nonReentrant, también debes marcarla como external.

Modificadores

  • nonReentrant

nonReentrant

Este mecanismo asegura que un contrato no pueda invocarse a sí mismo, directa o indirectamente. Específicamente, llamar a una función nonReentrant desde otra función nonReentrant no está permitido. Sin embargo, es viable prevenir tales ocurrencias convirtiendo la función nonReentrant en una función externa y haciendo que invoque una función privada encargada de ejecutar las acciones deseadas.

modifier nonReentrant() internal
Enter fullscreen mode Exit fullscreen mode

Pausable

import “@openzeppelin/contracts/security/Pausable.sol”;

Este módulo de contrato permite a los contratos derivados incorporar un mecanismo de parada de emergencia, que puede ser activado por una cuenta autorizada.

El uso de este módulo implica heredar de él. Da acceso a los modificadores whenNotPaused y whenPaused, que pueden aplicarse a funciones dentro de tu contrato. Es importante señalar que la capacidad de pausar funciones no se activa automáticamente al incluir este módulo; es necesario implementar los modificadores para activar esta característica.

Modificadores

  • whenNotPaused
  • whenPaused

whenNotPaused

Modificador para hacer que una función sólo pueda ser llamada cuando el contrato no esté en pausa.

modifier whenNotPaused() internal
Enter fullscreen mode Exit fullscreen mode

whenPaused

Modificador para hacer que una función sólo pueda ser llamada cuando el contrato esté en pausa.

modifier whenPaused() internal
Enter fullscreen mode Exit fullscreen mode

Funciones

  • paused()
  • pause()
  • unpause()

paused

function paused() public
returns(bool)
Enter fullscreen mode Exit fullscreen mode

pause

Llamada por el propietario para pausar, activa el estado de pausa.

function pause() public undefined onlyPauser whenNotPaused
Enter fullscreen mode Exit fullscreen mode

unpause

Llamada por el propietario para reanudar, regresa al estado normal.

function unpause() public undefined onlyPauser whenPaused
Enter fullscreen mode Exit fullscreen mode

Resumen

En conclusión, los contratos de seguridad de OpenZeppelin proveen una base robusta y confiable para proteger proyectos de blockchain. Con el contrato PullPayment, la implementación de una estrategia segura de pago pull se facilita, mitigando ataques de reentrada y asegurando un proceso de pago sin problemas. Incorporando el módulo ReentrancyGuard, el riesgo de llamadas reentrantes a funciones se elimina efectivamente, fortaleciendo la seguridad general de los contratos inteligentes. Además, el módulo de contrato Pausable equipa proyectos con un esencial mecanismo de respuesta de emergencia.

Al aprovechar estas poderosas herramientas proporcionadas por OpenZeppelin, los desarrolladores pueden mejorar la postura de seguridad de sus proyectos y mitigar vulnerabilidades potenciales. La simplicidad de implementación y la adhesión a las mejores prácticas de seguridad hacen que los contratos de seguridad de OpenZeppelin sean un activo invaluable para proyectos de blockchain.

A medida que el panorama de blockchain continúa evolucionando, es crucial priorizar la seguridad y adoptar soluciones robustas como los contratos de seguridad de OpenZeppelin. Al fortalecer tus proyectos con estas medidas de seguridad probadas en combate, puedes construir con confianza, sabiendo que tus contratos inteligentes están protegidos contra trampas comunes de seguridad.

Abraza el poder de los contratos de seguridad de OpenZeppelin y permíteles allanar el camino para aplicaciones blockchain seguras, confiables y resilientes. La era de la seguridad fortificada y la confianza en el mundo descentralizado te espera.

Este artículo es una traducción realizada por @junowoz. Puedes encontrar el artículo original aquí.

Discussion (0)