WEB3DEV

Cover image for Construa Sua Própria Exchange Descentralizada
Isabela Curado Nehme
Isabela Curado Nehme

Posted on

Construa Sua Própria Exchange Descentralizada

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

Este artigo foi publicado originalmente em: https://www.buildbear.io/resources/guides-and-tutorials/Build_your_own_Decentralized_Exchange

O conceito por trás das exchanges descentralizadas é simples: permitir que os usuários negociem suas criptomoedas diretamente na blockchain por meio de contratos inteligentes, mantendo o controle sobre suas chaves privadas.

Ao final deste tutorial, você terá uma compreensão sólida dos princípios fundamentais por trás das exchanges descentralizadas e ganhará experiência prática na construção de uma.

Vamos começar!

Pré-requisitos

Antes de começar, certifique-se de ter os seguintes pré-requisitos instalados em seu sistema:

Começando

Para começar, navegue até o repositório scaffold-eth x BuildBear.

Veja por que recomendamos o uso de scaffold-eth x BuildBear:

  1. Ele permite que você bifurque facilmente cadeias compatíveis com a EVM (como Ethereum, Polygon, Binance Smart Chain, Fantom, Optimism e Arbitrum Mainnet) diretamente da CLI. Economizando um tempo valioso que, de outra forma, seria gasto na busca de RPCs funcionais.
  2. Você pode cunhar tokens nativos e ERC20 sem esforço usando a CLI, eliminando a necessidade de perder tempo procurando torneiras funcionais.

Para começar, clique no botão “Fork” para criar uma cópia do repositório em sua própria conta GitHub. Aguarde a conclusão do processo de bifurcação (fork) antes de continuar.

Em seguida, abra um terminal e clone o repositório bifurcado, que inclui todos os componentes necessários para construir um aplicativo descentralizado:

git clone < cole o URL do repositório fork>
cd scaffold-eth
Enter fullscreen mode Exit fullscreen mode

Para instalar todos os pacotes necessários, execute o seguinte comando:

yarn install
Enter fullscreen mode Exit fullscreen mode

Para fazer uma bifurcação da rede principal, use o seguinte comando: escolha a blockchain desejada e insira o número do bloco a partir do qual deseja fazer a bifurcação. Alternativamente, você pode deixar o valor padrão como está.

yarn fork-bb
Enter fullscreen mode Exit fullscreen mode

https://miro.medium.com/v2/resize:fit:720/1*JKjt4Lut0DSnKcgHaPjL5g.gif

Implantando os contratos:

yarn deploy
Enter fullscreen mode Exit fullscreen mode

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

Iniciando o front-end:

yarn start
Enter fullscreen mode Exit fullscreen mode

Quando o aplicativo estiver em execução, você poderá acessá-lo em http://localhost:3000 e deverá ver o seguinte:

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

Antes de nos aprofundarmos no contrato inteligente, vamos começar explorando as funcionalidades da DEX. Para começar, navegue até a página da DEX.

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

Para reivindicar ETH grátis, conecte sua carteira e clique em “Grab funds from the faucet” (pegar fundos da torneira).

https://miro.medium.com/v2/resize:fit:640/format:webp/1*KeAXhsa58pkr_7PCr8x9eA.png

Troca de tokens

  1. Insira o valor do token desejado: ao inserir o valor, observe que o gráfico exibirá o número correspondente de tokens Balloon que você receberá, junto com a taxa associada.
  2. Depois de inserir o valor do token, clique em “💸” para prosseguir com a troca.
  3. Aprove a transação na MetaMask: um prompt da MetaMask aparecerá, solicitando sua aprovação para a transação de troca de token.

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

Para verificar o saldo do seu token Balloon, copie e cole seu endereço e clique em ler.

https://miro.medium.com/v2/resize:fit:720/format:webp/1*LZERZVjnCCItDsB-3vu9Yw.png

Fornecendo liquidez

  1. Insira o valor desejado que pretende fornecer como liquidez.
  2. Depois de ter inserido o valor desejado, clique no botão “📥” .
  3. Aprove a transação na MetaMask: um prompt da MetaMask aparecerá, solicitando sua aprovação para a transação de fornecimento de liquidez.

Da mesma forma, você também pode sacar a liquidez que forneceu.

https://miro.medium.com/v2/resize:fit:720/format:webp/1*dwTXE_ezWpm8Ug40lM-3qA.png

Assim que a transação for concluída, a liquidez total será atualizada.

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

Vamos nos aprofundar no contrato inteligente.

