¿Cómo se vería afectado el protocolo Bitcoin si los nodos solo almacenaran los bloques que les importan?

En este momento, los clientes completos de la red Bitcoin almacenan cada bloque generado (mientras que los clientes "delgados" confían en un nodo que lo hace). Esto aumenta en gran medida la inicialización por primera vez para el cliente y también tiene implicaciones significativas para la sobrecarga de la red, entre otras cosas. ¿Cómo se vería afectada la red si los nodos almacenaran solo los encabezados de la mayoría de los bloques en la cadena de bloques hasta que "necesitaran" el bloque real?

Estas situaciones son bastante comunes, tales como:

  • verificar la validez de cada nuevo bloque a medida que se encuentra y se transmite a la red
  • cada vez que el cliente está enviando o recibiendo bitcoins
  • etc.

para que, en general, los clientes sigan descargando todos los bloques transmitidos cuando estén en línea. Sin embargo, serían capaces de:

  • purgar bloques que "no les importan" si el espacio de almacenamiento es limitado
  • en el caso típico, comience a enviar y recibir bitcoins después de descargar solo algunos bloques más relevantes (y todos los encabezados, por supuesto)
  • etc.

Tenga en cuenta que generalmente hay varias entidades que "invierten en" la disponibilidad continua de un bloque determinado, como el minero original, que quiere que sus 50 btc ganados sigan siendo válidos, y cualquiera que haya recibido bitcoins de transacciones en ese bloque. Sin embargo, una consecuencia intrigante de este escenario sería que los mineros tienen incentivos para incluir tantas transacciones en sus bloques como sea posible (actualmente, uno puede minar sin incluir ninguna transacción si así lo desea). ¿Cuáles serían los otros impactos en la funcionalidad y la seguridad?

Editar: estoy buscando una respuesta mejor que "Creo que desestabilizaría la red" aquí: quiero ver algunos impactos estimados en la disponibilidad de bloques, la sobrecarga de la red hacia arriba o hacia abajo una vez que la cantidad más baja de descarga se contrasta con re- descargar más tarde, etc. Algunas estadísticas sobre cómo los bloques interdependientes son solos contribuirían en gran medida a una respuesta sólida.

Edición 2: En este momento, esta recompensa irá a Shadders en un par de horas. Pero si alguien tuviera información más detallada sobre la información que pedí en mi primera edición, definitivamente podría atacarla. ¿Ningún arrendatario?

Esto es relevante: gist.github.com/1059233
Para aquellos demasiado perezosos para hacer clic ^ Gavin está considerando el uso de esta técnica para mejorar la experiencia de inicio en el cliente normal.

Respuestas (3)

Hay un trabajo de prueba de concepto en progreso en este momento para resolver este problema. Básicamente, mediante la creación de nodos concentradores capaces de manejar muchos miles de conexiones. Estos nodos centrales son, de hecho, un proxy respaldado por un verdadero demonio de bitcoin satoshi. Esto liberará a los nodos bitcoin estándar de muchas de las conexiones que utilizan estos nodos 'egoístas' y les permitirá continuar operando como lo hacen ahora. Los grupos de minería tendrán un fuerte incentivo para ejecutar nodos centrales, ya que acelerará la propagación de sus bloques generados y garantizará que tengan la mejor oportunidad de obtener nuevos bloques lo más rápido posible.

Creo que si esto se hiciera extensivo, esto desestabilizaría toda la red. Como nadie quiere eso, no se volverá extenso.

Lo más fundamental que hace el cliente es decidir cuál es la cadena de bloques válida actual. Supongamos que veo dos cadenas hash competidoras en la red. ¿Cómo puedo saber cuál debo seguir? La respuesta es primero asegurarse de que ambas cadenas sean válidas : una cadena de bloques no válida nunca puede ganar. ¿Cómo puedo validar la cadena hash si no puedo asegurarme de que cada entrada de transacción reclame válidamente la salida de una transacción anterior? ¿Cómo puedo hacer eso sin una tabla de transacciones completa?

Supongamos que veo una transacción que afirma que alguien me envió 50 Bitcoins. ¿Cómo puedo determinar que esos 50 Bitcoins son de hecho válidos? Bueno, tengo que asegurarme de que cada entrada en esa transacción reclame válidamente una salida de una transacción anterior. ¿Cómo puedo hacer eso si no tengo el conjunto completo de transacciones?

En otras palabras, un cliente no puede determinar si ha recibido fondos si no tiene acceso a un mapa de cada salida de transacción no reclamada indexada por ID de transacción.

Cabe señalar que el uso principal de tales "clientes egoístas" es en dispositivos integrados donde no solo el almacenamiento, sino también los recursos de red y CPU son muy importantes. Los clientes actuales de Android son todos "egoístas" y probablemente lo serán por algún tiempo. Dado que las personas que ejecutan Bitcoin en su teléfono casi seguramente tienen un nodo de cadena de bloques completo en casa, probablemente no serán una fuente importante de problemas de red.
Creo que para analizar la red de Bitcoin, puede tratarla como si estos clientes no existieran. Por lo tanto, no brindan ningún beneficio a la red (aunque brindan beneficios a sus usuarios y a la moneda en su conjunto) pero no dañan. Son "egoístas", pero sus necesidades también son bastante mínimas. Son perfectamente seguros cuando tienen un nodo "de confianza conocido" al que conectarse.
El problema surge cuando esos nodos "egoístas" se convierten en una mayoría tal que las personas detrás de firewalls, etc., que están limitadas a 8 conexiones, no pueden encontrar un cliente no egoísta al que conectarse. Dichos clientes pueden, sin duda, addnodeuno o más de los retrocesos , pero eso es una solución de mala calidad en el mejor de los casos.
Con suerte, para ese momento habrá suficientes personas ejecutando nodos "generosos" para compensar la holgura. (Ejecuto varios nodos de este tipo que pueden manejar más de 1500 conexiones cada uno. Los más ocupados rara vez ven más de 300). Todos tienen interés en mantener la red estable y confiable.
BitcoinJ le permite construir dichos clientes. "¿Cómo puedo validar la cadena hash si no puedo asegurarme de que cada entrada de transacción reclame válidamente la salida de una transacción anterior? ¿Cómo puedo hacer eso sin una tabla de transacciones completa?" Debido a que BitcoinJ se conecta a un nodo confiable, sabe que los bloques recibidos han sido validados para contener solo entradas para las que hay salidas.
Siempre que la dificultad se mantenga en niveles decentes, verificar la dificultad acumulada de una cadena de bloques a través de sus encabezados será un buen indicador de por dónde empezar. En cuanto a la validación de bloques o transacciones, tendría que rastrear sus 'dependencias'. Estoy buscando una respuesta mejor que "Creo que desestabilizaría la red" aquí. Quiero ver algunos impactos estimados en la disponibilidad de bloques, la sobrecarga de la red hacia arriba o hacia abajo una vez que la cantidad más baja de descarga se contrasta con la descarga posterior. , etc.
Es decir, algunas estadísticas sobre cómo son los bloques interdependientes por sí solos contribuirían en gran medida a una respuesta sólida.

¿Es posible que en el futuro haya un negocio de servicios de archivo? Tal vez las personas que deseen gastar un Bitcoin muy antiguo que tenga más de x años tendrán que esperar unos minutos más para que los servidores de archivo lo busquen. Estoy usando la analogía de la banca actual. Mi banco tiene 90 días de actividad en línea. Si quiero algo más viejo, entonces tengo que pedirlo y esperar.