マスターノード、PoS、量子耐性の仕様について

SHIELD Japan Community
13 min readMay 3, 2018

--

コミュニティメンバーからしばしば、XSHが最大発行枚数に達した際にマイニング、ステーキング、そしてマスターノード報酬がどのように変わるのかを聞かれることがあります。

結論から言うと、発行枚数が上限に達したとしても、マイナーもステイカーもトランザクションFeeによる報酬を受け続けることができます。一方で、ステーキングとマスターノードの維持にインセンティブを与えるために報酬割合を変更し、それに伴いシールドの発行枚数を6億6000万XSHから7億5000万XSHに引き上げます。

マスターノード

マスターノードの投資収益率(ROI)の計算には、アクティブなマスターノード数の考慮が必要です(この数を予測することはできません)。ROIを計算するためには、以下の式を用います。

Annual ROI=年間利益率

a = マイニングされたコイン (当該期間におけるブロック報酬の45%)
b = アクティブなマスターノードの合計数
c = 最新のブロックナンバー(当該期間のもの)
d = 最初のブロックナンバー(当該期間のもの)
e = 45/3600/24/365 (1ブロック当たりの生成時間(年換算))
f = マスターノードに必要なコイン数 (200,000 XSH)

マスターノードは、約550万ブロックの区切りまでに一定の%のブロック報酬(ブロック報酬は時期により変動)を得ます。この区切りにいたるまでに、およそ1億600万シールドがマスターノード報酬に割り当てられます。これは、マスターノード実装時点で計算すると年間約9%のROIに相当します(アクティブなマスターノード数により変動)。この%は、いくつかの仮想通貨のマスターノード報酬よりも低く設定されていますが、これは通貨のインフレを防止するために必要なことです。

下記のグラフは、ROI(%)とアクティブなマスターノード数の関係を示したグラフです。(イニシャルのMN数を500、最大数を2500前後としてプロットしています)

Here is another representation, extended into the z-axis.

上記の図は、ブロック報酬が減少する事によるマスターノードのROIへの影響を表しています。値zは一定の期間中計算され、期間中のマスターノード報酬の合計が一定期間内(年単位)に分配されていることを表しています。通常、値zが高ければ高いほどブロックは新しいものとなります。

この公式をマスターノードが実装されてからの2年間に当てはめると、年率9%のROIが得られると予想されます。そして、550万ブロックの区切りにおいては年率7%の報酬を得られると計算できます。

PoS報酬 (PoS Boo)

多くの変数が関わって来るため、我々の開発したカスタムPoSプロトコルの報酬の計算は少々難解です。簡潔に言うと、ユーザー毎の報酬は、ステーキングするユーザー数およびその時点でステーキングされているコインの総数によって決まります。 流通しているXSHのうち半分がマスターノード用にロックされている時、残りのXSHがステーキングされているかはわかりません。 このファクターは、報酬の計算に変動の激しい変数を加えます。

PoS Booは基本的には投票システムと類似しています。ステーカーは「正しい」、「ブロックチェーンに加わりそう」と思うブロックに対して投票する事を選べます。この変数をファクターc、ステーカーのconfidence(信頼性)として定義します。cの値が高ければ高いほど、正しかった時の報酬r(rewardのr)も高くなります。しかし、間違っていた場合のペナルティもその分大きくなります。ブロックは、投票者のマジョリティが特定のブロックを「正しい」と投票した際に認められます。

「経済的重要性」の関数は、ユーザーがステークするコイン数とユーザーの信頼性を用います。ブロックの中で最も「経済的重要性」の高いブロックが承認されます。さらに、もしユーザーが値cを複数のブロックに与えた場合(悪意を持って)、ブロックチェーンレベルでの厳しいペナルティがユーザーに下されます。

SHIELDステーカーの年間報酬を計算する際は以下の式を参考にしてください:

ブロック毎の報酬= (PoSブロック報酬) * (重要性/ ネットワーク重要性)

PoSのブロック報酬はイニシャルでは16.1 XSHです。「ネットワーク重要性」 (正しいブロックを承認したユーザーの重要性の合計) と「重要性」は個別に計算される必要があります。

重要性= z* (ユーザーのステーキングしているコイン数)
z = 2 -2/(c + 1)

