Proof of Activityについて

コンセンサスアルゴリズムの比較メモの続きです。

Proof of Activity

元論文 … https://eprint.iacr.org/2014/452.pdf

マイニング報酬がなくなり、マイナーのインセンティブが手数料にだけになった後に用いるコンセンサスアルゴリズムの提案

という両者の利点を取るため、折衷案を用いる。

Casperで作ろうとしているような純粋なPoSに比べるとビットコインのブロックチェーン上で行うのに適している感じ。(shardingを導入する必要がない点など)

PoWの一番の問題は、ハードウェアはスケールメリットがあるのでどんどん集積していってしまうこと(CPUメーカーが実質IntelとAMDしかないのと同様の理由)

さらに、ビットコイン特有の問題として、手数料がマイナーの主なインセンティブになっていくにつれて「トランザクションが混雑していない状態では、ユーザーは手数料を払う必要がないので、そもそもマイニングをする動機がない」 という状態になり、したがってハッシュパワーが下がり、ネットワーク全体のセキュリティが低下する。 という状態が発生する。

したがって、ハードフォークして「一定額以上の手数料を持ったトランザクションのみを有効とする」というプロトコルに変更しなくてはならない。 なぜソフトフォークでは駄目かというと、トランザクションを受理すること自体の限界費用は無視できるほど小さいため、マイナーはどんなに少額の手数料でもブロックに含めようとしてしまい、マイナー間で コモンズの悲劇が発生するため。

また、さらに大きな問題として、マイナーが手数料の大きいトランザクションをブロードキャストせず、自分のところにのみとどめておく可能性が高い。

これは以前にも述べた「P2Pノードを立てるモチベーションがない」問題とあいまって、手数料を高くしてもなかなか承認されない状況を引き起こす(ついでにいうと、それがさらなる手数料の増加をもたらすかもしれない)。

PoAでは、PoSやPoIと同様、ASICを持たなくてもフルノードを立てるメリットが有る。これにより、ついでにネットワークの過疎化による分断が起きる可能性も低くなる。

フルノードを増やす試みの解決策としてはP2Poolというものもある。これは、ビットコインと同様のブロックチェーンで、ただしdifficultyだけが低いチェーン(sharechainと呼ばれる)をマイニングし、実際にビットコインのブロックチェーンでの当たりが出た場合は山分けをするというもの。 個人でマイニングしてもそこそこの利益が得られるので「make mining fun again」ということらしい。

P2Pネットワークの過疎化を防ぐという意味では多少のメリットがあるが、それでもマイニングにはある程度の準備が必要なので、誰もが行うわけではない。

手順

  1. マイナーはdifficultyを満たすハッシュ値を作成してブロックをブロードキャストする。ただし、トランザクションを含まない空ブロックである。
  2. そのブロックヘッダのハッシュを擬似乱数として扱い、一定の何らかの方法で$N$人のStake Holderを決定する。ここでは「何らかの方法」を以下の2つとする。
    • このブロックのヘッダ、直前のブロックのヘッダ1、$N$通りのsuffix値、をハッシュ関数に食わせ$N$個のハッシュ値を作る。ただし、ハッシュ空間を過去のトランザクション中の全satoshiに対応させる(ここ、具体的にどうやるのかよくわからん。)
    • そのsatoshiの履歴を追い2、現在の所持者を指名する。これを*follow-the-satoshi*プロコトルと呼ぶ。
  3. 全ノードがこのブロックの正当性を検証し、自分が$N-1$人のStake holderの内の一人であれば署名してブロードキャストする。(帯域を圧迫しそう…と思ったが空ブロックだからOK)
  4. 自分がN人目のStake holderだった場合、好きなだけ3トランザクションを詰め込み、$N-1$個の署名と自分の署名をくっつけてブロードキャストする。
  5. 他のノードが検証して承認し、ブロックチェーンの先端につける。
  6. ブロック中のトランザクション手数料は、マイナーと$N$人の間で分けられる。

特徴

投票を行う必要が無いので、他のPoSとくらべてネットワークとブロックチェーンサイズを抑えられる(ネットワークはともかく、なぜブロックチェーンサイズを抑えられるのかよくわからない…)

$N$の数が多いほどマイナーに対してstake holderが優位になるが、帯域の使用量も増える。

「積極的に参加しているStake holder(=P2Pノード)の数が多い場合は、$N$を増やす」という形にすることもできなくはないが、プロトコルの複雑さと、セキュアであることを保証するために考慮しなくはならないことが増える。 論文の著者は$N=3$で固定することを提案している。

報酬だけでなく、罰則も与えることができる。つまり$N$に選ばれた場合、署名を提出するか、罰金を支払わなくてはならない。という形にもできる。 これは常にノードが稼働していなくては罰金を取られていくということを意味するので、Casperで検討しているように、承認者をbonded validatorに限定しない限り、一箇所にStakeが集まるというリスクが有る。

(PoSやPoIのように)Stake holderは委任することができる。 NEMの重要度委任トランザクションとの相違点は委任先が委任されたStake(=satoshi)を使用する権利がある点にある。ただし使用量は制限されており、かつ支払いに当たっては一定期間待つ必要があり、委任元の秘密鍵保持者はその間に取り消すことができる。

(NEMのように支払い権利を一切渡さなければ良いのでは?誰か教えてください … )

一見して「fungibilityが手に入らない」というデメリットが有る。


  1. difficultyが高い場合、一つのブロックヘッダのハッシュ値だけではエントロピーが足りないため [return]
  2. 簡単のため出力先が1つしかないことにしている?2つあっても確率的に選べるので多分問題ないと思う [return]
  3. これはブロックサイズをvalidatorが(つまり「市場」が)決めるということだが、BitcoinUnlimitedで議論されているような問題が十分考慮されているのかよくわからない。 [return]
Tweet This Page
BTC address: 16BQGsTmsKtbMMT2Zwj4qNZnnAncnVCtWo
NEM address: NBZ5WW-S53QRZ-DO73Z7-B6CA6I-R2PNS4-PLR24N-NKZJ 投げ銭をいただけると泣いて喜びます