WEB3DEV

Cover image for Vert Finance: Arquitetura de uma Exchange de Criptomoeda Para Fiat
Isabela Curado Nehme
Isabela Curado Nehme

Posted on

Vert Finance: Arquitetura de uma Exchange de Criptomoeda Para Fiat

https://miro.medium.com/v2/resize:fit:720/format:webp/1*6u2zHiQ6QwQ4yQYOA8o5NQ.png

Interface de usuário da Vert Finance

Meu projeto de último ano de graduação foi um produto Web3. O produto Web3 ajuda você a trocar quase todas as criptomoedas diretamente por uma moeda fiduciária (Fiat) em sua conta bancária. Não se incomode em me perguntar como consegui criar um aplicativo Web3 enquanto era estudante de Engenharia da Computação em uma universidade nigeriana.

O aplicativo está ativo na rede principal e na rede de teste da BNB Smartchain e suporta apenas Naira nigeriana, mas só posso disponibilizar a versão da rede de teste porque nenhum dinheiro real é enviado para sua conta. Não posso disponibilizar o aplicativo da rede principal devido à diretiva do Banco Central da Nigéria para que os bancos não se associem a empresas de criptomoedas. Independentemente disso, a versão da rede principal funciona. Você pode configurá-lo da sua forma, eu tornei o código open-source (código aberto). Você pode bifurcá-lo e também usar partes dele como suas. Neste artigo, explicarei como o produto funciona e por que fiz algumas escolhas de design.

Arquitetura

https://miro.medium.com/v2/resize:fit:720/format:webp/1*OSGnYknVxwhK6ScFeKOjVw.png

Arquitetura da Vert Finance

O Aplicativo Descentralizado (DApp) possui um front-end, um back-end e um contrato inteligente. O usuário insere o token e o valor do token que deseja trocar. O valor pode ser inserido em valor simbólico ou diretamente em Naira. O valor do outro campo é gerado automaticamente. Ele passa para a etapa de inserir seus dados bancários e confirma a transação. A transação usa o contrato inteligente Vert Router para trocar o token selecionado por uma stablecoin e enviá-la para um endereço de destinatário (escolhido pela Vert Finance). Após a troca, o front-end envia os detalhes da transação para o back-end. O back-end verifica a transação e envia o valor fiduciário para a conta bancária do usuário, se for válido. O back-end depende da Naira que a Vert Finance já possui em uma exchange para concluir a transação. Ele salva os detalhes da transação em um banco de dados para fins de histórico e verificação de transações futuras.

Essa foi uma visão geral de alto nível. Vamos nos aprofundar em cada parte do DApp.

Front-end

https://miro.medium.com/v2/resize:fit:720/format:webp/1*ju8uVSnreubCipgozvb0_g.png

Front-end da Vert Finance

No front-end, o usuário insere o token que deseja trocar e o valor do token que será trocado ou a quantidade de Naira que deseja receber. O outro campo de entrada é gerado automaticamente a partir da entrada do usuário, usando as taxas de câmbio. O front-end busca a taxa de câmbio USD/NGN do back-end. O preço atual do token em USD (Token/USD) é obtido na PancakeSwap. O front-end usa a Uniswap redux muticall para fazer múltiplas chamadas à blockchain para encontrar o caminho de troca mais eficiente entre o token e uma stablecoin. Trocamos o token por uma stablecoin para garantir que seu valor seja mantido. Ele usa o PancakeSwap SDK para lidar com dados de caminho e conversões entre tokens e valores fiduciários. Também me inspirei no código de front-end da PancakeSwap e da Uniswap para implementar processos como validação de entrada.

Na página seguinte, o usuário seleciona um banco e insere o número da sua conta bancária. O nome da conta bancária é resolvido a partir do back-end usando esses dados. Se a conta estiver correta, o usuário pode prosseguir. Ao prosseguir, ele vê um resumo da transação. Se aceitar o resumo, uma transação blockchain usará o contrato inteligente Vert para trocar seu token por uma stablecoin. O front-end envia os detalhes do swap (troca) para o back-end e o instrui a enviar Naira para o número da conta. O front-end monitora o andamento da transação no back-end usando WebSocket, permitindo assim que o usuário acompanhe o progresso da transação. Usamos o Socket.io para configurar e gerenciar a conexão WebSocket. Após a conclusão da transação, o usuário obtém um resumo da transação.

O front-end é construído usando WAGMI, Reactjs e Typescript. WAGMI é uma biblioteca Typescript que fornece ganchos React para realizar operações Web3, como verificar saldos de contas Ethereum. O front-end original é implantado no Vercel e se conecta à rede de teste BNB Smartchain. O código é open-source e está disponível no GitHub.

Contrato Inteligente

https://miro.medium.com/v2/resize:fit:720/format:webp/1*FOI1KCfYTxdCCVjylegXjQ.png

Contrato Inteligente da Vert Finance

