Estoy haciendo un proyecto de tesis sobre el modelado de datos de la cadena de bloques de Bitcoin, pero estoy teniendo problemas para obtener datos de la cadena de bloques de Bitcoin en un formato que sea fácil de manejar, por ejemplo, en Python.
Tengo todos los datos de Bitcoin Core, ¿conoce alguna forma de agregar los datos en un formato que dé una idea del saldo de los usuarios o algo así?
Si alguna vez has hecho un proyecto similar, ¡estoy muy interesado en lo que has hecho en las fases preliminares! Gracias.
En cuanto a cómo convertir transacciones anónimas en "usuarios" (como máximo un intento estadístico, ya que Bitcoin es en principio anónimo ), lo que podría conducir a la información de "saldo de usuarios" solicitada , hay documentos disponibles que describen el proceso. Estos, por ejemplo, podrían servir como punto de partida (con buenas descripciones e imágenes):
Básicamente, citando a este último:
... un " usuario " es una agrupación de claves públicas que se utilizaron como entradas en una sola transacción (el usuario posee la clave privada de cada dirección)...
En cuanto a los problemas al usar Python directamente para tratar datos sin procesar, puede usar, tal vez como plantilla o para obtener ideas, esta publicación que usa Python para convertir datos de encabezado de bloque binario a un CSV:
#!/usr/bin/env python
# convert binary file http://headers.electrum.org/blockchain_headers
# to CSV ASCII
import binascii
STRUCT_OF_BLOCK = [ 4, 32, 32, 4, 4, 4 ] # blockchain_headers does not contain always "0x00" txn_count
BLOCK_SIZE = sum(STRUCT_OF_BLOCK)
FILE_OUT= open('blockchain_headers.csv','w')
FILE_OUT.write( "version,prev_block,merkle_root,timestamp,bits,nonce,txn_count\n" )
with open('blockchain_headers','rb') as FILE:
block = FILE.read(BLOCK_SIZE)
while block != b'':
position = 0
for i in STRUCT_OF_BLOCK:
FILE_OUT.write( bytearray(binascii.hexlify( block[position:(position+i)][::-1] )).decode('ascii') + ',')
position += i
if position >= BLOCK_SIZE:
FILE_OUT.write("00\n") # blockchain_headers does not contain always "0x00" txn_count
block = FILE.read(BLOCK_SIZE)
Willtech
martinjohn