# Lotería
## Requerimientos
### I. Implementando pseudoaleatoriedad
1. Una lotería tiene una fecha de finalización.
2. No hay límite de participantes.
3. Para participar en la lotería, tengo que comprar un boleto.
4. El precio del boleto está predefinido.
5. Una función deberá determinar el ganador de la lotería.
- **Tip**: Como fuente de entropía, utilizaremos el hash del bloque anterior.
- Utiliza la función `keccak`.
8. El ganador de la lotería se lleva todo el dinero acumulado.
### II. Trabajando con oracles descentralizados
Completa el ejercicio de [Beginners - The Basics](https://docs.chain.link/docs/beginners-tutorial/) de Chainlink.
### III. Obteniendo un feed descentralizado de aleatoriedad
Reimplementa el smart contract de la Parte I utilizando el [Chainlink VRF](https://docs.chain.link/docs/chainlink-vrf/). Puedes apoyarte en el tutorial de [Get a Random Number](https://docs.chain.link/docs/get-a-random-number/) de Chainlink para hacerlo.
- [ ] Fondea tu wallet en las testnet Kovan o Rinkeby.
- [ ] [Solicita $LINK en la testnet](https://docs.chain.link/docs/acquire-link/).
- [ ] Agrega $LINK a Metamask.
- [ ] Compila y deployea el smart contract de `RandomNumberConsumer` a la testnet.
- [ ] [Fondea el smart contract](https://docs.chain.link/docs/fund-your-contract).
- [ ] Llama a la función de `getRandomNumber`.
- [ ] Consulta la variable de `randomResult`.
### IV. (Opcional)
Deployea tu propio token y cambia la lógica de tu smart contract para que solo pueda aceptar ese token como medio de pago.
## Instrucciones de entrega
1. Sube el código a Canvas.
2. Responde a las siguientes preguntas:
1. ¿Qué es un oracle?
2. ¿Qué es un VRF?
3. ¿Por qué no debemos depende de la aleatoriedad del bloque para generar números aleatorios?
4. ¿Cómo funciona el modelo Request and Receive?
5. ¿Qué consideraciones debemos tener al utilizar un VRF?