Wavesフルノード立ててみた

作業要領

用意した環境に公式リリースをインストールするわけだが、
説明されている通りに作業するだけである。

リリースソフトウェアをダウンロードする

コマンドラインから。あたりまえだけど最新をダウンロード

$ curl -LO https://github.com/wavesplatform/Waves/releases/download/v0.7.6/waves_0.7.6_all.deb

-testnet付いているのはテストネット用。

インストール

実行にはJavaが必要。
とりあえずOpenJDKでいい。実行のみなのでJREでいい。

$ sudo apt install openjdk-8-jre

ダウンロードしたdebをインストールして、サービスを起動する。

$ sudo dpkg -i waves_0.7.6_all.deb
$ sudo systemctl start waves.service

真面目に稼働させる場合は、起動する前に設定編集する。
(設定ファイル /etc/waves/waves.conf)
以上。

Javaで動く

ただ動かしたいだけであればjarを持ってきて実行すればよい。
confは別途用意する。

$ curl -LO https://github.com/wavesplatform/Waves/releases/download/v0.7.6/waves-all-0.7.6.jar
$ java -jar waves.jar waves-config.conf

こちらに詳しい説明がある。
(文中”Part 2 - Download and Configure Waves”あたり)

以上。

フルノード設定についてのメモ

説明書に完全な設定が記載されており、これがデフォルト設定となっている。
変更が必要な箇所のみ設定ファイルにより更新する。

管理ファイル

次のものがあって、保存先を指定できる。

  • Waves管理ファイルルート
  • ウォレット用
  • ブロックチェーン用
  • Wavesネットワークを構成するノード管理用
  • マッチャー用

変更するのはルート(waves.directory)くらいと思う。
ただしdebインストールの場合は、起動コマンドラインでさらにルートが上書きされているので、 変更したい場合は所定の方法で行う。

その他の留意点として、
ウォレットは失くしたり盗られたりしないようにする。

ネットワーク設定 (network)

ネットワークプログラムにはよくある設定内容なので特別なことは特にない。
ポート番号が他のサービスと被らないようにすることと、接続を受け付けれるようにしておいてね、くらい。

ウォレット設定 (wallet)

このフルノードのウォレット。
ここで設定したウォレットに10000waves(リース含めて)ないとマイニングできない、というやつ。
seedはライトクライアントのウォレットを使いまわせる(ライトクライアントバックアップのencoded seedをコピーする)。
seedはウォレット生成時にのみ必要なので、ウォレットが生成されたら設定ファイルから削除する。

特にseedを設定しなければウォレット生成時に自動生成される。
自動生成された値はアプリケーションログを確認するかREST-APIをたたくかしないと確認できない。
ライトクライアント生成の方が楽かもしれない。

ブロックチェーン設定 (blockchain)

MAINNET / TESTNET / CUSTOMの三種あって、 CUSTOMでもなければ他の設定は変更しないが吉。
Wavesネットワークにとって良い値が設定されていることでしょう。

type = CUSTOMとすることで新しいブロックチェーンを始めることができる。
Wavesの仕組みをそのままプライベートブロックチェーンとして使えるということだと思う。
試す予定はない。

チェックポイント設定 (checkpoints)

ブロックチェーンカスタム時にしか用はない。
MAINNET, TESTNET時は公式配布から変更してはいけない。

チェックポイントというのは、フォークを許可しないブロックチェーン上のある時点を指す何か とかいうやつ。たぶん。

手数料設定 (fees)

それぞれのトランザクションの手数料を設定する。
単位はWavelet(最小単位。ビットコインで言うところのsatoshi)
設定された手数料以上のトランザクションしか承認処理しない。(設定手数料に満たないトランザクションは無視する)

おもしろいのは、Waves上で発行されたトークンでも手数料を受け付けることができるところ (トランザクションの手数料をトークンで払える)。
WAVES = xxxにならって"<TOKEN-ID>" = xxxとすると、そのトークンを手数料とすることができる。
単位はそのトークンの最小単位(発行時に設定した最小単位)。
手数料としてトークンしか受け取らない場合でもマイニングには10000wavesは必要(たぶん)。

マッチャー設定 (matcher)

Matcher = DEXの中の人。日本語ではなんというのか・・・
デフォルトではOff。

Matcherの仕組みはよく分かっていないので、別途調べるとして、
設定内容は、
専用のREST-APIがある。その受け口を設定する。
専用のアカウントが設定できるようだが、未指定の場合はウォレットのが使われるのかな?
取り扱うアセットを設定できる?
オーダーのプールや期限など、マイニングや未承認トランザクションなどと同様の制御パラメータがあるもよう。

そして、手数料。二つある

  1. オーダーを出すための手数料 (user -> matcher)
  2. オーダーマッチ(交換が成立)した場合の手数料 (matcher -> miner)。

手数料は、現状wavesのみ。
この差分が、いわゆるmatcherのインセンティブになる。と言う理解で良いのだろうか。
設定を誤ると手持ちのwavesが減っていってしまうのだろう。

10000wavesは必要ないはず。

マイナー設定 (miner)

マイニングするか、しないか。
デフォルトはYes。

その条件として、

  • 自分以外の別のWavesフルノードと何個以上接続されているか
    (デフォルトは一つ以上)、
  • ローカルブロックチェーン(最終トランザクション)が新しいか
    (デフォルトは1日以内)

を設定する

もちろん前提として10000waves必要。
10000wavesない場合は、おとなしくenable = noにするべきか。

REST-API設定 (rest-api)

いわゆるWavesネットワークとコミュニケートする窓口というやつ。
デフォルトでは有効。

受け口(アドレスとポート番号)、API-KEY、CORS(Cross Origin Resource Sharing)許可有無をそれぞれ設定できる。
前面にプロキシ等立てること(インターネットに直接公開しない)を推奨している。

クライアントからREST呼び出し時に指定するのはAPI-KEYだが、設定ファイルに記入するのはそのハッシュ値(api-key-hash)。
api-key から api-key-hash を生成してくれるAPIが用意されている(utils/hash/secure)ので、それを利用するのが楽。

同期設定 (synchronization)

ブロックチェーンの同期制御に関する設定。
ブロックチェーン設定同様、CUSTOMでもない限り変更の必要は無いと思う。 Wavesネットワークにとって良い値が設定されていることでしょう。

UTXプール設定 (utx)

未承認トランザクションの保管に関する設定 ブロックチェーン設定同様、CUSTOMでもない限り変更の必要は無いと思う。 Wavesネットワークにとって良い値が設定されていることでしょう。

参考サイト

この辺りから辿る


See also