NEMにおけるスーパーノードの役割について

NEMのスーパーノードに関しては、既にいくつかのサイトで情報が出ているし、報酬のことも広まりつつある。
けれど、そもそも論としてスーパーノードが何のためにあるのか?
というのを知らない人が多い印象を受けたので補足的なことを記述。
ただし、認識が間違っている可能性もあるのでそのときはご指摘ください。


1.NEMとは?

簡単に言えば、ブロックチェーン技術を使った暗号通貨(仮想通貨)の一種で、Bitcoinの問題点を改善して新たに作ったシステム。
パブリックチェーンなので誰でも使える。
通貨単位はXEM。
調べれば色々情報が出てくるのでここでは割愛。
そもそもスーパーノードに興味があるのにNEMを知らないと言う人はいないはずだけど、たまたまここを見ていると言う人は以下のサイト等を足がかりにどうぞ。

www.cryptostream.jp

2.mijinとは?

簡単に言えばNEMのプライベートチェーン。
主に企業や団体が使うためのシステム。
本題じゃ無いので、以下の「mijin資料2017年6月日本語版」にリンクされているPDFを参照。

mijin.io

3.ノードとは?

スーパーノードの「ノード」とは、簡単に言えばサーバー。
他のノードと通信してデータのやりとりを行い、データを蓄えるためのサーバー。
システム関係者向けに一言で言うなら、アプリケーションサーバー且つDBサーバー。
これが無いとNEMというシステムが動作しない重要なもの。

やりとりするデータとは、誰が誰にいくら送金したかという取引情報(トランザクション、TXと略す)を指す。
※NEMの場合0XEMでメッセージを送信することも出来るけど、これもトランザクションの一種(0XEMを送金したという扱い)

1トランザクションごとにデータのやりとりをするのは無駄が多いので、ある程度まとめて扱う。
この時のまとまったデータをブロックという。
※段ボール箱(ブロック)に荷物(トランザクション)を詰め込んで、配送するイメージ

このブロックを繋げて全トランザクションの履歴を管理するのでブロックチェーンと呼ばれるけれど、その辺は割愛。

つまり、「ノード」とは他のノードと通信してデータ(ブロック)のやりとりを行い、データ(ブロック)を蓄えるためのサーバー。
※色んな暗号通貨でノードと言う言葉が出るけど、若干言葉の定義が異なることもある

4.スーパーノードとは?

簡単に言えば、一定条件を満たしたノードのこと。
一定条件とは、以下のサイトに記載されているとおり。
※条件を満たした上で、「俺がスーパーノードだ!」というメッセージを特定アカウントに投げる必要あり

nemmanual.net

なんか色々凄い条件が必要そうだけど、サーバーのスペック的には月額1500~3000円程度のVPS(仮想OSのレンタルサーバー)で事足りるので、大したことはない。
単純なスペックだけで言えば、個人で使ってるPCの方が高い人も多いはず。
ただ、スペック以外の条件として「300万XEMが必要」と言うのがあり、保持するための難易度が高くなっている。

では、何故この難易度の高いスーパーノードをわざわざ保持したい人がいるかというと、報酬(インセンティブ)が貰えるから。
スーパーノードは約6時間に1回の間隔で条件を満たしているかチェックされ、4回連続でチェックをパスすれば報酬が貰える。
※2017/07/17時点では14万XEMをスーパーノードの台数で均等割されている

では、何故報酬が必要かというと、安全且つ安定したノードが無いとNEMが使い物にならないから。
ノードのスペックが著しく低いと、送金したくても通信速度が遅すぎて反応が返ってこなかったり、蓄えているデータ(ブロック)が中途半端な状態でまともに機能しないということもあり得る。
企業のサーバーだと外部に管理を委託したり専任の保守担当者を用意したりするけれど、NEMはパブリックチェーンであり誰でもノードを建てられる反面、簡単にノードを辞めることもできる。
なので、報酬という形でメリットを与え、それぞれのスーパーノード管理者がノードを維持しようとするモチベーションや動機を生みだしている。
※スーパーノード報酬は無尽蔵では無いので最終的には送金時の手数料で賄うというのが当初想定だが、今後どうなるかは不明

