# KES Renewal

Before undertaking these steps the block producing node must be fully synchronised.  Otherwise, latest KES period cannot be calculated.  Please check block explorer such as <https://pooltool.io/> for latest epoch and slot number.

&#x20;Determine the number of slots per KES period from the genesis file:

```
slotsPerKESPeriod=$(cat $NODE_HOME/${NODE_CONFIG}-shelley-genesis.json | jq -r '.slotsPerKESPeriod')
echo slotsPerKESPeriod: ${slotsPerKESPeriod}
```

Find the Slot number:

```
slotNo=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')
echo slotNo: ${slotNo}
```

Find the kesPeriod by dividing the slot tip number by the slotsPerKESPeriod:

```
kesPeriod=$((${slotNo} / ${slotsPerKESPeriod}))
echo kesPeriod: ${kesPeriod}
startKesPeriod=${kesPeriod}
echo startKesPeriod: ${startKesPeriod}
```

Ensure you have kes.vkey, node.skey and node.counter in place before creating the node operational certificate:

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

{% hint style="info" %}
With new node.cert, restart your block producer node.
{% endhint %}