A Vert usa apenas um contrato inteligente chamado Vert Router. O contrato inteligente é uma modificação do contrato original PancakeSwap Router. Ele pega o token, troca-o na PancakeSwap por uma stablecoin e o envia para um endereço. A Vert Finance é proprietária do endereço. É um dos argumentos de troca. Qualquer pessoa pode chamar o contrato para concluir uma troca, então o endereço distingue swaps feitas no front-end da Vert Finance de outros swaps. O back-end usa esse endereço para verificar a transação de swap e obter a quantidade de stablecoin que o usuário enviou.

O contrato inteligente também acumula poeira (dust), o que pode servir como fonte de receita para a Vert Finance. A poeira é a diferença entre o preço mais baixo de execução do swap e o preço real de execução do swap. A tolerância à derrapagem determina o menor preço de execução. Se um usuário quiser trocar 1 ETH por 10.000 USDC com uma derrapagem de 1%, o preço mais baixo que ele aceitará é 9.900 USDC ((99/100) * 10.000). Se o swap ocorrer a um preço de execução de 9.950 USDC, a Vert fica com os 50 USDC extras. O front-end lida com a derrapagem para garantir que o usuário sempre receba a quantia de Nairas que acordou.

O contrato inteligente foi escrito em Solidity usando o ambiente de desenvolvimento da Foundry. Ele é implantado e verificado na BNB Smartchain e BNB Testnet. O código é open-source e está disponível no GitHub.

Back-end

https://miro.medium.com/v2/resize:fit:720/format:webp/1*qiy5i5blqLmdjvetIXECKA.png

Back-end da Vert Finance

O back-end recebe os detalhes da transação do front-end. Esses detalhes incluem o hash da transação de swap, o remetente da transação, os dados bancários do usuário e a taxa de câmbio USD/NGN. O back-end primeiro verifica a transação de swap, salva o hash da transação e aguarda sete confirmações de bloco antes de enviar o Naira. A transação de swap é verificada consultando se o hash da transação já existe no banco de dados, o remetente da transação, o contrato com o qual interagiu e o destinatário. Ele usa um SellEvent que o contrato emite para verificação. O back-end retorna uma resposta de erro em caso de falha na verificação.

Nota: a verificação feita aqui não verifica se os dados bancários transmitidos ​​são os dados bancários reais do usuário. A chave privada do usuário pode ser usada para verificar os detalhes, através da consulta de uma assinatura derivada da assinatura dos dados com a chave privada. Isso evita um ataque em que um atacante pode monitorar as transações do contrato e enviar imediatamente seus dados bancários assim que vê uma transação, mas com o hash e o remetente da transação reais. Esse atacante receberá o Naira em sua conta bancária, enquanto a solicitação do usuário ao back-end falhará porque o back-end pensará que a transação de swap já foi processada.

Depois que a transação recebe suas confirmações de bloco, a taxa enviada é verificada. O back-end precisa da taxa de câmbio para saber a taxa com a qual o usuário concordou, garantindo que ele receba a quantia em Naira que deseja. A taxa enviada é assinada. O back-end assinou antes de enviá-la inicialmente para o front-end. O back-end verifica a assinatura. Se a verificação falhar, a taxa de câmbio atual será usada em vez daquela enviada pelo front-end. Isso evita ataques em que o atacante envia uma taxa de câmbio falsa que inflaciona a taxa de câmbio USD/NGN, dando-lhe assim uma grande quantidade de Naira por uma pequena quantia de USD.

Por fim, o back-end informa a uma exchange ou a um provedor de liquidez onde a Vert Finance detém Naira para enviar para a conta bancária do usuário. A Vert deve garantir que sempre tenha liquidez em Nairas suficiente para satisfazer as solicitações dos usuários. Durante todas as etapas de verificação e transação final, o back-end emite eventos por meio da API WebSocket para informar o front-end sobre seu progresso.

O back-end é escrito em Typescript, Expressjs, Viem e Nodejs. Viem é a biblioteca Web3 que o back-end usa para interagir com a blockchain. O código é open-source e está disponível no GitHub.

A Vert Finance é uma prova de conceito de um produto que permite a qualquer pessoa acessar moedas fiduciárias, independentemente da criptomoeda que tenha em sua carteira. Seria um produto real se o Banco Central da Nigéria não limitasse os bancos. Independentemente disso, os produtos de criptomoeda são inevitáveis ​​em países como a Nigéria, onde a no valor da moeda local diminui a cada dia que passa. Todos os nigerianos precisam de uma forma de preservar a sua riqueza. As stablecoins provaram ser mais estáveis ​​do que a Naira nigeriana.

Obrigado por dedicar algum tempo a isto. Você pode aplaudir, compartilhar ou fazer perguntas usando a seção de comentários. Mal posso esperar para ver o que você vai fazer com o código.

Escrito com malícia 😈 por nonseodion.

Este artigo foi escrito por Nonse Odion e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.

Top comments (0)