5.スーパーノードの役割とは?

一応、ここからが本題のはず。

簡単に言えば、NEMを使う人達のために存在することがスーパーノードの役割。

5.1.NEMというシステムを維持する

NEMはゼロダウンタイム(システムが止まること無く稼働できる)のシステムになっているので、理論上は最低1台のスーパーノードが稼働していれば動作する。
とはいえ、実際に1台しか存在しない場合、稼働しているスーパーノードにすべての処理を依頼することになり、良くて遅延、悪くてサーバーが固まって反応しなくなる可能性が高い。
そのため、スーパーノードはある程度の台数が常に稼働し、負荷分散して動作を安定させる必要がある。

また、ある程度の台数が必要なのは、データの整合性(正当性・安全性)を担保するという意味もある。
例えば、スーパーノードが1台しか存在せず、そのスーパーノードがハッキングされたりウィルスに感染してデータが改ざんされた場合、改ざんされたデータが正しいデータとして扱われる。
簡単に言えば、不正送金が事実として扱われ、色んな人のXEMが他人に奪われる。

しかし、スーパーノードが100台あり、その内の1台だけデータを改ざんされた場合、残りの99台のデータが正しいデータとして扱われるため被害が出ずに済む。
こういう場合に備え、正しいデータを保持しているスーパーノードの数がある程度必要となり、台数が多いほど改ざんが難しくなる。
※NEMの場合は信頼値とかで判断しているはずなので、データの正しさは単純にノード数の割合で決まるわけでは無い・・・はず(よく分かってない)
※「ある程度の台数」が具体的に何台なのかは、サーバースペックや取引量(利用者数)によって増減するので不明
ブロックチェーンではゼロダウンタイムの考えが一般的(?)だけど、企業システムだとこれを実装するためだけに膨大な費用(数千万とか億とか)が掛かることもある

5.2.Walletを使う

たとえば、Nano Wallet(Ver.1.4.0)だとログイン直後のトップ画面に「ノード」というボタンとランプがある。
※今後のバージョンアップでは自動接続する方式になり、無くなるかもしれないが

このランプが緑なら接続中、赤なら未接続という状況だが、ここでいう「接続中」とは「スーパーノードと接続して情報を取得出来ている」と言うことになる。
つまり、スーパーノード以外の人達が自分の資産を見たり、送金したりするときにはスーパーノードに接続する必要があると言うこと。

何故接続する必要があるかというと、スーパーノードに蓄えているデータ(ブロック)を元にそのWallet(アカウント)の資産を確認しているから。
そのアカウントにいくら資産(XEM)があるか分からない状況では当然送金が出来ないので(出来たら不正送金がやり放題)、Walletにログインすると自動的に最新情報を取得している。
たまに、自分の資産が表示されないという人を見かけるが、それは正常稼働していないスーパーノードから情報を取ろうとしているからなので、別のスーパーノードを指定すると正常に表示されるようになる。

Walletとスーパーノードの関係は、ATMと銀行のサーバーみたいなもの。
ATMを使うときは銀行のサーバーに接続して残高確認や入出金しており、ATM本体の電源が入っていても銀行のサーバーが動いていないと何も出来ないのと一緒。

5.3.委任ハーベストを受け入れる

ハーベストとは、トランザクション時に発生した手数料を入手(収穫)すること。
最近、Twitterで委任ハーベストを始めた人や始めようとしている人達が増えているけれど、委任ハーベストをするときには委任先のスーパーノードを選ぶ必要がある。
これは、簡単に言えばスーパーノードを間借り(委任)してハーベストを行っていると言うことになる。
当然、稼働しているスーパーノードが無ければ委任ハーベストは出来ないし、スーパーノードが止まっていたらハーベストが出来ない。

