Introdução a OpenZeppelin Contracts

Cripto

Introdução a OpenZeppelin Contracts

Luiz Duarte
Escrito por Luiz Duarte em 25/01/2024
Junte-se a mais de 34 mil devs

Entre para minha lista e receba conteúdos exclusivos e com prioridade

Uma das partes mais cruciais e frequentes em projetos web3 é o desenvolvimento de smart contracts, sendo a linguagem Solidity a mais comumente utilizada no mercado. Como em todo projeto de software é normal que existam prazos e pressão para que eles sejam cumpridos, o que nos faz ter preocupações com produtividade, mas sem abrir mão de segurança e performance, dois fatores cruciais em projetos deste tipo. Uma brecha de segurança, por exemplo, pode arruinar completamente um protocolo DeFi, e um problema de performance pode gerar custos astronômicos de gás que afastem os usuários da sua aplicação (entenda mais aqui).

Mas como se manter produtivo, seguro e com um dapp “barato” de usar? Uma alternativa muito recorrente é o reuso de código, afinal, boa parte dos projetos costuma ser ou começar a partir de padrões comuns, principalmente quando o assunto são tokens. Afinal, se milhares de tokens ERC-20 já foram codificados, deve ter uma base comum de código a ser usada entre eles, certo? O mesmo vale para NFTs (ERC-721) e outros.

Mas será que, quando o assunto é web3, posso confiar em código copiado da Internet?

E a resposta é sim, se você souber de ONDE copiar.

E quando o assunto é Web3, esse ONDE se chama OpenZeppelin.

Se preferir, você pode acompanhar o conteúdo deste artigo no vídeo abaixo.

O que é a OpenZeppelin?

A OpenZeppelin é uma empresa dedicada ao desenvolvimento de tecnologias relacionadas a contratos inteligentes e segurança blockchain. Fundada em 2015, a OpenZeppelin tem sido uma figura proeminente no ecossistema Ethereum, fornecendo soluções de segurança e auditoria para contratos inteligentes.

A empresa é conhecida por sua biblioteca de contratos inteligentes de código aberto chamada OpenZeppelin Contracts, que oferece implementações seguras e testadas de diversos padrões comuns para o desenvolvimento de contratos inteligentes. Esses padrões incluem funcionalidades como token ERC-20, token ERC-721 (NFTs), entre outros.

Além disso, a OpenZeppelin oferece serviços de auditoria de segurança para contratos inteligentes, ajudando projetos e empresas a identificar e corrigir possíveis vulnerabilidades em suas implementações blockchain. A segurança é uma consideração crítica no espaço blockchain, e a expertise da OpenZeppelin nessa área é altamente valorizada pela comunidade.

Mas deixando esses serviços personalizados de lado, eu quero falar hoje sobre o OpenZeppelin Contracts, o serviço mais utilizado pela comunidade.

O que é OpenZeppelin Contracts?

A biblioteca OpenZeppelin Contracts é uma coleção de contratos inteligentes de código aberto para o desenvolvimento seguro e padronizado de aplicativos descentralizados (DApps) na blockchain Ethereum (e demais compatíveis com EVM). Ela foi projetada para facilitar o processo de criação de contratos inteligentes, fornecendo implementações robustas de padrões comuns e componentes essenciais. Podemos destacar alguns aspectos-chave da biblioteca OpenZeppelin Contracts:

Padrões de Token: A OpenZeppelin Contracts inclui implementações padrão para diversos padrões de tokens Ethereum, como ERC-20 (para tokens fungíveis), ERC-721 (para tokens não fungíveis ou NFTs) e ERC-1155 (multitoken). Isso permite que os desenvolvedores criem facilmente tokens personalizados sem se preocupar com a implementação básica.

Controle de Acesso: A biblioteca oferece contratos que facilitam a implementação de sistemas de controle de acesso (simples e por roles), permitindo que os desenvolvedores restrinjam o acesso a determinadas funções com base em permissões específicas.

Utilidades Gerais: Oferece uma variedade de utilidades e contratos auxiliares que podem ser úteis no desenvolvimento, como manipulação de strings, controle de tempo, manipulação de endereços, acordos seguros (escrow) e matemática segura.

Upgradability: A biblioteca também aborda o conceito de upgradability, permitindo que os desenvolvedores construam contratos inteligentes que podem ser atualizados sem perder o estado atual.

