この記事では、プルーフ・オブ・ワークとプルーフ・オブ・ステークが、ブロックチェーンに次のブロックを追加する人をどのように決めるのか、それぞれがどのようにチェーンの安全性を保つのか、そしてどのように新規コインを生み出すのかを説明します。全体を通して、普通のコンピューターでマイニングできるプルーフ・オブ・ワークのコイン、Blocknet を具体例として使います。
プルーフ・オブ・ワークとプルーフ・オブ・ステークの違いは何ですか?
プルーフ・オブ・ワークとプルーフ・オブ・ステークは、ブロックチェーンが次のブロックを追加する人を決める 2 つの方法です。プルーフ・オブ・ワークでは、マイナーが計算能力を使って有効なハッシュを見つけます。プルーフ・オブ・ステークでは、バリデーターがコインを預け入れとしてロックし、ブロックを提案して投票する役に選ばれます。どちらの方式でも、不正には大きなコストがかかります。
どのブロックチェーンも同じ問題を解決する必要があります。互いを信頼していない何千台ものコンピューターが、誰も同じコインを二重に使えないように、1 つの支払い履歴について合意しなければなりません。誰かが新しいブロックを提案し、ほかの全員にはそれを受け入れる理由が必要です。このルールはコンセンサスメカニズムと呼ばれ、プルーフ・オブ・ワークとプルーフ・オブ・ステークは最もよく知られた 2 つの設計です。
| プルーフ・オブ・ワーク | プルーフ・オブ・ステーク | |
|---|---|---|
| ブロックを作る人 | ネットワークのターゲット以下のハッシュを最初に見つけたマイナー | コインをロックした人の中から選ばれたバリデーター |
| 投入するもの | ハードウェアと電力 | ステークとして預けたコイン |
| 勝つチェーン | 累積の作業量が最も多いチェーン | 最も多くのバリデーターの投票に支持され、ファイナリティのチェックポイントを持つチェーン |
| 新規コインの行き先 | ブロックを見つけたマイナーへのブロック報酬 | 提案と投票に対するバリデーターへの報酬 |
| 参加に必要なもの | ハッシュを計算できるコンピューター | ステークするコイン(Ethereum のバリデーターは 32 ETH) |
| 例 | Bitcoin、Monero、Blocknet | 2022 年以降の Ethereum |
プルーフ・オブ・ワークはどのように次のブロックを選びますか?
プルーフ・オブ・ワークでは、マイナーは解くのが難しく、確認するのは簡単なパズルを競って解きます。マイナーは公開したいブロックにノンスと呼ばれる数を加え、その結果をハッシュ化します。ハッシュを数として読んだ値がネットワークのターゲット以下であれば、そのブロックは有効です。そうでなければ、マイナーはノンスを変えてもう一度試します。勝つ方法は多くのノンスを試すことだけなので、マイナーが次のブロックを見つける確率は、ネットワーク全体のハッシュパワーに占めるそのマイナーの割合と一致します。
サトシ・ナカモトは 2008 年の Bitcoin 論文で、これを「プルーフ・オブ・ワークは本質的に 1 CPU 1 票である」と表現しました。ノードは最も多くのプルーフ・オブ・ワークの労力が投入されたチェーンに従い、難易度の設定がターゲットを上下させることで、どれだけハッシュパワーが加わってもブロックが一定のペースで生まれ続けます。ハッシュ、難易度、プールについては、暗号資産マイニングの仕組みのガイドで順を追って説明しています。
Blocknet も同じ仕組みで動き、数値はコンセンサスコードで定められています。
- ハッシュは 2 GiB のメモリを使う Argon2id なので、すべてのハッシュにプロセッサの時間だけでなく実際のメモリも必要です。仕組みは Argon2id の解説記事で紹介しています。
- ターゲットは (2^256 − 1) を難易度で割った値 なので、難易度はネットワークが 1 ブロックを見つけるのに必要なハッシュ数とほぼ等しくなります。
- ブロックは約 5 分ごとに生まれ、1 日に 288 ブロックです。難易度は、60 ブロックの加重移動平均(LWMA)によって直近のブロック時間に追従します。
- ノードは最も重いチェーンに従います。 各ノードはチェーン上のすべてのブロックの難易度を合計し、競合するチェーンの総作業量のほうが多い場合にだけ、そちらに切り替えます。
プルーフ・オブ・ステークはどのように次のブロックを選びますか?
プルーフ・オブ・ステークは、ハッシュ計算を預け入れに置き換えます。参加するには、バリデーターがプロトコルにコインをロックし、プロトコルがブロックを提案・承認するバリデーターを選びます。2012 年に始まった Peercoin がこれを採用した最初の暗号資産で、Ethereum は 2022 年 9 月 15 日に The Merge と呼ばれるアップグレードで移行しました。
Ethereum の設計を見ると、その構成要素がわかります。ethereum.org によると、次のとおりです。
- バリデーターはデポジットコントラクトに 32 ETH を預けます。
- 時間は 12 秒のスロットに区切られ、32 スロットで 1 エポックになります。
- スロットごとに 1 人のバリデーターがランダムに選ばれてブロックを提案し、ほかのバリデーターがアテステーションでそれに投票します。
- ステークされた ETH 全体の 3 分の 2 以上を持つバリデーターが投票すると、チェックポイントがファイナライズされます。
- 同じスロットに 2 つのブロックを提案したり、矛盾する投票をしたりしたバリデーターはスラッシングされ、ステークの一部、最大で全額が没収されます。
プルーフ・オブ・ワークで電力が果たす役割を、ステークが果たします。ルールを破ると、バリデーターはすでに保有しているコインを失います。
プルーフ・オブ・ワークとプルーフ・オブ・ステークはどのように安全性を保っていますか?
どちらの設計も、攻撃のコストを攻撃で得られるもの以上にしますが、そのコストを置く場所が異なります。
プルーフ・オブ・ワークでは、コストは継続的な計算です。 過去のブロックを書き換えるには、攻撃者はそのブロックとそれ以降のすべてのブロックの作業をやり直し、正直なネットワークを追い越さなければなりません。ナカモトは、遅い攻撃者が追いつく確率は新しいブロックが加わるごとに指数関数的に小さくなることを示しました。今後のチェーンを支配するには、攻撃が続くあいだずっと、ほかの全員を合わせたよりも多くのハッシュパワーを動かし続ける必要があります。
プルーフ・オブ・ステークでは、コストは失う可能性のある資本です。 Ethereum のドキュメントによると、チェーンを支配するには攻撃者は「ステークされた ETH の 51% が必要」であり、ステークの 3 分の 1 があればブロックのファイナライズを止められます。また、ファイナライズされたブロックを巻き戻すには、ステークされた ETH 全体の 3 分の 1 以上をスラッシングで失うことになります。
Blocknet はプルーフ・オブ・ワークに加えて、2 つのしきい値も設けています。ネットワークは 10 承認、約 50 分を安全とみなし、ノードは 100 ブロック、約 8 時間より深い再編成を拒否するので、100 ブロックの深さに達したブロックは確定します。
2 つのモデルはどのように新規コインを発行しますか?
プルーフ・オブ・ワークのコインは、各ブロックを見つけたマイナーに新規コインを支払うので、計算能力を提供する人なら誰でも、最初にコインを保有していなくてもコインを得られます。プルーフ・オブ・ステークのコインは、ステークに比例してバリデーターに新規コインを支払うので、報酬はすでにコインを保有している人に渡ります。発行スケジュールはそれぞれのプロトコルが定めます。
プルーフ・オブ・ワークでは、各ブロックの最初のトランザクションが、そのブロックを見つけたマイナーのために新規コインを生み出します。Bitcoin 論文はこれを「発行する中央機関が存在しないため、最初にコインを流通させる方法」と説明しています。Bitcoin の報酬は 210,000 ブロックごと、約 4 年ごとに半減し、総供給量は 2,100 万をわずかに下回る水準に収まります。
Ethereum のプルーフ・オブ・ステークでは、アテステーション、ブロックの提案、同期委員会の役割に対する報酬が、エポックごとにバリデーターの残高に加算されます。基本報酬はステークの総量が増えるにつれて小さくなり、一方でバリデーターが増えるにつれて総発行量は増えます。
Blocknet の発行は、すべてマイニングを通じて行われます。ジェネシスブロックにはトランザクションが 1 つもないため、マイニングが始まる前にはコインは存在せず、コンセンサスにはプレマイン、トレジャリー、創設者向けのアウトプットもありません。どのブロックも、報酬の全額を 1 つのアウトプットでそのブロックを見つけたマイナーに支払います。報酬は 1 ブロックあたり 723.25 BNT から始まり、48 か月にわたって 30 日の月ごとに指数曲線に沿って段階的に減り、その後は 1 ブロックあたり 2 BNT でずっと一定になります。
Blocknet がプルーフ・オブ・ワークを採用しているのはなぜですか?
Blocknet がプルーフ・オブ・ワークを選んだのは、コンピューターを持っている人なら誰でも、コインを買わずに最初のブロックから新規コインを得られるようにするためです。デーモンは Argon2id を「ASIC に対抗し、公平なマイニングを確保するためのメモリハードな PoW」と説明しており、「公平性のために」各ハッシュを 1 スレッドで実行します。
マイニングを誰にでも開かれたものにしているのは、このメモリ要件です。1 回のハッシュで 2 GiB のメモリを埋めるので、マイニングスレッドごとに約 2 GB の RAM が必要です。デスクトップ、ノートパソコン、サーバーなど、人々がすでに持っているコンピューターには、そのメモリと、メモリにデータを送るコントローラが備わっています。Blocknet は、汎用ハードウェアを中心に作られたプルーフ・オブ・ワークのコインの一員です。たとえば Monero は 2019 年 11 月から、「汎用 CPU 向けに最適化された」RandomX を使っています。
プルーフ・オブ・ワークは Blocknet の今後の計画でも続きます。blocknetcrypto.com によると 2027 年 2 月ごろに予定されている Faraday アップグレードでは、新しいノードがより速くチェーンに追いつけるよう、「より軽量なプルーフ・オブ・ワーク」が導入されます。
プルーフ・オブ・ワークのコインのマイニングを始めるには?
Blocknet の場合、必要なのはウォレットアドレスと、無料のオープンソースのマイナー seine です。
- 公式ウォレットでアドレスを取得します。手順はウォレットガイドで説明しています。
- Windows、macOS、Linux 向けの seine をダウンロードして実行します。
- アドレスまたは
@nameを貼り付け、デフォルトのプール bntpool.com を選びます。
seine は RAM からスレッド数を決め、マイニングしながら CPU カーネルを比較して最速のものを使い続け、Windows と Linux では NVIDIA のグラフィックスカードもプロセッサと一緒に使います。ハードウェアと支払いについてはマイニングガイドで詳しく説明しています。
よくある質問
Blocknet はプルーフ・オブ・ワークとプルーフ・オブ・ステークのどちらですか?
Blocknet はプルーフ・オブ・ワークを採用しています。マイナーはそれぞれ 2 GiB のメモリを必要とする Argon2id ハッシュを計算し、新しいブロックは約 5 分ごとに見つかり、ブロック報酬はすべてそのブロックを見つけたマイナーに支払われます。ステーキングはありません。普通のコンピューターで seine を使い、bntpool.com プール経由でマイニングできます。
Ethereum がプルーフ・オブ・ワークからプルーフ・オブ・ステークに移行したのはいつですか?
Ethereum は、2022 年 9 月 15 日に実行された The Merge と呼ばれるアップグレードで、プルーフ・オブ・ステークに移行しました。それ以降は、マイナーに代わって 32 ETH を預けたバリデーターがブロックを提案し、投票しています。Bitcoin、Monero、Blocknet は引き続き、計算作業によって新しいブロックが生まれるプルーフ・オブ・ワークを採用しています。
51% 攻撃とは何ですか?
51% 攻撃とは、チェーンがどのブロックを受け入れるかを決める資源の過半数を握り、それを支配しようとする試みです。プルーフ・オブ・ワークでは、ネットワークのハッシュパワーの過半数を意味します。プルーフ・オブ・ステークでは、ステークされたコインの過半数を意味します。どちらの場合も、攻撃者は実際の資源の過半数を投入する必要があります。
プルーフ・オブ・ステークのコインはマイニングできますか?
いいえ。純粋なプルーフ・オブ・ステークのコインにはマイニングがありません。新規コインは、既存のコインをステークとしてロックしたバリデーターに支払われるので、コインを得るにはまずコインを保有している必要があります。今あるコンピューターで新規コインを得るには、Blocknet のようなプルーフ・オブ・ワークのコインが必要です。