Podemos encontrar o contrato DEX.sol em packages/hardhat/contracts:

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

  1. O contrato usa o Pragma da versão >=0.8.0 <0.9.0 do Solidity e está licenciado sob a licença MIT.
  2. O contrato importa dois contratos externos: IERC20.sol da biblioteca OpenZeppelin e SafeMath.sol da biblioteca OpenZeppelin. Esses contratos fornecem funcionalidade padronizada do token ERC20 e operações matemáticas seguras.
  3. Variáveis ​​globais:
    • totalLiquidity: representa a quantidade total de tokens de provedor de liquidez (LPTs) cunhados na DEX.
    • liquidity: armazena o saldo de liquidez de cada depositante.
    • token: uma instância do contrato IERC20 importado.
  4. Principais funções do contrato:

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

  • init(uint256 tokens): esta função inicializa a DEX com uma quantidade de tokens transferidos para o contrato. Ele define a variável totalLiquidity para o saldo atual de Ether no contrato, define o saldo de liquidez do chamador (msg.sender) para a liquidez total e transfere o número especificado de tokens do chamador para o contrato DEX.

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

  • ethToToken(): esta função permite aos usuários trocar Ether pelo token. Ela calcula a saída do token com base nas reservas atuais e realiza a transferência do token para o chamador. Ela emite um evento EthToTokenSwap.

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

  • tokenToEth(uint256 tokenInput): esta função permite aos usuários trocar o token por Ether. Ela calcula a saída de Ether com base nas reservas atuais e realiza a transferência do token do chamador para o contrato DEX. Em seguida, transfere o Ether para o chamador. Ela emite um evento TokenToEthSwap.

https://miro.medium.com/v2/resize:fit:720/format:webp/1*m-4zqqhS0lFppb3C4Qr1LA.png

  • deposit(): esta função permite aos usuários depositar tokens e Ether no pool de liquidez. A quantidade de tokens depositados é determinada com base na quantidade de Ether enviada com a chamada da função e as reservas atuais. Ela emite novos tokens de provedor de liquidez (LPTs) e atualiza os saldos de liquidez e a liquidez total. Ela emite um evento LiquidityProvided.

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

  • withdraw(uint256 amount): esta função permite que os usuários retirem tokens e Ether do pool de liquidez com base na quantidade de tokens do provedor de liquidez (amount) que desejam retirar. Ela calcula tanto ETH quanto tokens na proporção correta.
  • price(uint256 xInput, uint256 xReserves, uint256 yReserves): esta função calcula o valor de saída (yOutput) com base no valor de entrada (xInput) e nas reservas dos tokens (xReservese e yReserves). Ela usa x * y = k onde x e y são as reservas do pool.

A fórmula (quantidade de ETH em DEX) * (quantidade de tokens em DEX) = k representa uma invariante que permanece constante durante as negociações (exceto quando é adicionada liquidez). Representar graficamente essa fórmula produz uma curva conforme mostrado na imagem abaixo:

https://miro.medium.com/v2/resize:fit:640/format:webp/0*2q2PD129OCknnTcP.png

Essa curva determina o “preço” em termos de quanta saída um ativo receberia com a entrada de uma quantidade específica do ativo. À medida que a proporção se torna mais desequilibrada, a troca produz rendimentos progressivamente menores do ativo mais fraco. Se o contrato inteligente tiver ETH em excesso e não tiver tokens suficientes, o preço de troca de tokens por ETH deverá se tornar mais favorável.

Parabéns

Desenvolvemos com sucesso uma exchange descentralizada básica que permite aos usuários fornecer liquidez e trocar ativos. Ao participar como fornecedores de liquidez, os usuários têm a oportunidade de ganhar taxas pelas suas contribuições.

Compartilhe seu projeto no Twitter e no LinkedIn e marque a BuildBear.

Se você aprecia o que estamos fazendo, siga-nos no Twitter e no LinkedIn e junte-se ao grupo do Telegram, caso ainda não tenha feito.

E por favor, aplauda-nos 👏 se você gosta do nosso trabalho.

Repositório Github: Tutoriais BuildBear

Sobre a BuildBear:

BuildBear é uma plataforma para testar dApps em escala, para equipes. Ela fornece aos usuários sua própria rede de testes privada para testar seus contratos inteligentes e dApps, que podem ser bifurcados em qualquer cadeia EVM. Ela também fornece torneira (Faucet), explorador (Explorer) e RPC para fins de teste.

A BuildBear visa construir um ecossistema de ferramentas para testar dApps em escala para as equipes.

Leia nossos artigos anteriores e continue aprendendo:

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

Top comments (0)