Los protocolos de préstamos descentralizados permiten a los usuarios prestar y tomar prestadas criptomonedas directamente en la blockchain, mediante contratos inteligentes sin necesidad de intermediarios, como bancos. En este tutorial, aprenderás a crear tu propio protocolo de préstamos descentralizados desde cero utilizando Solidity.
Al final de este tutorial, tendrás una comprensión sólida de los principios fundamentales detrás de los protocolos de préstamos descentralizados, incluyendo cómo agregar liquidez, pedir fondos prestados y reembolsar préstamos. También obtendrás experiencia práctica en la escritura e implementación de contratos inteligentes en la blockchain de Ethereum.
¡Comencemos!
Prerrequisitos
Antes de comenzar, asegúrate de tener instalados en tu sistema los siguientes requisitos previos:
Primeros pasos
Para empezar, dirígete al repositorio de scaffold-eth x BuildBear.
Aquí te explicamos por qué recomendamos usar scaffold-eth x BuildBear:
Te permite bifurcar fácilmente cadenas compatibles con EVM (Ethereum Virtual Machine o Máquina Virtual Ethereum) - como Ethereum, Polygon, Binance Smart Chain, Fantom, Optimism y Arbitrum Mainnet -directamente desde la línea de comandos (CLI), ahorrándote tiempo valioso que de otra manera gastarías buscando RPC (Remote Procedure Call o Llamada de Procedimiento Remoto) funcionales.
Puedes acuñar tokens nativos y ERC20 sin esfuerzo utilizando la CLI, eliminando la necesidad de perder tiempo buscando grifos (faucets) funcionales.
Para empezar, haz clic en el botón "Fork" para crear una copia del repositorio en tu propia cuenta de GitHub. Espera a que se complete el proceso de bifurcación antes de continuar.
A continuación, abre una terminal y clona el repositorio bifurcado, el cual incluye todos los componentes necesarios para crear una aplicación descentralizada:
git clone <paste the URL you fork repo>
cd scaffold-eth
Para instalar todos los paquetes necesarios, ejecuta el siguiente comando:
yarn fork-bb
Desplegando los contratos
yarn deploy
Comenzando el front-end
yarn start
´´´
Una vez que la aplicación se esté ejecutando, puedes acceder a ella en http://localhost:3000 y verás lo siguiente:
Antes de profundizar en el contrato inteligente, vamos a explorar las funcionalidades del Lending. Para comenzar, dirígete a la página Lending.
Para solicitar ETH gratis, conecta tu cartera y haz clic en "grab funds from the faucet".
Agregando liquidez
- Ingresa el valor del token deseado.
- Después de ingresar el valor del token, haz clic en "aprobar token" y luego procede sumando liquidez.
- Aprueba la transacción en Metamask: se mostrará una ventana emergente de Metamask solicitándola. La liquidez total y la liquidez proporcionada se actualizarán.
Retirar liquidez
- Ingresa el valor que deseas retirar.
- Después de ingresar el valor del token, haz clic en "Withdraw" (Retirar).
- Aprueba la transacción en Metamask: se mostrará una ventana emergente de Metamask solicitando tu aprobación. La liquidez total y la liquidez proporcionada se actualizarán.
Préstamo de liquidez
- Ingresa la cantidad que deseas pedir prestada.
- Una vez que hayas ingresado la cantidad de tokens, haz clic en "Borrow" (Pedir prestado).
- Aprueba la transacción en Metamask: se mostrará una ventana emergente de Metamask solicitando tu aprobación. La liquidez total, la liquidez proporcionada y la cantidad prestada se actualizarán.
Pagar Préstamo
- Ingresa la cantidad que deseas pagar.
- Una vez que hayas ingresado la cantidad de tokens, haz clic en "Repay" (Pagar).
- Aprueba la transacción en Metamask: se mostrará una ventana emergente de Metamask solicitando tu aprobación. La liquidez total, la liquidez proporcionada y la cantidad prestada se actualizarán.
Vamos a profundizar en el contrato inteligente
Podemos encontrar el contrato de lending.sol
en packages/hardhat/contracts:
El contrato utiliza la versión Solidity pragma
^0.8.0
y está licenciado bajo la licencia MIT.El contrato importa un contrato externo:
IERC20.sol
de la biblioteca OpenZeppelin. Estos contratos proporcionan una funcionalidad de token ERC20 estandarizada.addLiquidity(uint256 _amount)
: Esa función permite que los usuarios depositen tokens de garantía en el contrato. El parámetro_amount
especifica la cantidad de tokens de garantía que se depositarán. La función transfiere, inicialmente, los tokens de garantía del usuario al contrato y luego, agrega los tokens de garantía a la liquidez del contrato. Esta función emite el eventoLiquidityAdded
.borrow(uint256 _amount)
: Esta función permite a los usuarios pedir prestados tokens de préstamo desde el contrato, utilizando sus tokens de garantía depositados como garantía. El parámetro_amount
especifica la cantidad de tokens de préstamo a pedir prestados. La función primero calcula la cantidad de garantía requerida en base a la proporción de garantía y la cantidad de tokens de préstamo, luego asegura que el usuario haya enviado suficiente ETH para cubrir la garantía y la tarifa. Después, la función transfiere los tokens de préstamo al usuario y actualiza la cantidad prestada para ese usuario. Esta función emite el eventoBorrow
.repay(uint256 _amount)
: Esta función permite a los usuarios reembolsar los tokens de préstamo tomados y recuperar sus tokens de garantía. El parámetro_amount
especifica la cantidad de tokens de préstamo a reembolsar. La función primero transfiere los tokens de préstamo del usuario al contrato y luego disminuye la liquidez del contrato en la cantidad de tokens de garantía que el usuario debe recuperar. Finalmente, la función transfiere los tokens de garantía del contrato al usuario. Esta función emite el eventoRepay
.withdraw(uint256 _amount)
: Esta función permite a los usuarios retirar los tokens de garantía depositados en el contrato. El parámetro_amount
especifica la cantidad de tokens de garantía a retirar. La función verifica primero si la cantidad solicitada está disponible en el contrato y si el usuario tiene suficiente saldo. Luego, transfiere los tokens de garantía del contrato al usuario y, finalmente, disminuye la liquidez del contrato en la cantidad de tokens de garantía retirados. Esta función emite el eventoWithdrawal
.getLiquidity()
: Esta función devuelve la cantidad actual de tokens de garantía que mantiene el contrato.getCollateralRatio()
: Esta función devuelve la proporción de garantía actual exigida por el contrato, que es la cantidad de tokens de garantía requeridos por cada token de préstamo tomado.getCollateralToken()
: Esta función devuelve la dirección del contrato de tokens de garantía utilizado por el contrato.getOwner()
: Esta función devuelve la dirección del propietario del contrato.getBorrowAmount(address _user)
: Esta función devuelve la cantidad actual de tokens de préstamo tomados por el_user
especificado.getBalance(address _user)
: Esta función devuelve el saldo actual de tokens de garantía depositados por el_user
especificado.
Felicidades
Hemos desarrollado con éxito, un protocolo básico de préstamos que permite a los usuarios realizar préstamos y prestar fondos.
Comparte tu proyecto en Twitter y LinkedIn y etiqueta a BuildBear.
Si te gusta lo que estamos haciendo, síguenos en Twitter, LinkedIn y únete al grupo de Telegram si aún no lo has hecho.
Y, por favor, apláudenos 👏 si te gusta nuestro trabajo.
Repositorio en Github: Buildbear Tutorials
Sobre BuildBear:
BuildBear es una plataforma para probar dApps a gran escala para equipos. Proporciona a los usuarios su propia Testnet privada para probar sus contratos inteligentes y dApps, los cuales pueden ser bifurcados en cualquier cadena EVM. También ofrece un Faucet (Grifo), Explorer y RPC para propósitos de prueba.
El objetivo de BuildBear es crear un ecosistema de herramientas para probar dApps a gran escala para equipos.
Lea nuestros artículos anteriores y siga aprendiendo:
- Aprende a crear e implementar un contrato inteligente NFT y desarrollar una aplicación front-end en 15 minutos
- Aprende a crear e implementar un Token Soul Bound (SBT)
- Generar NFT con IA e implementar el contrato inteligente NFT y la aplicación front-end
- Aprende, codifica e implementa tu propia cartera MultiSig
- Vamos a entender los NFTs de firma y crear algunos
- Una guía completa para Hardhat
Este artículo fue escrito por BuildBear Team y traducido al español por Juliana Cabeza.
Puedes leer el artículo original en inglés aquí.
Discussion (0)