PoWにおける承認数について

f:id:simplex-blog:20190130154850j:plain

PoWにおける承認数について

ビットコインやイーサリアムなど、コンセンサスアルゴリズムにPoW(Proof of Work:プルーフ・オブ・ワーク)を用いるブロックチェーンにおいては、理論上100%のファイナリティーを得ることができず、 目的とする取引のトランザクションがブロックに取り込まれただけでは取引が確定されたとは言えません。

したがって、さらにブロックを承認し積み重ねることで当該ブロックの変更リスクを低減し、より安全な確率的ファイナリティーを得ることが必要となります。

現在、ビットコインの決済が確定したとみなすには6回の承認が必要とされていますが、イーサリアムの承認数に関してはシステムによってまちまちであるように思われます。 そこで、承認数がどのように決定されるのか調査してみました。

承認数の算出根拠

Analysis of hashrate-based double-spending の論文によると、

ビットコインにおける6回の承認数は、攻撃者がハッシュレートの10%を超えて占有する可能性は低く、かつ0.1%未満のリスクは許容されるという想定に基づいて選択され、通常の攻撃者にとっては過剰であるが10%を超えるハッシュレートを持つ攻撃者に対しては無力であるとされています。

つまり、攻撃者のハッシュレートの比率と攻撃の成功確率により、安全なファイナリティーに必要となる承認数が算出できるようです。

攻撃の成功確率

サトシ・ナカモトの論文によると、攻撃の成功確率は下記のコードで算出することができます。

Bitcoin: A Peer-to-Peer Electronic Cash System / Satoshi Nakamoto

- q:攻撃者のHashPower
- z:追加ブロック数(承認数-1)

double AttackerSuccessProbability(double q, int z)
{
  double p = 1.0 - q;
  double lambda = z * (q / p);
  double sum = 1.0;
  int i, k;
  for (k = 0; k <= z; k++) {
    double poisson = exp(-lambda);
    for (i = 1; i <= k; i++)
      poisson *= lambda / i;
    sum -= poisson * (1 - pow(q / p, z - k));
  }

  return sum;
}

必要となる承認数の算出

攻撃の成功確率を 0.1% 未満に抑える場合を考えます。

攻撃者の HashPower を 10% と仮定すると、

  • 承認数5の時、成功確率は 0.35%
  • 承認数6の時、成功確率は 0.09%

となり、ビットコインではこの承認数6が採用されています。

承認数6の場合において、攻撃者の HashPower を 25% と仮定すると成功確率は 4.99% となり、改ざんリスクが拡大していることになります。

この場合、攻撃の成功確率を 0.1% 未満に抑えるためには、

  • 承認数15の時、成功確率は 0.15%
  • 承認数16の時、成功確率は 0.09%

となり、16回の承認が必要となります。

さらに、攻撃者のHashPower が 50% を超えると成功確率は承認数によらず 100% となります。

結論

0.1% 未満のリスクは許容されるとした場合、攻撃者のハッシュレートの比率をどのように想定するかによって必要な承認数が算出されることがわかりました。

【参考】マイニングプールのハッシュレートと比率 (2019/01/23)

ビットコイン

Name Hashrate Share
Total 40.43EH/s ----
BTC.com 6.66EH/s 16.47%
AntPool 5.19EH/s 12.84%
Poolin 4.34EH/s 10.76%
F2Pool 4.25EH/s 10.51%
SlushPool 4.25EH/s 10.51%

イーサリアム

Name Hashrate Share
Total 176.37TH/s ----
Ethermine 46.70TH/s 26.48%
Sparkpool 39.64TH/s 22.48%
Nanopool 23.58TH/s 13.37%
F2Pool 18.79TH/s 10.65%
MiningPoolHub 10.58TH/s 6.00%