Estructura de directorios de Bitcoin Core

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.

  • Nota1: Te recomiendo leer este artículo en un dispositivo tipo desktop, idealmente, o uno tipo iPad o Tablet como mínimo, para que la información de la tabla que contiene pueda leerse adecuadamente en la pantalla.

  • Nota2: Dado que Bitcoin Knots es un fork de Bitcoin Core, la estructura de archivos de Knots es prácticamente la misma que Bitcoin Core, y los parámetros también, aunque Bitcoin Knots mantiene e implementa algunos más, no es menester de este artículo centrarnos en las diferencias, sino saber que ambos son similares y, por lo tanto, la información en cuanto a la estructura de directorios es totalmente reaprovechable para uno u otro cliente.

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=testnet4                                               /mnt/My_DiscoSSD_Externo/.bitcoin/testnet4/

-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 directorio contiene la información que permite a la red saber el estado de todas las monedas (de todos los UTXO), y facilita al comando RPC gettxoutsetinfo, información sobre cuántos UTXO existen, de que importes y cuál es su estado.

Se activa usando el parámetro: coinstatsindex=1

Más información aquí

wallets/

 

Es el subdirectorio que especifica el directorio donde Bitcoin Core y Bitcoin Knots almacenarán los archivos de billetera (como wallet.dat y las bases de datos de billeteras multi-billetera). Esto te da flexibilidad para ubicar tus billeteras en una ubicación diferente a la predeterminada.

El parámetro acepta:

  • Rutas absolutas (ejemplos):

    • Linux/macOS: walletdir=/media/usuario/billeteras-bitcoin
    • Windows: walletdir=C:\Bitcoin\wallets
  • Rutas relativas: Se prefijan automáticamente con el directorio de datos (datadir)

    • Ejemplo: walletdir=billeteras (se resolvería como /home/usuario/.bitcoin/billeteras)
  • Si no se especifica: El valor por defecto es una subcarpeta llamada wallets dentro del directorio de datos predeterminado

./

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 debuglogfile. Ejemplo: debuglogfile=/mnt/My_DiscoSSD_Externo/.bitcoin/logs/ si es en el archivo bitcoin.conf o -debuglogfile /mnt/My_DiscoSSD_Externo/.bitcoin/logs/ 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

La opción persistmempool= dentro del archivo bitcoin.conf controla si el nodo guarda el mempool en disco al apagarse y lo vuelve a cargar al reiniciar.

Valores permitidos

  • persistmempool=1 (por defecto): Guarda y restaura el mempool entre reinicios
  • persistmempool=0: Desactiva esta función, el mempool se limpia en cada arranque

Cómo funciona

  • Habilitado: Al apagar el nodo, las transacciones pendientes se escriben en disco; al iniciar, se recargan, evitando tener que volver a recibirlas de otros nodos
  • Deshabilitado: El mempool comienza vacío en cada inicio, lo que puede aumentar el tiempo de sincronización inicial pero ahorra espacio en disco

./

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.

Valorado con 5 de 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