---
title: "Creando un flash loan usando Aave"
description: "Definiciones, usos y guía práctica para desarrolladores"
---

## 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](https://aave.com/) 
- 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)](https://www.alchemy.com/defi?a=af3d1feda6), 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](https://www.alchemy.com//blog/alchemy-x-aave-customer-story). 

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](https://www.alchemy.com/overviews/what-is-an-oracle) de precios o creando movimientos artificiales en el mercado. Elegir oráculos descentralizados como [Chainlink](https://openzeppelin.com/) y auditar los contratos inteligentes mediante servicios como [OpenZepplin](https://remix.ethereum.org/) 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](https://www.alchemy.com/dapps/aave) es la mayor fuente de financiamiento para flash loans. Aave permite a los usuarios aportar pools de liquidez de Tokens [ERC20](https://www.alchemy.com/overviews/erc20-solidity). 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

 - Acceso a [Remix IDE](https://remix.ethereum.org/)

- Crear una [Wallet de Metamask](https://metamask.io/download/)

- Acceso a los [Github Gists - Código del contrato inteligente](https://remix.ethereum.org/)

### Cómo obtener el código del contrato inteligente

1) Abre un nuevo workspace en [Remix IDE](https://www.alchemy.com/dapps/remix). 

2) En una pestaña aparte, abre el Github Gists [aquí](https://gist.github.com/DappaDanDev/3f4d8247b505f6226b0be04853696a50). 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

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

### 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](https://faucets.chain.link/kovan)

2. Ingresa la dirección de tu wallet: 

- [Cómo obtener la dirección de tu wallet](https://metamask.zendesk.com/hc/en-us/articles/360015289512-How-to-copy-your-MetaMask-account-public-address-)

- Selecciona la red Kovan en tu Metamask Wallet 

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

3. Asegúrate de seleccionar .1 Test Eth

<ImageBlock
  src="https://media.alchemy.com/1703767106-test-eth.png"
  alt="Formulario del faucet de Chainlink Kovan: solicitando 0.1 ETH de prueba"
  width={962}
  height={219}
/>

4. Espera la confirmación de que los tokens se transfirieron

5. 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](https://www.alchemy.com/overviews/solidity) en el panel lateral de Remix

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

2) Usa la siguiente configuración: 

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="Configuración del compilador de Solidity en Remix para compilar Flashloan.sol"
  width={310}
  height={584}
/>

4) 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'

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

2) Usa la siguiente configuración: 

**Environment:** Injected Web3

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

**Contract:** Flashloan - contracts/Flashloan

<ImageBlock
  src="https://media.alchemy.com/1703767238-deploy-and-run-transactions.png"
  alt="Panel Deploy and Run Transactions de Remix con el entorno Injected Web3 seleccionado"
  width={302}
  height={573}
/>

3) 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í](https://docs.aave.com/developers/v/1.0/deployed-contracts/deployed-contract-instances). ‍

<ImageBlock
  src="https://media.alchemy.com/1703769249-address-provider.png"
  alt="Panel de despliegue de Remix: ingresando la dirección del lending pool de Aave como address_addressProvider"
  width={281}
  height={52}
/>

4) Haz clic en 'Deploy'

5) 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.

<ImageBlock
  src="https://media.alchemy.com/1703769328-etherscan-transaction.png"
  alt="Terminal de Remix mostrando el enlace de Etherscan para la transacción de despliegue del contrato"
  width={1061}
  height={75}
/>

 

### 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](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'

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

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

<ImageBlock
  src="https://media.alchemy.com/1703767345-testnet-mode.png"
  alt="Menú de configuración de Aave con el modo Testnet activado"
  width={258}
  height={243}
/>

4. Aporta algo de Eth de prueba a Aave haciendo clic en el botón 'Supply' bajo 'Assets to supply'. Podemos empezar con .001

<ImageBlock
  src="https://media.alchemy.com/1703767377-assets-to-supply.png"
  alt="Panel Assets to supply de Aave: suministrando ETH de prueba con el botón Supply"
  width={747}
  height={346}
/>

5. Luego pide prestado algo de DAI haciendo clic en el botón 'Borrow' junto a DAI. Pide prestados 10 DAI. 

<ImageBlock
  src="https://media.alchemy.com/1703767451-borrow-dai.png"
  alt="Panel de préstamos de Aave: haciendo clic en el botón Borrow junto a DAI"
  width={739}
  height={101}
/>

6. Metamask debería abrirse para confirmar la transacción y el DAI aparecerá en tu wallet una vez que se complete la transacción:

<ImageBlock
  src="https://media.alchemy.com/1703767494-metamask-transaction.png"
  alt="Saldo de la wallet de MetaMask mostrando DAI prestado junto a ETH"
  width={355}
  height={214}
/>

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

<ImageBlock
  src="https://media.alchemy.com/1703767533-metamask-import-tokens.png"
  alt="Menú de MetaMask con la opción Import Tokens para agregar DAI"
  width={181}
  height={63}
/>

- Ingresa la dirección del contrato de DAI para Kovan: 0xFf795577d9AC8bD7D90Ee22b6C170349

 8. 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:

<ImageBlock
  src="https://media.alchemy.com/1703767579-deployed-contract-address.png"
  alt="Panel de contratos desplegados de Remix: copiando la dirección del contrato de flash loan"
  width={300}
  height={97}
/>

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

<ImageBlock
  src="https://media.alchemy.com/1703767612-send-tokens-metamask.png"
  alt="Pantalla de envío de MetaMask: transfiriendo DAI al contrato de flash loan desplegado"
  width={354}
  height={380}
/>

### 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 

<ImageBlock
  src="https://media.alchemy.com/1703767645-flash-loan-and-contract-address.png"
  alt="Flash loan y dirección del contrato en Deployed Contracts"
  width={288}
  height={338}
/>

3. Ve al campo de texto etiquetado 'address asset' junto a la etiqueta 'flashloan'

<ImageBlock
  src="https://media.alchemy.com/1703767698-flashloan.png"
  alt="Campo de entrada de dirección en Remix junto al botón flashloan"
  width={274}
  height={43}
/>

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

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

<ImageBlock
  src="https://media.alchemy.com/1703767729-flashloan-process.png"
  alt="3 transacciones en Etherscan durante el proceso de flash loan"
  width={947}
  height={138}
/>

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.
