コンテンツにスキップ

4.BPのセットアップ

事前確認

以下の項目を実施する前にBPノードが起動しているか確認してください。

journalctl --unit=cardano-node --follow
ログが流れていればノードが起動しています。 コマンド入力に戻る場合は「Ctrl+C」(この場合ノードは終了しません)

BP起動に必要なファイルとは?

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

  • ステークプールの運用証明書 (node.cert)
  • ステークプールのセキュリティキー (kes.skey)
  • ステークプールのVRFキー (vrf.skey)

1.KESキーの作成

KESキーについて

(KES=Key Evolving Signature)の略
キーを悪用するハッカーからステークプールを保護するために作成され、90日ごとに再生成する必要があります。詳細は運用マニュアルを参照してください

cd $NODE_HOME
cardano-cli node key-gen-KES \
    --verification-key-file kes.vkey \
    --signing-key-file kes.skey

2.コールドキーの作成

コールドキーを格納するディレクトリを作成します。

mkdir $HOME/cold-keys
pushd $HOME/cold-keys

コールドキーのペアキーとカウンターファイルを作成します。

cardano-cli 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

コールドキーはエアギャップオフラインマシンで生成し保管する必要があります
外部に流出するとプールが乗っ取られる可能性がありますので管理には十分注意してください
コールドキーは次のパスに格納されます $HOME/cold-keys

重要

すべてのキーを別の安全なストレージデバイス(USB)などにバックアップしましょう!複数のバックアップを作成することをおすすめします。

3.プール運用証明書の作成

事前確認

ブロックチェーンと完全に同期している必要があります。 同期が途中の場合、正しいslotsPerKESPeriodを取得できません。 あなたのBPノードが完全に同期されたことを確認するには、カルダノエクスプローラーで自身の同期済みエポックとスロットが一致しているかをご確認ください。

ジェネシスファイルからslotsPerKESPeriodを出力します。

cd $NODE_HOME
slotsPerKESPeriod=$(cat $NODE_HOME/${NODE_CONFIG}-shelley-genesis.json | jq -r '.slotsPerKESPeriod')
echo slotsPerKESPeriod: ${slotsPerKESPeriod}
同期済みslotNoを算出します。
slotNo=$(cardano-cli 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ディレクトリにコピーします。

graph LR
    A[BP] -->|kes.skey / kes.vkey| B[エアギャップ];

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

cd $NODE_HOME
sha256sum kes.vkey

BPとエアギャップで表示された戻り値を比較して、ハッシュ値が一致していればOK

cd $NODE_HOME
sha256sum kes.vkey

確認

ステークプールオペレータは、プールを実行する権限があることを確認するための運用証明書を発行する必要があります。証明書には、オペレータの署名が含まれプールに関する情報(アドレス、キーなど)が含まれます。

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

↑このままコマンドに入力してください
コマンド実行後に、数字入力モードになりますので
そこでBPで算出したstartKesPeriodの数字を入力します

入力した数字が戻り値に表示されているか確認し証明書を作成する

echo "入力した数字は$kesです"

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

graph LR
    A[エアギャップ] -->|node.cert| B[BP];

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

cd $NODE_HOME
sha256sum node.cert

BPとエアギャップで表示された戻り値を比較して、ハッシュ値が一致していればOK

cd $NODE_HOME
sha256sum node.cert

4.VRFキーの作成

cd $NODE_HOME
cardano-cli 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
SNAPSHOT=43200
KES=\${DIRECTORY}/kes.skey
VRF=\${DIRECTORY}/vrf.skey
CERT=\${DIRECTORY}/node.cert
/usr/local/bin/cardano-node +RTS -N --disable-delayed-os-memory-return -I0.1 -Iw300 -A32m -n4m -F1.5 -H2500M -T -S -RTS run --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} --snapshot-interval \${SNAPSHOT}
EOF

BPを起動します。

sudo systemctl start cardano-node

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

cd $NODE_HOME/scripts
./gLiveView.sh

Coreの表示があればOK

注意事項

ブロックプロデューサーノードを実行するためには、以下の3つのファイルが必要です。このファイルが揃っていない場合や起動時に指定されていない場合はブロックが生成できません。

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