Midnight-node用サーバ構築¶
本ドキュメントは、Midnightバリデーターサーバで行うMidnight-node用サーバ構築とSPOバリデータ登録の手順です。
事前準備¶
ローカル環境での事前準備
SSH接続でログインする場合は、事前にローカル環境でSSH認証キーを作成してください。
1. 管理者モードでターミナルを起動します。
Win + X を押下し、ターミナル(管理者)を選択し、SSHクライアントの有無を確認します。
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'
State : Installedであれば問題ありません。
State : NotPresentの場合
以下のコマンドで追加してください。
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
2. SSH鍵生成
mkdir ~/.ssh -Force
ssh-keygen -t ed25519 -N "" -C "ssh_connect" -f ~/.ssh/ssh_ed25519
3. 公開鍵ファイル名の変更
cd ~/.ssh
mv ssh_ed25519.pub authorized_keys
1. ターミナルを起動します。
⌘ + Space(Command + Space)を押下し、「terminal」と入力し、Enterを押下します。
2. SSH鍵生成
mkdir -p ~/.ssh
ssh-keygen -t ed25519 -N "" -C "ssh_connect" -f ~/.ssh/ssh_ed25519
3. 公開鍵ファイル名の変更
cd ~/.ssh
mv ssh_ed25519.pub authorized_keys
注意
以下の鍵は絶対に紛失しないでください。
紛失するとサーバーへ接続できなくなります。
ssh_ed25519 (秘密鍵)
authorized_keys (公開鍵)
サーバーでの事前準備
日常運用ではrootアカウントを使用せず、sudo権限を付与した一般ユーザーで操作します。
新しいユーザーを作成します。
任意のアルファベット文字を入力してください。
この例ではcardanoユーザーとして以降進めます。
adduser cardano
New password: # パスワードを設定
Retype new password: # 確認のため再入力
Enter the new value, or press ENTER for the default
Full Name []: # フルネーム等の情報を設定(不要であればブランクでも問題ありません)
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] : y
cardanoにsudo権限を付与します。
usermod -aG sudo cardano
rootからログアウトします。
exit
ヒント
ターミナルソフトのユーザー名とパスワードを上記で作成したユーザー名とパスワードに書き換えて再接続します。
1. SPOKIT導入設定¶
1-1. 初期設定¶
パスワード入力について
管理者権限パスワードを求められた場合は、ユーザー作成時に設定したパスワードを入力してください。
SPOKITを導入しUbuntuセキュリティ設定のみを行います。
wget -qO- https://spokit.spojapanguild.net/install.sh | bash
セットアップノードタイプ(リレー)を選択して Enter

接続ネットワーク (Preview-Testnet) を選択して Enter

作業ディレクトリパス指定 そのまま Enter

セットアップ内容に問題なければ Enter

環境設定読み込み
赤枠に表示されているコマンドをコピーして実行

1-2. Ubuntuセキュリティ設定¶
Ubuntuセキュリティ設定モードについて
このモードでは、Cardanoノード実行に推奨されるUbuntuセキュリティ設定が含まれています。
4~9については選択制となっておりますので、環境に応じて設定してください。
spokit ubuntu
Ubuntuセキュリティ設定ウィザート
1~4は自動インストール・有効化されます。
はい を選択して Enter

chronyインストール・設定
システム時刻を正確かつ安定して同期するための時刻同期デーモンです。
はい を選択して Enter

SSH設定
リモートサーバを安全に操作・管理するための通信プロトコル
SSH鍵認証用のauthorized_keysファイルをローカルからサーバーに転送する写真を追加し、差し替え予定
はい を選択して Enter

rootログイン可否設定

SSHポート設定
セキュリティを高めるためにはポート番号を変更してください

ランダムな番号を割り当てるかカスタムで任意の番号を指定してください

Ubuntu内部ファイアウォールを使用する場合は、はい を選択して Enter

↓ここの注意事項をよく読んでください

