Visão geral
A Aave, anteriormente conhecida como ETHLender, impulsionou para a vanguarda do espaço DeFi. A Aave foi a primeira no espaço a ter a ideia de um Empréstimo Relâmpago (Flash Loan). Antes dos empréstimos relâmpagos, você teria que fazer stake de um ativo super-colaterizado para emprestar outro ativo. Por exemplo, se eu quisesse emprestar um DAI teria que depositar outra criptomoeda que ultrapassasse esse valor. Em outras palavras, você tinha que ter dinheiro para pedir dinheiro emprestado. Empréstimo Relâmpago quebrou essa ideia. E abriram as portas para um novo sistema de empréstimo. Eles fizeram isso permitindo que os usuários tomassem emprestado sem colocar nada como garantia. Neste tutorial você aprenderá como isso é possível e como você mesmo pode fazer!
Sobre a Aave
Extraído do site da Aave.
Aave é um protocolo de mercado de liquidez não custodial descentralizado, no qual os usuários podem participar como depositantes ou tomadores de empréstimos. Os depositantes fornecem liquidez ao mercado para obter uma renda passiva, enquanto os tomadores podem tomar empréstimos de forma super colateralizada (perpetuamente) ou sub colateralizada (liquidez de um bloco).
Embora isso seja totalmente correto, pode não fazer muito sentido para você se ainda não estiver familiarizado com todo o jargão da indústria DeFi. Você pode pensar na Aave como um pseudo banco descentralizado. Em vez de um banco central que valida todas as transações, a Aave possui contratos inteligentes que fazem todo esse trabalho de forma automatizada. Os depositantes colocam seus tokens na Aave e começam a ganhar juros sobre o depósito. Os tomadores, por outro lado, farão o oposto. Eles tirarão dinheiro da Aave e começarão a acumular juros sobre o valor emprestado. Para fazer isso, eles devem estar super colaterizados.
Existe outro método para quem não quer depositar dinheiro na Aave e quer apenas tomar emprestado. Este é o Empréstimo Relâmpago que mencionamos anteriormente.
Sobre empréstimos relâmpagos
O Empréstimo Relâmpago mencionado anteriormente é uma nova maneira de emprestar ativos na blockchain. Inicialmente implementado pela Aave, outros protocolos DeFi de tendência, como dYdX, rapidamente seguiram o exemplo ao adicionar esse novo recurso. Existe uma propriedade que todas as transações Ethereum compartilham que permitem que os empréstimos instantâneos sejam possíveis. E esta característica chave é a atomicidade.
Uma transação é atômica sempre que as séries de suas operações são indivisíveis e irredutíveis. Ou de forma simples - toda ou nenhuma transação ocorre. Nada de meio termo! O Empréstimo Relâmpago aproveita a atomicidade para permitir que um usuário tome emprestado sem depositar garantias. Há duas ressalvas a serem mencionadas. Em primeiro lugar, sempre que você toma emprestado um ativo em um Empréstimo Relâmpago você tem que pagar uma comissão de 0,09% sobre o valor emprestado. Em segundo lugar, você deve pagar o empréstimo na mesma transação em que o tomou emprestado. Embora essa habilidade seja ótima, ela é um tanto limitada em seu uso. Os Empréstimos Relâmpago são usados principalmente para arbitragem entre ativos.
Configuração do Remix
Para simplificar, usaremos o Remix IDE.
Este é um IDE baseado em navegador. Também conhecido como Ambiente de Desenvolvimento Integrado.
O Remix vem com a capacidade de escrever, depurar, implantar e manipular Contratos Inteligentes Ethereum.
Ao carregar o Remix em seu navegador, você será recebido por este menu.
Não vamos nos aprofundar no IDE, pois o foco deste tutorial é o Empréstimo Relâmpago. No entanto, você deve se familiarizar com as quatro seções destacadas: painel principal, painel lateral, painel de ícones e terminal.
Antes de começarmos a escrever nossos contratos inteligentes, queremos baixar uma extensão de navegador que nos permita interagir com a blockchain Ethereum. Existem várias ferramentas que desbloqueiam essa funcionalidade, mas a mais popular é a MetaMask.
Configuração da MetaMask
Um detalhamento passo a passo de como instalar a MetaMask.
- Você começará baixando a extensão do site acima.
- Clique na extensão recém-instalada e concorde com os termos e condições.
- Crie uma senha segura!
- Escreva a frase-semente mnemônica. Isso deve estar no mundo físico e não deve ser mantido em nenhum lugar do seu computador.
Se as quatro etapas descritas acima forem concluídas, você estará pronto para começar a escrever seus primeiros contratos inteligentes!
O Contrato Inteligente
Os contratos inteligentes nos permitem ler e gravar dados na blockchain executando programas determinísticos. Ao codificar um contrato inteligente para uso na Ethereum, usamos uma linguagem de programação chamada Solidity. Os arquivos da Solidity terminam com a extensão .sol.
Você pode excluir quaisquer arquivos que possam estar em seu espaço de trabalho ao inicializar o Remix pela primeira vez.
Você vai querer criar vários arquivos:
- FlashLoan.sol
- FlashLoanReceiverBase.sol
- ILendingPoolAddressesProvider.sol
- IFlashLoanReceiver.sol
- ILendingPool.sol
- Withdrawable.sol
O seguinte trecho de código é a implementação do FlashLoan.sol.
Este Empréstimo Relâmpago estará emprestando 1 DAI.
pragma solidity ^0.6.6;
import "./FlashLoanReceiverBase.sol";
import "./ILendingPoolAddressesProvider.sol";
import "./ILendingPool.sol";
contract FlashloanV1 is FlashLoanReceiverBaseV1 {
constructor(address _addressProvider) FlashLoanReceiverBaseV1(_addressProvider) public{}
/**
Emprestimo Relampago 1000000000000000000 wei (1 ether) no valor de `_asset`
*/
function flashloan(address _asset) public onlyOwner {
bytes memory data = "";
uint amount = 1 ether;
ILendingPoolV1 lendingPool = ILendingPoolV1(addressesProvider.getLendingPool());
lendingPool.flashLoan(address(this), _asset, amount, data);
}
/**
Esta função é chamada após seu contrato ter recebido o valor do empréstimo relâmpago
*/
function executeOperation(
address _reserve,
uint256 _amount,
uint256 _fee,
bytes calldata _params
)
external
override
{
require(_amount <= getBalanceInternal(address(this), _reserve), "Saldo inválido,o flashLoan foi bem-sucedido?");
//
// Sua lógica está aqui.
// !! Certifique-se de que *este contrato* tenha fundos suficientes de `_reserve` paga pagar a `_fee` !!
//
uint totalDebt = _amount.add(_fee);
transferFundsBackToPoolInternal(_reserve, totalDebt);
}
}
Para resumir, começamos importando as dependências necessárias para executar nosso Empréstimo Relâmpago. Algumas dessas dependências são chamadas de contratos abstratos. Um contrato abstrato tem pelo menos uma função que não está implementada. Você pode pensar nisso como uma planta de uma casa. Um construtor usa este projeto para fazer uma casa. No entanto, em nossa analogia, a planta é um contrato abstrato, você é o construtor e a casa é o contrato derivado.
No nosso caso, o contrato de Empréstimo Relâmpago está usando um contrato abstrato chamado FlashLoanReceiverBaseV1. Ele fornece os detalhes de implementação necessários, como o reembolso do Empréstimo Relâmpago.
Agora vamos quebrar o código linha por linha.
1- Primeiro, temos que definir a versão do compilador Solidity. Neste caso, é 0.6.6.
2-4. Importando dependências para o contrato inteligente
6- O contrato FlashLoanV1 é herdado do contrato FlashLoanReceiverBaseV1.
8- Passamos o endereço de um dos Provedores do Pool de Empréstimos da Aave. Nesse caso, estamos fornecendo o endereço do DAI Lending Pool.
13- Definimos uma função chamada flashLoan. Leva o endereço do ativo que queremos emprestar rapidamente. Neste caso, o ativo é DAI.
14- Não precisamos de dados para o empréstimo relâmpago, então estamos passando uma string vazia.
15- Estamos definindo o número de DAI (em termos de wei, que é 10^18) que queremos emprestar.
16- Inicializamos a interface LendingPool que é ILendingPoolV1 fornecida pela Aave, para que possamos chamar a função flashLoan.
17- Finalmente, chamamos nossa função flashLoan. A função leva 4 parâmetros principais. Primeiro passamos o endereço que receberá o empréstimo. No nosso caso, é o nosso próprio contrato. Em segundo lugar, passamos o endereço do ativo. No nosso caso, é o endereço do DAI na rede Kovan. Em terceiro lugar, passamos a quantidade de ativos e, no nosso caso, é o montante de 1 “ether” (ou 10^18 em unidades “wei”). Por último, mas não menos importante, passamos o valor dos dados que, no nosso caso, é uma string vazia.
24-31. Em seguida, definimos a segunda função que é executeOperation. É onde utilizamos o empréstimo relâmpago. É chamado internamente depois que a função flashLoan é executada com sucesso. São necessários 4 parâmetros principais que são:
- O endereço de reserva para o qual teremos que pagar o empréstimo.
- O valor do ativo
- A taxa cobrada pelo protocolo
- Parâmetro adicional que é usado internamente pela função.
33- Ele verifica se recebemos o valor apropriado do empréstimo ou então lançará uma mensagem de erro.
34- Neste ponto, é onde você implementaria a lógica para qualquer caso de uso arbitrário.
40- Adicionamos a taxa junto com o valor do empréstimo usando a função adicionar fornecida pela biblioteca SafeMaths.
41- Por fim, pagamos a dívida total ou o valor do empréstimo de volta ao pool de empréstimos.
Implantando o contrato
1- Primeiro, abra sua MetaMask e defina sua rede como "Kovan Test Network".
2- Use esta síntese para definir as dependências para contratos inteligentes flashloan. Clique em cada um dos links e cole o código no arquivo Solidity correspondente que você criou anteriormente.
3- Mude para a aba "Solidity Compiler". Configure o compilador para 0.6.6 e clique em "Compile FlashLoan.sol".
4- Você deve ver alguns avisos, mas nenhuma mensagem de erro.
5- Agora, estamos prontos para implantar o contrato na rede Kovan. Mude para a guia "Deploy & Run Transactions". No campo ambiente, altere-o de JavaScript VM para Injected Web3. Isso deve abrir a MetaMask pedindo sua permissão.
6- Certifique-se de que o campo “CONTRACT” esteja definido como FlashLoan.sol. Forneça o endereço de LendingPool no campo de texto próximo ao botão de implantação. No nosso caso, será 0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5. Em seguida, clique em “Deploy”. Deve abrir a MetaMask.
Nota: Uma lista de todos os endereços de contratos implantados pode ser encontrada aqui. Lá, você pode encontrar os endereços de vários Pools de Empréstimos suportados pela Aave. Embora os endereços sejam diferentes para cada token, o procedimento permanece o mesmo.
7- Clique em “Confirm”. Ao fazer isso, você deve ver uma notificação de sucesso da MetaMask. Agora deve haver um “Contratos implantados” no painel lateral.
Financiando o Empréstimo Relâmpago
Na nova guia “Deployed Contracts”, você poderá copiar o endereço do contrato implantado. Voltaremos a esta etapa mais tarde; enquanto isso, precisamos adicionar algum DAI ao nosso contrato de Empréstimo Relâmpago. Isso ocorre porque os Empréstimos Relâmpagos precisam de fundos no contrato para serem executados com sucesso. Para isso, você pode acessar este link para obter alguns tokens DAI (certifique-se de conectar-se ao “Aave v2 Market” com um pequeno “K” no canto superior direito). Clique na torneira (faucet), cole o endereço da sua carteira MetaMask e aguarde a confirmação.
Após obter a confirmação, vamos adicionar o token DAI à MetaMask. Para isso, abra sua MetaMask. Clique em "Add Token" na parte inferior. No campo "Token Contract Address", digite 0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD. Este é o endereço do contrato da DAI na Kovan. Depois de clicar em “Next”, deve exibir o DAI que você obteve da torneira anteriormente.
Em seguida, clique no token DAI. Clique em “Send” e deve abrir uma janela semelhante à imagem abaixo.
Digite o endereço do contrato do nosso Empréstimo Relâmpago, que descobrimos onde obter anteriormente. Digite o valor que queremos enviar. No nosso caso, enviaremos 10 DAI. Em seguida, clique em "Next". Clique em "Confirm"! Agora você concedeu 10 DAI ao seu contrato de Empréstimo Relâmpago.
Executando o Empréstimo Relâmpago
Volte para o Remix. Sob o contrato Empréstimo Relâmpago implantado, há outro campo de texto “flashloan”. Este campo leva um endereço de contrato do ativo que queremos usar. No nosso caso, é o contrato DAI da Kovan Testnet, que é 0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD. Com esse campo preenchido corretamente, agora você pode clicar no botão “transact” conforme mostrado abaixo.
Ao clicar no botão, a MetaMask deve aparecer solicitando a aprovação da transação. Confirme a transação e você deverá receber uma mensagem de sucesso. No terminal do Remix, você verá um URL. Clique nele e você deve ser redirecionado para o Etherscan.
Em “Tokens Transferred”, você deve ver três transações diferentes.
- A seta vermelha destaca a transferência de 1 DAI do LendingPool para o nosso contrato.
- A seta laranja indica o retorno de 1 DAI junto com as taxas de volta ao pool de lançamento.
- A seta azul mostra o DAI gerado por juros que tem sua utilidade separada.
Conclusão
Conseguimos escrever com sucesso o contrato inteligente para um Empréstimo Relâmpago! Conseguimos emprestar o DAI do pool, pagar a taxa do Empréstimo Relâmpago e reembolsar o valor emprestado em uma única transação. Você acabou de pedir dinheiro emprestado sem garantia!
Assine nosso boletim informativo para mais artigos e guias sobre a Ethereum. Se você tiver algum comentário, sinta-se à vontade para entrar em contato conosco via Twitter. Você sempre pode conversar conosco na nossa comunidade no Discord, que conta com alguns dos desenvolvedores mais legais que você já conheceu :)
Artigo original escrito por Noah Hein e traduzido por Marcelo Panegali
Latest comments (1)
Alguns comentários foram escondidos pelo autor do post - Descubra mais