はじめに
2018年3月現在、KotoにはTestnetが存在しません。 KotoのソースにはTestnet用のdnsseedとして「dnsseed.testnet.koto.cash」が設定されていますが、DNS問い合わせしても値が返ってきません。
ということで、プライベートなTestnetを立てる方法を探ってみました。
ポイントは二つ:
- Genesis Block(最初のブロック)に定義されている日時からある程度時間が経つとマイニングできなく(ブロックダウンロード待ちに)なってしまうので、それをどうにかする。
- 最低2個のkotodがネットワークに参加していないとマイニングできない。
(自分で建てるのがめんどくさい人向け)
下記手順を行ったtestnetをkoto-testnet.poolof.work
で公開しています。
上記ホストをaddnodeすれば接続できるので、自由に使ってください。
※ただし予告なくサービス停止するかもしれません。
使い方:
(1) -testnet
オプションをつけてkotodを起動する。
kotod -testnet …
(2) koto-testnet.poolof.work
をaddnodeする。
koto-cli –testnet addnode koto-testnet.poolof.work add
Kotodを改造する
日時対策
単純にOSの時間を2017/12/10 13:10:55(Genesis Blockのタイムスタンプ)付近に変えてもいいが、ここでは日時(等)のチェックをしているところをつぶしてしまうことで実現します。
チェック関数はmain.cpp
のIsInitialBlockDownload()
なので、その先頭にreturn false;
を入れてあげます。
main.cpp:
1 2 3 4 5 6 7 |
|
dnsseed設定を変更
公式にTestnetが動き出したときにプライベートTestnetが影響を与えてしまわないように、公式のdnsseed設定を消しておきます。 ついでに自サーバのホスト名(または、IPアドレス)をdnsseedとして設定しておきます。
chainparam.cpp:
1 2 3 4 5 6 7 8 9 10 11 |
|
コンパイル
既にビルド済みの場合は、srcディレクトリでmake kotodを実行します。
cd koto
cd src
make kotod
まだビルドしていない場合は、普通にビルドします。
./zcutil/build.sh –disable-rust
ビルドし終わったら/usr/local/binへコピーします。(自分の環境では。)
sudo cp kotod /usr/local/bin
Kotodをポートを変えて2個実行する
設定
1個目はデフォルトのテストネット設定を使用。
- ~/.koto
- ポートは18433(p2p)と18432(rpc)
2個目のKotod:
- ~/.kotosを使う
- ポートは18443(p2p)と18442(rpc)
- 2個目のKotodが1個目に接続する。
設定ファイルは以下のようにしています。
1個目:~/.koto/koto.conf
1 2 3 4 5 6 7 |
|
2個目:~/.kotos/koto.conf
1 2 3 4 5 6 7 8 9 10 |
|
port, rpcport, connect, datadirをそれぞれ設定しています。
systemd設定
ユーザ「koto」で実行する前提です。上記の設定ファイルもその前提で作成しています。
/etc/systemd/system/kotod-testnet.service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
/etc/systemd/system/kotod-testnet-slave.service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
実行
実行します。
sudo systemctl daemon-reload
sudo systemctl start kotod-testnet
sudo systemctl start kotod-testnet-slave
koto-cli --testnet getinfo
を実行してconnectionsが1になっていれば成功しているはずです。
マイニングしてみる
cpuminer-yescryptをコンパイルしましょう。
minerd –algo=yescrypt –userpass=rpcuser:rpcpass -o 127.0.0.1:18432
これで猛烈な勢いでマイニングが進むはず。
その後の作業
日時対策を元に戻す
1度マイニングしてしまえば日時対策は不要です。
main.cpp
の修正の影響がどこまであるかわからないので、main.cpp
を元に戻したkotodを再コンパイルし、サービスを再起動します。
ToDo
- testnet用のinsightを立てる
- testnet用の蛇口(Fauset)を作る
- dnsseed(DNSサーバ)を立てる