Todos os contratos da OpenZeppelin passam por rigorosas auditorias de segurança, o que significa que eles são desenvolvidos com foco na minimização de vulnerabilidades e são testados quanto à robustez. A OpenZeppelin Contracts é amplamente utilizada na comunidade Ethereum e é considerada uma base sólida para o desenvolvimento de contratos inteligentes seguros e confiáveis. Desenvolvedores muitas vezes incorporam esses contratos como dependências em seus próprios projetos, aproveitando a confiabilidade e segurança oferecidas pela biblioteca.

Curso Node.js e MongoDB

Como usar OpenZeppelin Contracts no site?

O uso desta biblioteca começa no builder de contratos disponibilizados pela OpenZeppelin em seu próprio site, acesse aqui e que tem a aparência abaixo.

No topo, você tem algumas abas para alguns tipos comuns de contratos pré-construídos e algumas ferramentas:

  • ERC20: para criar contratos de tokens fungíveis (as famosas “criptomoedas”);
  • ERC721: para criar contratos de tokens não-fungíveis (as famosas “NFTs”);
  • ERC1155: para criar contratos multi-token, misturando os tipos anteriores;
  • Governor: para contratos de governança (muito usados em DAOs);
  • Custom: criação livre;

Após selecionar a base de contrato que mais atende à sua necessidade, é hora de personalizar o código gerado usando as ferramentas à esquerda. Ali você pode personalizar uma série de características dos contratos além de adicionar diversas funcionalidades utilitárias que muitas vezes adicionam mais contratos da biblioteca à sua solução final.

Peguemos como exemplo a solução mais comum, de token ERC20. Ao selecionar esta aba você pode personalizar, por exemplo:

  • Name: o nome do seu token;
  • Symbol: a sigla do seu token (geralmente três ou quatro letras maiúsculas);
  • Premint: quantos tokens serão emitidos na criação do contrato;
  • Mintable: se seu contrato vai permitir a emissão de mais tokens no futuro (expansão monetária);
  • Burnable: se seu contrato vai permitir a queima de tokens existentes (contração monetária);
  • Pausable: se seu contrato permite a interrupção geral de funcionamento (pause);
  • Permit: implementação da ERC-2612
  • Votes: usada por DAOs para votações entre os token holders;
  • Flash Minting: para implementação de Flash Loans;
  • Access Control: onde você pode optar pelas formas de controle baseada em Owner (single admin), em Roles e Roles Gerenciáveis (que podem ser alteradas);
  • Upgradeability: que implementam padrões como Adapter ou Proxy para permitir atualizações do contrato;

Entre outras que mudam com o passar do tempo ou com a categoria de contrato (as que citei acima estão disponíveis para tokens ERC-20).

Mais abaixo você tem ainda a opção de adicionar mecanismos de controle de acesso e de atualização do contrato (por padrão os contratos não são atualizáveis).

Assim, facilmente você pode ir montando o esqueleto de um contrato real sem escrever uma linha de código sequer.

Curso Beholder
Curso Beholder

Como usar OpenZeppelin Contracts no projeto?

Claro que o resultado final, em um projeto profissional, irá depender que você seja capaz de personalizar o código gerado e até mesmo integrá-lo a uma solução muito maior, mas o ganho de produtividade, segurança e performance que irá ter usando da OpenZeppelin Contracts é imenso nos tipos de projeto que ela atende. Uma vez com o código-base criado é hora de levá-lo para edição em sua ferramenta favorita, sendo que hoje no mercado temos duas opções principais: Remix e VS Code/HardHat.

No Remix, basta que você crie um novo arquivo Solidity e cole o código copiado do OZ Contracts. A ferramenta por padrão já conhece os contratos da biblioteca e os imports irão funcionar sem qualquer necessidade de configuração adicional, veja abaixo.

Então basta você copiar e colar o código do OZ Contracts no Remix e fazer as edições que deseja, para depois poder avançar para um possível deploy na blockchain.

Agora se você trabalhar com VS Code + HardHat, após a etapa inicial de criação de um novo projeto HardHat, você terá de instalar a dependência do OZ Contracts via terminal, como abaixo:

Isso permitirá que você use qualquer um dos contratos da biblioteca normalmente em seus códigos de smart contracts Solidity. Veja abaixo:

Então após você instalar o pacote via NPM, basta você copiar e colar o código do OZ Contracts no VS Code e fazer as edições que deseja, para depois poder avançar para a etapa de testes unitários (sim, recomendo que faça todos os testes possíveis, principalmente se editou algo no código) e mais tarde um possível deploy na blockchain.

E com isso você acabou de aprender a usar um poderoso aliado em seus projetos de smart contracts que tenho certeza que pode fazer a diferença no seu dia a dia como dev web3.

Até a próxima!

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *