Saltar al contenido
0%

Creando un flash loan usando Aave

Alchemy team headshot

Escrito por Alchemy

Publicado el 7 de abril de 20226 min de lectura

Introducción

En este tutorial, vamos a:

  • Crear y desplegar un contrato inteligente de Flash loan
  • Recibir financiamiento con el protocolo de liquidez llamado Aave
  • Interactuar con nuestro contrato desplegado para ejecutar un Flash loan

Antes de empezar, veamos cada uno de los componentes de este proyecto:

¿Qué es un flash loan?

En las finanzas tradicionales, muchas veces se le exige a los prestatarios ofrecer una garantía para recibir un préstamo. Esta garantía suele ser un activo como un auto o una casa. Los bancos usan esta garantía como respaldo para cubrir pérdidas si el prestatario no paga.

En el mundo de las Finanzas Descentralizadas (DeFi), un prestatario puede recibir un préstamo sin necesidad de dar una garantía usando flash loans.

En un flash loan, los prestamistas pueden otorgar un préstamo a un prestatario y recibir el pago de ese préstamo en una sola transacción. Esto es posible por el tiempo que transcurre entre el inicio de una transacción y el momento en que finalmente se confirma en un bloque de la blockchain.

Estos son los pasos de un flash loan:

  1. El prestatario ejecuta un contrato inteligente de Flash loan

  2. El contrato de flash loan solicita un monto de préstamo al pool de liquidez

  3. El contrato usa los fondos del préstamo para ejecutar las operaciones definidas (por ejemplo, trading en un exchange)

  4. Una vez completadas las operaciones, los fondos prestados se devuelven al pool de liquidez

  5. La transacción se confirma en la blockchain

Los contratos inteligentes nos permiten validar que:

  • El flash loan cuenta con los fondos necesarios para realizar las operaciones del contrato inteligente.
  • Las operaciones se completan antes de que la transacción se agregue a un nuevo bloque
  • Las operaciones no generan una pérdida de fondos para el prestatario.
  • Al pool de préstamos se le devuelve el monto correcto + una comisión de transacción por usar el protocolo.

El prestatario puede hacer lo que quiera con los fondos siempre y cuando le devuelva al prestamista el monto correcto prestado. Algunos casos de uso comunes de los Flash Loans son:

  • Arbitraje de trading - llevar un token de un exchange a otro con un valor más alto para obtener una ganancia

  • Intercambio de garantías - intercambiar los tokens de garantía de un préstamo por otro token como garantía de un préstamo existente

  • Autoliquidación - pagar un préstamo garantizado intercambiando tokens y devolviendo el flash loan

Antes de que se ejecute un contrato de flash loan, el contrato debe estar financiado. El financiamiento de los flash loans generalmente proviene de un protocolo de préstamos principal, Aave.

Los mecanismos de un flash loan facilitan el préstamo porque no requieren ninguna garantía. Esta característica también puede exponer a un flash loan a atacantes que realizan ataques de flash loan. Un ataque de flash loan ocurre cuando un prestatario pide fondos prestados, manipula el precio del activo y luego devuelve el activo prestado obteniendo una gran ganancia para sí mismo. Esto se hace normalmente comprometiendo el oráculo de precios o creando movimientos artificiales en el mercado. Elegir oráculos descentralizados como Chainlink y auditar los contratos inteligentes mediante servicios como OpenZepplin son medidas para prevenir este tipo de ataques.

¿Qué es Aave?

En los préstamos tradicionales, los bancos aportan el financiamiento. En DeFi, el Protocolo Aave es la mayor fuente de financiamiento para flash loans. Aave permite a los usuarios aportar pools de liquidez de Tokens ERC20. Los prestatarios pueden usar estos pools para recibir préstamos. Dependiendo del tipo de préstamo, los prestatarios pagan una tasa de interés que va a los proveedores de liquidez como interés por los tokens que aportan. Actualmente el protocolo Aave también cobra una comisión de transacción de 0.09%.

Veamos cómo se combinan todos estos conceptos para crear un flash loan:

Requisitos

Cómo obtener el código del contrato inteligente

  1. Abre un nuevo workspace en Remix IDE.

  2. En una pestaña aparte, abre el Github Gists aquí. Ahí está el código del contrato inteligente que vamos a usar para crear nuestro flash loan.

  3. Crea nuevos archivos de contrato en Remix IDE con exactamente estos nombres y copia y pega el código correspondiente a cada archivo (6):

  • Flashloan.sol

  • FlashloanRecieverBase.sol

  • IFlashLoanReciever.sol

  • ILendingPool.sol

  • ILendingPoolAnddressesProvider.sol

  • Withdrawable.sol

Nuevos archivos de contrato en Remix IDE

Sobre los contratos

Flashloan.sol - Este es el contrato inteligente del flash loan. Contiene una función ExecuteOperation que el contrato

llamará para completar las operaciones que usarán los fondos del préstamo.

FlashLoanRecieverBase.sol / IFlashLoanReciever.sol - Esto permite que el contrato reciba los fondos del flash loan

ILendingPool.sol / ILendingPoolAddressProvider.sol - Apunta a los pools de préstamos de Aave que financiarán el flash loan

Withdrawable.sol - Permite que otros contratos retiren fondos de este contrato en caso de fondos incorrectos o atascados

Agregar fondos a la wallet

Vamos a usar la Kovan Test Network para desplegar y ejecutar nuestro contrato de flash loan. Necesitamos tener fondos en nuestra wallet para poder hacer esto correctamente:

  1. Ve a https://faucets.chain.link/kovan

  2. Ingresa la dirección de tu wallet:

Red Kovan en la wallet de Metamask
  1. Asegúrate de seleccionar .1 Test Eth
Formulario del faucet de Chainlink Kovan: solicitando 0.1 ETH de prueba
  1. Espera la confirmación de que los tokens se transfirieron

  2. Los fondos deberían agregarse a tu Metamask Wallet

Desplegar el contrato

Ahora que tenemos algunos fondos en nuestra wallet, es momento de desplegar el contrato inteligente en la Kovan Testnet para poder ejecutarlo e interactuar con él.

  1. Ve al compilador de Solidity en el panel lateral de Remix
Solidity Compiler en el panel lateral de Remix
  1. Usa la siguiente configuración:

Compiler: 0.6.6+comitt.6c…

Language: Solidity

EVM Version: Default

Compile Flashloan.sol

Configuración del compilador de Solidity en Remix para compilar Flashloan.sol
  1. Haz clic en 'Compile' - Es posible que recibas algunas advertencias, pero ningún error si todo salió bien

Después de compilar el contrato inteligente del flash loan, necesitamos desplegarlo:

  1. Ve a la pestaña 'Deploy and Run Transactions'
Ícono de la barra lateral de Remix para la pestaña Deploy and Run Transactions
  1. Usa la siguiente configuración:

Environment: Injected Web3

Account: Copia y pega la dirección de tu Kovan Wallet

Contract: Flashloan - contracts/Flashloan

Panel Deploy and Run Transactions de Remix con el entorno Injected Web3 seleccionado
  1. Agrega el contrato del Lending Pool como address_addressProvider: 0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5. Esta es la dirección del proveedor de préstamos de Aave. Puedes encontrar otras direcciones de contrato aquí. ‍
Panel de despliegue de Remix: ingresando la dirección del lending pool de Aave como address_addressProvider
  1. Haz clic en 'Deploy'

  2. A Metamask debería salirte un popup para 'Confirmar' la transacción. Dentro de tu terminal, verás el link para ver tu transacción en etherscan.

Terminal de Remix mostrando el enlace de Etherscan para la transacción de despliegue del contrato

Agregar fondos al flash loan

Nuestro contrato inteligente ya está desplegado en la Kovan Test Network. Necesitamos agregar fondos al contrato desde el pool de préstamos de testnet de Aave.

  1. Ve a esta página: https://staging.aave.com/?marketName=proto_kovan

  2. Conecta tu Metamask Wallet

  3. Asegúrate de estar usando el 'Kovan Ethereum Market'. Vas a ver una pequeña 'K'

Selector de mercado de Aave mostrando el Kovan Ethereum Market

Nota: Es posible que necesites activar el modo 'Testnet mode' en tu configuración.

Menú de configuración de Aave con el modo Testnet activado
  1. Aporta algo de Eth de prueba a Aave haciendo clic en el botón 'Supply' bajo 'Assets to supply'. Podemos empezar con .001
Panel Assets to supply de Aave: suministrando ETH de prueba con el botón Supply
  1. Luego pide prestado algo de DAI haciendo clic en el botón 'Borrow' junto a DAI. Pide prestados 10 DAI.
Panel de préstamos de Aave: haciendo clic en el botón Borrow junto a DAI
  1. Metamask debería abrirse para confirmar la transacción y el DAI aparecerá en tu wallet una vez que se complete la transacción:
Saldo de la wallet de MetaMask mostrando DAI prestado junto a ETH
  1. Si es la primera vez que recibes DAI, vas a necesitar configurar tu wallet para poder ver el DAI en ella.
  • Ve a 'Import Tokens' dentro de Metamask
Menú de MetaMask con la opción Import Tokens para agregar DAI
  • Ingresa la dirección del contrato de DAI para Kovan: 0xFf795577d9AC8bD7D90Ee22b6C170349
  1. Una vez que tengas DAI en tu wallet, envía 10 DAI a tu contrato desplegado. Puedes obtener la dirección de tu contrato desplegado copiándola desde Remix:
Panel de contratos desplegados de Remix: copiando la dirección del contrato de flash loan

Luego envíalo a esa dirección usando Metamask:

Pantalla de envío de MetaMask: transfiriendo DAI al contrato de flash loan desplegado

Ejecutar el contrato de flash loan

Ahora necesitamos llamar al contrato de DAI de KovanTestnet de Aave para indicar qué activo vamos a usar para ejecutar el contrato inteligente.

  1. Vuelve a tu Remix IDE y a la pestaña 'Deploy & Run Transactions'

  2. Bajo 'Deployed Contracts' verás tu flash loan y la dirección del contrato

Flash loan y dirección del contrato en Deployed Contracts
  1. Ve al campo de texto etiquetado 'address asset' junto a la etiqueta 'flashloan'
Campo de entrada de dirección en Remix junto al botón flashloan
  1. Ingresa esta dirección de contrato en el campo address_asset: 0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD. Luego haz clic en el botón de la etiqueta flashloan para iniciar la transacción.

  2. Esto va a iniciar el proceso del flash loan y va a generar 3 transacciones en etherscan.

3 transacciones en Etherscan durante el proceso de flash loan

La primera transacción va del pool de préstamos a nuestro contrato de flash loan. Como no incluimos ninguna operación en el contrato inteligente, el monto se devuelve al pool de préstamos más una comisión adicional. La última transacción corresponde al interés del monto prestado, que iría a los proveedores del pool de liquidez.

Background gradient

Construye magia blockchain

Alchemy combina los productos y herramientas de desarrollo Web3 más potentes con recursos, comunidad y un soporte legendario.