1. Requerimientos No Funcionales
Los siguientes son los requerimientos no funcionales para al resolución del proyecto:
- [ ] Se debe desarrollar en Rust, usando la biblioteca estándar
- [ ] Se deben implementar tests unitarios y de integración de las funcionalidades que se consideren más importantes
- [ ] No se permiten utilizar crates externos más allá de los mencionados en dicha sección.
- [ ] El código fuente debe compilarse en la versión stable del compilador y no se permite utilizar bloques unsafe.
- [ ] El código deberá funcionar en ambiente Unix / Linux.
- [ ] La compilación no debe arrojar warnings del compilador, ni del linter clippy (
cargo clippy -- -W clippy::pedantic)
- [ ] Las funciones y los tipos de datos (struct) deben estar documentadas siguiendo el estándar de cargo doc.
- [ ] El código debe formatearse utilizando cargo fmt.
- [ ] Las funciones
no deben tener una extensión mayor a 30 líneas. Si se requiriera una extensión mayor, se deberá particionarla en varias funciones.
- [ ] Cada tipo de dato implementado debe ser colocado en una unidad de compilación (archivo fuente) independiente.
2. Requerimientos Funcionales
Los siguientes son los requerimientos funcionales para el desarrollo del Trabajo.
El nodo de Bitcoin deberá ser capaz de:
- [x] descargar y almacenar la cadena completa de headers desde el inicio de la blockchain
- [x] descargar y almacenar los bloques completos a partir de una fecha determinada, que corresponderá al inicio del presente proyecto
- [ ] mantener actualizada la información de nuevos bloques (incluyendo sus headers y las transacciones incluídas) y nuevas transacciones (no confirmadas) que se van transmitiendo por la red.
- [ ] Se deberá mantener la lista de UTXO (unspent transactions) a partir de la fecha mencionada y permitir al usuario realizar transacciones utilizando dichas UTXO.