Keys y certificado del pool
Procedimiento para generar Cold y KES keys, y el certificado operacional del pool.
Este procedimiento solo se realiza para el nodo productor de bloques.
Es muy recomendado que toda operación que implique acceso a las cold keys, payment.addr o stake.addr se realicen en una maquina sin acceso a internet a fin de minimizar posibilidades de exponer info sensitiva de nuestro pool y/o fondos a terceros mal intencionados. Luego se copian los archivos firmados al BP o un relay online y desde ahí se les agrega a la blockchain.

KES keys (Key Evolving Signature)

Son las llaves "calientes", éstas deben ser rotadas cada 62 periodos KES, equivalente a 93 días.
1
cd ~/cardano-node/block
2
3
cardano-cli node key-gen-KES \
4
--verification-key-file BP.kes.vkey \
5
--signing-key-file BP.kes.skey
Copied!

Cold keys y cold.counter.

Son las llaves frías, éstas son inmutables. El cold.counter ira evolucionando
1
cardano-cli node key-gen \
2
--cold-verification-key-file BP.cold.vkey \
3
--cold-signing-key-file BP.cold.skey \
4
--operational-certificate-issue-counter-file BP.counter
Copied!

Certificado Operacional

Primero debemos calcular el periodo KES actual, para esto necesitamos algunos datos. Primero consultamos el tip o slotNo
1
cardano-cli query tip --mainnet | jq .slotNo
Copied!
Para que este valor sea el correcto el nodo debe estar completamente sincronizado con la red.
Consultamos la cantidad de slots por periodo KES
1
cat ~/cardano-node/block/shelley-genesis.json | jq .slotsPerKESPeriod
Copied!
Con estos dos valores podemos calcular el periodo KES actual
1
expr $(cardano-cli query tip --mainnet | jq .slotNo) \
2
/ $(cat ~/cardano-node/block/shelley-genesis.json | jq .slotsPerKESPeriod)
Copied!
Con este dato podemos finalmente generar nuestro certificado
1
cardano-cli node issue-op-cert \
2
--kes-verification-key-file BP.kes.vkey \
3
--cold-signing-key-file BP.cold.skey \
4
--operational-certificate-issue-counter BP.counter \
5
--kes-period 120 \
6
--out-file BP.node.opcert
Copied!

VRF Keys

Generamos un nuevo par de llaves VRF
1
cardano-cli node key-gen-VRF \
2
--verification-key-file BP.vrf.vkey \
3
--signing-key-file BP.vrf.skey
Copied!

Restringir permisos a los keys

Para evitar que terceros puedan tener acceso a nuestros pool keys, solo permitimos el acceso de lectura a nuestro usuario. Este punto es necesario a partir del nodo 1.21.2.
1
sudo chmod -R 400 ~/cardano-node/BP.*.skey
2
sudo chmod -R 400 ~/cardano-node/BP.*.vkey
3
sudo chmod -R 400 ~/cardano-node/BP.counter
4
sudo chmod -R 400 ~/cardano-node/BP.node.opcert
Copied!

Iniciar en modo productor de bloques (BP)

Para esto debemos iniciar cardano-node indicándole la ubicación de los archivos necesarios para que el pool pueda firmar bloques, ver TEMP y BLOCK en Archivos de Servicio:
  • kes.skey
  • vrf.skey
  • node.cert
/etc/systemd/system/BLOCK.service
1
[Unit]
2
Description=Cardano Haskell Node - BLOCK
3
After=syslog.target
4
StartLimitIntervalSec=0
5
6
[Service]
7
Type=simple
8
Restart=always
9
RestartSec=5
10
User=ubuntu
11
LimitNOFILE=131072
12
WorkingDirectory=/home/ubuntu/cardano-node/block
13
EnvironmentFile=/home/ubuntu/cardano-node/block/env
14
ExecStart=/home/ubuntu/.local/bin/cardano-node \
15
+RTS -N -RTS run \
16
--topology ${TOPOLOGY} \
17
--database-path ${DATABASE_PATH} \
18
--socket-path ${SOCKET_PATH} \
19
--host-addr ${HOST_ADDR} \
20
--port ${PORT} \
21
--config ${CONFIG} \
22
--shelley-kes-key ${SHELLEY_KES_KEY} \
23
--shelley-vrf-key ${SHELLEY_VRF_KEY} \
24
--shelley-operational-certificate ${SHELLEY_OPCERT}
25
KillSignal=SIGINT
26
StandardOutput=syslog
27
StandardError=syslog
28
SyslogIdentifier=BLOCK
29
30
[Install]
31
WantedBy=multi-user.target
Copied!
A partir de este punto se recomienda utilizar el servicio BLOCK para iniciar nuestro BP.