Obtener bloques huérfanos de Blockchain

Estoy muy interesado en hacer algunos análisis de bloques huérfanos, pero para hacerlo tendría que tener una buena forma de acceder a ellos. Blockchain.info parece un buen lugar para comenzar, pero no quiero abusar de su API raspando toda la Blockchain. Otro intento fue usar ABE , pero después de analizar casi toda la cadena de bloques de mi disco (varios días de trabajo), no puedo encontrar un solo bloque huérfano y estoy empezando a temer que el cliente satoshi elimine los bloques huérfanos antiguos, lo que ser una pena

¿Podré encontrar bloques huérfanos con ABE y, de no ser así, qué alternativas hay?

Respuestas (3)

Los bloques huérfanos se almacenan en archivos blkxxxx.dat para siempre, aunque cada nodo conocerá los diferentes bloques huérfanos. Bitcoin imprimirá una lista de todos los bloques conocidos, incluidos los huérfanos, en debug.log si lo pasa -printblocktree.

Uh, no pensé en que no se almacenarían en nodos que no los habían visto en la transmisión original. Entonces, ¿los nodos que no estaban en línea cuando los bloques huérfanos aún tenían la posibilidad de volverse legítimos nunca lo verán? ¿Cuánto tiempo se debe abandonar el nodo huérfano hasta que ya no se anuncie?
Los bloques de @cdecker solo se transmiten a través de la red una vez; los nodos no transmitirán un bloque si ya se ha visto o si no extiende la cadena más larga actualmente. Por lo tanto, los nodos que no están en línea cuando se transmite un bloque no lo verán a menos que se convierta en parte de la cadena principal.
Eso confirma lo que estaba viendo. Entonces, si no hay un archivo que mantenga un registro de todas las transacciones, no podré reconstruir las bifurcaciones, ¿verdad? Blockchain.info solo tiene bifurcaciones para el bloque 142257. ¿Alguna idea de dónde puedo encontrar más?
@cdecker Aquí está mi salida de printblocktree en un nodo que se ha estado ejecutando durante mucho tiempo: mirrorcreator.com/files/1EB4UZDD/printblocktree.txt.bz2_links

Por lo que puedo ver, ABE funciona de manera muy similar a BlockExplorer en lo que respecta a los bloques huérfanos, es decir, los olvida. Parece que solo Blockchain.info almacena activamente bloques huérfanos e incluso los muestra en una lista ordenada .

La única otra forma de analizar bloques huérfanos es mantener un historial de los últimos dos bloques y verificar constantemente si cambiaron. Este es el enfoque que utilicé para probar un ataque simulado del 51 % en TestNet en mi tesis de maestría . Sin embargo, los bloques huérfanos no ocurren con tanta frecuencia. Puede consultar una pregunta al respecto o ir directamente a las estadísticas .

Con respecto a Abe, debería cargar bloques huérfanos de la cadena de bloques si usa el cargador blkfile ... No he mirado en detalle el uso de la orphan_blocktabla, pero está vacía en mis dos bases de datos a pesar de que tengo bloques huérfanos en ellos ( Todavía no puedo decir que sea un error, pero parece sospechoso).

Puede buscar bloques huérfanos por hash en Abe, pero para encontrar los hash necesita buscar directamente en la base de datos. Esta consulta me funciona en MySQL, usando almacenamiento hash binarioHEX() (de ahí la función); asegúrese de eliminarlo si almacena hashes como cadenas hexadecimales CHAR (solía ser el valor predeterminado).

SELECT block_height, HEX(block_hash) FROM block b
  LEFT JOIN block_next bn ON (b.block_id = bn.block_id)
  WHERE bn.next_block_id IS NULL
  ORDER BY b.block_id DESC LIMIT 1,10;

El LIMIT 1,10es omitir el bloque cargado más reciente, que probablemente sea la punta; no tiene block_next_id pero tampoco es huérfano.

Si usa el cargador RPC, solo puede capturar bloques huérfanos mientras carga los últimos bloques; ¡no recibirá ningún huérfano de bitcoind a menos que aún no haya quedado huérfano! Puede encontrar algunos usando abe_loader y eventualmente con algún código que todavía estoy probando que permitirá cargar constantemente mempool y bloques.