Sistema de Archivos de Bitcoin Core

¿Dónde se almacenan los archivos de Bitcoin Core?

 

En muchas ocasiones nos preguntamos ¿dónde se almacena la información de Bitcoin?, ¿cómo es almacenada?, ¿podemos cambiarla?, y si podemos cambiarla, ¿qué consecuencias tendría?. Así que en este artículo vamos a hablar de ello, vamos a revisar esa estructura de archivos y directorios para resolver estasr preguntas.

 

*Nota: este artículo debe leerse en un dispositivo tipo IPad o Tablet como minímo, para que la información de la table que contiene pueda leerse adecuadamente en la pantalla

 

La estructura oficial esta registrada en el github de Bitcoin Core y siempre es recomendable verificarla ahí por si hubiera algún cambio con respecto a lo que aquí vamos a exponer, sin más preámbulos vamos a ello.

 

Dependiendo del sistema operativo, Bitcoin Core generará los directorios necesarios para su funcionamiento en la ruta de información de usuario por defecto que suelen ser:

Plataforma                     Ruta del directorio

Linux                               $HOME/.bitcoin/

macOS                            $HOME/Library/Application Support/Bitcoin/

Windows                        %APPDATA%\Bitcoin\

 

Esta ruta por defecto puede ser modificada con la opción datadir a la hora de iniciar Bitcoin Core. Esta opción le indica al software de Bitcoin Core que la ruta de los datos estará en otra dirección diferente a la de por defecto. Esta opción puede usarse tanto por línea de comandos, como incluyéndola en el archivo bitcoin.conf.

 

Otro tema a saber es que con el software de Bitcoin Core puedes trabajar en diferentes redes siendo mainnet la red principal y donde bitcoin tiene valor, el resto de redes son para realizar pruebas o aprender y el bitcoin que tienes de esas redes no tiene valor alguno.

Por lo que en el directorio se generará una ruta más dentro, salvo en el caso de mainnet, que trabaja directamente sobre la ruta datadir que tengas.

Cadena                                                            Ruta del directorio (ejemplo tomando como base linux)

-chain=main (default)                                     /mnt/My_DiscoSSD_Externo/.bitcoin/

-chain=testnet                                                 /mnt/My_DiscoSSD_Externo/.bitcoin/testnet3/

-chain=signet                                                  /mnt/My_DiscoSSD_Externo/.bitcoin/signet/

-chain=regtest                                                 /mnt/My_DiscoSSD_Externo/.bitcoin/regtest/

 

Diseño del directorio de datos de Bitcoin Core

Bitcoin Core usa una serie de archivos y una estructura de subdirectorios para su funcionamiento, los cuales como ya vimos anteriormente pueden cambiarse de ruta predeterminada pero no pueden cambiarse de nombre ya que esto afectaría el correcto funcionar del software, los veremos de manera particular para conocer que información facilitan o contienen y si es posible cambiarlos de ubicación por defecto.

 

Antes de empezar una recomendación, aunque muchos de los archivos pueden cambiarse de ubicación, no recomiendo que lo hagas sin tener claro lo que estas haciendo y además no lo recomiendo porque demasiados cambios complican la gestión y el backup de la información de tú nodo, sin embargo es interesante conocer como funciona el sistema.

 

Subdirectorio

Archivos

Descripción

blocks/  

Este directorio es el que contiene los bloques que Bitcoin ha generado, dicho de otra manera, aquí estará almacenada la cadena principal que nuestro software irá revisando y actualizando

Este directorio puede cambiarse de sitio con la opción blocksdir, blocksdir=/mnt/My_DiscoSSD_Externo/.bitcoin/ si es el archivo bitcoin.conf o

-blocksdir=/mnt/My_DiscoSSD_Externo/.bitcoin/ desde la línea de comandos

blocks/index/

LevelDB database

Este subdirectorio contiene archivos en formato LevelDB que es un tipo de Base de Datos. Esta base de datos contiene metadatos con información de los bloques y su ubicación.

Este subdirectorio no puede cambiarse de ubicación ya que va siempre como sub-subdirectorio del directorio blocks

blocks/

blkNNNNN.dat

