¿Cuál es la mejor manera de descargar una instantánea de conjunto UTXO "reciente"?

Estoy usando bitcoinj para escuchar pagos. Necesito una forma de mantener todo el conjunto UTXO en una base de datos local.

  1. ¿Se puede usar bitcoinj para descargar cada bloque (creo que solo descarga bloques recientes y encabezados para bloques más antiguos)?

  2. No necesito usar bitcoinj o incluso Java para crear o mantener esta base de datos si existe una solución mejor. ¿Hay algo como esto?

Idealmente, lo que quiero es una billetera que descargue solo el conjunto UTXO sin descargar toda la cadena de bloques (debido a las limitaciones de ancho de banda) y la mantenga a partir de ese momento. Debe ser el conjunto completo, no solo las direcciones que poseo. Además, necesito una API que permita las siguientes consultas:

  1. Dado un UTXO, verifique si está presente en el conjunto.
  2. Dada una dirección, consígueme todos los UTXO para ello.

Creo que actualmente no es posible validar un determinado conjunto de UTXO sin descargar toda la cadena de bloques, por lo que también se agradecería alguna solución en este sentido.

Respuestas (5)

Sí, por defecto bitcoinj descarga bloques completos, desde el Génesis. Solo si conecta una billetera, utiliza optimizaciones como puntos de control y filtros.

No es posible simplemente descargar el conjunto UTXO (sin confianza), porque el protocolo Bitcoin no está diseñado para eso. Puede obtener UTXO de exploradores de bloques y servidores Electrum, pero será sin prueba criptográfica.

¿Cuánto tiempo lleva actualmente con una CPU i7 k7700 y un ancho de banda decente?

Si dejas de lado los temas de confianza, validación de los datos, mantenerlos actualizados y demás. Si solo desea una instantánea única para algún propósito académico, puede pedirle a un amigo que usa Bitcoin Core que le dé una copia de su carpeta chainstate , pero tendría que extraer datos de la estructura de datos de LevelDB .

Otras billeteras, como Electrum, también pueden tener un almacenamiento de datos persistente que consiste principalmente en datos UTXO.

Como escribió Andreas, simplemente no es posible descargar el conjunto UTXO (sin confianza). Me gustaría que fuera posible, y por eso he pensado en cómo hacerlo...

Cada bloque identifica transacciones de bloques anteriores que estaban en el conjunto UTXO y ya no están en él y también especifica completamente todas las transacciones que el bloque actual ha agregado al conjunto UTXO. Esto significa que SI ya tiene un conjunto UTXO completo y verificado y alguien quiere saber si un conjunto UTXO de hace N bloques es válido, puede proporcionar una respuesta. Si confían o no en ti es un tema diferente. Si su conjunto es válido, puede deshacer las sumas y restas de transacciones como lo indican los bloques N, calcular un hash y luego enviar ese hash a la otra persona. Si obtienen el mismo hash en su conjunto, es seguro que supongan que usó el mismo UTXO Set para obtener el hash que usaron (es decir, coinciden).

Es posible que ya exista un software que pueda hacer esto. Me gustaría eso. Pero no hay pruebas de que ninguno de ustedes tenga el conjunto UTXO correcto . Me gustaría ver eso arreglado para todos, pero requiere un poco de arranque. Tengo un plan para ello:

  1. Cree software que convierta un hash SHA256 en algo memorable y único. Esto es un poco más complicado de lo que parece. Lo que sea que produzca la representación (música, arte, animación, una combinación, ...) debe tener (al menos) 256 propiedades binarias distintas que se recordarán fácilmente. Cualquiera podría usar este software para ver si el hash del conjunto UTXO en una altura de bloque reciente produce una representación memorable.
  2. Haga que a veces se produzca una representación memorable. Eso puede servir como un punto de control global para la cadena de bloques. Si suficientes personas (llamada de juicio) conocen la representación memorable, entonces las nuevas instalaciones de nodos completos podrían obtener (de cualquiera que lo tenga) el conjunto UTXO a esa altura, calcular el hash, representarlo y comparar el resultado con el de todos. recuerda Me imagino que estaría fácilmente disponible en Internet, pero es más seguro hablar con alguien en la vida real para evitar el peligro de los ataques de Sybil.
  3. Actualice el software de nodo completo para proporcionar el conjunto UTXO a partir de un bloque que especifique el nodo solicitante (para que el paso anterior sea posible para instalaciones nuevas)
  4. Actualice el software de nodo completo para permitir que el usuario especifique una altura de bloque que se sabe que produjo un conjunto UTXO con un hash memorable, solicite el conjunto UTXO a partir de ese bloque de sus pares, cree la representación a partir del hash de la respuesta y muestre al usuario.
  5. Permita que el usuario indique que la representación coincide y, si el usuario así lo indica, omita la descarga de la cadena de bloques (excepto las partes que no estén incluidas en el conjunto UTXO canónico, si corresponde) para ahorrar ancho de banda y espacio en disco, y simplemente comience con el conjunto UTXO que entró como respuesta.