ユーザーの信頼性cはブロック毎に異なるため(ユーザーの重要性とネットワーク重要性のように)、年間のステーキング報酬を正確に計算する事は不可能です。

より詳細に説明するため、下記のチャートでSHIELDの年間PoS報酬を、重要性と信頼性cが同じ280のユーザーがあらゆるステーキング可能なブロックをステーキングしていると仮定したものです。また、この時これらの280ユーザーは100%正しいと仮定します。チャートは、ユーザーが受け取るXSHの数量にばらつきがある事を表しています。

PoSペナルティ (PoS Boo)

先ほどのトピックが、コミュニティが最も気にしていた点です。本トピックではカスタムPoS Booプロトコルの最も興味深い点、あらゆるPoSと異なる点、ペナルティについて説明します。ペナルティはブロックチェーンの完全性とセキュリティを担保するのに不可欠な要素であり、ブロックチェーンへの悪意ある攻撃に対する対策でもあります。ペナルティは2種類導入される予定です。1つは、ユーザーが一度に複数のブロックに投票した場合、もう1つが、ユーザーが信頼性cを大多数の支持していないチェーンに与えた場合です。それぞれのシナリオは独立した話で、ペナルティの内容も異なります。

同一ブロック時点番号における複数投票

もしユーザーが同一ブロック時点で信頼性cを複数のブロックに与えた場合(そして悪意があると認めらた場合)、ペナルティが与えられます。このメカニズムは、そのようなユーザーの収益性を著しく下げることにより、ブロックチェーンへの攻撃を抑止しています。 Booがチェーンに対する攻撃を減少させる方法は大きく2つ存在します(2種類のペナルティ)。Booは1つのエンティティが51%以上の承認力を得るのを抑止するために開発されました。それは、攻撃者は今やたかが51%のハッシュパワーを得るよりも凄まじい量のコインを得る必要があるからです。十分なコイン数がなければ、十分なハッシュパワーを持っていてもユーザーはネットワークを毀損する事は出来ません。それでももし誰かが悪意を持ってブロックチェーンを操作し、同一ブロック時点で複数のブロックに投票しようとした場合、そのユーザーがステークしているコインの25%がバーンされます。

「間違った」ブロックに投票した場合

ステーカーが特定のブロックに投票したがそのブロックが間違っていた場合、ペナルティが与えられます。 しかし、それは複数ブロックへの投票に比べれば軽いものです。(間違ったブロックへの投票は偶然起こりうるものですが、複数ブロックへの投票は悪意がなければ起こりえないからです) ペナルティは、質の低いチェーンへの投票を防ぐため、そして合意形成の促進のために行われます。ペナルティはイニシャルでは0、あるいはとても少額から始まります。しかし、ステーカーが「間違った」ブロックへの投票を一定期間内にn回数行った場合、以下の式で計算されるXSHが失われます:

penalty=ペナルティ、blockreward=ブロック報酬、weight=重要性

あるいはもっと単純に:

ここで:
n = 「間違った」投票を行った回数
重要性 = z * (ステーキングしているコイン数)
ブロック報酬 = その時点でのSHIELDブロック報酬(イニシャルでは46)

Penalty for fault n=n回数に対するペナルティ、Total Penalty=ペナルティの合計

量子耐性

最後に、SHIELDに実装される量子耐性についてのお知らせです。量子耐性のアルゴリズムを選択する際は、様々なファクターを考慮しました。いくつかのアルゴリズムはセキュリティは強固だけれども、容量をひどく圧迫するものもあります。より高速なトランザクションスピード(tx/s)と量子耐性を両立させるため、当初はセキュリティを犠牲にすることも検討しました。ですが、長い調査や計画の結果「比較的小さいトランザクションサイズ」で「量子コンピューター、あるいは通常のコンピューターからの攻撃に対する非常に強固なセキュリティ」を共存させる方法を見つけました。BLZZRD(BLISSの改良版)と呼ばれるC++によって書かれている量子検算アルゴリズムを用いる事です。我々はライブラリの作成を含む多くの作業を既に終えましたが、SHIELDブロックチェーンへの実装にはまだいくらかのステップが必要です。

