En este curso construiremos un smart contract que nos permita hacer crowdfunding de proyectos usando Ether. Acompáñame para descubrir los detalles de este increíble proyecto.
- ¿Qué es Crowdfunding?
- Desafió sobre CrowdFunding
- Estructura del Proyecto
- Instalación
- Uso
- Contribuciones
- Licencia
Es un mecanismo que emplean proyectos/empresas para levantar capital en pequeñas cantidades hasta llegar a una meta especifica.
Los dueños del proyecto comparten de qué trata, cuál es la cantidad de dinero que quieren levantar y como invertirían este dinero.
Posteriormente publican el proyecto para que un gran número de personas realicen pequeños aportes hasta llegar a la meta objetivo de fundraising.
Los smart contracts permiten definir las reglas de negocio sin necesidad de un intermediario y definiendo la lógica y reglas de operación utilizando un código escrito.
Usando un smart contract definiremos cómo se crean los proyectos y cómo cualquier persona con una wallet dentro de Ethereum puede aportar Ether a un proyecto.
La cantidad de Ether que las personas aportarán a un proyecto será enviado a una wallet que corresponderá a los owners del proyecto, y se llevará la cuenta de la cantidad total aportada.
Gracias a las ventajas que ofrece Blockchain tendremos un sistema de crowdfunding confiable y seguro, pues cada uno de los aportes llegaran automáticamente a quién corresponde y, además, siempre habrá trazabilidad de cómo se distribuyen estos fondos.
Un CrowdFunding es un mecanismo colectivo de financiación de proyectos donde múltiples usuarios realizan aportes económicos a una cuenta con el fin de que esta reciba inversión y el proyecto se desarrolle.
Por lo general, y para evitar estafas, dichos proyectos se encuentran aprobados por una plataforma y poseen un libro blanco que describe el equipo y los objetivos del mismo. Los usuario que aportan capital suelen recibir incentivos en forma de tokens que pueden ser más valiosos en el futuro si el proyecto tiene éxito y recuperar la inversión.
Tu objetivo será desarrollar un contrato inteligente que permita:
- Inicializar el contrato y crea una
struct
para almacenar los datos de una proyecto y administra el estado de cada uno con unenum
. - Crear una función
fundProject()
que permita enviar ETH a un proyecto. - Crear la función
changeProjectState()
que permita cambiar el estado de un proyecto. - Utilizar
modifiers
para que solo el creador de un proyecto pueda modificarlo su estado. - Producir validaciones en tu contrato para que no pueda aportarse capital a un proyecto finalizado o evitar que se aporte 0 ETH.
- Almacenar los proyectos en un Array y guarda cada contribución que un proyecto reciba en un Mappings.
Al finalizar el reto, comparte tu primer contrato inteligente y compara tu solución con la de otros estudiantes. Recuerda que existen distintas maneras de resolver este reto.
La estructura del proyecto es la siguiente:
├── contracts/
│ ├── CrowdFunding.sol
│ └── ...
├── migrations/
│ ├── 01_deploy_contracts.js
├── test/
│ ├── CrowdFunding.test.js
│ └── ...
├── .gitignore
├── hardhat.config.js
├── package.json
└── README.md
El contrato inteligente se encuentra en la carpeta contracts/
y se llama CrowdFunding.sol
. Permite la creación de una campaña de recaudación de fondos y tiene los siguientes métodos:
fundProject()
: Permite a los usuarios enviar Ether al contrato y donar a la campaña.
changeProjectState(string newState)
: Permite al propietario del contrato cambiar el estado de la campaña (por ejemplo, de "Abierto" a "Cerrado").
Se han creado test unitarios en la carpeta tests/
para probar el contrato inteligente. Estos test han sido escritos utilizando el framework de testing Hardhat
.
Este proyecto utiliza Solidity
y Hardhat
. Además, se requiere una conexión a una red Ethereum local o remota para realizar pruebas.
Para instalar las dependencias del proyecto, utiliza el siguiente comando:
npm install
Para ejecutar las pruebas, es necesario tener configurado el archivo .env
con las variables de entorno necesarias. Luego, se pueden compilar y ejecutar las pruebas con el siguiente comando:
npx hardhat test
Las contribuciones son bienvenidas. Para proponer un cambio, se recomienda seguir los siguientes pasos:
- Crear una nueva rama (
git checkout -b feature/nombre-del-cambio
) - Hacer los cambios necesarios
- Hacer commit de los cambios (
git commit -am 'Agrega el cambio'
) - Hacer push de la rama (
git push origin feature/nombre-del-cambio
) - Abrir un Pull Request
Este proyecto se encuentra bajo la licencia GPL-3.0.