WEB3DEV

Cover image for Fortalecer com OpenZeppelin: Desencadeando Contratos Seguros
Banana Labs
Banana Labs

Posted on

Fortalecer com OpenZeppelin: Desencadeando Contratos Seguros

capa

Nesta era dinâmica da tecnologia blockchain, o OpenZeppelin surge como uma fortaleza confiável para contratos de segurança. Descubra o poder das soluções robustas do OpenZeppelin que fortalecem seus projetos contra vulnerabilidades e garantem a máxima proteção. Mergulhe no mundo dos contratos seguros e libere o potencial para uma segurança intransigente. Proteja sua jornada com o OpenZeppelin.

Esses contratos têm o objetivo de abranger práticas de segurança amplamente adotadas.

PullPayment: Uma abordagem projetada para mitigar efetivamente os ataques de reentrância.

ReentrancyGuard: Um modificador que atua como um protetor, prevenindo vulnerabilidades de reentrância em funções específicas.

Pausable: Um mecanismo de resposta a emergências prevalente que pode interromper temporariamente a funcionalidade enquanto aguarda ações corretivas necessárias.

PullPayment

import “@openzeppelin/contracts/security/PullPayment.sol;
Enter fullscreen mode Exit fullscreen mode

Esta é uma implementação simplificada de uma estratégia de pull-payment, onde o contrato pagador evita a interação direta com a conta do destinatário, que é responsável por retirar os pagamentos de forma independente.

Em termos de segurança, os pull-payments são amplamente considerados a abordagem recomendada ao enviar Ether. Ele evita efetivamente que os destinatários obstruam a execução e alivia qualquer preocupação com a reentrância.

Para utilizar esta estratégia, herde do contrato PullPayment e utilize a função _asyncTransfer em vez da função de transferência do Solidity. Os beneficiários podem consultar convenientemente seus pagamentos pendentes usando a função de pagamentos e retirá-los usando a função de retirada de pagamentos.

Funções

  • withdrawPayments(endereço payee)
  • pagamentos(endereço dest)
  • _asyncTransfer(endereço dest, uint256 amount)

withdrawPayments

Retirar saldo acumulado.

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

diagrama

pagamentos

Retorna o crédito devido a um endereço.

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

diagrama

_asyncTransfer

Chamada pelo pagador para armazenar o valor enviado como crédito para ser retirado.

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

diagrama

ReentrancyGuard

import “@openzeppelin/contracts/security/ReentrancyGuard.sol;
Enter fullscreen mode Exit fullscreen mode

Este módulo de contrato serve como uma ferramenta valiosa para se proteger contra chamadas reentrantes a uma função.

Ao herdar de ReentrancyGuard, os desenvolvedores ganham acesso ao modificador nonReentrant, que pode ser aplicado a funções para garantir que elas não sejam chamadas de maneira encadeada (reentrante).

É importante notar que, devido à presença de um único guarda nonReentrant, funções marcadas como nonReentrant não devem se chamar diretamente. No entanto, essa limitação pode ser superada designando essas funções como privadas e criando pontos de entrada nonReentrant externos para elas.

Se você marcar uma função como nonReentrant, também deve marcá-la como external.

Modificadores

  • nonReentrant

nonReentrant

Este mecanismo garante que um contrato não possa invocar a si mesmo, diretamente ou indiretamente. Especificamente, chamar uma função nonReentrant de outra função nonReentrant não é permitido. No entanto, é viável prevenir tais ocorrências transformando a função nonReentrant em uma função externa e fazendo com que ela invoque uma função privada responsável por executar as ações desejadas.

modifier nonReentrant() internal
Enter fullscreen mode Exit fullscreen mode

Pausable

import “@openzeppelin/contracts/security/Pausable.sol;
Enter fullscreen mode Exit fullscreen mode

Este módulo de contrato capacita contratos derivados a incorporar um mecanismo de parada de emergência, capaz de ser ativado por uma conta autorizada.

A utilização deste módulo envolve herança. Ele concede acesso aos modificadores whenNotPaused e whenPaused, que podem ser aplicados às funções dentro do seu contrato. É importante notar que a capacidade de pausar funções não é automaticamente ativada pela inclusão deste módulo; é necessário implementar os modificadores para ativar este recurso.

Modificadores

  • whenNotPaused
  • whenPaused

whenNotPaused

Modificador para tornar uma função que pode ser chamada apenas quando o contrato não está pausado.

modifier whenNotPaused() internal
Enter fullscreen mode Exit fullscreen mode

whenPaused

Modificador para tornar uma função que pode ser chamada apenas quando o contrato está pausado.

modifier whenPaused() internal
Enter fullscreen mode Exit fullscreen mode

Funções

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

paused

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

pause

Chamada pelo proprietário para pausar, desencadeia estado de parada

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

unpause

Chamada pelo proprietário para despausar, retorna ao estado normal

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

Recapitulação

Em conclusão, os contratos de segurança do OpenZeppelin fornecem uma base robusta e confiável para a proteção de projetos de blockchain. Com o contrato PullPayment, a implementação de uma estratégia segura de pagamento pull torna-se fácil, mitigando ataques de reentrância e garantindo um processo de pagamento contínuo. Incorporando o módulo ReentrancyGuard, o risco de chamadas reentrantes para funções é efetivamente eliminado, reforçando a segurança geral dos contratos inteligentes. Adicionalmente, o módulo de contrato Pausable equipa projetos com um mecanismo de resposta de emergência essencial, permitindo a pausa temporária da funcionalidade durante a remediação.

Ao alavancar estas poderosas ferramentas fornecidas pelo OpenZeppelin, os desenvolvedores podem melhorar a postura de segurança de seus projetos e mitigar potenciais vulnerabilidades. A simplicidade de implementação e a adesão às melhores práticas de segurança tornam os contratos de segurança do OpenZeppelin um ativo inestimável para projetos de blockchain.

À medida que a paisagem do blockchain continua a evoluir, é crucial priorizar a segurança e adotar soluções robustas como os contratos de segurança do OpenZeppelin. Ao fortalecer seus projetos com estas medidas de segurança testadas em combate, você pode construir com confiança, sabendo que seus contratos inteligentes estão protegidos contra armadilhas comuns de segurança.

Abraça o poder dos contratos de segurança do OpenZeppelin e deixa-os pavimentar o caminho para aplicações de blockchain seguras, confiáveis e resilientes. A era da segurança fortalecida e da confiança no mundo descentralizado te aguarda.

Esse artigo é uma tradução feita por @bananlabs. Você pode encontrar o artigo original aqui

Top comments (0)