Estructuras de datos - mauricio-alvarez/BlockchainAED2022-2 GitHub Wiki
Estructuras de datos
Forward List (Simple Linked List)
Estructura de datos que consiste en el enlazamiento simple de nodos, donde cada nodo almacena algún elemento o conjunto de elementos y un enlace al nodo posterior mas no al previo. Como recordaremos está estructura representa una mejora parcial en algunos aspectos respecto a un array, ya que en la presente estructura no es necesario que los nodos sean adyacentes en memoria. La estructura del BlockChain o cadena de bloques se asemeja a esta estructura pues al igual que la lista simplemente enlazada representa un conjunto de nodos, el BlockChain representa un conjunto de bloques, los cuales almacenan las transacciones, que se enlazan. Podría bien implementarse de una forma en la que se asemeje a otras estructuras enlazadas, sin embargo, consideramos que su comportamiento es más apegado al de un ForwardList que de otros.
Doubly Linked List
Estructura que solo difiere de una lista simplemente enlazada en que los nodos que la conforman almacenan un puntero adicional a un nodo previo y no solo al posterior. Si bien nuestra BlockChain sigue la estructura de una lista simplemente enlazada, al realizar algunas operaciones necesitamos el almacenamiento de datos, ya sean nodos, bloques, transacciones, etc. Para lo cual y como objeto único de esta presentación se desiste de usar estructuras previamente definidas en la STL. Debido a esto se decide usar una lista doblemente enlazada por ser la estructura más simple que cumpla con lo que necesitamos a nivel de almacenamiento y recorrido de la misma.
MerkleTrees
Merkle Tree o también conocido como hash table, es un árbol binario balanceado, aunque con un comportamiento un tanto particular, el árbol no se construye desde la raíz, sino desde los nodos hojas, donde cada nodo no hoja se genera en base al valor de hash de sus nodos secundarios, así hasta llegar a la raíz. Esta estructura es de especial ayuda a la hora de realizar verificación y sincronización de una gran cantidad de datos, debido a que se puede identificar rápidamente las inconsistencias, debido a que siendo cada “merkle nodo” (nodo del árbol) un bloque (Block) de transacciones, a la hora de realizar dicha verificación solo será necesario revisar si los datos son finalmente consistentes con el hash de la raíz sin necesidad de revisar todos los bloques.