メインコンテンツまでスキップ

ブロック生成ノードのキー生成

ブロックプロデューサーノードでは、Shelley 元帳仕様で定義されている 3 つのキーを作成する必要があります。

  • ステークプールのコールドキー (node.cert)
  • ステークプールのホットキー (kes.skey)
  • ステークプール VRF キー (vrf.skey)
事前確認
cardano-cli latest query tip ${NODE_NETWORK} | grep syncProgress

以下の表示であれば同期しています。
"syncProgress": "100.00"

  1. BPにてKESキーペアを作成します。
cd $NODE_HOME
cardano-cli latest node key-gen-KES \
--verification-key-file kes.vkey \
--signing-key-file kes.skey
ヒント

KES (キー進化署名) キーは、キーを侵害する可能性のあるハッカーからステークプールを保護するために作成されます。
メインネットでは、90日ごとにKESキーを再生成する必要があります。

危険

🔥 コールドキーは、エアギャップオフラインマシンで生成して保存する必要があります。コールドキーは、$HOME/cold-keysに保存されるファイルです。

  1. エアギャップでコールドキーを保存するためのディレクトリを作成します。
mkdir -p $HOME/cold-keys
  1. コールドキーのセットを作成し、コールドカウンターファイルを作成します。
cd $HOME/cold-keys
cardano-cli latest node key-gen \
--cold-verification-key-file node.vkey \
--cold-signing-key-file $HOME/cold-keys/node.skey \
--operational-certificate-issue-counter node.counter

ファイルの権限を読取専用に変更します。

chmod 400 node.vkey
chmod 400 node.skey
警告

すべてのキーを別の安全なストレージデバイスに必ずバックアップしてください。複数のコピーを作成してください。

警告

以下を実行する前に、ノードをブロックチェーンに完全に同期する必要があります。
そうしないと、最新のKES期間を計算できません。
エポックとスロット番号が pooltoolなどのブロックエクスプローラーで見つかったものと等しい場合、ノードは同期されます。

  1. BPにてジェネシスファイルからKES期間あたりのスロット数を決定します。
cd $NODE_HOME
slots_per_kes_period=$(cat $NODE_HOME/${NODE_CONFIG}-shelley-genesis.json | jq -r '.slotsPerKESPeriod')
echo slotsPerKESPeriod: ${slots_per_kes_period}
slot_no=$(cardano-cli latest query tip ${NODE_NETWORK} | jq -r '.slot')
echo slotNo: ${slot_no}
  1. スロットチップ番号をslotsPerKESPeriodで割って、kesPeriodを見つけます。
kes_period=$((${slot_no} / ${slots_per_kes_period}))
echo kesPeriod: ${kes_period}
start_kes_period=${kes_period}
echo startKesPeriod: ${start_kes_period}
  1. この計算により、プールの運用証明書を生成できます。

エアギャップにて次のコマンドを実行します。

ファイル転送

BPのkes.skeykes.vkeyをエアギャップのcnodeディレクトリにコピーします。

ヒント

ステークプールには、プールを実行する権限があることを確認するための運用証明書が必要です。運用証明書の詳細については、「新しい運用証明書の発行」トピックを参照してください。

BPで算出したstartKesPeriodの数字を入力します。

以下のコマンド実行後に入力します。

cd $NODE_HOME
read -p "BPで算出したstartKesPeriodを入力してください:" start_kes_period

戻り値を確認

echo "入力した数字は${start_kes_period}です"
cardano-cli latest node issue-op-cert \
--kes-verification-key-file kes.vkey \
--cold-signing-key-file $HOME/cold-keys/node.skey \
--operational-certificate-issue-counter $HOME/cold-keys/node.counter \
--kes-period ${start_kes_period} \
--out-file node.cert
ファイル転送

エアギャップマシンのnode.certをBPのcnodeディレクトリにコピーします。

  1. BPにてVRFキーペアを作成します。
cardano-cli latest node key-gen-VRF \
--verification-key-file vrf.vkey \
--signing-key-file vrf.skey
  1. vrfキーの権限を読み取り専用に更新します。
chmod 400 vrf.skey
chmod 400 vrf.vkey
ファイル転送

BPのvrf.skeyvrf.vkeyをエアギャップマシンのcnodeディレクトリにコピーします。

  1. BPにて次のコマンドを実行してステークプールを停止します。
sudo systemctl stop cardano-node
  1. KESVRFOperation Certificateを使用して起動スクリプトを更新します。
port=`grep "PORT=" $NODE_HOME/startCardanoNodeBP.sh`
node_port=${port#"PORT="}
echo "BPポート : ${node_port}"
cat > $NODE_HOME/startCardanoNodeBP.sh << EOF 
#!/bin/bash
DIRECTORY=$NODE_HOME
PORT=${node_port}
HOSTADDR=0.0.0.0
TOPOLOGY=\${DIRECTORY}/${NODE_CONFIG}-topology.json
DB_PATH=\${DIRECTORY}/db
SOCKET_PATH=\${DIRECTORY}/db/socket
CONFIG=\${DIRECTORY}/${NODE_CONFIG}-config.json
KES=\${DIRECTORY}/kes.skey
VRF=\${DIRECTORY}/vrf.skey
CERT=\${DIRECTORY}/node.cert
/usr/local/bin/cardano-node run +RTS -N -RTS --topology \${TOPOLOGY} --database-path \${DB_PATH} --socket-path \${SOCKET_PATH} --host-addr \${HOSTADDR} --port \${PORT} --config \${CONFIG} --shelley-kes-key \${KES} --shelley-vrf-key \${VRF} --shelley-operational-certificate \${CERT}
EOF
ヒント

ステークプールを運用するには、KESVRFOperation Certificateが必要です。
コールドキーは、定期的に新しい運用証明書を生成します。

  1. 次に、ブロックプロデューサーノードを起動します。
sudo systemctl start cardano-node

gLiveViewで監視します。

glive

同期後Coreの表示を確認する