Skip to content

Crie seu próprio protocolo de empréstimo descentralizado

Crie seu próprio protocolo de empréstimo descentralizado

#Crie seu próprio protocolo de empréstimo descentralizado

Os protocolos de empréstimo descentralizados permitem que os usuários emprestem e tomem emprestado criptomoedas diretamente na blockchain por meio de contratos inteligentes, sem a necessidade de intermediários, como bancos. Neste tutorial, você aprenderá a criar seu próprio protocolo de empréstimo descentralizado do zero usando o Solidity.

Ao final deste tutorial, você terá uma sólida compreensão dos princípios fundamentais por trás dos protocolos de empréstimo descentralizados, inclusive como adicionar liquidez, tomar fundos emprestados e pagar empréstimos. Você também ganhará experiência prática em escrever e implantar contratos inteligentes no blockchain da Ethereum.

Vamos começar!

###Pré-requisitos

Antes de começar, verifique se você tem os seguintes pré-requisitos instalados em seu sistema:

###Primeiros passos

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

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

1 .Ele permite que você faça facilmente o fork em cadeias compatíveis com EVM (Ethereum Virtual Machine ou Máquina Virtual Ethereum) - (como Ethereum, Polygon, Binance Smart Chain, Fantom, Optimism e Arbitrum Mainnet) diretamente da CLI. Isso economiza um tempo valioso que, de outra forma, seria gasto na busca por RPCs (Remote Procedure Call ou Chamada de Procedimento Remoto) 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 do GitHub. Aguarde a conclusão do processo de bifurcação antes de continuar.

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

git clone <paste the URL you fork repo>
cd scaffold-eth

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

yarn fork-bb

Image description

Implantando os contratos

yarn deploy

Image description

Iniciando o front-end

yarn start

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

Image description

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

Image description

Para solicitar a ETH gratuita, conecte sua carteira e clique em "grab funds from the faucet".

Image description

###Adicionar liquidez

1 .Digite o valor do token desejado. 2 .Depois de inserir o valor do token, clique em aprovar token e, em seguida, prossiga com a adição de liquidez 3 .Aprovar a transação na Metamask: Um prompt da Metamask será exibido, solicitando sua aprovação. A Liquidez total e a liquidez fornecida serão atualizadas.

Image description

###Retirar liquidez

1 .Digite o valor que você deseja sacar. 2 .Depois de inserir o valor do token, clique em Withdraw! 3 .Aprovar a transação na Metamask: Será exibido um prompt da Metamask, solicitando sua aprovação. A Liquidez total e a liquidez fornecida serão atualizadas.

Image description

###Empréstimo de liquidez

1 .Digite o valor que você deseja emprestar. 2 .Depois de inserir o valor do token, clique em Borrow! 3 .Aprovar a transação na Metamask: Um prompt da Metamask será exibido, solicitando sua aprovação. A Liquidez total, a liquidez fornecida e o valor emprestado serão atualizados.

Image description

###Reembolsar Empréstimo

Digite o valor que você deseja reembolsar. Após inserir o valor do token, clique em Repay! Aprovar a transação na Metamask: Será exibido um prompt da Metamask, solicitando sua aprovação. A Liquidez total, a liquidez fornecida e o valor emprestado serão atualizados.

Image description

###Vamos nos aprofundar no contrato inteligente

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

Image description

1 .O contrato utiliza a versão Solidity pragma ^0.8.0 e está licenciado sob a licença MIT.

2 .O contrato importa um contrato externo: IERC20.sol da biblioteca OpenZeppelin. Esses contratos fornecem funcionalidades padronizadas de token ERC20.

3 .addLiquidity(uint256 _amount): Essa função permite que os usuários depositem tokens de garantia no contrato. O parâmetro _amount especifica a quantidade de tokens de garantia a serem depositados. A função transfere inicialmente os tokens de garantia do usuário para o contrato e, em seguida, adiciona os tokens de garantia à liquidez do contrato. Essa função emite o evento LiquidityAdded.

4 .borrow(uint256 _amount): Essa função permite que os usuários tomem empréstimos de tokens de empréstimo do contrato usando seus tokens de garantia depositados como garantia. O parâmetro _amount especifica a quantidade de tokens de empréstimo a serem tomados. A função calcula inicialmente a quantidade de garantia necessária com base na proporção de garantia e na quantidade de tokens de empréstimo e, em seguida, verifica se o usuário enviou ETH suficiente para cobrir a garantia e a taxa. A função, então, transfere os tokens de empréstimo para o usuário e atualiza a quantidade de empréstimo para aquele usuário. Essa função emite o evento Borrow.

5 .repay(uint256 _amount): Essa função permite que os usuários reembolsem os tokens de empréstimo tomados e recuperem seus tokens de garantia. O parâmetro _amount especifica a quantidade de tokens de empréstimo a serem reembolsados. A função transfere inicialmente os tokens de empréstimo do usuário para o contrato e, em seguida, diminui a liquidez do contrato pela quantidade de tokens de garantia que o usuário deve recuperar. Por fim, a função transfere os tokens de garantia do contrato para o usuário. Essa função emite o evento Repay.

6 .withdraw(uint256 _amount): Essa função permite que os usuários retirem seus tokens de garantia depositados do contrato. O parâmetro _amount especifica a quantidade de tokens de garantia a serem retirados. A função verifica primeiro se a quantidade solicitada está disponível no contrato e se o usuário tem saldo suficiente, em seguida, transfere os tokens de garantia do contrato para o usuário e, por fim, diminui a liquidez do contrato pela quantidade de tokens de garantia retirados . Essa função emite o evento Withdrawal.

7 .getLiquidity(): Essa função retorna a quantidade atual de tokens de garantia mantidos pelo contrato.

8 .getCollateralRatio(): Essa função retorna a proporção de garantia atual exigida pelo contrato, que é a quantidade de tokens de garantia exigidos por tokens de empréstimo tomado.

9 .getCollateralToken(): Essa função retorna o endereço do contrato de tokens de garantia usado pelo contrato.

10 .getOwner(): Essa função retorna o endereço do proprietário do contrato.

11 .getBorrowAmount(address _user): Essa função retorna a quantidade atual de tokens de empréstimo tomados pelo _user especificado.

12 .getBalance(address _user): Essa função retorna o saldo atual de tokens de garantia depositados pelo _user especificado.

###Parabéns

Desenvolvemos com sucesso um protocolo básico de empréstimo que permite aos usuários realizar empréstimos e emprestar.

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

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

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

Repositório Github : Buildbear Tutorials

###Sobre a BuildBear:

BuildBear é uma plataforma para testar dApps em escala, para equipes. Ele fornece aos usuários seu próprio Testnet privado para testar seus contratos inteligentes e dApps, que podem ser bifurcados em qualquer cadeia EVM. Ele também fornece um Faucet (Torneira), Explorer e RPC para fins de teste.

A BuildBear tem como objetivo criar 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 para o português por Rafael Ojeda

Você pode ler o artigo original em inglês aqui