bcnet
Mensajes entre nodos
Todos los nodos tienen dos modos: in, out
En in el nodo recibe mensajes y solo responde TRUE or FALSE -> que significa si el mensaje es candidato valido a cambiar el estado de la maquina
( quedar dentro de la bc )
En out el nodo responde con datos en formato del script.
Ejecución de un nodo
Lista de tareas para la ejecución en el timer
sincro entre nodos:
1) Punto de entrada: el nodo trata de obtener la lista de nodos desde otros nodos, si no conoce ninguno desde una url si no esta disponible
trata de descubir un nodo.
2) Pregunta a otros nodos por los ultimos "bloques y msg" y trata de sincronizar la block chain y el buffer (mempool) local con la de los otros nodos.
3) Trata de construir un bloque, si se logra lo propaga a los peers
3b) Si hay una colision de bloques ( dos validos mismo marco de tiempo-id ) el algoritmo de consenso determina el optimo.
Ejemplo de sincronizacion entre nodos:
Nodo A tiene en db hasta blockId: 10
Nodo B tiene en db hasta blockId: 9
Cuando un nodo crea un bloque avisa a los peers
???Cada cierto tiempo, todos preguntan por los últimos datos de las DB: bc, buffer ( mempool ), nodes ( lista de ip ) en modo OUT.
//trae el ultimo bloque conocido
#define: netName, myred;
#call: yourLastBlockId@event;
//nuevo bloque desde otro nodo ?????
#define: netName, myred;
#call: myLastBlock@event;
#div: block;
....script...
#endDiv:;
//propaga un tx
#define: netName, myred;
#call: newTx@event;
#div: block;
....script...
#endDiv:;
//propaga un tx
#define: netName, myred;
#call: newTx@event;
#div: block;
....script...
#endDiv:;