Quantcast
Channel: もやし工房
Viewing all articles
Browse latest Browse all 72

Chia Networkをdocker(Linux/CLI)を使ってマイニングする方法

$
0
0

HDDやSSDで始めるマイング。Chia NetworkをLinux (docker/docker-compose)で使ってみた記録。CLIを使った操作の記事があまり無かったので、すぐに風化しそうですがメモ書きで残しておきます(バージョンはv1.1.2)。

GUI環境がやや不安定&バックグラウンドでどうなっているか分からないのが嫌、CLIだけのクラウド環境等で掘りたい方への情報です。どう考えても間違ってること書いてたらコメント欄で突っ込んでもらえると嬉しいです。

Chiaのdocker環境でのインストール方法

最新の情報

このブログの情報はすぐに風化しそうなので、一次情報とユーザコミュニティの場所を書いておきます。困ったらこちらをご覧ください。

公式ページ

最新の情報はこちらで。英語が苦手でもgoogle翻訳かけたらある程度は把握できるかと。

その他

よく分からないエラーが出る、みんなの設定を見てみたいなどはこちら。

とりあえず起動

とりあえず起動してコンテナの中に入る。コンテナを起動するとfarmer, harvester, full node, walletのサービスが自動起動しています。

// dockerホスト側でディレクトリ作成
mkdir -p ./chia/homedir
mkdir -p ./chia/plots

// コンテナ起動
docker run --name chia -v ./chia/homedir:/root -v ./chia/plots:/plots -d ghcr.io/chia-network/chia:latest 

// アレコレするのは一旦中に入ってしまったのほうが楽なので
docker exec -it chia /bin/bash

既存の鍵の削除

コンテナを起動するといきなりキーが作られるが、作成時に表示されるmnemonic(24個の単語)が分からないので、一旦鍵は削除して作り直します。

venv/bin/chia keys delete_all

鍵の作成

既存の鍵を持っていない場合は新規作成し、fingerprintの番号とmnemonicの単語をコピペして残しておきます。持っている場合は下部の”鍵の追加”をします。

venv/bin/chia keys generate

例)
root@chia:/chia-blockchain# venv/bin/chia keys generate
Generating private key
Added private key with public key fingerprint 00000000000 and mnemonic
apple orange .... ここに24個の単語が出てくるのでコピペしておく(mnemonic)

鍵の追加

既に他の場所で作っていれば下記のコマンドを入力し、mnemonicを入力します。

venv/bin/chia keys add

鍵の確認

鍵が1個であることを確認。複数ある場合は下部の削除で消します。

venv/bin/chia keys show

walletの確認

自分の財布の確認(後述のnodeにつながっていないと結果が出なかった気もする)。初回はキーボード入力が発生するので、コンテナにexec /bin/bashで接続してから実行するか、コンテナ外から直接実行する場合は -it等でttyを開かないとだめ。

venv/bin/chia wallet show

例)
root@chia:/chia-blockchain# venv/bin/chia wallet show
No online backup file found,
 Press S to skip restore from backup
 Press F to use your own backup file: S
Wallet height: 0
Balances, fingerprint: 000000000
Wallet ID 1 type STANDARD_WALLET
   -Confirmed: 0 mojo (0.0 xch)
   -Unconfirmed: 0 mojo (0.0 xch)
   -Spendable: 0 mojo (0.0 xch)
   -Pending change: 0 mojo (0.0 xch)

ファーム(畑)の確認

Farming statusがいつまで経ってもSyncingから変わらない場合は下部の”同期されない”を参照してください。

venv/bin/chia farm summary

例)
root@chia:/chia-blockchain# venv/bin/chia farm summary
Farming status: Farming
Total chia farmed: 0.0
User transaction fees: 0.0
Block rewards: 0.0
Last height farmed: 0
Plot count: 3
Total size of plots: 304.001 GiB
Estimated network space: 779.706 PiB
Expected time to win: 1 year and 3 months
Note: log into your key using 'chia wallet show' to see rewards for each key

nodeの確認

Current Blockchain StatusがFull Node Syncedになるまで若干の時間がかかる場合があります。いつまで経ってもFull Node Syncedにならない場合は、下部の”同期されない”を参照してください。

venv/bin/chia show -s -c

例)
root@chia:/chia-blockchain# venv/bin/chia show -s -c
Current Blockchain Status: Full Node Synced

色々出てくる

コンテナの停止&再起動

一度コンテナを停止して再度起動して正常に動くかを試してみます。-e keys=””を付けないと新たな鍵が自動的に作られてややこしいことになるのでつけます。

docker stop
docker rm chia

docker run --name chia -v ./chia/homedir:/root -v ./chia/plots:/plots -e keys="" -d ghcr.io/chia-network/chia:latest 

docker exec -it chia /bin/bash

venv/bin/chia keys show
//身に覚えの無いキーがあったら、起動時にキーが作られてるので設定間違ってる。

キーの削除

身に覚えの無いキーがあったら削除します。起動時にキーが作られてるので設定間違ってるかも。

venv/bin/chia keys delete -f {fingerprintid}

