Nubarius perdona no te respondiese primero pero esta respuesta puede ser más larga y decidí hacerla des pues.
Un posible error conceptual que veo en tu planteamiento es que asumes que todos los nodos tienen perfectamente sincronizado su reloj, por ejemplo cuando dices (resaltado mío):
[...]
Los nodos guardaran las transacciones por un año y se perderá todo dinero que no se haya movido en ese periodo de tiempo.
[...]
Los bloques se generan cada minuto en cada nodo, con las transacciones del minuto anterior, y al final se manda el Hash del bloque y se compara con los que recibe, si no coincide se pide el bloque completo y las transacciones que no coincidan para su verificación.
[...]
[...]
- Un nodo no puede meter una transacción de una fecha en otro bloque que no sea de la fecha que le corresponde, pues todas las transacciones se firman en cierta fecha.
- Todas las transacciones se añaden al bloque del minuto que corresponde; Ningun nodo puede excluir una transacción de un bloque. Por lo tanto no puede hacer “Double Spend”, (eso es del bitcoin que el que mina puede añadir las transacciones que quiera en este).
[...]
En tus argumentos estás asumiendo la existencia de un cómputo de tiempo universal aceptado por toda la red distribuida. Esto es una forma de centralización pues necesitarías un "time server" maestro que fuera sirviendo turnos a los nodos ("a ti te asigno el turno 27", "a ti el 28"...; ojo, no bastaría con servir un valor temporal debido a la posible latencia de la red). Sin un servidor central de tiempos o turnos, ¿cómo consigues que los nodos tengan exactamente sincronizado el tiempo que asignan a las transacciones? ¿Cómo evitas discrepancias respecto a si una transacción ha ocurrido antes o después que otra o si ha pasado ya exactamente el año de vigencia de los fondos?
En Bitcoin no hay un tiempo universal porque es la propia cadena de bloques la que ejerce la función de reloj del sistema. Así es como lo concibió el propio Satoshi. En su "paper" (
http://bitcoin.org/bitcoin.pdf) introduce el concepto de cadena de bloques en la sección 3 como una forma de "timestamp server". Es cierto que los bloques contienen en su cabecera una marca temporal o
timestamp , pero ese dato temporal tiene carácter principalmente informativo y no es esencial para el sistema. Todas las cosas esenciales, como el cálculo de la dificultad o el valor del subsidio, dependen únicamente de la numeración de bloques.
Además, tampoco veo claro para qué necesitarías el concepto de "bloque" si asumes sincronización perfecta entre los nodos. ¿No te bastaría con ordenar las transacciones secuencialmente? Es decir, si asumes que las transacciones tienen una marca temporal con la que están de acuerdo todos los nodos, el histórico de transacciones sería simplemente una sucesión {T
1, T
2, T
3,... T
N}, con las transacciones ordenadas por tiempo. Al llegar a un nodo nuevas transacciones, se irían poniendo hacia el final (comprobando sus marcas temporales para aquellos casos en que la latencia de la red haga que no lleguen bien ordenadas). El problema del doble gasto en este modelo desaparecería y ni los bloques ni la minería tendrían sentido, pero ya no sería un sistema distribuido porque necesitas establecer un tiempo centralizado.
Toda red distribuida requiere una sincronización de tiempo incluso el bitcoin; Por que necesitas responder a ciertas preguntas.
- ¿Cada Cuanto tiempo se crea un bloque?
- ¿En que momento se realizó la transacción?
- En caso de doble transacción ¿Cual es la primera? para su eliminación
Todas estas y alguna más necesitan un control de tiempo sincronizado.
El propio Bitcoin tiene un Servidor de tiempo. Mira el punto 3 Timestamp Server. No se meten cosas que no hacen falta, si algo no hace falta no se mete; En el sistema de Satoshi Nakamoto si no hiciese falta no lo pondría, todo lo que puso es necesario, se puede cambiar alguna cosa pero todo es necesario.
La creación de bloques no es estrictamente necesario en un mundo idílico para las transacciones, donde no se caen conexiones ni tenemos ataques DDOS y siempre tenemos la misma cantidad de nodos. En un mundo real es necesario pues algunos nodo pueden no haber recibido alguna transacción, intencionadamente o no, los bloques son los métodos de confirmación, pero como dije anteriormente uno puede configurar su sistema de cobro con 0 confirmaciones. Además son necesarias para el dinero generado pues es dinero que no proviene de ninguna transacción. Y para la entrada y salida de nodos. Los bloques realmente son sucesiones de transacciones ordenadas, la generación de dinero la destrucción con un hash y la fecha, poco más.
Otro grave error es pensar que se necesita un servidor central para sincronizar tiempos, pues no es necesario, es como si dijeses que para que barias personas sincronicen sus relojes se necesita la hora de un tercero. Pero siempre puedes sincronizar la hora con un GPS o por medio de internet el sistema usa el tiempo universal coordinado por lo tanto podemos considerar cada nodo como una especie de servidor NTP; Puedes leer mas sobre Tiempo universal coordinado y Network Time Protocol en la wikipedia.
Creo que quedo claro pero si no entiendes algo no dudes en preguntar.