Dentro del directorio blocks se generan 2 tipos de archivos.

Archivos blkNNNNNN.dat los cuales contienen en si los bloques, en un formato de red, y en bruto (RAW), cada archivo es de 128 MB

blocks/

revNNNNN.dat

El otro tipo de archivo que se almacena dentro del subdirectorio blocks revNNNNN.dat contienen información importante para realizar un “undo” de bloques, esto es por si fuera necesario deshacer el contenido de un bloque

chainstate/

LevelDB database

Aquí se guarda una base de datos en formato LevelDB con el estado más reciente de la cadena más grande (mejor cadena) y una representación compacta de todas las transacciones de salida no gastadas (UTXO) y los metadatos sobre las transacciones de las que proceden (UTXO Set)

indexes/txindex/

LevelDB database

Otra base de datos LevelDB, los archivos que aquí se almacenan solo se generan si el indice de transacciones esta habilitado mediante la opción txindex. txindex=1 si es el archivo bitcoin.conf o -txindex=1 desde la línea de comandos

indexes/blockfilter/basic/db/

LevelDB database

Directorio de filtros básicos

indexes/blockfilter/basic/

fltrNNNNN.dat

Archivos con los filtros básicos

Solo se generan archivos dentro de este subdirectorio si esta habilitado mediante la opción blockfilterindex. blockfilterindex=basic si es el archivo bitcoin.conf o -blockfilterindex=basic desde la línea de comandos

indexes/coinstats/db/

LevelDB database

Este es un subdirectorio que a fecha de publicación de este artículo y con la versión 0.21.1 de Bitcoin Core no esta generando información pero que ya ha sido realizado el merge de un cambio que lo hará.

¿Qué información va a contener?, contendrá una mejora a la llamada del comando RPC gettxoutsetinfo, el cual nos devuelve el supply total de bitcoin emitido y en circulación dentro de la red. El comando actualmente es muy tardado y con esta mejora se plantea reducir el tiempo de ejecución drásticamente. Más información aquí

wallets/

 

Es el subdirectorio que contiene la wallet o wallets que se generen en el nodo, ya sea wallets con claves privadas o con claves publicas (watch-only)

Se habilita mediante la opción walletdir. walletdir=1 si es el archivo bitcoin.conf o -walletdir=1 desde la línea de comandos

Importante, si el subdirectorio wallets no existe, las wallets se almacena en el directorio ./bitcoin/

./

anchors.dat

Este archivo guarda una base de datos de direcciones IP. Se crea al apagar el nodo y se borra al iniciarlo.

Se implementó para acelerar el proceso de conexión a pares de la red ya que guarda los últimos conocidos y al iniciar trata de conectar con los mismos pares

Este archivo se podría borrar y no pasaría nada, simplemente es para ayudar al proceso de conexión

./

banlist.dat

Archivo que ya no se usa, pero como muchos nodos mantienen versiones antiguas de Bitcoin Core se sigue manteniendo. Bitcoin Core lee este archivo al inicio si el nuevo archivo banlist.json no existe

Almacena direcciones de los nodos que se hayan puesto en la lista de prohibidos

./

banlist.json

Nuevo archivo que sustituye al anterior y que almacena la lista de direcciones/subredes de nodos prohibidos

./

bitcoin.conf

Este archivo es el que define la configuración que va a ser usada por el nodo.

Debe ser creado por el usuario, no es generado por el software.

Si no existiera Bitcoin Core arranca de todas formas pero usando los valores por defecto.

La ruta donde el software debe buscar este archivo puede ser modificada, para ello en el arranque de Bitcoin Core hay que pasarle el parámetro -conf=/mnt/My_DiscoSSD_Externo/.bitcoin/

./

bitcoind.pid

Este archivo almacena el ID del proceso (PID) de bitcoind o bitcoin-qt (bitcoin en entorno gráfico) mientras se mantiene en ejecución.

Se puede especificar una ruta diferente con la opción -pid /mnt/My_DiscoSSD_Externo/.bitcoin/

./

debug.log

Archivo que contiene la información de depuración (debug) de Bitcoin que se genera durante la ejecución del software.

