NPoS(Nominated Proof-of-Stake)とは

m_web3
Unchained
Published in
8 min readJul 8, 2019

〜Polkadotで採用されるNPoSはいかにValidatorノードの分散性とネットワーク全体のセキュリティを実現するか〜

PolkadotネットワークはPOSのセキュリティや中央集権化の問題を解決するべく、Nominated Proof-of-StakeというValidatorを選ぶスキームを採用しています。この記事ではNPoSがどういう仕組みで動くのかを主旨に、ValidatorやNominatorの役割から解説していきます。

ValidatorとNominator

Polkadotエコシステムには4つの役割(Validator, Nominator, Collator, Fisherman)が存在しますが、今回はNPoSに関係のあるValidatorとNominatorについて簡単に説明します。他の二つの役割は初心者のためのPolkadotを参照してください。

Validatorとはこれらの4つの中で最もネットワークにとって重要な役目を持ち、各Parachainからのトランザクションの検証、ブロック生成、ファイナリティ投票、そしてコンセンサスなどを行います。Validatorは1日に数回、候補者のStaking上位から50人~1000人選ばれます。これらの仕事を行うValidatorは優先的に報酬を受け取れますが、大きな責任と仕事が求められます。まずValidateするためにノードを24/7可用性を担保する必要があります。そしてPolkadotのネイティブトークンであるDOTをStakeする必要があり、悪い行為やノードがオフラインであることが確認されるとSlashされ、Stakeされた総額の固定割合が罰則として没収されます。

運用上の理由により枠が限られ、ノードの常時可用性が求められるValidatorになれる人は限られるため、これでは中央集権化が予想されます。そこで、信頼できるValidatorのリストを公開し、DOTをStakeすることでRelaychainをさらにセキュアにする役割をもつのがNominatorです。DOT保持者は誰でも何人でもNominatorになれるため、ネットワーク参加者のほとんどはNominatorになると期待されています。しかしValidatorは慎重に選ばないと、ValidatorがSlashされた場合自分のStakeも失うことになります。

Nominated PoS

NPoSではValidatorとNominatorのStakeの合計が多い上位50〜1,000人がValidatorプールとして選ばれます。ValidatorとNominatorをValidator選別のスキームに取り入れることによって、ネットワーク全体のセキュリティを担保することが可能になります。この仕組みにより単体の大量DOT保持者へのシステムの依存を回避することができ、DOT保持者全員が参加できることにより悪意を持つユーザーがValidatorになることを困難にします(Nominatorに選ばれるには信頼を築く必要があるため)。

Validator選考プロセス

Stake量からランダムまたは上位がValidatorとして選ばれるPoSベースのプロジェクトとは違い、NPoSを採用するPolkadotでは、総Stake量によって選ばれた50~1000人のValidatorはコンセンサスの際、平等な投票パワーと報酬を与えられます。そのためNominatorはこれらのValidatorの総合Stake量が同じ程度になるように分散的にノミネートするインセンティブを持ちます。(合計Stakeが多くなれば自分のStake割合が希薄化し、報酬も少なくなるため)

さらにValidatorのStake額をイーブンにするためにPhragmen’s MethodというNominatorが複数のValidatorプールをノミネートした場合にどう分割するかを決めるアルゴリズムを採用するみたいですが、まだ解読中です。詳しくはW3F Researchを参照してください。基本的にはValidatorとNominatorの総Stake量の多い上位が選ばれると考えていいと思います。

Stake報酬

報酬はこんな感じで計算されます。

Nominatorへの報酬=

(Validate報酬 — Validator手数料) x (Stake額/総Stake額)

Validate報酬はEra毎にValidateプールに平等に支払われる報酬です。Validatorはset_preferenceでその報酬から任意の手数料を引くことができます。残りの報酬は総Stake額における各自のStake額の割合が振り分けられます。総Stake額が少ないほど、貰える報酬が増えるので、Nominatorは人気のない、ある程度信頼できるValidatorにNominateするインセンティブを持ちます。これによりValidator間でのStake額がイーブンに近くなり、ネットワーク全体のセキュリティが上がります(最低Stake額がそのネットワークのセキュリティ)。

下の図で2つのプールの例を紹介します。プールAでMasaki、BでAliceが同じ100DOTをStakeしたのにも関わらず報酬が16.7DOTと25DOTです。これはそれぞれの総Stake額が600と400であるためですね。

Note:通常ValidatorもStakeしているため、Validatorも配分を受け取れます。Validatorは2回報酬を受け取る機会があります。(手数料と配分)

インフレーション率とStake率

実質経済を反映し、Stakeする人やValidatorへの報酬を増やすためにPolkadotではStake率に応じたインフレを織り込んでいます。これはCosmosやLivepeerと同じですね。(EOSやTezosは固定インフレ率)

Stake率50%が利益率/インフレ率が最も高い最適割合に初期では設定されていますが、これは変更される可能性が大いにあります。現時点では、3:2:1の割合でステイキング (3)、Parachainボンディング(2)、流動(1)を目指しています。

なぜStakeするのか

ここまで読んでいただけたらただDOTをStakeするメリットを理解できたとは思いますが、最後にまとめておきます。

メリット:

  • Validate手数料(Validator)
  • 10%インフレ/year (Validator/Nominator)
  • ~20%年間利益 (Validator/Nominator)
  • ネットワークの分散化とセキュリティ向上(ALL)

デメリット:

  • Nodeの可用性の担保(Validator)
  • 12週間のロック期間(Validator)
  • Slashのリスク(Validator/Nominator)

執筆時点POC-4では、本記事で解説したStakingを行うことがValidator/Nominator両方できます。POC-3で書いたので変更があるかもしれませんが、実際のやり方も以下で解説しているので参考にしてみてください。

参考資料:

--

--