最終更新日:2021/4/11 0:44
このツールは海外ギルドオペレーター制作のCNCLI By AndrewWestberg、logmonitor by Guild Operators、Guild LiveView、BLOCK LOG for CNToolsを組み合わせたツールとなっております。カスタマイズするにあたり、開発者のAHLNET(AHL)にご協力頂きました。ありがとうございます。
BPノード限定
4つのサービス(プログラム)をsystemd × tmuxにて常駐させます。
ブロックチェーン同期用DBを新しく設置します(sqlite3)
日本語マニュアルのフォルダ構成に合わせて作成されています。
vrf.skey と vrf.vkeyが必要です。
オペレーティング・システム: 64-bit Linux (Ubuntu 20.04 LTS)
プロセッサー: 1.6GHz以上(ステークプールまたはリレーの場合は2Ghz以上)の2つ以上のコアを備えたIntelまたはAMD x86プロセッサー
メモリ:8GB
SSD:50GB以上
CNCLI (依存プログラム含む) (コミュニティ製Cardano CLI)
sqlite3 (データベースソフト)
logmonitor.sh (ノードログ抽出プログラム)
block.sh (ブロックログ表示ブログラム)
cncli.sh (CNCLI操作用プログラム)
cntools.config (設定ファイル)
cntools.library (ライブラリファイル)
env (設定ファイル)
gLiveView.sh (ノード監視ツール)
AndrewWestbergさんによって開発されたCNCLIはプールのブロック生成スケジュールを算出ツールを開発し、Shelley期におけるSPOに革命をもたらしました。
RUST環境を準備します
mkdir $HOME/.cargo && mkdir $HOME/.cargo/binchown -R $USER $HOME/.cargotouch $HOME/.profilechown $USER $HOME/.profile
rustupをインストールします-デフォルトのインストールを続行します(オプション1)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
1) Proceed with installation (default) 1を入力してEnter
source $HOME/.cargo/envrustup install stablerustup default stablerustup updaterustup component add clippy rustfmt
依存関係をインストールし、cncliをビルドします
source $HOME/.cargo/envsudo apt-get update -y && sudo apt-get install -y automake build-essential pkg-config libffi-dev libgmp-dev libssl-dev libtinfo-dev libsystemd-dev zlib1g-dev make g++ tmux git jq wget libncursesw5 libtool autoconfcd $HOME/gitgit clone https://github.com/AndrewWestberg/cnclicd cncligit checkout v2.0.0cargo install --path . --force
CNCLIのバージョンを確認します。
cncli --version
以下は最新版がリリースされた場合に実行してください
cncli旧バージョンからの更新手順
サービスを止める
sudo systemctl stop cnode-cncli-sync.service
sudo systemctl stop cnode-cncli-validate.servicesudo systemctl stop cnode-cncli-leaderlog.service
rustup updatecd $HOME/git/cncligit fetch --all --prunegit checkout v2.0.0cargo install --path . --forcecncli --version
sudo systemctl start cnode-cncli-sync.servicetmux a -t cncli
#cncliの更新がある場合は、以下メッセージが出ますので「y」を入力してEnterA new version is available, do you want to upgrade? (yes/no): y###同じ画面内で以下コマンドを入力しcncliを再起動cd $NODE_HOME/scripts./cncli.sh sync
cncli.shのバージョンアップ確認があれば「Yes」を選択 再度実行し、sync 100%になることを確認する。
残りのサービスを開始する
sudo systemctl start cnode-cncli-validate.servicesudo systemctl start cnode-cncli-leaderlog.service
sudo apt install sqlite3sqlite3 --version
3.31.1以上のバージョンがインストールされたらOKです。
依存関係のあるプログラムをダウンロードします。
海外のギルドオペレーターによって開発された革新的な各種ツールです。
cd $NODE_HOMEmkdir scriptscd $NODE_HOME/scriptswget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/cncli.shwget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/cntools.configwget -N https://raw.githubusercontent.com/btbf/coincashew/master/guild-tools/cntools.librarywget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/envwget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/logMonitor.shwget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/gLiveView.shwget -N https://raw.githubusercontent.com/btbf/coincashew/master/guild-tools/blocks.shwget -N https://raw.githubusercontent.com/btbf/coincashew/master/guild-tools/leaderlog_auto.sh
chmod 755 cncli.shchmod 755 logMonitor.shchmod 755 gLiveView.shchmod 755 blocks.shchmod 755 leaderlog_auto.shcd ../chmod 400 vrf.vkey
envファイルを編集します
cd scriptsnano env
ファイル内上部にある設定値を変更します。 先頭の # を外し、ご自身の環境に合わせuser_nameパスやファイル名、ポート番号を設定します。 下記以外の#がついている項目はそのままで良いです。
CCLI="/usr/local/bin/cardano-cli"CNODE_HOME=/home/<user_name>/cardano-my-nodeCNODE_PORT=6000CONFIG="${CNODE_HOME}/mainnet-config.json"SOCKET="${CNODE_HOME}/db/socket"BLOCKLOG_TZ="Asia/Tokyo"POOL_FOLDER="${CNODE_HOME}"POOL_ID_FILENAME="stakepoolid.txt"
cncli.shファイルを編集します。
nano cncli.sh
ファイル内の設定値を変更します。 先頭の # を外し、ご自身の環境に合わせてプールIDやファイル名を設定します。
POOL_ID="<Pool-ID>"POOL_VRF_SKEY="${CNODE_HOME}/vrf.skey"POOL_VRF_VKEY="${CNODE_HOME}/vrf.vkey"
cd $NODE_HOMEmkdir servicecd service
cat > $NODE_HOME/service/cnode-cncli-sync.service << EOF# file: /etc/systemd/system/cnode-cncli-sync.service[Unit]Description=Cardano Node - CNCLI syncBindsTo=cnode-cncli-sync.serviceAfter=cnode-cncli-sync.service[Service]Type=oneshotRemainAfterExit=yesRestart=on-failureRestartSec=20User=$(whoami)WorkingDirectory=$NODE_HOMEExecStart=/usr/bin/tmux new -d -s cncliExecStartPost=/usr/bin/tmux send-keys -t cncli $NODE_HOME/scripts/cncli.sh Space sync EnterExecStop=/usr/bin/tmux kill-session -t cncliKillSignal=SIGINTRestartKillSignal=SIGINTSuccessExitStatus=143StandardOutput=syslogStandardError=syslogSyslogIdentifier=cnode-cncli-syncTimeoutStopSec=5[Install]WantedBy=cnode-cncli-sync.serviceEOF
cat > $NODE_HOME/service/cnode-cncli-validate.service << EOF# file: /etc/systemd/system/cnode-cncli-validate.service[Unit]Description=Cardano Node - CNCLI validateBindsTo=cnode-cncli-validate.serviceAfter=cnode-cncli-validate.service[Service]Type=oneshotRemainAfterExit=yesRestart=on-failureRestartSec=20User=$(whoami)WorkingDirectory=$NODE_HOMEExecStart=/usr/bin/tmux new -d -s validateExecStartPost=/usr/bin/tmux send-keys -t validate $NODE_HOME/scripts/cncli.sh Space validate EnterExecStop=/usr/bin/tmux kill-session -t validateKillSignal=SIGINTRestartKillSignal=SIGINTSuccessExitStatus=143StandardOutput=syslogStandardError=syslogSyslogIdentifier=cnode-cncli-validateTimeoutStopSec=5[Install]WantedBy=cnode-cncli-validate.serviceEOF
cat > $NODE_HOME/service/cnode-cncli-leaderlog.service << EOF# file: /etc/systemd/system/cnode-cncli-leaderlog.service[Unit]Description=Cardano Node - CNCLI LeaderlogBindsTo=cnode-cncli-leaderlog.serviceAfter=cnode-cncli-leaderlog.service[Service]Type=oneshotRemainAfterExit=yesRestart=on-failureRestartSec=20User=$(whoami)WorkingDirectory=$NODE_HOMEExecStart=/usr/bin/tmux new -d -s leaderlogExecStartPost=/usr/bin/tmux send-keys -t leaderlog $NODE_HOME/scripts/cncli.sh Space leaderlog EnterExecStop=/usr/bin/tmux kill-session -t leaderlogKillSignal=SIGINTRestartKillSignal=SIGINTSuccessExitStatus=143StandardOutput=syslogStandardError=syslogSyslogIdentifier=cnode-cncli-leaderlogTimeoutStopSec=5[Install]WantedBy=cnode-cncli-leaderlog.serviceEOF
cat > $NODE_HOME/service/cnode-logmonitor.service << EOF# file: /etc/systemd/system/cnode-logmonitor.service[Unit]Description=Cardano Node - CNCLI logmonitorBindsTo=cnode-logmonitor.serviceAfter=cnode-logmonitor.service[Service]Type=oneshotRemainAfterExit=yesRestart=on-failureRestartSec=20User=$(whoami)WorkingDirectory=$NODE_HOMEExecStart=/usr/bin/tmux new -d -s logmonitorExecStartPost=/usr/bin/tmux send-keys -t logmonitor $NODE_HOME/scripts/logMonitor.sh EnterExecStop=/usr/bin/tmux kill-session -t logmonitorKillSignal=SIGINTRestartKillSignal=SIGINTSuccessExitStatus=143StandardOutput=syslogStandardError=syslogSyslogIdentifier=cnode-logmonitorTimeoutStopSec=5[Install]WantedBy=cnode-logmonitor.serviceEOF
cat > $NODE_HOME/service/autoleaderlog.service << EOF# The Cardano node service (part of systemd)# file: /etc/systemd/system/autoleaderlog.service[Unit]Description = autoleaderlog.serviceBindsTo = autoleaderlog.serviceAfter = autoleaderlog.service[Service]User = $(whoami)Type=oneshotRemainAfterExit=yesRestart=on-failureRestartSec=20WorkingDirectory= $NODE_HOMEExecStart = /usr/bin/tmux new -d -s autoleaderlogExecStartPost = /usr/bin/tmux send-keys -t autoleaderlog $NODE_HOME/scripts/leaderlog_auto.sh EnterExecStop=/usr/bin/tmux kill-session -t autoleaderlogKillSignal=SIGINTRestartKillSignal=SIGINTTimeoutStopSec=2LimitNOFILE=32768[Install]WantedBy = autoleaderlog.serviceEOF
1行づつコマンドに貼り付けてください
sudo cp $NODE_HOME/service/cnode-cncli-sync.service /etc/systemd/system/cnode-cncli-sync.servicesudo cp $NODE_HOME/service/cnode-cncli-validate.service /etc/systemd/system/cnode-cncli-validate.servicesudo cp $NODE_HOME/service/cnode-cncli-leaderlog.service /etc/systemd/system/cnode-cncli-leaderlog.servicesudo cp $NODE_HOME/service/cnode-logmonitor.service /etc/systemd/system/cnode-logmonitor.servicesudo cp $NODE_HOME/service/autoleaderlog.service /etc/systemd/system/autoleaderlog.service
sudo chmod 644 /etc/systemd/system/cnode-cncli-sync.servicesudo chmod 644 /etc/systemd/system/cnode-cncli-validate.servicesudo chmod 644 /etc/systemd/system/cnode-cncli-leaderlog.servicesudo chmod 644 /etc/systemd/system/cnode-logmonitor.servicesudo chmod 644 /etc/systemd/system/autoleaderlog.service
sudo systemctl daemon-reloadsudo systemctl enable cnode-cncli-sync.servicesudo systemctl enable cnode-cncli-validate.servicesudo systemctl enable cnode-cncli-leaderlog.servicesudo systemctl enable cnode-logmonitor.servicesudo systemctl enable autoleaderlog
cd $NODE_HOMEnano mainnet-config.json
defaultScribesを下記のように書き換える
"defaultScribes": [["FileSK","logs/node.json"],["StdoutSK","stdout"]],
setupScribesを下記のように書き換える
"setupScribes": [{"scFormat": "ScJson","scKind": "FileSK","scName": "logs/node.json"},{"scFormat": "ScText","scKind": "StdoutSK","scName": "stdout","scRotation": null}]
Ctrl+Oでファイルを保存し、Ctrl+Xで閉じる
ノードを再起動する
sudo systemctl reload-or-restart cardano-node
cncli-syncサービスを開始し、ログ画面を表示します
sudo systemctl start cnode-cncli-sync.servicetmux a -t cncli
「100.00% synced」になるまで待ちます。 100%になったら、Ctrl+bを押した後に d を押し元の画面に戻ります(バックグラウンド実行に切り替え)
cd $NODE_HOME/scripts./cncli.sh init
1行づつコマンドに貼り付けてください
sudo systemctl start cnode-cncli-validate.servicesudo systemctl start cnode-cncli-leaderlog.servicesudo systemctl start cnode-logmonitor.servicesudo systemctl start autoleaderlog
tmux起動確認
tmux ls
5つの画面がバックグラウンドで起動中であればOKです
cnode
cncli
leaderlog
logmonitor
validate
autoleaderlog
sudo systemctl stop cnode-cncli-sync.servicesudo systemctl stop cnode-cncli-validate.servicesudo systemctl stop cnode-cncli-leaderlog.servicesudo systemctl stop cnode-logmonitor.servicesudo systemctl stop autoleaderlog.service
sudo systemctl reload-or-restart cnode-cncli-sync.servicesudo systemctl reload-or-restart cnode-cncli-validate.servicesudo systemctl reload-or-restart cnode-cncli-leaderlog.servicesudo systemctl reload-or-restart cnode-logmonitor.servicesudo systemctl reload-or-restart autoleaderlog.service
こちらのプログラムは生成したブロックが、ブロックチェーン上に記録されているか照合するためのプログラムです
tmux a -t validate
以下表示なら正常です。
~ CNCLI Block Validation started ~
Ctrl+bを押した後すぐにd でバックグラウンド実行に切り替えます(デタッチ)
こちらのプログラムはスロットリーダーを自動的に算出するプログラムです。 次エポックの1.5日前になると自動的に次エポックのスロットリーダーが算出されます。
tmux a -t leaderlog
以下の表示なら正常です。 スケジュール予定がある場合、表示されるまでに5分ほどかかります。
~ CNCLI Leaderlog started ~
Ctrl+bを押した後すぐにd でバックグラウンド実行に切り替えます(デタッチ)
こちらのプログラムはプールのノードログからブロック生成結果を抽出します。
tmux a -t logmonitor
以下の表示なら正常です。
~~ LOG MONITOR STARTED ~~monitoring logs/node.json for traces
Ctrl+bを押した後すぐにd でバックグラウンド実行に切り替えます(デタッチ)
こちらのプログラムは320000slotを迎えたら自動的にleaderlogを実行する
tmux a -t autoleaderlog
スロットが320000以前なら「スケジュール未実行」 スロットが320000移行なら「スケジュール実行済み」 となればOK
Ctrl+bを押した後すぐにd でバックグラウンド実行に切り替えます(デタッチ)
このツールでは上記で設定してきたプログラムを組み合わせ、割り当てられたスロットリーダーに対してのブロック生成結果をデータベースに格納し、確認することができます。
cd $NODE_HOME/scripts./blocks.sh
ブロックステータス:
Leader - ブロック生成予定スロット
Ideal - アクティブステーク(シグマ)に基づいて割り当てられたブロック数の期待値/理想値
Luck - 期待値における実際に割り当てられたスロットリーダー数のパーセンテージ
Adopted - ブロック生成成功
Confirmed - 生成したブロックのうち確実にオンチェーンであることが検証されたブロック set in 'cncli.sh' for 'CONFIRM_BLOCK_CNT'
Missed - スロットでスケジュールされているが、 cncli DB には記録されておらず他のプールがこのスロットのためにブロックを作った可能性
Ghosted - ブロックは作成されましたが「Orpah(孤立ブロック)」となっております。 スロットバトル・ハイトバトルで敗北したか、ブロック伝播の問題で有効なブロックになっていません
Stolen - 別のプールに有効なブロックが登録されているため、IOHK OBFT NODEによってブロックが生成された可能性
Invalid - プールはブロックの作成に失敗しました。base64でエンコードされたエラーメッセージ。次のコードでデコードできます 'echo | base64 -d | jq -r'
メニュー項目が文字化けする場合は、システム文字コードが「UTF-8」であることを確認してください。
echo $LANG
cd $NODE_HOME/scripts./gLiveView.sh
スクリプトへのパスを通し、任意の単語で起動出来るようにする。
echo alias blocks="$NODE_HOME/scripts/blocks.sh" >> $HOME/.bashrcecho alias glive="$NODE_HOME/scripts/gLiveView.sh" >> $HOME/.bashrcsource $HOME/.bashrc
単語を入力するだけで、どこからでも起動できます。 blocks・・・blocks.sh glive・・・gLiveView.sh
sudo systemctl stop cnode-cncli-sync.service#[パスワードを入力する]sudo systemctl stop cnode-cncli-validate.servicesudo systemctl stop cnode-cncli-leaderlog.servicesudo systemctl stop cnode-logmonitor.service
cd $NODE_HOME/scriptswget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/cncli.shwget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/cntools.configwget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/cntools.librarywget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/envwget -N https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/logMonitor.shwget -N https://raw.githubusercontent.com/btbf/coincashew/master/guild-tools/blocks.sh
envファイルを編集します
cd scriptsnano env
ファイル内上部にある設定値を変更します。 先頭の # を外し、ご自身の環境に合わせuser_nameパスやファイル名、ポート番号を設定します。 下記以外の#がついている項目はそのままで良いです。
CCLI="/usr/local/bin/cardano-cli"CNODE_HOME=/home/<user_name>/cardano-my-nodeCNODE_PORT=6000CONFIG="${CNODE_HOME}/mainnet-config.json"SOCKET="${CNODE_HOME}/db/socket"BLOCKLOG_TZ="Asia/Tokyo"POOL_FOLDER="${CNODE_HOME}"POOL_ID_FILENAME="stakepoolid.txt"
cncli.shファイルを編集します。
nano cncli.sh
ファイル内の設定値を変更します。 先頭の # を外し、ご自身の環境に合わせてプールIDやファイル名を設定します。
POOL_ID="<Pool-ID>"POOL_VRF_SKEY="${CNODE_HOME}/vrf.skey"POOL_VRF_VKEY="${CNODE_HOME}/vrf.vkey"
sudo systemctl start cnode-cncli-sync.servicesudo systemctl start cnode-cncli-validate.servicesudo systemctl start cnode-cncli-leaderlog.servicesudo systemctl start cnode-logmonitor.service
cd $NODE_HOME/scripts./blocks.sh
3プログラムのログ画面も合わせてご確認ください。