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.0
do Solidity e está licenciado sob a licença MIT. - O contrato importa dois contratos externos:
IERC20.sol
da biblioteca OpenZeppelin eSafeMath.sol
da 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 contratoIERC20
importado.
-
- 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áveltotalLiquidity
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.
-
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 (xReservese
eyReserves
). Ela usax * y = k
ondex
ey
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:
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.
Oldest comments (0)