Trabajo realizado en el marco de la materia Taller de Programación 1 de la Facultad de Ingeniería de la Universidad de Buenos Aires, en un plazo de 2 meses. El proyecto fue realizado en un repositorio privado de la cátedra, por lo que no se pueden observar las contribuciones específicas de los integrantes del grupo.
Pueden revisar el enunciado en el siguiente link: Enunciado Bitcoin.
En resumidas palabras, el trabajo constaba de la realización de un nodo bitcoin, que soporte la conexión con otros nodos y el envio y respuesta de los mensajes, usando sockets TCP. Esto incluía el handshake, la descarga de los headers y de los bloques, la difusión de transacciones, entre otras. A su vez el nodo debía soportar conexiones a diferentes wallets, permitiendo a estas generar transacciones, chequear su balance; para esto creamos un protocolo de comunicación entre estas dos entidades, en lugar de utilizar el ya existente que resultaba demasiado abarcativo y complejo.
Se utilizaron los mecanismos más simples de concurrencia (variables mutex y canales) por el simple hecho de no conocer otras opciones hasta aquel entonces.
Para correr la wallet:
cargo run --bin wallet <path de configuracion>Para correr el nodo:
cargo run --bin node <path de configuracion>Para probar el programa, dejamos a continuacion dos billeteras que ya contienen plata cargada
privkey en wif: 92SD2oqjN8jUb33XoGmkkoGML1nRxBdcGZiXoqDL9xU1yowgHpJ address: mg5Xt8ogUKjj5oxxeDYdLvLUVSw7HNE6Cn
privkey en wif: 93JcZKAPezbqvV5Ntut5XCFZSowipPJJpWxkPnVgyaRRY1iVHjT address: n1oeWx2DbzpB46xgMgt52EuR2JpsvvDuRx