//1つだけキーが出てくることを確認
venv/bin/chia keys show

plots(耕地)の作成

バックグラウンドで実行するためにnohup ~ & を付けて実行しました。

後述の方法でfarmerをstopさせて、plotsの作成のみをさせるコンテナとかも作ることができるぽい。他の場所でplotsだけを作る場合も鍵の情報は合わせて作る必要があります。-kはv.1.1.2ではデフォルト32。

コンテナ内で
mkdir -p /plots/plots
mkdir -p /plots/tmp
mkdir -p /plots/logs

-d 出来上がりのディレクトリ(HDDで良い)
-t テンポラリのディレクトリ(SSDが推奨されていたが今回はHDD)
nohup venv/bin/chia plots create -d /plots/plots -t /plots/tmp >> /plots/logs/plots_`date "+%Y%m%d_%H%M"`.log 2>&1 &

-n キュー追加個数(キューに何個入れるか/plotsを連続何個作るか(一つ終わったら次を作る))
nohup venv/bin/chia plots create -n 2 -d /plots/plots -t /plots/tmp >> /plots/logs/plots_`date "+%Y%m%d_%H%M"`.log 2>&1 &

-r CPUスレッド数(作成にCPUを何スレッド使うか。公式では2が推奨されていたが、CPUが暇なら増やすとフェーズ1(Forward Propagation?)で早くなるらしい。もちろん-nと組み合わせても使える)
nohup venv/bin/chia plots create -r 2 -d /plots/plots -t /plots/tmp >> /plots/logs/plots_`date "+%Y%m%d_%H%M"`.log 2>&1 &

並列で何個も作る(CPUも余裕があり、SSD等を使用して並列で何個も作りたい場合は同時にバックグラウンドで複数起動させる。下記の場合2並列で10個づつ作る。)
nohup venv/bin/chia plots create -n 10 -d /plots/plots -t /plots/tmp >> /plots/logs/plots_`date "+%Y%m%d_%H%M"`_1.log 2>&1 &
nohup venv/bin/chia plots create -n 10 -d /plots/plots -t /plots/tmp >> /plots/logs/plots_`date "+%Y%m%d_%H%M"`_2.log 2>&1 &

docker-compose化

基本の形

version: '3.6'

# chia
  chia.local:
    hostname: chia
    image: ghcr.io/chia-network/chia:latest
    volumes:
      - "./chia:/root"
      - "/etc/localtime:/etc/localtime:ro"
    environment:
       keys: ""
    restart: always
    logging:
      driver: syslog

今回は共用サーバ内で動かしており、あんまりCPU使ってもらうと困るので、CPUにリミットをかけました(deploy ~ limits)。

また、バカでかいplotsは速度は遅いけど既存環境に影響出るのが嫌なので、dockerホストでnfsマウントした別HDDにしました(exportの部分)。スピードは思った通り遅くて 14, 5時間/1plotsかかっています。そもそもdockerのボリュームマウントってそんなに早くないので、スピードを重視する場合は向いてない気もします。

version: '3.6'

# chia
  cia.local:
    hostname: chia
    image: ghcr.io/chia-network/chia:latest
    volumes:
      - "./chia:/root"
      - "/export/plots:/plots"
      - "/etc/localtime:/etc/localtime:ro"
    environment:
       keys: ""
    restart: always
    deploy:
      resources:
        limits:
          cpus: '2'
    logging:
      driver: syslog

起動

docker-compose up -d chia.local

ファームやnodeのステータスが同期されない場合

Windows版は知りませんが、Farming status: Syncingでずっと止まっている場合(30~1時間位)は、ルーターでこのコンテナIPのポート 8444へ穴を開けたほうが良さそうです(ポートフォワード)。IPv6環境だと色々めんどくさそう。

あとdockerホスト側の時刻もntp等でちゃんと合わせます。コンテナ内をJSTにする必要は無くUTCでも大丈夫です。

ポートフォワード: 8444

https://github.com/Chia-Network/chia-blockchain/wiki/FAQ#why-does-my-node-have-no-connections-how-can-i-get-more-connections

当初はずっとこの状態で止まっていました。

Farming status: Syncing
Total chia farmed: 0.0
User transaction fees: 0.0
Block rewards: 0.0
Last height farmed: 0
Plot count: 1
Total size of plots: 101.304 GiB
Estimated network space: 250.611 PiB
Expected time to win: 1 year and 4 months
Note: log into your key using 'chia wallet show' to see rewards for each key

ポート開放後2日ほど放置したら60近くFULL_NODEで接続されていました。

root@chia:/chia-blockchain# venv/bin/chia show -s -c | grep FULL_NODE | wc -l
58

その他

plotsファイルのチェック

plotsが有効なものかどうか、ちゃんと-k 32で作られているが見られます。他の場所で作ったplotsを使うときなどはやってみても良いかもしれません。無効と判断されるものは-n(デフォルトは-n 30)を上げて再度チェックするようですが、詳しくはわかりません。

venv/bin/chia plots check