Por la misma razón que no se puede gastar el bitcoin extraído que tiene menos de 100 bloques de profundidad (es decir, es poco probable una reorganización de 100 bloques, ¿posiblemente ni siquiera sea compatible?), Esta estrategia nos permite proceder con un mínimo de 100 bloques de historial. en lugar de toda la cadena de bloques.

Esto coloca la responsabilidad de garantizar la integridad del UTXO de punto de partida establecido en el ser humano que utiliza el software de nodo completo. Tendría que ser experimental por un tiempo, hasta que demuestre que los bloques del cero al X ya no son necesarios (porque el UTXO establecido en la altura del bloque X fue lo suficientemente memorable como para ser reconocible por simples humanos que usan esta nueva característica), reduciendo así la cadena de bloques. requisito de una cantidad siempre creciente de almacenamiento a una cantidad de almacenamiento que presumiblemente se estabilizará.

Parte del atractivo de esta idea para mí es que el hash SHA256 aleatorio de un conjunto UTXO se puede convertir en algo memorable, y las posibilidades de que eso suceda son bajas pero no nulas, al igual que la minería en sí. Diferentes algoritmos de renderizado podrían competir. Acabo de pensar en uno...

Los 256 bits del hash más los 32 bits de la altura del bloque podrían usarse para indicar en qué celdas de un juego de vida de 16x18 están activas. Deja correr el juego de la vida. Míralo. Recuerda cómo se estabiliza. Algunos juegos eventualmente despejarán el tablero. Eso es memorable. Cómo despeja el tablero también sería memorable.

Empecé a buscar un conjunto UTXO canónico (es decir, uno cuya estructura esté estandarizada, de modo que el mismo conjunto de UTXO tenga la misma representación que los datos). Convertir el hash SHA256 más 32 bits de la altura del bloque en un Juego de la vida para ver cómo se desarrolla se puede hacer fácilmente con Golly o cualquier otro software que implemente el "Juego de la vida" de John Conway.

Así que tengo la misma búsqueda que OP, pero Andreas tiene razón. Tienes que ejecutar un nodo completo y crearlo tú mismo. Sin embargo, una vez que haya hecho eso, posiblemente podría ponerlo a disposición de otros (¡yo!). También señala que no hay forma de probar que es correcto, excepto ejecutando un nodo completo y repitiendo todo el trabajo de actualización para cada transacción. Demostrar que el resultado es correcto sin todo ese trabajo es el objetivo de la idea que presento en esta respuesta.

Echa un vistazo a este programa. Volcará toda la base de datos UTXO actual en un archivo CSV al que puede hacer una referencia cruzada. https://github.com/in3rsha/bitcoin-utxo-dump

@ Dave Scotese: Estoy de acuerdo con su idea de tener un conjunto UTXO generalmente aceptado (aunque no estoy seguro de por qué sugirió ejecutar el hash de puntos de control resultante en un juego de la vida). De todos modos, creo que el problema no es que no se pueda hacer, sino que se trata de un consenso (muy similar al problema que resuelve la propia cadena de bloques). Supongamos que usó honestamente su algoritmo y proporcionó al mundo un hash memorable que define el conjunto UTXO en algún punto de control de altura de bloque que coloca en algún repositorio para descargar. Ahora, si el Sr. A lo descarga y verifica usando su propia base de datos y está de acuerdo con usted. No espera que el Sr. B esté de acuerdo con usted simplemente porque el Sr. A está de acuerdo. Verá, quien necesite usar este conjunto UTXO debe verificarlo por sí mismo. Todavía vuelve al problema de los generales bizantinos que resolvió blockchain. Sinceramente, creo que para que funcione,

Y sí, estoy completamente de acuerdo con usted en que tener un conjunto UTXO de este tipo resolverá el problema de tener que descargar toda la cadena de bloques antes de poder validar las transacciones.