O que eu descobri explorando o código do real digital | Opinião

Programador explica o que viu no Github do projeto
Imagem da matéria: O que eu descobri explorando o código do real digital | Opinião

Foto: Shutterstock

O Banco Central do Brasil lançou recentemente o chamado “kit onboarding”, um repositório no GitHub (um site usado por programadores para compartilhar códigos) que contém informações sobre os contratos inteligentes do Real Digital e algumas instruções sobre como executar um nó para participar da rede.

Também foram fornecidas nesse repositório as interfaces desses contratos. No entanto, infelizmente, o código-fonte em si não foi disponibilizado pelo Banco Central. Foi nesse ponto que decidi replicar os contratos com base nas definições apresentadas logo no segundo dia após a publicação pelo BC.

Publicidade

Uma das primeiras observações que fiz foi o uso de uma blockchain privada chamada Besu, o que me leva a crer que essa solução está aproveitando a onda das criptomoedas, uma vez que um banco de dados tradicional, muito mais barato para as finanças do governo, já resolveria para uma CBDC. Apesar dessa observação, o uso da blockchain Besu permite aos desenvolvedores ter acesso à implementação de contratos inteligentes na linguagem Solidity, que é atualmente a linguagem mais amplamente aceita para a construção de smart contracts.

Análise das interfaces

Ao analisar as interfaces, conseguimos criar um contrato “dummy”, ou seja, um contrato que não faz nada, mas possui a mesma interface apresentada pelo Banco Central. Como meu objetivo era obter um contrato que pelo menos se assemelhasse ao que o Real Digital será quando o Banco Central divulgar o código-fonte, decidi criar esse contrato.

Para não me alongar muito neste artigo, vou limitar minha explicação à funcionalidade dos dois principais contratos usados nesse projeto do Banco Central: CBDC Access Control  e Real Digital. No final do artigo você pode conferir no link do meu GitHub todos os outros contratos.

CBDC Access Control

O contrato `CBDCAccessControl` é responsável pela camada de controle de acesso para o token Real Digital e outros contratos que funcionarão em conjunto com ele. Ele define diferentes funções e atribui “roles” (papéis) a certos endereços para controlar quem pode executar determinadas ações no contrato.

Publicidade

As principais funcionalidades do contrato são:

  1. Determinar quais carteiras podem enviar/receber tokens.
  2. Controlar os papéis de qual endereço pode emitir/resgatar/congelar saldo de uma carteira.

A implementação dessas funcionalidades é feita através do uso de “roles” definidos no contrato. Cada “role” representa um conjunto específico de permissões relacionadas a uma ação específica. Aqui estão os “roles” definidos no contrato:

  • `PAUSER_ROLE`: Permite pausar o contrato.
  • `MINTER_ROLE`: Permite fazer o `mint` (emissão) de tokens nos contratos do token.
  • `ACCESS_ROLE`: Permite habilitar um endereço para receber o token.
  • `MOVER_ROLE`: Permite acesso à função `move`, ou seja, transferir o token de outra carteira.
  • `BURNER_ROLE`: Permite acesso à função `burn`, que destrói tokens.
  • `FREEZER_ROLE`: Permite bloquear o saldo de uma carteira, por exemplo, para realizar um swap de dois passos.

Esses “roles” são atribuídos a endereços específicos dentro do contrato. Cada endereço pode ter um ou mais “roles” atribuídos a ele, dependendo das permissões necessárias.

Além dos “roles”, o contrato também possui funções como `enableAccount`, `disableAccount` e `verifyAccount`. Essas funções permitem habilitar ou desabilitar uma carteira para receber o token e verificar se uma carteira está autorizada a receber o token.

No geral, o contrato `CBDCAccessControl` fornece um mecanismo para controlar o acesso e as permissões relacionadas ao token Real Digital. Ele garante que apenas endereços com os “roles” apropriados possam executar certas ações, como emitir, transferir, queimar e bloquear tokens.

Publicidade

Sobre o autor

Gustavo Toledo é o fundador da startup Coinsamba, especialista em smart contracts e colaborador ativo de projetos open-source. Com vasta experiência junto às blockchains Dash e Celo, ele lidera projetos na área web3.