> 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/mantenimiento-del-pool/renovar-kes.md).

# Renovar KES keys

Las claves KES (Key Evolving Signature) tienen una vida útil limitada. En mainnet duran aproximadamente **62 días**. Si expiran sin que las renueves, tu block producer deja de firmar bloques.

{% hint style="warning" %}
Todo lo que involucre claves frías debe hacerse en la máquina air-gapped, sin conexión a internet. Nunca muevas las cold keys a un equipo conectado.
{% endhint %}

***

## Verificar cuándo vencen tus KES

Antes de ponerte a renovar, verifica cuántos períodos te quedan:

```bash
cardano-cli query kes-period-info \
  --mainnet \
  --op-cert-file $HOME/pool-keys/node.cert
```

La salida te muestra el período actual, el período en que emitiste el certificado y cuántos períodos de KES quedan disponibles. Cuando veas que te quedan menos de 10, es momento de renovar.

{% hint style="info" %}
Pon un recordatorio en el calendario **dos semanas antes** de la fecha de vencimiento. No esperes al último momento.
{% endhint %}

***

## Obtener el período KES actual

En el block producer, calcula el período:

```bash
expr $(cardano-cli query tip --mainnet | jq .slot) / $(cat $HOME/cardano/relay/config/shelley-genesis.json | jq .slotsPerKESPeriod)
```

El resultado es un número entero como `4385`. Ese es el `--kes-period` que usarás al generar el nuevo certificado.

***

## Generar las nuevas claves KES

En el **block producer**:

```bash
cardano-cli node key-gen-KES \
  --verification-key-file $HOME/pool-keys/kes.vkey \
  --signing-key-file      $HOME/pool-keys/kes.skey
```

Copia `kes.vkey` a la máquina air-gapped para emitir el nuevo certificado operacional.

***

## Generar el nuevo certificado operacional

En la **máquina air-gapped**, con las cold keys accesibles:

```bash
cardano-cli node issue-op-cert \
  --kes-verification-key-file      $HOME/pool-keys/kes.vkey \
  --cold-signing-key-file          $HOME/cold-keys/node.skey \
  --operational-certificate-issue-counter-file $HOME/cold-keys/cold.counter \
  --kes-period                     <KES_PERIOD_ACTUAL> \
  --out-file                       $HOME/pool-keys/node.cert
```

Esto incrementa el `cold.counter`. Guarda el contador actualizado.

{% hint style="danger" %}
Nunca copies las cold keys (`node.skey`) al block producer ni a ningún equipo conectado a internet.
{% endhint %}

***

## Copiar los archivos al block producer

Transfiere de vuelta al block producer:

* `kes.skey` (las nuevas claves KES)
* `node.cert` (el nuevo certificado)

***

## Reiniciar el servicio y verificar

```bash
sudo systemctl restart BP
```

Revisa los logs para confirmar que el nodo arrancó con el nuevo certificado:

```bash
journalctl -fu BP
```

Confirma el estado del nuevo certificado:

```bash
cardano-cli query kes-period-info \
  --mainnet \
  --op-cert-file $HOME/pool-keys/node.cert
```

***

## Resumen del proceso

```
Verificar períodos restantes con kes-period-info
           ↓
Calcular KES period actual (slot / slotsPerKESPeriod)
           ↓
Generar nuevas kes.skey + kes.vkey en el nodo caliente
           ↓
Copiar kes.vkey al air-gapped
           ↓
Emitir nuevo node.cert con cold key (air-gapped)
           ↓
Copiar kes.skey + node.cert al block producer
           ↓
sudo systemctl restart BP
           ↓
Verificar con journalctl y kes-period-info
```
