Proyecto sobre modelado de datos de blockchain de Bitcoin

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.

El saldo de la dirección es posible, pero el saldo del usuario no lo es.
He visto trabajo, donde basan sus ID de usuario en las probabilidades de que las direcciones sean del mismo usuario. De esta forma es posible (con alguna probabilidad) estimar el número de usuarios y por lo tanto los saldos de usuarios específicos. Era algo como esto en lo que estaba pensando.

Respuestas (1)

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)...

ingrese la descripción de la imagen aquí

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)