Story Testnet Validator Nodeの建て方
※素人の備忘録ですので自己責任で参考にしてください。
参考
下準備
binaryのダウンロードと解凍
~/storyディレクトリを作成し、execution clientとconsensus clientのbinaryをダウンロードする。
mkdir story
cd story
#execution client
curl -O https://story-geth-binaries.s3.us-west-1.amazonaws.com/geth-public/geth-linux-amd64-0.9.2-ea9f0d2.tar.gz #execution clientダウンロード
tar -zxvf geth-linux-amd64-0.9.2-ea9f0d2.tar.gz #圧縮ファイルを解凍
#consensus client
curl -O https://story-geth-binaries.s3.us-west-1.amazonaws.com/story-public/story-linux-amd64-0.9.11-2a25df1.tar.gz #consensus clientダウンロード
tar -zxvf story-linux-amd64-0.9.11-2a25df1.tar.gz #圧縮ファイルを解凍
これで~/storyディレクトリ配下にbinaryファイルが揃いました。



Excecution Clientを実行
実行ファイルgethがあるディレクトリまで移動して実行
cd ~/story/geth-linux-amd64-0.9.2-ea9f0d2
./geth --iliad --syncmode full
こんなlogが表示され続けるので放置。

Consensus Clientが動いていない時(正常に動いていない時)は下記のようなlogが出る。

Consensus Clientを実行
初期化と実行
実行ファイルstoryがあるディレクトリまで移動して初期化を実行
${NODE_MONIKER}は任意の文字列に置き換え(例えばgonza_validator等)
cd ~/story/story-linux-amd64-0.9.11-2a25df1
./story init --network iliad --moniker ${NODE_MONIKER}
sudo ./story run
storyを起動(run)せずにgethのlogを放置しておくと、ある時点で更新されなくなります。sudo ./story runコマンド後、gethのlogも動き出します。両者が連携しているということでしょう。
これでnodeが動き出したというだけで、まだvalidatorにはなれていません。
Validator登録
参考
https://docs.story.foundation/docs/validator-operations
~/story/story-linux-amd64-0.9.11-2a25df1ディレクトリに.envファイルを作成
cd ~/story/story-linux-amd64-0.9.11-2a25df1
nano .env
.envファイルの中身を以下のようにして保存
※xxxxxxxxxxxxxxxxxxxxxxxxは秘密鍵(取得方法後述)
(※秘密鍵は後述の取得方法でなくとも自身のMetamaskの秘密鍵でも問題ないと考えたが、ひとまずCLIで生成した秘密鍵を使って進めることにした。)
RIVATE_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
秘密鍵取得方法
cd ~/story/story-linux-amd64-0.9.11-2a25df1
./story validator export --export-evm-key
これで、~/.story/story/configディレクトリのprivate_key.txtにPRIVATE_KEYが保存される。→.envファイルの中身に貼り付け
予備項目(何となく私がやったこと)
上記でstoryコマンドを用いて取得した秘密鍵に紐づくウォレットは$IPを所持していない(0 IP)はずなので、faucetからIPを取得した。
まずはMetamaskにアカウントをインポート(storyコマンドで取得した秘密鍵を貼り付けてインポート)




得られたウォレットアドレスを用いて以下のfaucetから$IPを獲得
https://faucet-app-pi.vercel.app/
→これで1IPを獲得
ただ、validator登録するには1 IPのステークがマスト、ということなのでガス代を考えると1IPより多くの$IPが必要な可能性もあるので、別のMetamaskアカウントで取得した0.3IPを送金して合計1.3IPにしておいた。

Validator登録(create)
ひとまずConsensus Clientが最新ブロックまで同期するのを待つ。
Consensus Clientのlog内のheightの値が以下のサイトのCurrent Block heightに追いついているかを確認(追いつくまで待つ)。
https://staking.story.foundation/
※最新ブロックまで同期しないと、自分のnode(Consensus Client)は使用するアカウントが1.3IP持っていることを知らない(まだこのトランザクションのブロックを保持していない)のでエラーする(と思う:過去の経験からこう思うので試していない・・・)。


→と思ったがConsensus Clientのlogにエラーばかり表示され途中からheightが表示されなくなった。

マニュアルによるとこれは気にしなくても良いlogらしい・・・

とはいえ、これでは最新ブロックまで同期したかが分からない・・・とりあえず放置・・・(Consensus Clientを止めるとExcecution Clientが動かなくなり、Consensus Clientのlogがエラー表示でもExcecution Clientが動いているので恐らく問題ないのだろう)
最新ブロックまで同期したことを確認してから下記をやりたかったが、とりあえず一度やってみた。
cd ~/story/story-linux-amd64-0.9.11-2a25df1 #story実行ファイルがある場所へ移動
./story validator create --stake 1000000000000000000
ダメでした・・・(同期が完了していないからではないようにも見えます)

解決しました↓↓
./story validator create --help
これでオプションが見れました。

これを見ると、ほとんどのオプションが指定せずともdefault値を勝手に反映してくれるのに対して --private-key stringは指定しないといけないことが分かります(defaultが存在しない)。
なので --private-key stringに上述の.envに保存した秘密鍵を指定してみました。
つまり、
./story validator create --stake 1000000000000000000 --private-key xxxxxxxxxxx
※xxxxxxxxが秘密鍵
これで通りました!!!

Explorer URL:
https://testnet.storyscan.xyz/tx/0x3fefcc78a30e5abfa869ee707805224511911ed966a4628a50d853b6146924c5
やはりガス代が掛かっているので1IPでは不足すると思われます。

以上
Validatorページ(https://staking.story.foundation/)を見ると2024/9/1現在では180IP以上のTotal StakedがあるValidatorしか表示されていないので、ここに食い込まないとactiveではないのだと思われる。無理やん・・・
また続報がありましたら更新します。
補足
この後もオペレータの追加や報酬引出しアドレスの追加作業が書かれているが、この時点で既にstoryコマンドで作られた秘密鍵に紐づくアドレスがオペレータかつ報酬引出しアドレスになっているんじゃないの?という感じでしばらく放置してみます。nodeの動きを見てからこの後の判断をしていこうと思います。