¿Por qué Git no se considera una "cadena de bloques"?
La estructura de datos interna de Git es un árbol de objetos de datos, donde cada objeto solo apunta a su predecesor. Cada bloque de datos tiene un hash. La modificación (error de bit o ataque) de un bloque intermedio se notará cuando el hash guardado y el hash real se desvíen.
¿En qué se diferencia este concepto de la cadena de bloques?
Git no figura como ejemplo de cadenas de bloques, pero al menos en los resúmenes, ambas descripciones de estructuras de datos se parecen: bloque de datos, enlace inverso de dirección única, hashes, ...).
Entonces, ¿dónde está la diferencia en que Git no se llama cadena de bloques?
La razón por la que Git y las cadenas de bloques parecen similares es porque ambos utilizan árboles merkle como estructura de datos subyacente. Un árbol merkle es un árbol donde cada nodo está etiquetado con el valor hash criptográfico de su contenido, que incluye las etiquetas de sus hijos.
El gráfico acíclico dirigido de Git es exactamente eso, un árbol merkle donde cada nodo (etiqueta, confirmación, árbol u objeto blob) está etiquetado con el hash de su contenido y la etiqueta de su "hijo". Tenga en cuenta que para las confirmaciones, el término "secundario" entra en conflicto un poco con la comprensión de Git sobre los padres: las confirmaciones principales son hijas de las confirmaciones, solo necesita mirar el gráfico como un árbol que sigue creciendo al volver a rootearlo.
Las cadenas de bloques son muy similares a esto, ya que también siguen creciendo de esa manera y también utilizan su propiedad de árbol merkle para garantizar la integridad de los datos. Pero, por lo general, las cadenas de bloques se entienden como mucho más que simples árboles merkle, que es donde se separan del "rastreador de contenido estúpido" Git . Por ejemplo, blockchain generalmente también significa tener un sistema altamente descentralizado a nivel de bloque (no es necesario que todos los bloques estén en el mismo lugar).
Comprender las cadenas de bloques es un poco difícil (personalmente, todavía estoy lejos de entender todo sobre ellas), pero considero que comprender los aspectos internos de Git es una buena manera de entender los árboles merkle, lo que definitivamente ayuda a comprender una parte fundamental de las cadenas de bloques.
La pregunta dice: ¿ Por qué Git no se considera una “cadena de bloques”? Entonces, esto es afirmar que existe una opinión generalizada de que Git no es una cadena de bloques (una afirmación que se ilustra y corrobora con las respuestas que preceden a la mía en esta página) y preguntar la razón por la que prevalece esta opinión. Esta es una buena pregunta.
Tomando la pregunta literalmente, la respuesta podría ser que el término y concepto blockchain ganó popularidad como parte de la operación de moneda digital llamada "Bitcoin" y, por lo tanto, llegó a asociarse con la forma en que Bitcoin hace las cosas: que consiste en utilizar una gran cantidad de potencia informática. calcular un hash específico que incluye un nonce para cumplir ciertos requisitos arbitrarios, que es supuestamente no tener una autoridad central, que es ser “independiente”, tal vez incluso “democrático”, y el resto de la ayuda kool; y como estas cosas no se ven en Git, pues Git no puede ser una blockchain, ¿no? Y así la pregunta sería respondida literalmente.
Detrás de esta pregunta prima facie se esconde otra pregunta: ¿Qué es una cadena de bloques? Ahora, podrías buscar una definición en algún lugar y copiarla aquí, pero no lo hice porque ya lo decidí hace años, cuando escuché un podcast sobre Bitcoin que se esforzaba por explicar el nuevo concepto de blockchain, que una cadena de bloques funciona como Git y no tengo intención de dejar que mi valioso conocimiento se vea engañado por afirmaciones aleatorias en Internet.
Entonces, ¿qué es una cadena de bloques? ¿Qué hay en la palabra?
Nada en el término "blockchain" presupone el requisito de incluir un nonce en el contenido para obtener un hash de tantos ceros a la izquierda. (Este requisito sólo existe para poder controlar la cadena de bloques mediante la potencia informática y, en última instancia, mediante el dinero).
Nada en el término “blockchain” presupone la existencia de una red, y mucho menos una descentralizada.
Nada en el término "blockchain" presupone ninguna "independencia" de la "autoridad central".
El término "cadena de bloques" sólo presupone bloques (de datos) encadenados entre sí. Ahora ¿qué es una cadena? ¿Es sólo un enlace? No, es un vínculo fuerte diseñado para mantener unidas las cosas por la fuerza.
Una lista enlazada simple no califica como una cadena de bloques porque el contenido de los fragmentos de datos en la lista podría alterarse mientras la lista continuaría vinculándose de un lado a otro sin problemas. Así no es como funciona una cadena.
Para convertir un vínculo de bloques de datos en una cadena de bloques de datos, es necesario sumar (digerir) el contenido de los bloques de una forma u otra y esta suma de verificación (resumen) debe ser parte del vínculo, lo que lo convierte en un vínculo sólido. enlace protegiendo el contenido, impidiendo que sea alterado. Esta es una cadena de bloques.
Y esto es lo que hace Git y, por lo tanto, Git es una cadena de bloques, o funciona como tal, si lo prefiere.
Para cerrar el círculo, preguntémonos nuevamente: ¿ Por qué Git no se considera una “cadena de bloques”? Podría deberse a que muchas personas, quizás incluso una gran mayoría, no se centran en la esencia de un concepto sino en accidentes parpadeantes .