不要なディレクトリを削除する
rm -rf $HOME/cnode
2. midnight-nodeインストール¶
2-1. 環境変数設定¶
設定
grep -q '^export MIDNIGHT_NETWORK=' "$HOME/.bashrc" || printf '\nexport MIDNIGHT_NETWORK=testnet-02\n' >> "$HOME/.bashrc"
source "$HOME/.bashrc"
2-2. midnight-nodeダウンロード¶
mkdir -p $HOME/midnight
cd $HOME/midnight
wget -q --show-progress https://spojapanguild.net/node_config/midnight/${MIDNIGHT_NETWORK}/midnight-node0.12.0.gz
midnight-node解凍
gunzip -c midnight-node0.12.0.gz > midnight-node && rm midnight-node0.12.0.gz
chmod +x midnight-node
sudo cp midnight-node /usr/local/bin/midnight-node
バージョン確認
midnight-node --version
midnight-node 0.12.0
設定ファイルダウンロード
cd $HOME/midnight
wget -q --show-progress https://spojapanguild.net/node_config/midnight/${MIDNIGHT_NETWORK}/pc-chain-config.json -O ${MIDNIGHT_NETWORK}-pc-chain-config.json
wget -q --show-progress https://spojapanguild.net/node_config/midnight/${MIDNIGHT_NETWORK}/chain-spec.json -O ${MIDNIGHT_NETWORK}-chain-spec.json
wget -q --show-progress https://spojapanguild.net/node_config/midnight/${MIDNIGHT_NETWORK}/addresses.json -O ${MIDNIGHT_NETWORK}-addresses.json
ファイル転送
以下のファイルをエアギャップの$HOME/midnightディレクトリにコピーします。
graph LR
A[Preview テストネット] -->|**midnight-node**| B[エアギャップ];
grep -q '^export MIDNIGHT_NETWORK=' "$HOME/.bashrc" || printf '\nexport MIDNIGHT_NETWORK=testnet-02\n' >> "$HOME/.bashrc"
source "$HOME/.bashrc"
mkdir -p $HOME/midnight
cd $HOME/midnight
chmod +x midnight-node
sudo cp midnight-node /usr/local/bin/midnight-node
midnight-node --version
midnight-node 0.12.0
3.パートナーチェーンキー生成¶
cd $HOME/midnight
CFG_PRESET=${MIDNIGHT_NETWORK} midnight-node wizards generate-keys
This 🧙 wizard will generate the following keys and save them to your node's keystore:
→ an ECDSA Cross-chain key
→ an ED25519 Grandpa key
→ an SR25519 Aura key
It will also generate a network key for your node if needed.
? node base path (./data) ←ここでEnter
$HOME/midnight配下に./dataが作成されます
data/
└── chains
└── undeployed
├── keystore
│ ├── 6175728281... # sidechain key
│ ├── 63726367cd... # aura key
│ └── 677a322ca6... # grandpa key
└── network
└── secret_ed25519 # network (node) key
キーフォルダ名変更
mv ./data/chains/undeployed/ ./data/chains/partner_chains_template
4. バリデーター登録¶
4-1. エンタープライズアドレス作成¶
cd $NODE_HOME
cardano-cli conway address build \
$NODE_NETWORK \
--payment-verification-key-file payment.vkey \
--out-file $HOME/midnight/midnight-payment.addr
ファイル転送
エアギャップから以下をサーバーの$HOME/midnightにコピーします。
datamidnight-payment.addr-
partner-chains-public-keys.json$HOME/midnight/
-
payment.skey$NODE_HOME
tADA FaucetからtADAを以下のエンタープライズアドレスに送金します。
cd $HOME/midnight
echo $(cat midnight-payment.addr)
入金を確認します。
cardano-cli conway query utxo \
--address $(cat $HOME/midnight/midnight-payment.addr) \
$NODE_NETWORK \
--output-text
TxHash TxIx Amount
--------------------------------------------------------------------------------------
731a0f97f31aacdd10b7345065bf05a79194a72184c4a3a7d922913da4554714 0 10000000000 lovelace + TxOutDatumNone
$HOME/cold-keysディレクトリのロック解除
chmod u+rwx $HOME/cold-keys
ヒント
3つの登録ウィザードが表示されますのでそれぞれ入力します。
4-2. 登録ウィザード1¶
cd $HOME/midnight
CFG_PRESET=${MIDNIGHT_NETWORK} midnight-node wizards register1
Ogmios protocolでは、 https を選択して Enter
http
> https
Ogmios hostnameでは、以下のエンドポイントを入力して Enter
ogmios.${MIDNIGHT_NETWORK}.midnight.network
Ogmios portでは、 443 を入力して Enter
443
payment.vkeyのPATHを入力して Enter
$NODE_HOME/payment.vkey
UTxOの選択ではそのまま Enter

戻り値(register2コマンド)をすべて Copy します。

4-3. 登録ウィザード2¶
コピーしたコマンドを貼り付けて Enter

node.skeyのPATHを入力して Enter
$HOME/cold-keys/node.skey
戻り値(register3コマンド)をすべて Copy します。

4-4. 登録ウィザード3¶
コピーしたコマンドを貼り付けて Enter

payment.skeyのPATHを入力して Enter
$NODE_HOME/payment.skey
Ogmios protocolでは https を選択して Enter
http
> https
Ogmios hostnameでは以下のエンドポイントを入力して Enter
ogmios.${MIDNIGHT_NETWORK}.midnight.network
Ogmios portでは 443 を入力して Enter
443
Show registration status?(Y/n)が表示されたら n を入力後 Enter

$HOME/cold-keysディレクトリのロック
chmod a-rwx $HOME/cold-keys
5. オンチェーン登録確認¶
エポック確認
NEXT_EPOCH=$(curl -s -L -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"method": "sidechain_getStatus",
"params": [],
"id": 1
}' https://rpc.${MIDNIGHT_NETWORK}.midnight.network \
| jq '.result.mainchain.epoch + 2')
echo $NEXT_EPOCH
登録確認
SIDECHAIN_KEY=$(jq -r '.sidechain_pub_key' ${HOME}/midnight/partner-chains-public-keys.json)
curl -s -L -X POST -H "Content-Type: application/json" -d "{
\"jsonrpc\": \"2.0\",
\"method\": \"sidechain_getAriadneParameters\",
\"params\": [$NEXT_EPOCH],
\"id\": 1
}" https://rpc.${MIDNIGHT_NETWORK}.midnight.network \
| jq --arg key "$SIDECHAIN_KEY" '
.result.candidateRegistrations
| to_entries[]
| . as $e
| $e.value[]
| select(.sidechainPubKey == $key)
| {
mainchainPubKey: $e.key,
sidechainPubKey,
auraPubKey,
grandpaPubKey,
stakeDelegation,
isValid
}
'
登録完了!
{
~ チェーンキー表示省略 ~
"isValid": true
}
isvaild:falseと表示されている場合の確認事項
登録完了直後にisVaild:falseと表示されている場合は以下のことを確認してください。
-
カルダノステークプールの有効ステーク(Active Stake)
SPOKITの場合:spokit> 「プール情報管理」> 「ブロック生成状態チェック」> 有効ステーク値
Cardanoscanの場合: 自身のPoolIDを検索し、Active Stakeの値確認 -
ActiveStake反映タイミング (n + 2エポック)
反映待機期間:Previewテストネット約2日、メインネット約10日後に反映します。