それだけではありません。我々の知る限り殆どの量子耐性アルゴリズムは、暗号通貨への導入に問題を抱えています。秘密鍵やパブリックアドレスの再利用ができないのです。これではルールとして厳しすぎ、現実的ではありません。我々はこの問題を解決するため「Project Carbyne」を開始しました。

「Project Carbyne」は、我々が今すぐにSHIELDネットワークに量子耐性を実装できない理由の1つです。我々の開発した量子耐性は、我々が開発したPoSスキームのようにカスタムメイドです。ソリューションを開発し、テストし、実装するには少なからぬ時間がかかります。ですがこれらの時間をかける事により、これまでより堅牢でより優れた機能を実装することができます。

BLZZRDではトランザクションサイズは0.8KB程度になる予定です。これまでの通常のSHIELDトランザクション(0.18–0.3KB)よりも大きい事になります。すなわち、BLZZRDトランザクションは最大でこれまでの20倍の容量を必要とすることを意味します。現在、我々は量子耐性アドレスと通常のアドレスを選択できる機能を開発しています。これにより、ユーザはセキュアなアドレスを使うか否かを選択できます(場合によっては、セキュアなアドレスのほうがトランザクション手数料が高くなる可能性があります)。仮に全てのトランザクションが量子耐性だった場合でも、SHIELDは1分間に800ものトランザクションを実行できます。これは、これまでのいかなる量子耐性アルゴリズムよりも優れています。この事実に加え、我々が開発したアルゴリズムでは秘密鍵とパブリックアドレスの再利用を妨げないため、我々の量子耐性ソリューションが現時点で最高峰である事を証明しています。

通常と量子耐性トランザクションの違いについて

Normal=通常、QP=量子耐性、Nuimber of Inputs=トランザクション量、Size(in bytes)=容量

上記のグラフはx量のインプットによるトランザクションのトランザクションサイズです。量子耐性版では、たやすく500KBに到達することがわかります(これは現在のSHIELDの最大ブロック容量です)。通常版のSHIELDトランザクションでは、2800程度のインプットを保持できます。量子耐性トランザクションでは、同じ500KBで625程度のインプットしか保持できません。量子コンピューターへの耐性は重要ですが、我々は通常のトランザクションと量子耐性トランザクションの両方をサポートします。下記のグラフは、量子耐性トランザクションと通常のトランザクションの両方をブロックに乗せた時のインプット/トランザクション(z)を表したグラフです。

インプット量の増加とともに、ブロックの保持可能なトランザクションの量は減少します。上記の図を3D空間にプロットしたのが下記の図です。

さらに、我々は我々の量子耐性アルゴリズムとその他ソリューションと比較しました。我々のアルゴリズムでは秘密鍵とパブリックキーを再利用でき、その他のソリューションでは出来ないため、完全に公平な比較ではないことは明言しておきます。

上記のデータはベストケースシナリオによって計算され、トランザクションにつき1インプット、0アウトプットで計算されています。このデータは各アルゴリズムのトランザクション速度(tx/s)とブロックで保持できるトランザクション量についての重要な指標になるでしょう。このデータは、我々がどのアルゴリズムを採用するに至ったかを説明する重要な指標でもあります。

最大発行枚数

上述したとおり、SHIELDの最大発行枚数が増加します。これは2つの方法によって実現されます。報酬が与えられるブロック数の増加及びブロック報酬そのものの増加です(このためにハードフォークを伴います)。これは、ステーキング及びマスターノードのROIを上昇させることで、ユーザーにインセンティブを与えるためです。これによりSHIELDブロックチェーンそのものの効率性と安定性の向上にもつながります。

報酬の変更は、ハードフォーク後を予定しています。下記のテーブルは、変更後のブロック枚数等を表しています。

hf=ハードフォーク

現在の計画では、ブロックが#800,000に到達する前にマスターノードを実装する予定です。ハードフォーク直後のブロック報酬はフォーク前と同一です。これは導入直後のインフレを防止するためです。その後ブロック#2,124,000で予定されている半減期で、従来32を予定していたブロック報酬が46に置き換わっています。次の半減期であるブロック#4,248,000でも、従来0を予定していたブロック報酬を23としています。

--

--

SHIELD Japan Community

SHIELD日本コミュニティのアカウントです。This is the Japanese SHIELD Community account.