ブロック生成ノードのキー生成
ブロックプロデューサーノードでは、Shelley 元帳仕様で定義されている 3 つのキーを作成する必要があります。
- ステークプールのコールドキー (node.cert)
- ステークプールのホットキー (kes.skey)
- ステークプール VRF キー (vrf.skey)
cardano-cli latest query tip ${NODE_NETWORK} | grep syncProgress
以下の表示であれば同期しています。
"syncProgress": "100.00"
- BPにてKESキーペアを作成します。
- BP
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に保存されるファイルです。
- エアギャップでコールドキーを保存するためのディレクトリを作成します。
- エアギャップ
mkdir -p $HOME/cold-keys
- コールドキーのセットを作成し、コールドカウンターファイルを作成します。
- エアギャップ
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などのブロックエクスプローラーで見つかったものと等しい場合、ノードは同期されます。
- BPにてジェネシスファイルから
KES期間あたりのスロット数を決定します。
- BP
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}
- スロットチップ番号を
slotsPerKESPeriodで割って、kesPeriodを見つけます。
- BP
kes_period=$((${slot_no} / ${slots_per_kes_period}))
echo kesPeriod: ${kes_period}
start_kes_period=${kes_period}
echo startKesPeriod: ${start_kes_period}
- この計算により、プールの運用証明書を生成できます。
エアギャップにて次のコマンドを実行します。
BPのkes.skeyとkes.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ディレクトリにコピーします。
- BPにて
VRFキーペアを作成します。
- BP
cardano-cli latest node key-gen-VRF \
--verification-key-file vrf.vkey \
--signing-key-file vrf.skey
- vrfキーの権限を読み取り専用に更新します。
chmod 400 vrf.skey
chmod 400 vrf.vkey
BPのvrf.skeyとvrf.vkeyをエアギャップマシンのcnodeディレクトリにコピーします。
- BPにて次のコマンドを実行してステークプールを停止します。
- BP
sudo systemctl stop cardano-node
KES、VRF、Operation Certificateを使用して起動スクリプトを更新します。
- BP
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
ステークプールを運用するには、KES、VRF、Operation Certificateが必要です。
コールドキーは、定期的に新しい運用証明書を生成します。
- 次に、ブロックプロデューサーノードを起動します。
- BP
sudo systemctl start cardano-node
gLiveViewで監視します。
glive
同期後
Coreの表示を確認する