---
title: "Criando um flash loan usando Aave"
description: "Definições, usos e passo a passo para desenvolvedores"
---

## Introdução

Neste tutorial, vamos:

- Criar e implantar um smart contract de Flash loan
- Receber financiamento com o protocolo de liquidez chamado [Aave](https://aave.com/)
- Transacionar com nosso contrato implantado para executar um Flash loan

Antes de começar, vamos olhar cada um dos blocos que compõem este projeto:

## O que é um flash loan?

Nas finanças tradicionais, os tomadores de empréstimo muitas vezes precisam oferecer uma garantia para receber um empréstimo. Essa garantia costuma ser um ativo como um carro ou um imóvel. Os bancos usam essa garantia como segurança para cobrir perdas caso o tomador não pague.

No mundo das [Finanças Descentralizadas (DeFi)](https://www.alchemy.com/defi?a=af3d1feda6), um tomador pode receber um empréstimo sem precisar fornecer garantia usando flash loans.

Em um flash loan, os credores podem tanto fornecer um empréstimo a um tomador quanto ser pagos por esse empréstimo em uma única transação. Isso é possível por causa do intervalo de tempo entre o início de uma transação e o momento em que ela é finalmente registrada em um bloco na blockchain.

Aqui estão as etapas de um flash loan:

1. O tomador executa um smart contract de Flash loan

2. Um contrato de flash loan solicita um valor de empréstimo do pool de liquidez

3. O contrato então usa os fundos do empréstimo para executar operações definidas (por exemplo, negociação em uma exchange)

4. Após a conclusão das operações, os fundos emprestados são devolvidos ao pool de liquidez

5. A transação é registrada na blockchain

Smart contracts nos permitem validar que:

- O flash loan possui os fundos necessários para realizar as operações definidas no smart contract.
- As operações são concluídas antes que a transação seja adicionada a um novo bloco
- As operações não resultam em perda de fundos para o tomador.
- O pool de empréstimo é reembolsado com o valor correto + uma taxa de transação pelo uso do protocolo.

O tomador pode fazer o que quiser com os fundos, desde que o valor correto seja devolvido ao credor. Alguns casos de uso comuns de Flash Loans são:

 - _Arbitragem_ - levar um token de uma exchange para outra com valor mais alto para obter lucro

 - _Troca de Garantia_ - trocar tokens usados como garantia de empréstimos por outro token como garantia de um empréstimo existente

 - _Auto-liquidação_ - quitar um empréstimo garantido trocando tokens e pagando o flash loan

Antes que um contrato de flash loan seja executado, o contrato precisa ser financiado. O financiamento de flash loans normalmente vem de um protocolo de empréstimo principal, o [Aave](https://www.alchemy.com//blog/alchemy-x-aave-customer-story).

Os mecanismos de um flash loan facilitam a tomada de empréstimo porque não exigem nenhuma garantia. Esse recurso também pode expor o flash loan a atacantes que realizam ataques de flash loan. Um ataque de flash loan ocorre quando um tomador pega fundos emprestados, manipula o preço do ativo e depois devolve o ativo emprestado obtendo um grande lucro para si. Isso geralmente é feito comprometendo o [oráculo](https://www.alchemy.com/overviews/what-is-an-oracle) de precificação ou criando movimentos artificiais no mercado. Escolher oráculos descentralizados como [Chainlink](https://openzeppelin.com/) e auditar smart contracts por meio de serviços como [OpenZepplin](https://remix.ethereum.org/) são medidas para prevenir esse tipo de ataque.

 

## O que é Aave?

Nos empréstimos tradicionais, os bancos fornecem o financiamento. No DeFi, o Protocolo [Aave](https://www.alchemy.com/dapps/aave) é a maior fonte de financiamento para flash loans. O Aave permite que os usuários forneçam pools de liquidez de Tokens [ERC20](https://www.alchemy.com/overviews/erc20-solidity). Os tomadores podem então usar esses pools para receber empréstimos. Dependendo do tipo de empréstimo, os tomadores pagam uma taxa de juros que vai para os fornecedores, que recebem juros pelos tokens que fornecem. Atualmente o protocolo Aave também cobra uma taxa de transação de 0,09%.

Vamos ver como todos esses conceitos se juntam para criar um flash loan:

## Requisitos

 - Acesso à [Remix IDE](https://remix.ethereum.org/)

- Criação de uma [Carteira Metamask](https://metamask.io/download/)

- Acesso aos [Github Gists - Código do Smart Contract](https://remix.ethereum.org/)

### Obtendo o código do smart contract

1) Abra um novo workspace na [Remix IDE](https://www.alchemy.com/dapps/remix).

2) Em uma aba separada, abra o Github Gists [aqui](https://gist.github.com/DappaDanDev/3f4d8247b505f6226b0be04853696a50). Ele contém o código do smart contract que usaremos para criar nosso flash loan.

3) Crie novos arquivos de contrato na Remix IDE com exatamente os nomes abaixo e copie e cole o código correspondente a cada arquivo (6):

- Flashloan.sol

- FlashloanRecieverBase.sol

- IFlashLoanReciever.sol

- ILendingPool.sol

- ILendingPoolAnddressesProvider.sol

- Withdrawable.sol

<ImageBlock
  src="https://media.alchemy.com/1703766807-new-contract-files-in-remix-ide.png"
  alt="Novos arquivos de contrato no Remix IDE"
  width={316}
  height={140}
/>

### Sobre os contratos

_Flashloan.sol_ - Este é o smart contract do flash loan. Ele contém uma função ExecuteOperation que o contrato

chamará para concluir as operações que usarão os fundos do empréstimo.

_FlashLoanRecieverBase.sol / IFlashLoanReciever.sol_ - É o que permite que o contrato receba os fundos do flash loan

_ILendingPool.sol / ILendingPoolAddressProvider.sol_ - Aponta para os pools de empréstimo da Aave que financiarão o flash loan

_Withdrawable.sol_ - Permite que outros contratos retirem fundos deste contrato em caso de fundos incorretos ou travados

‍

### Adicionar fundos à carteira

Vamos usar a Kovan Test Network para implantar e executar nosso contrato de flash loan. Precisamos ter fundos em nossa carteira para conseguir fazer isso:

1. Vá para [https://faucets.chain.link/kovan](https://faucets.chain.link/kovan)

2. Insira o endereço da sua carteira:

- [Como obter o endereço da sua carteira](https://metamask.zendesk.com/hc/en-us/articles/360015289512-How-to-copy-your-MetaMask-account-public-address-)

- Selecione a Kovan Network na sua Carteira Metamask

<ImageBlock
  src="https://media.alchemy.com/1703767058-kovan-network-metamask-wallet.png"
  alt="Kovan Network na Metamask Wallet"
  width={356}
  height={133}
/>

3. Certifique-se de selecionar .1 Test Eth

<ImageBlock
  src="https://media.alchemy.com/1703767106-test-eth.png"
  alt="Formulário do Chainlink Kovan faucet: solicitando 0.1 test ETH"
  width={962}
  height={219}
/>

4. Aguarde a confirmação de que os tokens foram transferidos

5. Os fundos devem ser adicionados à sua Carteira Metamask

‍

### Implantar o contrato

Agora que temos alguns fundos em nossa carteira, é hora de implantar o smart contract na Kovan Testnet para que possamos executá-lo e interagir com ele.

1) Vá para o Compilador [Solidity](https://www.alchemy.com/overviews/solidity) no painel lateral dentro do Remix

<ImageBlock
  src="https://media.alchemy.com/1703767143-remix-side-panel.png"
  alt="Solidity Compiler no painel lateral do Remix"
  width={48}
  height={39}
/>

2) Use as configurações abaixo:

Compiler: 0.6.6+comitt.6c…

Language: Solidity

EVM Version: Default

Compile Flashloan.sol

<ImageBlock
  src="https://media.alchemy.com/1703767171-solidity-compiler.png"
  alt="Configurações do Remix Solidity compiler para compilar o Flashloan.sol"
  width={310}
  height={584}
/>

4) Clique em 'Compile' - você pode receber alguns avisos, mas nenhum erro, se tudo tiver sido feito corretamente

‍

Depois de compilar o smart contract do flash loan, precisamos implantá-lo:

1) Vá para a aba 'Deploy and Run Transactions'

<ImageBlock
  src="https://media.alchemy.com/1703767202-deploy-and-run-transactions-tab.png"
  alt="Ícone da barra lateral do Remix para a aba Deploy and Run Transactions"
  width={43}
  height={37}
/>

2) Use as seguintes configurações:

**Environment:** Injected Web3

**Account**: Copie e cole o endereço da sua carteira Kovan

**Contract:** Flashloan - contracts/Flashloan

<ImageBlock
  src="https://media.alchemy.com/1703767238-deploy-and-run-transactions.png"
  alt="Painel Deploy and Run Transactions do Remix com o ambiente Injected Web3 selecionado"
  width={302}
  height={573}
/>

3) Adicione o contrato do Lending Pool como address_addressProvider: 0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5 . Este é o endereço do provedor de empréstimo da Aave. Você pode encontrar outros endereços de contrato [aqui](https://docs.aave.com/developers/v/1.0/deployed-contracts/deployed-contract-instances). ‍

<ImageBlock
  src="https://media.alchemy.com/1703769249-address-provider.png"
  alt="Painel de deploy do Remix: inserindo o endereço do lending pool da Aave como address_addressProvider"
  width={281}
  height={52}
/>

4) Clique em 'Deploy'

5) O Metamask deve abrir uma janela para você 'Confirmar' a transação. Dentro do seu terminal, você verá o link para visualizar sua transação no etherscan.

<ImageBlock
  src="https://media.alchemy.com/1703769328-etherscan-transaction.png"
  alt="Terminal do Remix mostrando o link do Etherscan para a transação de deploy do contrato"
  width={1061}
  height={75}
/>

 

### Adicionar fundos ao flash loan

Nosso smart contract agora foi implantado na Kovan Test Network. Precisaremos adicionar fundos ao contrato a partir do pool de empréstimo da testnet da Aave.

1. Vá para esta página: [https://staging.aave.com/?marketName=proto_kovan](https://staging.aave.com/?marketName=proto_kovan)

2. Conecte sua Carteira Metamask

3. Certifique-se de que está usando o 'Kovan Ethereum Market'. Haverá um pequeno 'K'

<ImageBlock
  src="https://media.alchemy.com/1703767318-kovan-ethereum-market.png"
  alt="Seletor de mercado da Aave mostrando o Kovan Ethereum Market"
  width={470}
  height={54}
/>

**Observação**: Pode ser necessário ativar o 'Modo Testnet' nas suas configurações.

<ImageBlock
  src="https://media.alchemy.com/1703767345-testnet-mode.png"
  alt="Menu de configurações da Aave com o toggle Testnet mode ativado"
  width={258}
  height={243}
/>

4. Forneça um pouco de Eth de teste à Aave clicando no botão 'Supply' em 'Assets to supply'. Podemos começar com .001

<ImageBlock
  src="https://media.alchemy.com/1703767377-assets-to-supply.png"
  alt="Painel Assets to supply da Aave: fornecendo test ETH com o botão Supply"
  width={747}
  height={346}
/>

5. Em seguida, tome emprestado um pouco de DAI clicando no botão 'Borrow' ao lado de DAI. Tome emprestado 10 DAI.

<ImageBlock
  src="https://media.alchemy.com/1703767451-borrow-dai.png"
  alt="Painel de borrow da Aave: clicando no botão Borrow ao lado de DAI"
  width={739}
  height={101}
/>

6. O Metamask deve abrir para confirmar a transação, e o DAI aparecerá na sua carteira assim que a transação for concluída:

<ImageBlock
  src="https://media.alchemy.com/1703767494-metamask-transaction.png"
  alt="Saldo da carteira MetaMask mostrando DAI emprestado junto com ETH"
  width={355}
  height={214}
/>

7. Se esta for a primeira vez que você recebe DAI, será necessário configurar sua carteira para conseguir ver o DAI nela.

- Vá para 'Import Tokens' dentro do Metamask

<ImageBlock
  src="https://media.alchemy.com/1703767533-metamask-import-tokens.png"
  alt="Menu da MetaMask com a opção Import Tokens para adicionar DAI"
  width={181}
  height={63}
/>

- Insira o endereço do contrato DAI para Kovan: 0xFf795577d9AC8bD7D90Ee22b6C170349

 8. Depois de ter DAI na sua carteira, envie 10 DAI para o seu contrato implantado. Você pode obter o endereço do seu contrato implantado copiando-o do Remix:

<ImageBlock
  src="https://media.alchemy.com/1703767579-deployed-contract-address.png"
  alt="Painel de contratos deployados no Remix: copiando o endereço do contrato de flash loan"
  width={300}
  height={97}
/>

Então envie para o endereço usando o Metamask:

<ImageBlock
  src="https://media.alchemy.com/1703767612-send-tokens-metamask.png"
  alt="Tela de envio da MetaMask: transferindo DAI para o contrato de flash loan deployado"
  width={354}
  height={380}
/>

### Executar o contrato de flash loan

Agora precisamos chamar o contrato de DAI da KovanTestnet da Aave para indicar qual ativo usaremos para executar o smart contract.

1. Volte para a sua Remix IDE e para a aba 'Deploy & Run Transactions'

2. Em 'Deployed Contracts' você verá seu flash loan e o endereço do contrato

<ImageBlock
  src="https://media.alchemy.com/1703767645-flash-loan-and-contract-address.png"
  alt="Flash loan e endereço do contrato em Deployed Contracts"
  width={288}
  height={338}
/>

3. Vá para o campo de texto rotulado 'address asset' ao lado do rótulo 'flashloan'

<ImageBlock
  src="https://media.alchemy.com/1703767698-flashloan.png"
  alt="Campo de endereço no Remix ao lado do botão flashloan"
  width={274}
  height={43}
/>

4. Insira este endereço de contrato no campo address_asset: 0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD . Depois clique no botão do rótulo flashloan para iniciar a transação.

5. Isso iniciará o processo de flash loan e gerará 3 transações no etherscan.

<ImageBlock
  src="https://media.alchemy.com/1703767729-flashloan-process.png"
  alt="3 transações no etherscan no processo de flash loan"
  width={947}
  height={138}
/>

A primeira transação é do pool de empréstimo para o nosso contrato de flash loan. Como não incluímos nenhuma operação no smart contract, o valor é devolvido ao pool de empréstimo mais uma taxa adicional. A última transação é o juro do valor emprestado, que vai para os fornecedores do pool de liquidez.