Este archivo es de mucha utilidad para identificar posibles problemas o fallos en el nodo.

Se puede modificar la ruta donde se encuentra mediante la opción debug, debug=/mnt/My_DiscoSSD_Externo/.bitcoin/ si es el archivo bitcoin.conf o -debug /mnt/My_DiscoSSD_Externo/.bitcoin/ desde la línea de comandos

./

fee_estimates.dat

Este archivo es usado por el comando estimatesmartfee.

Almacena estadísticas utilizadas por ese comando para estimar las tarifas requeridas para la confirmación de una transacción

./

ip_asn.map

En este archivo se guarda un mapeo de direcciones IP a Números de Sistema Autónomo (ASN). Bitcoin Core lo utiliza para agrupar peers

Se puede modificar la ruta donde se encuentra mediante la opción asmap, asmap=/mnt/My_DiscoSSD_Externo/.bitcoin/ si es el archivo bitcoin.conf o -asmap /mnt/My_DiscoSSD_Externo/.bitcoin/ desde la línea de comandos

./

mempool.dat

Archivo en el que se van insertando o volcando las transacciones que son propagadas por los nodos y que no han sido confirmadas. Este archivo es donde se guarda lo que se conoce como mempool del nodo

./

onion_v3_private_key

Esta archivo contiene y almacena una cache con la Clave Privada del servicio de Tor Onion que usa Bitcoin Core, en el caso de este parámetro, Bitcoin Core usa por defecto la creación de este fichero, la opción  es listenonion.

listenonion=0 deshabilitaría el uso de este archivo, si es el archivo bitcoin.conf o -listenonion=0 desde la línea de comandos

 

./

peers.dat

Base de datos con direcciones IP de peers o pares. Bitcoin Core usa un formato personalizado para almacenar  esta información en formato hexadecimal

./

settings.json

Este archivo contiene parámetros de configuración para las interfases GUI (interfaz gráfica) o RPC, que permite  aumentar la configuración que se pueda tener dentro del archivo bitcoin.conf.

El archivo se crea automáticamente si el almacenamiento de la configuración de lectura y escritura no está deshabilitado con la opción –nosettings.

La ruta se puede especificar con la opción settings, settings=/mnt/My_DiscoSSD_Externo/.bitcoin/ si es el archivo bitcoin.conf o -settings=/mnt/My_DiscoSSD_Externo/.bitcoin/ desde la línea de comandos

 

./

.cookie

El archivo .cookie sirve como medio de autenticación para la interfaz RPC

Si se usa, se crea al inicio de ejecución del nodo y se elimina al apagarlo

Se puede especificar mediante la opción rpccookiefile

Particularmente no recomiendo usarla aún (posiblemente en futuras versiones de Bitcoin Core sea conveniente) porque es solo para la autenticación local de bitcoin-cli. Para aplicaciones externas, debe usarse rpcauth

./

.lock

Este archivo hace un bloqueo sobre el directorio para evitar borrados accidentales durante la ejecución del nodo

Llegados a este punto, espero te quede claro que archivos crea, usa y mantiene el software de Bitcoin Core.

Una ultima información, muchas veces nos preguntamos, si ya tengo descargada la cadena de Bitcoin y de hecho ya he usado Bitcoin pero quiero llevarlo a otro equipo, ¿qué archivos debería copiar?. Supongo que después de haber leído el artículo veras que la respuesta es prácticamente todos. En lo que tienes que tener cuidado es en las configuraciones que tengas, ya sea en el archivo bitcoin.conf o las que pases por comando al iniciar tú nodo, para indicarle la nueva ruta donde residirá la información.

 

Ahora, si lo que quieres es únicamente copiar la cadena, bastaría con que copies los directorios blocks, chainstate, indexes y wallets (si quieres llevar tus carteras también).

 

Bueno, espero que esta información te haya resultado interesante y de ayuda. Si es así, por favor no olvides comentarlo y/o compartir este artículo.

 

5/5

Puedes dejar una propina con el botón «Invítame un café».

O mediante Lightning network:

[email protected]

También puedes hacerlo onchain, vía Paynyms de Samourai Wallet:

PayNym: +decentralized