NEMのハーベスティングの仕組み

不正アクセスによってコインチェックからNEMが流出する事件が発生し、NEM自体の知名度は上昇していますが、NEMのシステムへの理解はあまり広まっていません。

「識者」の、ビットコイン固有のシステムがNEMにもあるものだと思い込んだ論評や、NEM固有のシステムを誤解したままの論評がまかり通っています。

NEMでマイニングが…

コインチェックはハーベスティングをするためにホットウォレットでの保存を余儀なくされたのではないか

このような趣旨の論評が散見されます(ホットウォレットの説明はNEMのコールドウォレットは難しいのかをご覧ください)。

これらの論評をしている方は全くNEMのシステムに無知ですが、たしかにNEMのハーベスティングの仕組みについて、網羅的に説明されてるブログ記事をあまり見かけないのも事実です(存在する記事の多くは、ハーベスティングの設定方法を解説した記事です)。

なので、ハーベスティングの仕組みについて網羅的に説明したいと思います。

ブロックチェーン更新

ビットコインの知識をNEMに当てはめて論評する方が多いので、まずブロックチェーン更新の説明、マイニングの説明から入りたいと思います。

ブロックチェーンは極めて簡単に言うと、ブロックに情報(送金情報など)を保存し、さらに1つ前のブロックのハッシュ値も保存することで、連鎖的に整合性を担保する仕組みです。

ハッシュ関数は、改ざん検知に使えます。

NEMのコールドウォレットは難しいのかで説明したように、デジタル署名を利用して、本人しか署名することのできない送金情報をブロックチェーンに保存すれば、仮想通貨システムができあがります。

ブロックチェーンでは、新しいブロックを、既存のブロックチェーンに繋げるという更新作業が必要になってきます。じゃあ誰がこの作業をやるのか、というのが問題で、この決定方法の一つがマイニングなわけです。

マイニング(採掘)

ビットコインなどにおいては、GPUやCPUを使って複雑な処理をさせ、求められた結果を最初に出した人にブロックを更新する権利が与えられます。そして、ブロックを更新した人には、報酬(新規発行や、ブロックに含まれる送金の手数料)が与えられます。この一連の流れを、マイニングといいます。マイニングによって、悪意ある人物にブロックチェーンを改ざんされることはないことが担保されます。これをProof of Workといいます。

複雑な処理の内容

ビットコインにおいては、トランザクションのハッシュ値をまとめたもののハッシュ値「merkle root」、ある値「nonce」、そして前ブロックのハッシュ値、これら3つの値をまとめたもののハッシュ値が、ある値(difficulty設定により変動)を下回るような「nonce」を見つけるという処理をします。ハッシュ関数は

  • 出力から入力を求めることが困難
  • 少しでも入力が変化すると出力は大きく変わる

という性質を持っているため、大量の総当たり処理をしてnonceを見つけなければなりません。

ミンティング(鋳造)

Proof of Stakeを採用している仮想通貨においては、保有残高と保有年数から計算されるコイン年数に応じてブロックチェーン更新権利が与えられます。そしてブロックチェーンを更新した人には報酬が与えられます。この一連の流れをミンティングといいます。

ハーベスティング(収穫)

次はハーベスティングの説明をします。

NEMにおいては、GoogleのPageRankアルゴリズムと同じく、グラフ理論を応用し、取引量、保有残高から重要度を計算し、重要度に応じてブロックチェーン更新権利が分配されます。そして、ブロックチェーンを更新した人には報酬(ブロックに含まれる送金の手数料)が与えられます。この一連の流れを、ハーベスティングといいます。重要度に応じたブロックチェーン更新権利の分配によって、悪意ある人物にブロックチェーンを改ざんされることがないことが担保されます。これをProof of Importanceといいます。

以下は、NEM NIS API Documentationより引用した、AccountImportanceViewModelのJSON構造です。


{
  "address": "TALICELCD3XPH4FFI5STGGNSNSWPOTG5E4DS2TOS"
  "importance":
  {
    "isSet": 1,
    "score": 0.0011561555164258449,
    "ev": 0.004367936531009263,
    "height": 38413
  }
}

importance.scoreが重要度を、importance.evが重要度のうちページランク部分を表すようです。

委任ハーベスティングの仕組み

さて、本題です。ビットコインのマイニングを行うためには、ブロックチェーンデータを同期して保存するノードを建てなくてはなりませんが、NEMのハーベスティングは、ユーザーがノードを建てなくてもできるようになっています。ユーザーは自身が管理していないノードにブロックチェーン更新作業を委任することにより、常時PCを起動させなくてもハーベスティングができます。これを委任ハーベスティングといいます。Nano Walletから設定できます。

ブロックチェーンの更新には、アカウントの秘密鍵が必要です。
ビットコインなどでは、自身でノードを作成し、秘密鍵も管理するので、特に問題はありません。

一方、委任ハーベスティングしたいユーザーは、委任先のノードに自身の秘密鍵を教えなければなりません。しかし、教えてしまうとノードは自身のアカウントから送金できるようになってしまいます。

この問題に対処するために、NEMでは「リモートアカウント」と「重要度転送トランザクション」という仕組みが用意されています。

リモートアカウント

リモートアカウントとは、秘密鍵を知られても困らない、残高0のダミーのアカウントのことです。

リモートアカウントの秘密鍵を委任先のノードに教え、ブロックチェーン更新を委任します。

安全のため、公開鍵と秘密鍵は塗りつぶしてありますが、本来は表示されています。

重要度転送トランザクション

ですが、普通に考えれば、ダミーアカウントの重要度は0です。これではブロックチェーン更新権利が与えられるはずがありません。

そこで、重要度転送トランザクションを使います。これを使うことによって、リモートアカウントの重要度を参照する際、自身のアカウントの重要度を参照するように設定するわけです。

以下は、NEM NIS API Documentationから引用した、ImportanceTrnsferTransactionのJSON構造です。


{
  "timeStamp": 9111526,
  "signature": "651a19ccd09c1e0f8b25f6a0aac5825b0a20f158ca4e0d78f2abd904a3966b6e3599a47b9ff199a3a6e1152231116fa4639fec684a56909c22cbf6db66613901",
  "fee": 150000,
  "mode": 1,
  "remoteAccount": "cc6c9485d15b992501e57fe3799487e99de272f79c5442de94eeb998b45e0144",
  "type": 2049,
  "deadline": 9154726,
  "version": 1744830465,
  "signer": "a1aaca6c17a24252e674d155713cdf55996ad00175be4af02a20c67b59f9fe8a"
}

ここでは、signerは自身の公開鍵、remoteAccountはリモートアカウントの公開鍵です。
このような情報がブロックチェーンに刻まれているわけです。

イメージ

 

わかっていただけたでしょうか。このように、リモートアカウントと重要度転送トランザクションを組み合わせることによって、NEMはノードを建てなくてもブロックチェーン更新に参加し、報酬を得ることを可能にしています。

ハーベスティングへの理解の普及につながれば幸いです。