Ethereumエコシステムの全体像

Ethereumはブロックチェーンの一つだが、その上に構築されたエコシステムは広い。EVM、ウォレット、ノード、Layer 2、開発ツール——それぞれが何を担っていて、どう繋がっているのかを整理する。

全体像

graph TB
    User[ユーザー]

    subgraph アプリケーション層
        DApp["DApps(フロントエンド)<br/>Uniswap / Aave / OpenSea"]
        Wallet[ウォレット<br/>MetaMask / Rabby]
        Lib[ライブラリ<br/>ethers.js / viem / wagmi]
    end

    subgraph インフラ層
        RPC[RPCプロバイダ<br/>Alchemy / Infura / QuickNode]
        Node[ノード<br/>Geth / Nethermind]
    end

    subgraph プロトコル層
        EVM[EVM<br/>スマートコントラクト実行]
        Consensus[コンセンサス<br/>Proof of Stake]
        Storage[ステート<br/>アカウント / ストレージ]
    end

    subgraph Layer2["Layer 2"]
        L2[Rollup<br/>Arbitrum / Optimism / Base]
        Bridge[ブリッジ<br/>L1 ⇔ L2 資産移動]
    end

    subgraph 開発ツール
        Foundry[Foundry<br/>forge / cast / anvil]
        Hardhat[Hardhat]
        Explorer[ブロックエクスプローラ<br/>Etherscan / Blockscout]
    end

    User -->|操作| DApp
    DApp -->|署名リクエスト| Wallet
    Wallet -->|署名済みTx送信| RPC
    DApp --> Lib
    Lib -->|JSON-RPC| RPC
    RPC --> Node
    Node --> EVM
    EVM --> Consensus
    EVM --> Storage

    L2 -->|データ投稿・証明| Node
    Bridge --> L2
    Bridge --> Node

    Foundry -->|テスト・デプロイ| RPC
    Hardhat -->|テスト・デプロイ| RPC
    Explorer -->|読み取り| Node

アプリケーション層

DApps

DApps(分散型アプリケーション)はスマートコントラクトをバックエンドとするアプリケーション。ユーザーから見える部分は通常のWebアプリと変わらないが、コアのロジックとデータがブロックチェーン上にある。フロントエンドは一般的なWeb技術(React、Next.jsなど)で構築され、ブロックチェーンとの通信にはethers.js、viem、wagmiといったライブラリを使い、JSON-RPCプロトコルでノードとやり取りする。

ウォレット

ユーザーがEthereumと接続するための入口。秘密鍵の管理、トランザクションへの署名、残高の表示を担う。

ウォレット自体はブロックチェーン上に存在するわけではない。秘密鍵をローカル(ブラウザ拡張、モバイルアプリ、ハードウェアデバイス)に保持し、ユーザーの操作に応じて署名を生成するクライアントサイドのソフトウェア。DAppsのフロントエンドから署名リクエストを受け取り、ユーザーが承認すると署名済みのトランザクションをRPCプロバイダに送信する。

sequenceDiagram
    actor User as ユーザー
    participant FE as フロントエンド
    participant Wallet as ウォレット
    participant RPC as RPCプロバイダ
    participant Node as ノード
    participant EVM as EVM

    User->>FE: 「Swap」ボタンをクリック
    FE->>Wallet: 署名リクエスト
    Wallet->>User: トランザクション内容を表示
    User->>Wallet: 承認
    Wallet->>RPC: 署名済みトランザクション送信
    RPC->>Node: トランザクション転送
    Node->>EVM: コントラクト実行
    EVM->>Node: 実行結果
    Node->>RPC: トランザクションレシート
    RPC->>FE: レシート返却
    FE->>User: 結果を画面に表示

インフラ層

ノード

Ethereumネットワークを構成する個々のコンピュータ。ブロックチェーンのデータを保持し、トランザクションを検証・実行する。

Ethereumでは2022年のThe Merge以降、実行クライアントとコンセンサスクライアントの両方を動かす必要がある。

RPCプロバイダ

自前でノードを運用せずにEthereumにアクセスするためのサービス。DAppsやウォレットからのJSON-RPCリクエストを受け付け、背後のノードで処理して結果を返す。

RPCプロバイダへの依存は、分散性とのトレードオフになっている。多くのDAppsがAlchemyやInfuraに依存しており、これらのサービスが停止するとDAppsも動かなくなるリスクがある。

