Open Zeppelin

OpenZeppelin é um projeto de código aberto que oferece um conjunto de ferramentas seguras e reutilizáveis para o desenvolvimento de contratos inteligentes na blockchain do Ethereum e outras blockchains compatíveis com a EVM. É amplamente reconhecido e utilizado por desenvolvedores de todo o mundo para construir, implantar e operar aplicativos descentralizados (DApps) e tokens digitais, incluindo tokens fungíveis (como os que seguem o padrão ERC-20) e não fungíveis (NFTs, seguindo os padrões ERC-721 e ERC-1155).

Principais Características das Bibliotecas do OpenZeppelin

  • Segurança: As bibliotecas do OpenZeppelin são minuciosamente revisadas e auditadas pela comunidade e profissionais de segurança blockchain, ajudando a prevenir erros comuns e vulnerabilidades de segurança nos contratos inteligentes.

  • Reusabilidade: Fornecem módulos e contratos inteligentes predefinidos que cobrem funcionalidades comuns e padrões de design no desenvolvimento de DApps e tokens, como a emissão de tokens, votações e gestão de acesso.

  • Comunidade: OpenZeppelin possui uma comunidade ativa e em crescimento, o que garante que as ferramentas estejam constantemente atualizadas e aprimoradas com base nas necessidades e feedback de seus usuários.

Componentes do OpenZeppelin

  1. Tokens

    • ERC20: Implementações padrão do popular token fungível ERC-20, incluindo versões básicas, detalhadas, mináveis, queimáveis, com capacidades de pausa e mais.

    • ERC721: Implementações para tokens não fungíveis (NFTs), seguindo o padrão ERC-721, com suporte para enumeração, metadados estendidos e transferências seguras.

    • ERC1155: Um contrato mais avançado que suporta a criação de tokens tanto fungíveis quanto não fungíveis dentro de um único contrato, otimizando a gestão e transferência de múltiplos tipos de tokens.

  2. Acesso

    • Ownable: Um contrato simples para fornecer controle básico de acesso baseado em um único proprietário, útil para operações administrativas.

    • AccessControl: Um sistema de controle de acesso mais flexível e completo que permite definir papéis e permissões complexas para diferentes ações dentro do seu contrato.

  3. Segurança

    • Pausable: Permite pausar e retomar certas funcionalidades do contrato, útil para interromper operações em caso de emergência ou manutenção.

    • ReentrancyGuard: Ajuda a prevenir ataques de reentrância, um dos vetores de ataque mais comuns, por meio do uso de um modificador simples.

  4. Governança

    • Governor: É o coração do sistema de governança do OpenZeppelin. Fornece uma base sólida sobre a qual podem ser construídos mecanismos de votação e governança, oferecendo funcionalidades como criação e gestão de propostas, votação e execução de decisões aprovadas. Este contrato pode ser estendido e personalizado para se adaptar às necessidades específicas de diferentes projetos.

    • Timelock: Adiciona um elemento de segurança e transparência ao processo de governança ao introduzir um período de bloqueio entre a aprovação de uma proposta e sua execução. Isso dá tempo para os participantes revisarem as decisões aprovadas e, se necessário, agirem antes que mudanças significativas sejam implementadas.

    • Votes: Fornece funcionalidades para a contagem e delegação de votos, permitindo que os detentores de tokens participem no processo de governança. Isso inclui suporte para tokens com capacidades de voto, como tokens ERC20 com extensões que permitem a votação.

    • Compounded Votes: Permite que os votantes acumulem poder de voto ao longo do tempo ou com base em outros fatores, adicionando uma dimensão dinâmica e estratégica ao processo de votação.

  5. Finanças

    • PaymentSplitter: Permite dividir os rendimentos de ether entre várias contas, útil para dividir pagamentos ou rendimentos de forma transparente e segura.

    • Escrow: Um contrato de depósito em garantia básico que pode ser estendido para criar mecanismos de pagamento seguros e confiáveis entre partes.

  6. Utilidades

    • Counters: Fornece uma maneira segura de incrementar e decrementar contadores, útil para manter o registro de IDs de tokens, quantidades de itens, entre outros.

    • Address: Oferece funções para realizar operações seguras com endereços Ethereum, incluindo a verificação de que um endereço é um contrato.

    • MerkleProof: Usado para verificar se um item pertence a uma árvore de Merkle dado uma raiz e uma prova (conjunto de hashes).

    • EnumerableMap: Quando é necessário um mapeamento cujos elementos possam ser listados ou contados, como o rastreamento de um conjunto de itens únicos com identificadores.

    • SafeCast: Quando é necessário mudar o tipo de uma variável numérica para outro tipo com tamanho menor de armazenamento, garantindo que o valor se ajusta ao novo tipo sem causar erros.

  7. Proxies

    • TransparentProxy e UUPS: Oferecem infraestruturas para implantar e gerenciar contratos inteligentes que podem ser atualizados, permitindo alterar a lógica de um contrato sem mudar o endereço do contrato.

Esta lista é apenas uma referência dos contratos disponíveis no OpenZeppelin. Para revisar a lista completa, acesse: https://docs.openzeppelin.com/contracts/5.x/ seção API.

Como Usar o OpenZeppelin

Para utilizar as bibliotecas do OpenZeppelin no seu projeto, primeiro você deve instalá-las. Se você estiver usando um ambiente de desenvolvimento baseado em Node.js, pode instalá-las facilmente através do npm ou yarn. Aqui está um exemplo de como instalar a biblioteca de contratos OpenZeppelin via npm:

npm install @openzeppelin/contracts

Una vez instalada, puedes importar y utilizar los contratos y módulos de OpenZeppelin en tus contratos inteligentes. Por ejemplo, para crear un token ERC-20:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor() ERC20("MyToken", "MTK") {
        _mint(msg.sender, 1000000 * (10 ** uint256(decimals())));
    }
}

Desde o Remix, você também pode acessar as bibliotecas diretamente utilizando a URL do GitHub. Para isso, deve incluir uma diretiva de importação na parte superior do seu arquivo de contrato Solidity, especificando o caminho da biblioteca no repositório do GitHub do OpenZeppelin.

Por exemplo, para importar a implementação ERC-20 do OpenZeppelin, sua diretiva de importação ficaria assim:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "<https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol>";

contract MyToken is ERC20 {
    constructor() ERC20("MyToken", "MTK") {
        _mint(msg.sender, 1000 * (10 ** uint256(decimals())));
    }
}

Certifique-se de que a versão do Solidity especificada no seu contrato seja compatível com a versão utilizada pelos contratos do OpenZeppelin que você está importando.

Uma forma mais simples de obter os contratos ERC20 no Remix é diretamente através do botão na tela principal do Remix.

Para conhecer em detalhes os contratos e utilidades disponíveis no OpenZeppelin, sugerimos revisar seu GitHub. Você também pode assistir a este video explicativo em espanhol.

Last updated