1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

イーサリアムのアーキテクチャを図解してみた

Last updated at Posted at 2023-06-20

はじめに

パブリックブロックチェーンとして有名なイーサリアムは、Solidity 言語で書かれたスマートコントラクトをデプロイすることで様々なユースケースを実現することが可能です。
基盤としてのイーサリアムが、どのようなアーキテクチャになっているのかを理解するために、基本的な内容を図解してみました。
今回は台帳とEVM周りの解説です。

参考文献

イーサリアム公式サイトでもリンクされている、「Ethereum EVM illustrated」のPDFを参考にしています。
https://ethereum.org/uz/developers/docs/evm/

全体アーキテクチャ

まずは、イーサリアムの全体像からです。
ブロックチェーンは、各ノードで持つ台帳を分散して持つ「分散台帳システム」が基本になりますが、この各ノードで持つ分散台帳の内容を見ていきます。

分散台帳は、ブロックチェーン+ワールドステートのセットから成り立っています。
イーサリアム=ブロックチェーンというイメージがあると思いますが、重要な点として、あくまでブロックチェーンはトランザクション履歴を正確に保存するためのものであり、スマートコントラクトを実行したり、アカウントの状態を保存しているは、このワールドステートという仕組みが担っています。

ブロックチェーンの各ブロックには、トランザクションとは別に、ステートルートというハッシュ値を持ち、これがワールドステートと紐づいています。
ワールドステートには、2種類のアカウント(後述)があり、Key-Value形式でアドレスとステートが1体1で保存されています。

アカウントについて

ワールドステートには、EOA(外部所有アカウント)と、コントラクトアカウントの2種類のアカウントがあります。

  • EOA(外部所有アカウント)

    • アカウントのインタフェースとなるウォレット(秘密鍵を保管)の実態
    • ウォレットに紐づくアカウントで、「0x」から始まるアドレスを持つ(アドレスはハッシュから生成)
    • トークンの残高情報などを保持する
  • コントラクトアカウント

    • EOAからのトランザクションにより作成されるアカウント
    • スマートコントラクトを実行するアカウントのことで、内部状態を保持するストレージ部分と実行コード(EVMコード)を持つ

※EVM : Ethereum Virtual Machine、スマートコントラクト実行エンジンのこと

データ構造について

ブロックチェーンのデータ構造について、もう少し噛み砕いてみていきます。
各ブロックには、トランザクションとブロックヘッダーが含まれていて、ヘッダーには前のブロックのハッシュがあることでチェーンをつないでいます。(一般的なブロックチェーンの説明)

ヘッダーにはもうひとつ、ワールドステートの要約が格納されています。(前述したステートルートのこと)
ワールドステートに全アカウントのステートが格納されているのですが、各アカウントがもつデータを「マークルパトリシアツリー」という仕組みで要約してハッシュで格納されています。


さらに、各アカウントのステートごとにも、ストレージのデータを要約したストレージルートというハッシュが格納されています。
ざっくり言うと、データの要約をさらに要約した形になっているということですね。
ハッシュなので、要約元の値が一つ変わるだけで全てが変わってしまいます。
(マークルパトリシアツリーとストレージルートの説明は長くなるので別の記事にします)

トランザクションについて

ワールドステートに対して変更を加えるのがトランザクションです。
EOAからトランザクションを実行した場合に、ワールドステートにどうような影響を与えるかを見てみます。

トランザクションはEOAによって作られます。
代表的なトランザクションとして、以下の3種類があります。

  • Message
    • EOA間やコントラクトアドレス間で、メッセージよるステート変更を行うトランザクション
    • コントラクトアカウント内にあるEVMコードを実行することで、データ変更・読み込みを行う((トークンの増減など)
  • Create
    • コントラクトアカウントを作成するトランザクション(=スマートコントラクトのデプロイ)
    • EOAからコードのデプロイが実行される
  • Update
    • スマートコントラクトを更新するトランザクション
    • EOAからメッセージをトリガーしたり、EVMコードを実行したりすることで更新が発生

まとめ

イーサリアムのアーキテクチャについて図解しました。
EVMでコードを実行するときに、実態としてイーサリアムの基盤がどう構成されているか、イメージで理解しておくのは重要だと思いましたので、出来るだけわかりやすい図解を作っていければと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?