BP用キー生成
事前確認
同期が 100% になってから以降の手順を実施してください。
cardano-cli latest query tip ${NODE_NETWORK} | grep syncProgress"syncProgress": "100.00"BP起動に必要なファイルとは?
BPでは3つのキーを生成する必要があります。
- ステークプールの運用証明書 (node.cert)
- ステークプールのセキュリティキー (kes.skey)
- ステークプールのVRFキー (vrf.skey)
1. KESキーの作成
KESキーについて
(KES=Key Evolving Signature)の略
キーを悪用するハッカーからステークプールを保護するために作成され、90日ごとに再生成する必要があります。
詳細は運用マニュアルを参照してください。
cd $NODE_HOME
cardano-cli latest node key-gen-KES \
--verification-key-file kes.vkey \
--signing-key-file kes.skey2. コールドキーの作成
注意(コールドキー)
エアギャップ(オフライン)で生成・保管してください。 オンライン環境に置かないでください。
- 重要性: プール運営の根幹となる鍵です。流出するとプールの乗っ取りにつながる可能性があります。
- 保管: 複数の USB などに複製し、上書き・削除しないよう注意してください。
- 保存場所の例:
$HOME/cold-keys
mkdir $HOME/cold-keysコールドキーのペアキーとカウンターファイルを作成します。
cd $HOME/cold-keys
cardano-cli latest node key-gen \
--cold-verification-key-file node.vkey \
--cold-signing-key-file node.skey \
--operational-certificate-issue-counter node.counterアクセス権を読み取り専用に更新します。
chmod 400 node.vkey
chmod 400 node.skey重要
すべてのキーを、USB などの専用かつ本体から切り離した安全な媒体へバックアップし、複数のコピーを作成してください。
3. プール運用証明書の作成
ジェネシスファイルからslotsPerKESPeriodを出力します。
cd $NODE_HOME
slotsPerKESPeriod=$(cat $NODE_HOME/${NODE_CONFIG}-shelley-genesis.json | jq -r '.slotsPerKESPeriod')
echo slotsPerKESPeriod: ${slotsPerKESPeriod}同期済みslotNoを算出します。
slotNo=$(cardano-cli latest query tip $NODE_NETWORK | jq -r '.slot')
echo slotNo: ${slotNo}startKesPeriodを算出します。
kesPeriod=$((${slotNo} / ${slotsPerKESPeriod}))
echo kesPeriod: ${kesPeriod}
startKesPeriod=${kesPeriod}
echo startKesPeriod: ${startKesPeriod}ファイル転送
BPのkes.skeyとkes.vkey をエアギャップのcnodeディレクトリにコピーします。
BPとエアギャップでkes.vkeyファイルハッシュを比較します。
cd $NODE_HOME
sha256sum kes.vkeyBPとエアギャップで表示されたハッシュ値を比較し、一致していれば問題ありません。
cd $NODE_HOME
sha256sum kes.vkey確認
ステークプールオペレータは、プールを実行する権限があることを確認するための運用証明書を発行する必要があります。
証明書には、オペレータの署名が含まれプールに関する情報(アドレス、キーなど)が含まれます。
cd $NODE_HOME
read -p "BPで算出したstartKesPeriodを入力してください:" kesこのままコマンドに入力してください。
コマンド実行後に、数字入力モードになりますので、BPで算出したstartKesPeriodの数字を入力します。
入力した数字が戻り値に表示されているか確認したら証明書を作成します。
echo "入力した数字は $kes です"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 $kes \
--out-file node.certファイル転送
エアギャップのnode.cert をBPのcnodeディレクトリにコピーします。
BPとエアギャップでnode.certファイルハッシュを比較します。
cd $NODE_HOME
sha256sum node.certBPとエアギャップで表示されたハッシュ値を比較し、一致していれば問題ありません。
cd $NODE_HOME
sha256sum node.cert4. VRFキーの作成
cd $NODE_HOME
cardano-cli latest node key-gen-VRF \
--verification-key-file vrf.vkey \
--signing-key-file vrf.skeyvrfキーのアクセス権を読み取り専用に更新します。
chmod 400 vrf.skey
chmod 400 vrf.vkeyvrfキーを誤って削除しないようにしてください。
5. BPノードとして再起動
BPノードを停止します。
sudo systemctl stop cardano-nodeノードポート番号を確認します。
PORT=`grep "PORT=" $NODE_HOME/startBlockProducingNode.sh`
b_PORT=${PORT#"PORT="}
echo "BPポートは ${b_PORT} です"BPのポート番号が表示されることを確認します。
起動スクリプトにKES、VRF、運用証明書のパスを追記し、更新します。
cat > $NODE_HOME/startBlockProducingNode.sh << EOF
#!/bin/bash
DIRECTORY=$NODE_HOME
PORT=${b_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 --disable-delayed-os-memory-return -I0.1 -Iw300 -A32m -n4m -F1.5 -H2500M -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}
EOFBPを起動します。
sudo systemctl start cardano-nodeBPとして起動しているか確認します。
cd $NODE_HOME/scripts
./gLiveView.shチェーン同期後に
Coreの表示があれば問題ありません。
注意事項
BPを実行するためには、以下の3つのファイルが必要ですので、揃っているか確認してください。
このファイルが揃っていない場合や起動時に指定されていない場合はブロック生成できませんので注意してください。
kes.skeyvrf.skeynode.cert
Last updated on