プロトコル層

EVM(Ethereum Virtual Machine)

スマートコントラクトを実行するための仮想マシン。詳細はEVMの用語ページを参照。

コンセンサス(Proof of Stake)

ネットワーク参加者がどのブロックを正しいと認めるかの合意形成の仕組み。バリデータが32 ETHをステーキングし、ブロックの提案と検証を行う。不正な行為にはスラッシング(ステーキングの没収)というペナルティがある。

ステート

Ethereumの「現在の状態」を表すデータ。すべてのアカウントの残高、コントラクトのストレージ、ノンスなどが含まれる。トランザクションが実行されるたびにステートが更新され、その結果がブロックに記録される。

Layer 2

Ethereumのスケーラビリティ問題を解決するために、メインチェーン(Layer 1)の外でトランザクションを処理し、結果だけをL1に記録するアプローチ。

graph LR
    subgraph L1["Layer 1 - Ethereum"]
        L1Node[Ethereum Mainnet]
    end

    subgraph L2["Layer 2"]
        Arbitrum[Arbitrum]
        Optimism[Optimism]
        Base[Base]
    end

    subgraph Users["ユーザー"]
        U1[低手数料で取引]
    end

    U1 --> Arbitrum
    U1 --> Optimism
    U1 --> Base
    Arbitrum -->|データ投稿| L1Node
    Optimism -->|データ投稿| L1Node
    Base -->|データ投稿| L1Node

Optimistic Rollup

トランザクションを「正しい」と仮定して処理し、一定期間(通常7日間)の異議申し立て期間を設ける方式。Arbitrum、Optimism、Baseが採用している。

ZK Rollup

ゼロ知識証明を使ってトランザクションの正当性を数学的に証明する方式。異議申し立て期間が不要なため、L1への確定が速い。zkSync、StarkNetなどが採用している。

ブリッジ

Layer 1とLayer 2の間、またはLayer 2同士の間で資産を移動するための仕組み。L1にトークンをロックし、L2で対応するトークンを発行する、というパターンが一般的。ブリッジのスマートコントラクトに大量の資産がロックされるため、攻撃対象になりやすい。

開発ツール

Foundry

Rust製の開発ツールチェーン。コンパイル・テスト・デプロイ・チェーンとの対話をCLIで完結できる。

Hardhat

JavaScript / TypeScript製の開発環境。プラグインエコシステムが豊富で、フロントエンド開発者にとって馴染みやすい。

ブロックエクスプローラ

ブロックチェーン上のトランザクション、アドレス、コントラクトを検索・閲覧するためのWebサービス。

エコシステムの全体感

ここまで見てきた各層は独立しているようで、密接に依存し合っている。

ユーザーはウォレットを通じてDAppsにアクセスし、DAppsはライブラリを通じてRPCプロバイダに接続し、RPCプロバイダはノードに問い合わせ、ノードはEVMでコントラクトを実行する。Layer 2はこのスタックと並列に動きながら、最終的にはLayer 1に依存している。

どの層が欠けてもエコシステムは機能しない。そして各層にそれぞれの課題が残っている。

ウォレットのUX

秘密鍵やシードフレーズの管理がユーザーに委ねられており、紛失すると資産を永久に復元できない。承認画面には16進数のアドレスやガス設定が並び、「何が起きるのか」を直感的に把握しにくい。アカウント抽象化(ERC-4337)による改善が進みつつあるが、銀行アプリのように「何も考えなくても安全に使える」状態にはまだ遠い。

RPCプロバイダへの中央集権的な依存

Ethereumのノードは分散しているが、ほとんどのDAppsとウォレットはAlchemyやInfuraといった少数のRPCプロバイダ経由でアクセスしている。2020年にInfuraが障害を起こした際、MetaMaskを含む多数のサービスが影響を受けた。ブロックチェーン自体は正常だったが、アクセス経路の集中が単一障害点を生んでいる。

Layer 2間の断片化

Arbitrum、Optimism、Baseなど複数のL2が存在し、流動性やユーザーがチェーンごとに分散している。L2間の資産移動にはブリッジが必要で、手数料・時間・セキュリティリスクが伴う。ユーザーが「自分の資産がどのチェーンにあるか」を意識しなければならない時点で、体験としては銀行に劣る。

これら3つの課題は、根底で「分散化と使いやすさのトレードオフ」という同じ構造を共有している。