もし、スーパーノードに委任したくなければ、自分でノード(サーバー)を用意して、自分自身でハーベストを行うことも出来る(ローカルハーベストと言う)。
ただし、ローカルハーベストを行う場合は当然サーバーを動かし続けていなければ収穫することが出来ないため電気代等が掛かる上に、セキュリティ等の対策も自分ですべてやらなければならないので、金が掛かる上に面倒くさい。
※なので、Nano Walletではローカルハーベストを行う機能は提供されておらず、簡単且つ安全に出来る委任ハーベストのみ機能が提供されている
※現時点でスーパーノード側には委任されることによる直接的なメリットは無いが、スーパーノード保持者もハーベストが出来るので、取引が活発になれば間接的に収穫量が増えるというメリットはある(300万XEM保有しているので、収穫できる可能性は他のアカウントよりも高い)

6.改めてスーパーノードとは?

スーパーノードとは、条件を満たした「安全且つ安定したノード」のこと。
スーパーノードを維持することは、NEMというシステムを維持することに繋がる。
それだけ重要なものなので、スーパーノードを保持している人達には報酬を与えられる。
何故報酬を与えるかというと、スーパーノードを維持する意欲が失せて、スーパーノードを止めてしまうから。

報酬を与える条件としてサーバースペック以外に300万XEM必要というのは安全性を高めるため。
悪意ある人がスーパーノードを乱立させてデータを改ざんしようとするのを防ぐため。

ただし、報酬を得る条件としてのセキュリティ要件は存在しない。
そのため、スーパーノード管理者はそれぞれがセキュリティ対策を行い、安全性を高める必要がある。
※この辺もまとめたいけど、上手くまとまらないのでどうしたものか・・・

 

 

余談1:報酬≠条件

勘違いしている人がいるかもしれないが、報酬を貰うのはスーパーノードの条件では無い。
報酬は、あくまでも安定して動作していると認められたから(その謝礼として)貰えるのである。
つまり、条件を満たしていればスーパーノードと呼べるため、チェックに4回中1回失敗した場合でもそれはスーパーノードと呼んで良い(はず)。

以下のサイトでNameをクリックすると個々のスーパーノードのチェック状況が表示されるが、その中の「Result」で4連続「PASS」していれば報酬が貰えたスーパーノードとなる。

NEM Node Rewards

※このサイトの一覧は「俺がスーパーノードだ!」というメッセージを投げた「自称スーパーノード」一覧で、PASSしているノードが条件を満たしたスーパーノードとなる(そのため、以前は300万XEM持っていたけど今は持っていないというノードもそれなりに存在する)

余談2:性善説性悪説

Bitcoinを初めとしたブロックチェーン技術は、一般的に性悪説(というのが正しいか分からないが、悪意を持つ人が存在することを前提にした考え)を元に構築されている。

たとえば、日本銀行を初めとした様々な銀行はどちらかと言えば性善説(少なくとも内部には悪意を持つ人がいないことを前提にした考え)を元にしている。
要は、日本銀行がこっそりお札を刷らないとか、銀行員が勝手に他人の銀行口座の中身を抜き取ったりしないとか、そういう悪意ある行動をしないというのを「信じている」という前提で成り立っている。
(実際にはそれらに対して多重チェックを入れたり、実行犯には厳罰を与えることで成り立っているけれど。)

対して、ブロックチェーンを使ったシステムでは最初から他人を「信じない」というのを前提にしている。
その代わり、予めシステム的に色々と組み込んでおいて、「他人を信じなくても安全性を担保する為の仕組み」を用意し、利用者やノードが増えれば増えるほど安全になるように設計している。
この辺が、非中央集権(日本銀行のような存在がいなくても問題無く稼働し続ける)というのを成り立たせるための手段の一つとなっている。

NEMの場合は、スーパーノード報酬を与えることで、「スーパーノードを保持している人は必ずしも信じない」が「スーパーノードのデータは安全」(おかしなデータを持っているスーパーノードは信頼を失う)という状況を作っている(はず)。

まぁ、細かい点について説明できるほど詳しくは無いので、興味がある人は自分で調べてみてください。