例)
2021-04-29T15:43:57.211  chia.plotting.check_plots        : INFO     Loading plots in config.yaml using plot_tools loading code
2021-04-29T15:44:01.549  chia.plotting.plot_tools         : INFO     Searching directories ['/plots', '/chia-blockchain', '/plots/plots']
...
2021-04-29T15:44:03.441 chia.plotting.check_plots : INFO Testing plot /plots/plots/plot-xxxxxxxxxxxxxxxx.plot k=32 (k=32で作られてる)
...
2021-04-29T15:47:10.092  chia.plotting.check_plots        : INFO        Proofs 42 / 30, 1.4  (1.4の部分が極端に低い場合は-n 100等でチェックするぽい?。詳しくは不明)
....
2021-04-29T15:50:54.192  chia.plotting.check_plots        : INFO     Summary
2021-04-29T15:50:54.192  chia.plotting.check_plots        : INFO     Found 8 valid plots, total size 0.79177 TiB  (有効なplotsの数)
2021-04-29T15:50:54.192  chia.plotting.check_plots        : INFO     8 plots of size 32

plotsファイルを認識させる

新しく作られた耕地をちゃんと認識してくれるか? plots create -dで指定したディレクトリにxxxx.plotを入れたら、harvesterが定期的に見ててくれるらしいです。しばらくしたら、Plot countがちゃんと増えていました。鍵が同じ別の環境で作ったplotsもちゃんと認識してくれました。

plotsファイルが入っているディレクトリは、.chia/mainnet/config/config.yaml のplot_directories:に書かれています。chia plots create -d したときの情報が自動的に書かれているぽいです。

plots作成の中断

plots createのプロセスをkillします。途中で中断したtempのplostsは再利用できないので、create時のログを見てちゃんとplotsが完成してからkillしたほうが無駄が無いかと思います。

root@chia:/chia-blockchain# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Apr26 ? 00:00:03 bash ./entrypoint.sh
root 234 1 0 Apr26 ? 00:01:19 chia_daemon
...
root 897 451 1 Apr26 ? 00:47:03 chia_full_node
root 1139 0 87 Apr26 ? 16:55:13 /chia-blockchain/venv/bin/python3.8 venv/bin/chia plots create -n 75 -d /plots/plots -t /plots/tmp ←これがplots createなのでpidをメモする
...
root@chia:/chia-blockchain# kill -9 1139    //plots createしてる pidをkillする

プロセスの再起動、停止

farmer, harvester, full node, wallet のセットで再起動

venv/bin/chia start -r farmer

full nodeだけ再起動

venv/bin/chia start -r node

停止は stop。plots作成のみさせるコンテナを作りたい時は多分farmerを止めてしまう(未検証)。

ホームディレクトリをホスト側にマウント

volumes:"./chia:/root"の部分。公式マニュアルにはホスト側にマウントしましょうとは書いてありません。

ただ、

  • .chia/mainnet/db/や、.chia/mainnet/wallet/db/とかでsqliteファイルが頻繁に読み書きされてる感じ。コンテナ再作成のたびにコレが消えるのは何だかあれな感じがした。
  • コンテナ再作成のたびにadd keyするのが面倒だった。説明書にある -e keys=”/path/in/container” の使い方が分からない。
  • plotsの位置が .chia/mainnet/config/config.yamlに書かれている。

のでマウントしてコンテナを破棄しても残るようにしました。Chiaのバージョンアップ等で不具合などが起こったら、ホスト側の.chiaは消してしまえば良いかなと思っています。

監視とグラフ

v.1.1.2の場合まだWebインタフェース等は無い。いちいちCLIで情報を見に行くのが面倒&監視とグラフが好きなので、plotの個数、nodeの数、walletの状態をzabbixに投げてグラフにしました。plotとwalletに関してはzabbixの機能で数値が変わったら(= plotが完成した、walletに入った)slackに通知するようにしてあります。

dockerホストで下記のスクリプトを定期実行

#!/bin/bash
cd /home/homedir
PLOT=`docker-compose exec -T chia.local venv/bin/chia farm summary | grep "Plot count" | awk {'print $3'}`
WALLET=`docker-compose exec -T chia.local venv/bin/chia wallet show | grep Confirmed | awk {'print $2'}`
NODE=`docker-compose exec -T chia.local venv/bin/chia show -s -c | grep FULL_NODE | wc -l`
echo "WALLET:"${WALLET} "NODE:"${NODE} "PLOT:"${PLOT}

plotsとwalletに関しては変更があったらZabbixの機能でSlackに通知している

よく分からない

  • Full-nodeの数。ポート8444を開けると外部からも結構つなげられ、それなりに転送量も食ってるぽい。支えてるnodeの数が自分にとっても有利に働けば嬉しいけど、そうで無いのなら ある程度 数を制限したいけどよくわからない。

儲かりそうか?

見るたびにExpected time to winが凄い数で増えてて、この速度でplotを作っていては、どう考えても厳しそうです。ただ、GPUを使うタイプとは違い機材費は要らないので手軽に始められるのは何だか楽しいです。


Viewing all articles
Browse latest Browse all 72

Trending Articles