
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:
- 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.
- 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
Para instalar todos os pacotes necessários, execute o seguinte comando:
yarn install
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

Implantando os contratos:
yarn deploy

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

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.

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

Troca de tokens
- 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.
- Depois de inserir o valor do token, clique em “💸” para prosseguir com a troca.
- Aprove a transação na MetaMask: um prompt da MetaMask aparecerá, solicitando sua aprovação para a transação de troca de token.

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

Fornecendo liquidez
- Insira o valor desejado que pretende fornecer como liquidez.
- Depois de ter inserido o valor desejado, clique no botão “📥” .
- 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.

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

Vamos nos aprofundar no contrato inteligente.
Podemos encontrar o contrato DEX.sol em packages/hardhat/contracts:

- O contrato usa o Pragma da versão
>=0.8.0 <0.9.0do Solidity e está licenciado sob a licença MIT. - O contrato importa dois contratos externos:
IERC20.solda biblioteca OpenZeppelin eSafeMath.solda biblioteca OpenZeppelin. Esses contratos fornecem funcionalidade padronizada do token ERC20 e operações matemáticas seguras. - 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 contratoIERC20importado.
- Principais funções do contrato:

init(uint256 tokens): esta função inicializa a DEX com uma quantidade de tokens transferidos para o contrato. Ele define a variáveltotalLiquiditypara 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.

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 eventoEthToTokenSwap.

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 eventoTokenToEthSwap.

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 eventoLiquidityProvided.

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 (xReserveseeyReserves). Ela usax * y = kondexeysã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:

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:
- Learn how to Create, Deploy an NFT Smart Contract and Develop a Front End App in 15mins
- Learn how to create, Deploy a Soul Bound Token(SBT)
- Generate NFT with AI and Deploy the NFT smart contract, and the Front End App
- Learn, code, and deploy your own MultiSig Wallet
- Let’s understand Subscription NFTs and mint a few
Este artigo foi escrito por BuildBear Team e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.