NEMのTestnetの使い方

使い方と言っても大した情報は無いけど、NEMのTestnetを使う為にまとまった情報があまりなさそうなので備忘録を兼ねてメモ。

1.Testnetとは

文字通りテスト用のネットワーク。
NEM上で動くシステムを作ったときにテストするのが主な目的。
ここで使われるXEMは本番用のネットワーク(Mainnet)で使われるXEMとは別なので、後述するFaucet(蛇口・無料でXEMを入手出来るサイト)等からTestnet用のXEMを入手する必要がある。
また、XEMを保存するアドレスや接続するノードもTestnet用のものを使う必要がある。

2.アドレスを作成

TestnetのアドレスはTから始まる。
作成自体はNano Walletでシンプルウォレットを選択し、ウィザードの途中で表示されるネットワーク選択画面でTestnetを選択すれば良い。
テスト用とは言え、秘密鍵やウォレット情報はバックアップを取るように。
 

3.ノードのIPアドレスを取得

NEMのアプリやシステムを開発しようとしたときに、何処のノードに接続すれば良いか悩んでいる人をたまに見かける。
基本的には、Nano WalletにTestnet用のアドレスでログインし、ノード選択画面でブロック高を正しく取得出来るノードを使えば良い。

ただ、2018/04/07時点では表示されるノードは4つしかなく、内1つはブロック高がとれないという残念な結果になった。
同一ノードばかり使うのはノードに負荷を掛けることになるし、場合によってはノード側から接続を拒否されてしまう可能性もある。
そのため、負荷の高い処理を行う場合や複数ノードに分散して処理を行う場合等は、ノード一覧取得のAPI(/node/peer-list/all)を叩いて、使えるノードを探した方が良い。

なお、ノードがまともに稼働していない場合やデータの同期が取れていない場合もあるため、使えるノードかどうかの判定も必要なのでご注意を。
有効なノード判定の方法については、下記スレッドのレスを参照。
※スレッド本来の質問からは少し脱線してますが。。。

3.1.ノード(NIS)を自分で建てる

負荷を掛ける処理を行う場合やDBを直に使いたい場合等は、自前でノードを建てるという選択肢もある。
Testnet用のNISNEM Infrastructure Server)は下記サイトのnis-X.X.XX.tgzまたはnis-X.X.XX.zipを使用する。
建て方については、基本的にMainnetと同じなので割愛。
※X.X.XXはNISのバージョン
※tgzはLinux用、zipは多分Windows
※上位フォルダに保存されているNISはMainnet用で、Mainnet用のプロパティファイルを変更してTestnet用にすることも可能

http://bob.nem.ninja/beta-testnet/

ちなみに、NISのサービスを起動・再起動するとDBの同期処理が始まり、これが完了するまでは一部のAPIしか使えない。
サービスを立ち上げる前に、上記URLの*.h2.db.zipファイルを解凍し、DBファイルの格納場所に保存しておくと同期処理に掛かる時間を短縮できる。
(DBに格納済みのデータは整合性チェックのみを行い、追加分のみ他のノードから取得する)
DBファイルはMainnet用とTestnet用で異なるので注意すること。
また、同期が上手く行かない場合はDBファイルを削除して一から同期をすることで解決するパターンも稀にある。

3.2.HTTPS対応ノードを使いたい

NEMのノードは基本的にSSLに対応する必要が無いという前提により、通常はHTTP接続を使用する。
ただし、ミドルウェア等がHTTPSにしか対応していないというケースもある。
その場合は、HTTPSに対応したノードを自分で建てるか、有志が建てているノードを使用させてもらう。
が、Mainnet用のHTTPS対応ノードは少なく、Testnet用は更に少ないのが現状。
※今後需要が増えたらHTTPS対応のノードも増えるかもしれないけど、現時点ではなんとも。。。


4.テスト用のXEMを入手

少額のXEMはFaucetから取得するのが簡単。
Faucetの情報は下記の「### TestNet XEMの蛇口」を参照。
※Testnet内のXEMも有限なので、テスト後不要になったXEMはFaucetのアドレスに返却すること。

大量のXEMが必要な場合は、持ってそうな人から貰うか借りる。

5.その他

  • Testnetは全般的に処理が遅いらしい
    いざとなったら自前で建てることを検討。
    ブロックの承認もMainnetだと1分程度だが、Testnetだと数分かかることも多い。
    Testnetのブロック情報等は以下を参照。

    http://bob.nem.ninja:8765/#/blocks/0

  • ネットで調べた情報は日付に注意
    Testnetに限らず、古いバージョンを前提にした情報だと現状と異なっている可能性もあるのでご注意を。
    とは言え、古くても役立つ情報はあるので一概に古いからダメというわけでは無い。

  • ノードを建てて維持するのも一種の貢献になる
    MainnetはSN報酬の影響もあってそれなりのスペックのノードが一定数以上存在するが、TestnetやHTTPS対応のノードは数が限られている。
    そのため、ノードを建てると他の開発者から知らぬ間に感謝されていることもあったり。
    なお、ノードのスペックが低いとデータの同期が途中で止まることがあるので、たまにノードの状態確認やブロック高の確認をしてください。

  • 開発関連の情報
    実装に関しては、基本的にMainnet用の情報を調べれば問題無いはず。
    リンク集は上にも貼ったけど、こちら。

    何か作る場合は、とりあえずテクニカルリファレンスとAPIマニュアルを読めばイメージが掴めるかと。
    ※Catapult用の各種ドキュメントにも目を通しておくとCatapultリリース後に役立つはず。

    開発で悩みやすい部分についてはこちらを参照。