NEM委任ハーベスティングの仕組みは改良の余地アリ

ご無沙汰しております。

最近ネタ切れで書く気が失せていました。

ひぃ。

さて、今日は以下の二記事をベースに、

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

Proof of Stakeのシンプルな実装の簡単な説明

「NEMはハーベスティングをするのに10000XEMという制限を課しているが、主な理由としてスロット制限が挙げられる。スロット制限を設けているのはなぜか。」

というクリプトエコノミクス的思考力問題を社内でやっていたわけですが、

これの答えをブログに書いておこうと思います。

前提知識

前提として、上記二記事と、スロットについてわかっていればこの話は理解できます。

スロット

NEMノードは、委任ハーベスティングスロットというものを設けており、スロット数には上限があります。

つまり委任したい側は、スロットが空いているノードを探して委任しなければなりません。

なぜこの制限を設けているのか、が本題です。

答え

正解は、越後製菓。

冗談は置いといて。

答え

正解は、

  • hashを上回るtargetであるかを1秒ごとに計算しないといけない中で
  • 委任されてる人数分だけtargetを計算しなければならず
  • 1秒間で計算が間に合わない場合はノード運営者が損失を被るため
  • ノード運営者は委任ハーベスティング受託を絞るインセンティブがある

からです。

ここに、ノード自身の秘密鍵と委任された秘密鍵計N個あるとしましょう。
i個目の秘密鍵の重要度を使って計算するtargetをTiとします。
Nが十分に小さい場合、例えばN=3とすると

------------------------------------------------------------------------------>秒
59                              60                              61
T1,T2,T3                        T1,T2,T3                        T1,T2,T3

計算は余裕で間に合います。

一方、Nが不適切な水準で大きい場合(どれくらいかよくわからんのでとりあえずNとする)

------------------------------------------------------------------------------>秒
59                              60                              61
T1,T2,T3...............................,TN,T1,T2,T3............................

計算が追いつかんのですね。

だからスロット制限をもうけ、かつスロットが埋まりきらないように10000XEMの敷居を設けてるのだと考えられます。

提案

はっきり言って、この制度は不便です。

10000XEMは気軽にやるには敷居が高い。

根本的な話をすると、ノードが委任を受託するインセンティブすらない。

以下のようにプロトコルを改善することを提案します。

  • 重要度転送トランザクションの転送先をリモートアカウント(ダミーアカウント)ではなく委任先ノードとし
  • ノードは1秒ごとにtarget計算はノードの重要度=(自身の重要度+委任された重要度)をつかった一回で済ませ
  • ハーベスティング報酬を、ノードに委任されている重要度の合計に占める各委任者の重要度の割合で分配する
  • 分配するうち、ほんの一部分は委任報酬としてノードが受け取る

こうすれば

  • ノードが委任を受けるインセンティブがあり
  • 10000XEMの制限を作る必要がない
  • スロット制限を設ける必要もない

一石三鳥ですね。

NEM技術者の中では経済学的なメカニズムデザインの知識があるほうだと自負しているので、core devの方、この記事呼んでたらご一報ください。