Pular para o conteúdo
0%

Criando um flash loan usando Aave

Alchemy team headshot

Escrito por Alchemy

Publicado em 7 de abril de 20226 min de leitura

Introdução

Neste tutorial, vamos:

  • Criar e implantar um smart contract de Flash loan
  • Receber financiamento com o protocolo de liquidez chamado Aave
  • 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), 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.

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 de precificação ou criando movimentos artificiais no mercado. Escolher oráculos descentralizados como Chainlink e auditar smart contracts por meio de serviços como OpenZepplin 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 é a maior fonte de financiamento para flash loans. O Aave permite que os usuários forneçam pools de liquidez de Tokens ERC20. 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

Obtendo o código do smart contract

  1. Abra um novo workspace na Remix IDE.

  2. Em uma aba separada, abra o Github Gists aqui. 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

Novos arquivos de contrato no Remix IDE

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

  2. Insira o endereço da sua carteira:

Kovan Network na Metamask Wallet
  1. Certifique-se de selecionar .1 Test Eth
Formulário do Chainlink Kovan faucet: solicitando 0.1 test ETH
  1. Aguarde a confirmação de que os tokens foram transferidos

  2. 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 no painel lateral dentro do Remix
Solidity Compiler no painel lateral do Remix
  1. Use as configurações abaixo:

Compiler: 0.6.6+comitt.6c…

Language: Solidity

EVM Version: Default

Compile Flashloan.sol

Configurações do Remix Solidity compiler para compilar o Flashloan.sol
  1. 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'
Ícone da barra lateral do Remix para a aba Deploy and Run Transactions
  1. Use as seguintes configurações:

Environment: Injected Web3

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

Contract: Flashloan - contracts/Flashloan

Painel Deploy and Run Transactions do Remix com o ambiente Injected Web3 selecionado
  1. 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. ‍
Painel de deploy do Remix: inserindo o endereço do lending pool da Aave como address_addressProvider
  1. Clique em 'Deploy'

  2. 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.

Terminal do Remix mostrando o link do Etherscan para a transação de deploy do contrato

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

  2. Conecte sua Carteira Metamask

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

Seletor de mercado da Aave mostrando o Kovan Ethereum Market

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

Menu de configurações da Aave com o toggle Testnet mode ativado
  1. Forneça um pouco de Eth de teste à Aave clicando no botão 'Supply' em 'Assets to supply'. Podemos começar com .001
Painel Assets to supply da Aave: fornecendo test ETH com o botão Supply
  1. Em seguida, tome emprestado um pouco de DAI clicando no botão 'Borrow' ao lado de DAI. Tome emprestado 10 DAI.
Painel de borrow da Aave: clicando no botão Borrow ao lado de DAI
  1. O Metamask deve abrir para confirmar a transação, e o DAI aparecerá na sua carteira assim que a transação for concluída:
Saldo da carteira MetaMask mostrando DAI emprestado junto com ETH
  1. 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
Menu da MetaMask com a opção Import Tokens para adicionar DAI
  • Insira o endereço do contrato DAI para Kovan: 0xFf795577d9AC8bD7D90Ee22b6C170349
  1. 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:
Painel de contratos deployados no Remix: copiando o endereço do contrato de flash loan

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

Tela de envio da MetaMask: transferindo DAI para o contrato de flash loan deployado

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

Flash loan e endereço do contrato em Deployed Contracts
  1. Vá para o campo de texto rotulado 'address asset' ao lado do rótulo 'flashloan'
Campo de endereço no Remix ao lado do botão flashloan
  1. 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.

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

3 transações no etherscan no processo de flash loan

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.

Background gradient

Construa magia blockchain

A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.