イーサリアムをブロックチェーンレベルで見た場合、ビットコインと比較してイーサリアムのブロック生成時間は平均15秒であったり、ブロック構造が大きく異なっていたりとさまざな違いがあります。
そこで、当記事ではトランザクションレベルより大きな視点で見たブロックチェーンレベルからイーサリアムを紹介していきます。イーサリアムのトランザクションやEVM、コントラクトなどは以下の記事で紹介していますのでぜひご覧ください。
参考:トランザクションレベルで理解する。イーサリアムの具体的な仕組みを解説
GHOST(Greedy Heaviest Observed Subtree)
イーサリアムのブロックチェーンでは、GHOSTプロトコルによってどのチェーンをメインチェーンにするか決めています。GHOSTにおいて、マイニングにより最も多く計算が蓄積されているチェーンをメインチェーンとしているのです。ここで「最も長いチェーン」ではなく「最も多く計算が蓄積されているチェーン」をメインチェーンに選択しているのは、イーサリアムのブロック生成時間が平均15秒とかなり短いからです。(ビットコインは約10分です。)
後述するようにこれによりセキュリティ的にさまざまな問題が生じるのですが、それに対処するためにイーサリアムではGHOSTプロトコルが採用されています。
uncleブロック
現時点で、イーサリアムのブロック生成時間は平均15秒とビットコインの約10分に比べかなり短いです。ブロックの生成時間が短いことによりトランザクションの承認時間が短い、つまり送金もより早く行えることになります。しかし、その副作用として2つの問題があげられます。
1つ目は、ブロックチェーンがフォーク(分岐)しやすくなってしまうことです。ブロック生成時間が短いことによりマイナーが同時にマイニングに成功する機会が多くなってしまうからです。
マイナーAとマイナーBがほぼ同時にマイニングに成功したとすると、その生成したブロックをノードに伝播するタイムラグの差によって分岐し、結局一方のブロックは捨てられてしまうことになります。
つまり、せっかくマイニングするためにつぎ込んだコストがブロックチェーンのセキュリティ向上に寄与しないということになってしまうのです。
2つ目の問題は、マイニングプールの寡占化が加速してしまうことです。あるマイナーがマイニングに成功すると、その生成したブロックをネットワーク全体のノードに伝えるために伝播時間を要することになります。これにより、マイニングに成功したマイナーは、他のマイナーよりも次のマイニングの計算を早く始めることができてしまうのです。
これにより、マイニングに成功したマイナーは次のマイニングに成功する確率は高まります。ブロック生成時間が短いとこの現象がより多く起こり、マイニングプールの寡占化が加速してしまうのです。
GHOSTプロトコルは上記の2つの問題を解決することができます。1つ目のフォークの問題を解決するために、GHOSTでは単純に「最も長いブロックチェーン」をメインチェーンにするのではなく、メインチェーンから派生しているuncle(叔父)のブロックに費やされたハッシュパワーも加味してメインチェーンを決めています。
つまり、派生しているブロックも含めて計算が最も多く蓄積されているブロックチェーンをメインチェーンとして決めているのです。これにより、uncleブロックもメインチェーンのセキュリティに寄与していることになります。
2つ目のマイニングプールの寡占化問題を対処するために、uncle(叔父)とnephew(甥)のブロックにもマイニング報酬を与えています。nephewはuncleブロックの子ブロックのことです。uncleブロックのマイニング報酬はメインブロックの87.5%、nephewブロックだと3.125%のマイニング報酬を得ることができるのです。
uncleのマイニング報酬はメインチェーンブロックのマイニング報酬よりも少ないですが、マイナーがuncleを生成するインセンティブになります。
また、同一のデータを持ったuncleは追加することはできません。
uncle(ommer)は現在のブロックから遡って8個前のブロックを親とするuncleまで報酬が得られます。(上図だと番号2〜7までを親とするuncle)それ以上前のブロックだとPoWによる計算が積み重なっているので改ざんが難しくなっています。
イーサリアムのブロック
続いて、イーサリアムのブロックチェーンにおけるブロック内部の構造を見ていきましょう。イーサリアムのブロック内は下図のように、ヘッダー、トランザクション群、そしてommerのために用意されている他のブロックヘッダーの情報が含められています。
また、ヘッダー部分の内部に注目すると、以下の図のようなデータが含められています。
(source: How does Ethereum work, anyway?)
それぞれのデータについて簡単に説明すると以下のようになります。
- parentHash:親ブロックヘッダーのハッシュ値
- ommersHash:ommerのリストのハッシュ値
- beneficiary:マイニング報酬を得るアドレス
- stateRoot:stateのマークル木ルートのハッシュ値
- transactionsRoot:トランザクションのマークル木ルートのハッシュ値
- receiptsRoot:レシートのマークル木ルートのハッシュ値
- logsBloom:ログ情報のブルームフィルタ(ブルームフィルタとは、確率的な探索フィルタで欲しいパターンを正確に特定しなくてもパターンを記述できる方法です)
- difficulty: マイニング難易度
- number: ブロックのインデックス番号(genesisブロックから何番目のブロックか)
- gasLimit:ブロックのgas制限(含められるトランザクションの制限にあたります)
- gasUsed:トランザクションで使われたgasの合計
- timestamp:unixタイムスタンプ
- extraData:このブロックに関する参照情報
- mixHash:nonceと組み合わさって十分にPoWの計算がされたことを証明
- nonce: ナンス。mixHashと組み合わさって十分にPoWの計算がされたことを証明
ブロックサイズ
イーサリアムのブロックサイズはビットコインのように1MBと決められているのではなく、ブロック内に含められているトランザクションのgas limitの合計値がブロックで定めらているgas limit以下になるように決められています。
(source: Hackernoon)
ただgasはイーサリアムネットワークで実行されるトランザクションの手数料であり、これはトランザクションのデータサイズによってほとんど決められるため、実質的にはブロックサイズも含められるトランザクションのデータサイズで決まっています。
イーサリアム上の通貨Etherの役割
イーサリアムはワールドコンピューターとして構想されており、ビットコインの思想・構想とは大きく異なります。ビットコインはBTCという仮想通貨を価値の移動(送金)として使ったり、価値の保存(Store of Value)として機能させることを目指しています。
一方、イーサリアムにもetherという仮想通貨が存在しますが、etherを使って送金や価値の保存を目指しているわけではありません。etherはあくまでもイーサリアムネットワーク上で働くトランザクションのgas(手数料)であり、イーサリアム上で機能する分散型アプリケーションのgasとして機能しています。
つまり、イーサリアムは分散型アプリケーションプラットフォーム上でDAppsを動かすためのエンジンとして通貨etherを使っているのです。
コンセンサスアルゴリズム
続いて、イーサリアムネットワークにおけるコンセンサスアルゴリズムを見ていきましょう。現時点でイーサリアムはPoWを採用していますが、セレニティという大型アップデート(ハードフォーク)でPoS(casper)に移行することが決まっています。
ディフィカルティボム(Difficulty bomb)
ディフィカルティボムはPoSへスムーズへ移行するためのプロトコルと解説されることも多いですが、PoSに限らずさまざまなハードフォークにおいてディフィカルティボムは機能しています。ディフィカルティボムとは、マイニングの難易度を意図的に上げることで、これによりマイナーはブロックを生成させることができずマイニング報酬を得ることができなくなります。
このディフィカルティボムにより、ハードフォーク時にコミュニティの分裂を回避しマイナー、開発者、ユーザーを含むコミュニティ全体が新しいチェーンに移行するようにプログラムされているのです。
なぜなら、元のチェーンはディフィカルティボムが進行しているので次第にブロックの生成ができなくなってしまうからです。
ディフィカルティボムにおいて、ディフィカルティは指数関数的に増加するため急激な速度でブロックの生成速度が減少しイーサリアムのプロトコルが停止してしまいます。このような減少をアイスエイジ(イーサリアムの氷河期)と呼んでいます。
つまり、ディフィカルティボムはハードフォーク時に新しいチェーンに移行するためのベネフィットを与えていることになります。
ハードフォークはリスクが高いためネガティブに捉えられることも多いですが、イーサリアムはハードフォークを定期的にすることを前提としている仮想通貨です。なぜなら、イーサリアムはワールドコンピューターという壮大な構想があり、そのためにはハードフォークを繰り返して技術的なアップデートを繰り返していく必要があるからです。そのため、当初からディフィカルティボムというプロトコルが実装されているのです。
しかし、ディフィカルティボムが正常に機能するのは「計画的なハードフォーク」のみです。例えば、最近行ったビザンチウムハードフォークは予め計画されていたので、そのハードフォークに向けてディフィカルティボムをプログラムしておくことでコミュニティの分裂などの混乱を起こすことなくハードフォークを行うことができました。
しかし、バグや脆弱性に対するあらかじめ計画していなかったハードフォークに対してはディフィカルティボムは機能しません。なので、The Dao事件のハードフォークによりイーサリアムとイーサリアム・クラシックに分裂してしまったのです。
PowからPoSへ
イーサリアムはコンセンサスアルゴリズムをPoWからPoSへ移行する予定です。PoWについてはこちらの記事で書いています。
参考:プルーフオブワーク(PoW)の仕組みを知らずにビットコインは語れない
PoWとPoSの違いを簡単に言うと、PoWではハッシュパワー(計算能力)が高いほど、PoSではステイク(賭け金)が大きいほどブロックを生成しやすくなります。また、PoWは電気代など外部からコストを得るのに対し、PoSはネットワーク内部からステイクを得ます。さらに、PoWのマイナーはプロトコルの外部に存在する独立した存在であるのに対し、PoSのバリデーターはプロトコルの内部に存在する機能です。
現在、イーサリアムはビットコインと同様にPoWを採用していますが、ビットコインにおけるマイニングのようにASICという専用のマシンは使用できないようになっています。
イーサリアムの場合はEthashというアルゴリズムを導入しており、メモリーを多く必要としています。なのでマイニング専用の機械を作ることが困難でありGPUによるマイニングが行われています。
これにより、ビットコインで問題視されているマイニングプールの寡占化や51%攻撃を防いでるのです。
参考:ブロックチェーンの安全性を脅かす「51%攻撃」の仕組みと実態
PoSのメリットやデメリットに関して以下の記事で詳しく解説していますので参考にしてください。特にPoSでは富の集中化が懸念されています。
参考:イーサリアムに導入予定。プルーフオブステークのメリットとデメリット
また、イーサリアム(のVitalik)が開発しているPoSであるCasper FFGの仕組みについてはこちらで書いています。