Catapultテストネットノードの構築スクリプトを作りました。LoginHomenem開発Catapultテストネットノードの構築スクリプトを作りました。you!!Catapultテストネットノードの構築スクリプトを作りました。公開されたので、内容を一部修正しました。Catapult版のテストネットはそのうちクローズされると思いますがそれまでは併記しておきます。Symbol版と書かかれたほうを使用してください。「ローンチする前に、テストネットのノードが最低1,000くらいほしいな」というコア開発者のJaguar氏の発言をきっかけに、次々とテストネットを立ち上げる有志が増えてきていて本当にありがたいです。現行のNEMでも400機くらい(?うろ覚えの適当な数字かもしれません)なので、なかなか大変です。そこで、とりあえず手順通りにやればテストネットノードが立ち上がるスクリプトを用意しました。他のディストリビューションでも、ある程度変更すれば動かせると思います。(そもそも動かすだけならDockerさえ入っていれば動かせますが、色々と工夫した分のコードが書いてあります)次のスクリプトの内容を貼り付けて、インスタンスを作成すれば、しばらく待つだけでテストネットノードとして稼働し始めます。(APIノード用)https://gist.github.com/44uk/abedba6915803fa92b0b4d0ecbb7eba5ノードには「Peerノード」と「APIノード」の2種類があります。Peerノードは別のノードとブロックチェーン情報を同期を担うノードです。APIノードはPeerノードの役割に加えて、ブロックチェーン情報にアクセスするためのAPIの提供を行います。稼働状況が確認できるのですが、Peerノードはそもそもブラウザからアクセスできるような窓口がありません。建ててみたのはいいが、いまいち動いているのかよくわからない、というふうに見えてしまいます。(サーバにログインして、あれこれコマンドを打ったりログを見ればわかるのですが、少々ハードルが高いと思われます)そこで、Peerノードのスクリプトでは、ブロックのデータからそのノードの持っているブロック高の情報を抜き出し、それだけブラウザでみれるように工夫しました。アクセスしてみてください。この数値が徐々に増えていき、他のノードのブロック高に追いつくことで同期が完了したとわかります。スクリプトにはコメントを入れてありますので、ぜひ実行するだけではなく、覗いてみてください。わからないことがあれば回答しますし、より良い方法があればぜひアドバイスいただければ幸いです。with-httpshttps://github.com/44uk/symbol-testnet-bootstrap/tree/with-https私の方でゲートウェイがHTTPSでの通信に対応するように修正を加えたものを作りました。次の部分のURLを置き換えてください。zx技術的な解説(言い訳)テストネットノードの構築はすでに財団githubリポジトリにて、簡単に立ち上げられるツールが公開済みです。いうコマンド一発で動作を始め、ネットワーク上のノードと同期が始まり、テストネットノードの一員となることができます。スクリプトではこれをサーバ上に展開し、サーバOSが再起動した場合でも復帰するようにサービス化したりしています。VPSサーバなどの場合、sshでログインすることが一般的ですが、ポート番号が22番から50022番へ変更しています。世界中のアタッカーがよく(とてもよく)機械的なアタックを仕掛けてきます。入り口をすこしずらしてしまいます。玄関を分かりにくくしてしまえば訪問販売も面倒臭がって営業には来ないだろう、みたいな話です。(余談ですが、UberEatsをご利用の際にはお届け先をわかりやすいように、一軒家の場合はなにか目印をメモに書いてください。それだけで配達がはかどりますのでよろしくおねがいします。手順が煩雑になるので流用することにしました。いうユーザーが居るはずだからなりすましでアタックを仕掛けられないための自衛策です。「田中」さんが居るはずだから「田中」と名乗ればとりあえず名前は誤魔化せるだろう、みたいな話です。前述のsshポート番号を変更していますので、不正ログイン対策としては十分かと思います。スクリプトに行わせています。したかったのですが、コンテナ内部のユーザーがrootで動作するため、コンテナが作成するブロックファイルやステータス管理ファイルのオーナーがrootになってしまいました。これを解決するのが若干難儀したため、rootで動作させてしまっています。Peerノードの場合は更にブロックチェーン高を外部に公開するためのスクリプトとサービスを用意しています。いうファイルにはそのノードが持っているブロックチェーンデータの最新高が記録されています。いうファイルへと20秒に一回書き出します。サーバのコンテナを用いて公開するようにしました。これは、Peerノードをただ立ち上げただけだと外部からちゃんと動いて同期されているのかがわかりにくかったので、せめてブロック高が進んでいることがわかるようにと工夫しました。少々手間だったり、コマンドに慣れていないとなかなか大変です。ブロックチェーン高を公開するだけですのでセキュリティ的にも影響はほぼ無いでしょう。大まかに、こんなことをするスクリプトです。動かしてみて色々とフィードバックを頂いたり、お好きに改造していただければ幸いです。一通りの操作を簡単にですが、キャプチャつきで解説します。本当はネットワーク設定やリージョンの選択など、もう少し細かい設定があるため、その辺でトラブルがあるかもしれませんが、ご了承ください。「インスタンス」をクリックします。「インスタンスの作成」をクリックします。AMI」を選択します。「t2.micro」を選択して、「次のステップ」をクリックします。想定する最低スペックを満たしていないので、ブロックチェーンネットワークに負荷がかかった場合に、パフォーマンスが追いつかなくなる可能性があります。(今回は無料利用枠の対象ということで選択しています)「ユーザーデータ」の部分にスクリプトを貼り付けます。貼り付けたら「次のステップ」をクリックします。「Raw」というボタンを押すと、内容がテキスト形式で表示されるので、全てコピーして貼り付けに使用してください。「サイズ」を「30」に変更します。「終了時に削除」にチェックが入っていることを確認して、「次のステップ」をクリックします。次の画面(タグの追加)では何もせず、「次のステップ」をクリックしてください。セキュリティルールを上記のように設定してください。APIノードのスクリプトを使う場合は、「50080」を「3000」として設定してください。「確認と作成」をクリックします。警告が出ますが、これはスクリプトがポート番号を22から50022へ変更するので、50022を設定できていれば問題ありません。「次へ」をクリックします。「起動」をクリックします。「キーペア名」にはお好きな名前をつけて、「キーペアのダウンロード」をクリックして、サーバの秘密鍵を保存してください。sshでのサーバログインについては、それを解説する記事などをご参照ください。ポート番号は「50022」にスクリプトが変更するので、そこだけ設定を気をつけてください。「インスタンスの作成」をクリックします。インスタンス名をクリックします。待つと「running」と「2/2のチェックに合格」という状態になったら準備完了です。そこから、1,2分程度、スクリプトのセットアップの完了を待つと、「パブリックIP」のIPアドレスでアクセスできるようになります。アクセスしてみてください。なにか数字が出ますが、これはそのノードが持つブロックチェーンが同期している最新ブロック高です。アクセスしてみてください。これも最新ブロック高を表示します。現在のネットワークのブロック高はエクスプローラなどで確認してみてください。Catapult版http://explorer.nemtech.network/Symbol版http://explorer-xym.nemtech.network/この数値に追いつけば、他のノードと最新ブロックまでの同期ができたということになります。(IPアドレスはサーバインスタンスを作るごとに変わるので、お使いの環境で確認してください)暫く経つと、ノード一覧にあなたのノードが表示されてきます。http://explorer.nemtech.network/nodeshttp://explorer-xym.nemtech.network/nodeshostに表示されているIPアドレスか、FRIENDY_NAMEを設定していたら、ここで確認できます。出てきたり出てこなかったり、見えなくなったりとあまりちゃんとした情報が取れていないような気がしますので参考程度に。ブロック高が進んでいれば問題ないと思います。複数のAPIノードから集めたノード情報を配信するエクスプローラを用意しました。1時間くらいごとに更新されるので、IPアドレスやFriendlyNameなどで検索して見つけてみてください。AWSには新規登録してから12ヶ月間は一定の条件の範囲で、無料で利用することができます。今回のセットアップでは、サーバインスタンスとストレージについては無料の範囲です。これに加えて、ネットワーク使用料というのがあるのですが、こちらは若干の支払いが生じる可能性があります。程度の転送量がありましたが、テストでトランザクションが飛び交うとまた変わるかもしれません)それほど高額になることは無いと思いますが、ある程度の見積もりが出せたらまた追記します。一応見積もりツールで見積もりを出してみたのですが、本当にあっているのかちょっと自信がないので精査中です。https://calculator.s3.amazonaws.com/index.html#r=IAD&s=EC2&key=files/calc-e38376141e8b4632a968523b91f6769b82c7e43a&v=ver20200121eMサーバインスタンスを削除する建てたサーバをほおって置くと、無料期間を過ぎたり、使用時間によっては課金が発生します。必要が無くなったら、忘れる前に削除しておきましょう。終了」をクリックします。「はい、終了する」をクリックします。「terminated」という状態になっていれば、そのうち一覧から消えてなくなります。応答が返ってこない場合はログを確認してみます。初期化スクリプトログを確認コマンドライン操作の能力が要求されますが、サーバにログインできることを前提とします。ユーザーでログイン後、このコマンドでシェルスクリプトが実行した内容のログを確認できます。なにか異常終了していないか確認してみてください。psこのコマンドでは、コンテナが動いているかどうかを確認できます。cat-health-checkこのような結果が表示されていればコンテナは動いていると思われます。(この結果はPeerノード立ち上げ時の例)セキュリティグループの確認こちらはAWS側の設定になりますが、セキュリティグループで適切なポートを開放しているかどうかを確認してみてください。おわりにサーバの構築にはそれなりの知識と、ハッカーやアタッカーの踏み台にされないように自衛をする責任が必要です。今回の作業とスクリプトでは簡単ではありますが、必要十分な対策は施してあります。それでも、可能な範囲で自分のやっていることの意味を理解していただけると幸いです。(その知識はそれほど無駄にはならないと思いますので、ぜひ調べたり、質問してください)公式からもノード構築のガイドが出ていました。こちらも参考にしてみてください。22:42:14ID:172066>>mash::さんノードのブロック高が確認できて、それが増加し、最新ブロック高に追いついたらOKです。(増加するところまで確認できていれば十分です)その後は特にやることはないですw強いて言えば維持ですかね。一種のネットワーク貢献という感じでしょうか。今回はメインネットに向けてのテストでのバグや障害出しというのが目的になりますね。このあたりは公式から何か案内がでるようなので、その時また改めて構築に関する記事を書こうと思います。そのときにまた、ぜひネットワークテストに参加していただければ幸いです。17:19:14ID:172017遅ればせながら、参考に立ててみました。一度一通り進めたのですが、読み込み直していみたらインスタンスごと消えて無くなっていました。アクセスもなんか上手く行ってなかったっぽいんですが再度インスタンス立ち上げてみたら今度はうまくいったみたい。前に少し触ったけどよくわかってないですね私。私にもできたようです。ありがとうございます。ちなみにこれ、このあとどうしたらいいんです?初歩的なこと言ってすみません。15:53:46ID:170918>>わんこイン.nem::さんうまくいってよかったです。スクリプト内のコマンドをそのままなぞればGCPやAzureのサーバでもできると思います。(UbuntuなどDebian系や古いRedHat系だと一発ではうまく行かないかもしれませんが)修正したコマンドでスクリプトを書き換えれば、次回以降はそのスクリプトで一発構築できるようになりますのでぜひ挑戦してみて、成果を残してみてください。07:10:12ID:170865今度はできたようです。最初からPCですればよかった!!アンドロイドタブでしてたからできなかったのかな?順調にheightの数値が伸びてます手順どうりにコードをコピペして実行するだけでノードがつくれるなんてすごいです。AWSの無料枠でしてみました。20:18:56ID:170458ありがとうございます。snは無理ですが、nodeは立ち上げたいと思っています。Dockerつかうのであれば今回作っていただいた設定はすごく重要だと思います。すごく勉強になりました。疑問にも答えていただいてありがとうございます。引き続きいろいろやってみます。一つ質問があります、現在テストネットですが、本来のmain_netになってもdockerのイメージを使って運用する予定なのでしょうか?私にはわかりませんが、手段の一つとして提供される可能性はあると思います。確実なのは、Catapult-serverのソースをコンパイルすることですが、コンパイル環境を整えたりといろいろ大変です。それら諸々を解決済みで実行するだけでネットワークに参加できるDockerイメージは、その製作過程でマルウェアを混入されることもあります。実際にビットコインやMoneroマイナーが入れられたイメージの配布が起こってます。https://blog.trendmicro.co.jp/archives/21525なので、公式として展開されているものなら大丈夫だとは思いますが、それでもやはり監視の目は必要ではないでしょうか。サーバーの要求水準が1つですが、api-nodeとpeer-nodeではスペックに差がでるとずっと疑問に思っております。https://nemtech.github.io/ja/guides/network/running-a-test-net-node.html#hardware-requirementsスペックについてはこちらで確認できます。テストネット向けのものですが。api-nodeとpeer-nodeではスペックに差がでるAPIノードはPeer+APIサーバなので、APIノードのほうがスペックもストレージも必要になるのは明らかです。クライアントによる問い合わせも処理することになるので、それだけ負荷がかかることもあるでしょう。本日テストネットは動いてるのでエラーが無い限りこのままメインネットにする1,000ノードを用意して、負荷実験をしたり、チェーンが壊れないかのテストをしたいそうです。その結果しだいではバグフィックスがまだまだ入るかもしれません。このチェーンがメインネットにはなりません。メインネットはメインネットとして改めて開始されるはずです。11:57:44ID:170415無事立ち上がりました。インスタンス3つ目で成功しました。丁寧な解説ありがとうございます。一つ質問があります、現在テストネットですが、本来のmain_netになってもdockerのイメージを使って運用する予定なのでしょうか?サーバーの要求水準が1つですが、api-nodeとpeer-nodeではスペックに差がでるとずっと疑問に思っております。10:04:37ID:170407>>やそ::さん立ち上げるだけなら、手順通りにやっていただければできてしまいます(本当は上記以外にもやらないといけないことはあるのですが...)が、やはりサーバ構築は知識と責任を伴います。調べた知識は今後、暗号通貨に限らずインターネットに関連することであれば無駄になることは無いと思いますので、ぜひ挑戦してみてください。