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
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 verá o seguinte:
Antes de nos aprofundarmos no contrato inteligente, vamos começar explorando as funcionalidades do Lending. Para começar, navegue até a página Lending.
Para solicitar a ETH gratuita, conecte sua carteira e clique em "grab funds from the faucet".
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.
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.
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.
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.
Vamos nos aprofundar no contrato inteligente
Podemos encontrar o contrato lending.sol
em packages/hardhat/contracts
:
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:
Gerar NFT com IA e implantar o contrato inteligente NFT e o aplicativo front-end
Aprenda, codifique e implemente sua própria carteira MultiSig
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
Top comments (0)