Algoritmo de búsqueda de blockchain de Bitcoin y política de consistencia

La cadena de bloques parece una lista de doble enlace, y todas las transacciones se almacenan en cada bloque. ¿Qué tipo de algoritmo usa bitcoin para encontrar una transacción específica de manera eficiente, ya que la cadena de bloques es cada vez más grande?

La red bitcoin usa su poder de cómputo para mantener la consistencia de los datos, si simplificamos este modelo (escriba una vez, lea muchos, no actualice, no haga trampa) y use su política de consistencia en el sistema de archivos distribuido geográficamente, ¿funciona?

Respuestas (1)

La cadena de bloques es una estructura de árbol (cada bloque solo hace referencia a su padre) o una ruta única a través de este árbol (una lista enlazada individualmente).

Internamente en el software (al menos en la implementación de referencia), existen índices, por supuesto, para encontrar bloques (por altura y por hash).

Sin embargo, técnicamente, no hay indexación de transacciones en absoluto. No son necesarios para la validación. En su lugar, se mantiene una base de datos con solo los resultados de las transacciones que aún no se han gastado (que está indexada por el hash de la transacción y nada más). Cada bloque que se valida actualiza esta base de datos: se agregan sus nuevas salidas, se eliminan las salidas consumidas por él. Esta base de datos es pequeña, en comparación con la cadena de bloques (400 MB frente a 16 GB a partir de marzo de 2014).

De hecho, los bloques anteriores no se utilizan en absoluto durante la validación. Solo los necesitamos para servirlos a otros nodos que se están iniciando; de lo contrario, no tendrían forma de conocer el estado actual de una manera de confianza cero.

Este último punto es importante para el modelo de seguridad de Bitcoin: los nodos completos nunca confían en los datos que no han validado ellos mismos. Es por eso que no podemos simplemente copiar la base de datos de salidas no gastadas de alguien y olvidarnos de los bloques antes de ese punto.

Con respecto a la separación de datos entre nodos: dichos mecanismos suelen tener propiedades DoS muy malas, donde eliminar algunos nodos de red puede significar que algunos datos se vuelven inaccesibles.

Solo para bloques, ciertamente es posible que no todos los nodos almacenen y sirvan cada bloque (y esto probablemente se implementará en algún lugar en el futuro). Nuevamente, todo lo que se necesita es arrancar un nuevo nodo.

La base de datos de salidas no gastadas también se puede fragmentar, es decir, conservando solo las salidas de transacciones dentro de un cierto rango de hashes. Sin embargo, esto aún requiere que cada nodo valide cada bloque, y el resultado técnicamente no es un nodo completo. Necesitaría un conjunto de nodos, que juntos validen el rango completo de hash, para asegurarse de que los bloques sean completamente válidos.

¿Hay alguna documentación sobre la organización exacta de los diferentes archivos de la base de datos de Berkeley?
Gracias por tu ayuda. Hago la segunda pregunta porque el sistema bitcoin usa algunos mecanismos para hacer que todos los mineros compartan la misma cadena de bloques. Soy nuevo en este campo y parece que ZooKeeper y Paxos se usan para resolver problemas de consenso y coordinación en la aplicación distribuida, y tengo curiosidad acerca de cómo el sistema bitcoin resuelve ese problema :)
@Jori: quizás bitcoin.stackexchange.com/questions/11104/… responda eso parcialmente. Berkeley DB solo se usa para la billetera; el resto son formatos personalizados o LevelDB.