Links
Comment on page

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.
cd ~/cardano-node/block
cardano-cli node key-gen-KES \
--verification-key-file BP.kes.vkey \
--signing-key-file BP.kes.skey

Cold keys y cold.counter.

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

Certificado Operacional

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

VRF Keys

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

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.
sudo chmod -R 400 ~/cardano-node/BP.*.skey
sudo chmod -R 400 ~/cardano-node/BP.*.vkey
sudo chmod -R 400 ~/cardano-node/BP.counter
sudo chmod -R 400 ~/cardano-node/BP.node.opcert

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
[Unit]
Description=Cardano Haskell Node - BLOCK
After=syslog.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=5
User=ubuntu
LimitNOFILE=131072
WorkingDirectory=/home/ubuntu/cardano-node/block
EnvironmentFile=/home/ubuntu/cardano-node/block/env
ExecStart=/home/ubuntu/.local/bin/cardano-node \
+RTS -N -RTS run \
--topology ${TOPOLOGY} \
--database-path ${DATABASE_PATH} \
--socket-path ${SOCKET_PATH} \
--host-addr ${HOST_ADDR} \
--port ${PORT} \
--config ${CONFIG} \
--shelley-kes-key ${SHELLEY_KES_KEY} \
--shelley-vrf-key ${SHELLEY_VRF_KEY} \
--shelley-operational-certificate ${SHELLEY_OPCERT}
KillSignal=SIGINT
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=BLOCK
[Install]
WantedBy=multi-user.target
A partir de este punto se recomienda utilizar el servicio BLOCK para iniciar nuestro BP.