> For the complete documentation index, see [llms.txt](https://es-kb.topopool.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://es-kb.topopool.com/primeros-pasos/mithril.md).

# Bootstrap con Mithril

## ¿Qué es Mithril?

Mithril es un protocolo de firmas multi-umbral basado en stake que permite generar y verificar snapshots certificados del estado de la blockchain de Cardano. En términos prácticos: en lugar de esperar días a que tu nodo sincronice desde el génesis, podés descargar un snapshot firmado criptográficamente y tener el nodo listo en menos de 20 minutos.

El snapshot es certificado por los stake pools participantes — no confiás ciegamente en un servidor central, el protocolo garantiza la integridad del estado.

{% hint style="info" %}
Mithril es especialmente útil cuando levantás un nodo nuevo, después de una reinstalación, o cuando necesitás recuperar un nodo rápidamente tras un problema grave.
{% endhint %}

***

## Descargar el cliente Mithril

El cliente de Mithril es un binario estático. Lo descargamos desde los releases oficiales:

```bash
# Verificamos la arquitectura del sistema
uname -m

# Descargamos el binario (ajustá la versión y arquitectura según corresponda)
MITHRIL_VERSION="latest"
curl -sSL https://github.com/input-output-hk/mithril/releases/latest/download/mithril-client-cli-x86_64-unknown-linux-gnu.tar.gz \
  | tar -xz -C ~/.local/bin/

# Verificamos
mithril-client --version
```

{% hint style="info" %}
Para arquitecturas ARM (por ejemplo Raspberry Pi o servidores ARM en la nube), el binario se llama `mithril-client-cli-aarch64-unknown-linux-gnu.tar.gz`.
{% endhint %}

***

## Configurar las variables de entorno

Necesitamos apuntar el cliente al agregador de mainnet y proveer la clave de verificación del génesis de Mithril. Estas variables se pueden definir en la sesión actual o agregarse al `~/.bashrc`:

```bash
# Agregador de mainnet
export AGGREGATOR_ENDPOINT="https://aggregator.release-mainnet.api.mithril.network/aggregator"

# Clave de verificación del génesis (la obtenemos directamente del repo oficial)
export GENESIS_VERIFICATION_KEY=$(curl -sS https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey)
```

{% hint style="info" %}
Para **preprod** o **preview**, los endpoints son:

* Preprod: `https://aggregator.release-preprod.api.mithril.network/aggregator`
* Preview: `https://aggregator.pre-release-preview.api.mithril.network/aggregator`

Y las claves de verificación están en la misma ruta del repo, en las carpetas `release-preprod` y `pre-release-preview` respectivamente.
{% endhint %}

***

## Detener el nodo

Antes de restaurar la base de datos, el nodo debe estar detenido:

```bash
sudo systemctl stop <NOMBRE-DEL-SERVICIO>
```

***

## Hacer backup de la base de datos actual (opcional)

Si tenés datos que querés conservar o simplemente ser precavido:

```bash
mv ~/cardano-node/db ~/cardano-node/db.bak
```

De lo contrario, borramos directamente:

```bash
rm -rf ~/cardano-node/db
```

***

## Descargar y restaurar el snapshot

Usamos el flag `--include-ancillary` para incluir el último estado del ledger y el último archivo immutable, lo que acelera significativamente el tiempo de arranque del nodo:

```bash
mithril-client cardano-database download latest \
  --include-ancillary \
  --db-directory ~/cardano-node/db
```

{% hint style="info" %}
La opción `--include-ancillary` descarga el snapshot del ledger state además de los archivos immutable. Sin esta opción el nodo tendría que reconstruir el ledger desde los bloques al arrancar, lo que puede tomar horas adicionales.

Si el comando te pide una clave de verificación adicional (`ANCILLARY_VERIFICATION_KEY`), podés obtenerla del mismo repositorio de configuración de Mithril.
{% endhint %}

La descarga puede tardar entre 10 y 30 minutos dependiendo de tu conexión. Una vez completada, el cliente verifica la integridad criptográfica del snapshot automáticamente.

***

## Reiniciar el nodo

```bash
sudo systemctl start <NOMBRE-DEL-SERVICIO>
```

Revisamos los logs para confirmar que está sincronizando correctamente:

```bash
journalctl -fu <NOMBRE-DEL-SERVICIO>
```

Deberías ver que el nodo arranca y se pone al día con los últimos bloques en cuestión de minutos en lugar de días.

***

## Verificar snapshots disponibles

Si querés ver los snapshots disponibles antes de descargar, o verificar qué se está ofreciendo en el agregador:

```bash
# Listar snapshots disponibles
mithril-client cardano-database list

# Ver detalles de un snapshot específico
mithril-client cardano-database show <DIGEST>
```
