Skip to content

Latest commit

 

History

History
111 lines (60 loc) · 8.54 KB

smartcontracts.md

File metadata and controls

111 lines (60 loc) · 8.54 KB

Interação com os smart contracts

Objetivo

Esta documentação tem como objetivo explicar como será feita a interação com os smart contracts que estão disponíveis na Rede do Piloto do Real Digital para uso dos ativos Real Digital e Real Tokenizado.

Por se tratar de um piloto em ambiente de testes, esta documentação está sujeita a constantes evoluções que serão aqui refletidas.

Serão fornecidos ao participante do piloto a ABI de cada um dos contratos e seus respectivos endereços publicados na rede. Cada participante deve implementar, da forma que melhor entender, a sua interação com os contratos, fazendo uso de bibliotecas padrão Web3 como, por exemplo, o Web3JS, Web3J, ou frameworks como, por exemplo, o Hardhat ou Truffle.

No piloto, todos os contratos serão implementados e publicados na rede pelo Banco Central do Brasil.

O CBDC (Central Bank Digital Currency) está definido no contrato chamado RealDigital.

Este contrato foi desenvolvido usando como base o padrão ERC20, com a adição de funções específicas de controle de acesso e com as seguintes características:

  • A carteira do Banco Central do Brasil é a gestora do token.
  • O símbolo do token é BRL.
  • Valor definido com 2 casas decimais
  • Apenas instituições detentoras de Conta Reservas ou Conta de Liquidação e o Tesouro Nacional poderão ter Real Digital em suas carteiras.
  • Cada participante deve mandar ao Banco Central do Brasil o endereço da sua carteira principal para o cadastro. Esta carteira será a carteira default do participante e poderá ser posteriormente alterada através do contrato RealDigitalDefaultAccount.
  • Após o cadastro inicial, o próprio participante poderá habilitar outras carteiras a receber Real Digital através do contrato RealDigitalEnableAccount.
  • A solicitação de emissão de Real Digital será feita mediante chamada da carteira ao contrato STR

O contrato RealDigitalDefaulAccount permite ao participante trocar a sua carteira default, através do método updateDefaultWallet.

Ainda, através do mapping defaultAccount, é possível recuperar a carteira default dos outros participantes, bastando passar como parâmetro o CNPJ8 da instituição desejada.

A carteira default será necessária para as transações de swap detalhadas em seção específica de swaps.

O contrato RealDigitalEnableAccount permite ao participante habilitar ou desabilitar outras carteiras de sua posse para o recebimento de Real Digital.

Para habilitação deve ser utilizado o método enableAccount. Para desabilitação, disableAccount.

O contrato chamado STR representa uma simulação do sistema STR, será por meio desse contrato que os participantes solicitarão Real Digital ao Banco Central do Brasil no âmbito do projeto Piloto.

Este contrato permite que qualquer participante solicite o mint de Real Digital através de uma carteira previamente habilitada.

Para solicitar a emissão deve ser utilizado o método requestToMint.

DVt (Depósito bancário à vista tokenizado) e MEt (Moeda eletrônica tokenizada) - Real Tokenizado

O Real Tokenizado está definido no contrato chamado RealTokenizado.

Este contrato foi desenvolvido usando como base o padrão ERC20, com a adição de funções específicas de controle de acesso e com as seguintes características:

  • A primeira carteira default do participante será a gestora do token;
  • A criação e publicação do contrato na rede será feita exclusivamente pelo Banco Central do Brasil;
  • Caso seja necessário alterar a carteira gestora, deve ser feita solicitação de alteração ao Banco Central do Brasil através dos mecanismos oficiais de comunicação;
  • O símbolo do token BRL@CNPJ8. Exemplo BRL@11111111, para o Real Tokenizado da instituição '11111111';
  • Valor definido com 2 casas decimais;
  • Assim como o Real Digital, somente carteiras autorizadas podem receber Real Tokenizado;
  • O participante deve utilizar dos métodos enableAccount e disableAccount para gerenciar as carteiras permitidas.

O contrato KeyDictionary simulará um Diretório de Identificadores de Contas Transacionais (DICT) para a transferência de Real Tokenizado. Durante o piloto, os dados de clientes, sempre fictícios, devem ser inseridos na rede para recuperação e identificação das carteiras de clientes durante as operações de swap de transferência entre clientes. O método a ser invocado para a inserção de dados é o addAccount, que tem os seguintes parâmetros:

  • Chave, identificador único gerado pelo participante, deve ser salvo no formato hash (keccak256);
  • CPF do cliente fictício;
  • Código do participante;
  • Conta do cliente fictício;
  • Agência do cliente fictício;
  • Carteira do cliente fictício;
  • O Cnpj8 do participante;

Ao iniciar uma transferência o participante poderá recuperar a carteira do destinatário através de consulta ao método getWallet.

Ao receber uma transferência o participante recebedor poderá identificar o cliente pagador através da consulta aos métodos getKey e getCustomerData.

Swaps e comunicação Off-Chain

Sempre que houver uma transferência de Real Tokenizado entre clientes de instituições distintas, essa transferência deve ser efetivada por meio de um contrato de swap que permita a troca de Real Tokenizado, usando como reserva o Real Digital das respectivas instituições envolvidas.

No momento, há três implementações disponíveis: uma que executa o swap em apenas uma transação e outras duas que dependem da aprovação do recebedor para que a troca seja concluída. Todas as implementações foram efetuadas utilizando os padrões de approve para o respectivo contrato de swap previamente à execução da operação.

O objetivo do piloto é testar formas distintas de swap de forma a avaliar como podem se encaixar em diferentes negócios. Há, ainda, a possibilidade de implementação de um swap que envolva a troca de informações off-chain.

O contrato SwapOneStep efetua a transferência de Real Tokenizado em uma única transação atômica. Após os approves das carteiras pagadoras de Real Tokenizado e Real Digital, a chamada ao executeSwap efetivará a destruição (burn) de Real Tokenizado do cliente pagador, a transferência (transferFrom) de Real Digital da instituição pagadora para a instituição recebedora e a emissão (mint) de Real Tokenizado para o cliente recebedor.

O contrato SwapTwoSteps executa a transferência de forma atômica quando o participante recebedor confirmar a operação. Após os approves das carteiras pagadoras de Real Tokenizado e Real Digital, a chamada ao startSwap irá gerar um evento para a instituição recebedora. A instituição recebedora avalia o crédito e confirma a transferência efetivando, assim, a operação atômica.

O contrato SwapTwoStepsReserve, assim como o SwapTwoSteps, executa a transferência de forma atômica quando o participante recebedor confirmar a operação. Nesse contrato, entretanto, após os approves das carteiras pagadoras de Real Tokenizado e Real Digital, a chamada ao startSwap efetivará a transferência dos tokens de Real Tokenizado e Real Digital para o contrato SwapToStepsReserve como forma de reserva e garantia de saldo, além de gerar um evento para a instituição recebedora. A instituição recebedora então avalia o crédito e confirma a transferência efetivando, assim, a operação atômica.

<<< Voltar