SPO JAPAN GUILD
ステークプール構築

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.skey

2. コールドキーの作成

注意(コールドキー)

エアギャップ(オフライン)で生成・保管してください。 オンライン環境に置かないでください。

  • 重要性: プール運営の根幹となる鍵です。流出するとプールの乗っ取りにつながる可能性があります。
  • 保管: 複数の 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.skeykes.vkey をエアギャップのcnodeディレクトリにコピーします。

kes.skey / kes.vkey BP エアギャップ

BPとエアギャップでkes.vkeyファイルハッシュを比較します。

cd $NODE_HOME
sha256sum kes.vkey

BPとエアギャップで表示されたハッシュ値を比較し、一致していれば問題ありません。

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ディレクトリにコピーします。

node.cert エアギャップ BP

BPとエアギャップでnode.certファイルハッシュを比較します。

cd $NODE_HOME
sha256sum node.cert

BPとエアギャップで表示されたハッシュ値を比較し、一致していれば問題ありません。

cd $NODE_HOME
sha256sum node.cert

4. VRFキーの作成

cd $NODE_HOME
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

vrfキーを誤って削除しないようにしてください。

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}
EOF

BPを起動します。

sudo systemctl start cardano-node

BPとして起動しているか確認します。

cd $NODE_HOME/scripts
./gLiveView.sh

チェーン同期後にCoreの表示があれば問題ありません。

注意事項

BPを実行するためには、以下の3つのファイルが必要ですので、揃っているか確認してください。

このファイルが揃っていない場合や起動時に指定されていない場合はブロック生成できませんので注意してください。

  • kes.skey
  • vrf.skey
  • node.cert

Last updated on

Cookieの使用について

当サイトでは、ドキュメントの効果測定と利用状況の把握のため、Google Analytics を使用しています。

同意すると、分析用 Cookie が有効になります。