イーサリアムスタック
最終編集者: @ozora-ogino(opens in a new tab), 2023年8月15日
他のソフトウェアスタックと同様に、完全な「イーサリアムスタック」は、目的に応じてプロジェクトごとに異なります。
しかし、イーサリアムのコアコンポーネントを理解すれば、ソフトウェアアプリケーションとイーサリアムブロックチェーンとのやり取りの仕組みのモデルをイメージできます。 イーサリアムスタックのレイヤーについて理解することで、イーサリアムを他のソフトウェアに統合するさまざまな方法を理解することができます。
レベル1: イーサリアム仮想マシン
イーサリアム仮想マシン(EVM)は、イーサリアムのスマートコントラクトのランタイム環境です。 イーサリアムブロックチェーン上のすべてのスマートコントラクトと状態変更は、トランザクションによって実行されます。 全てのイーサリアムネットワーク上のトランザクションはEVMによって処理されます。
他の仮想マシンと同様に、EVMは実行コードと実行マシン (イーサリアムノード) との間に抽象レベルを作成します。 現在、EVMは世界中に分散された数千のノードで動作しています。
内部では、EVMは一連のオペコードを使用して特定のタスクを実行します。 これらの(140個のユニークな)オペコードにより、EVMをチューリング完全(opens in a new tab)にすることができます。 つまり、EVMは十分なリソースがあれば何でも計算できるということです。
dappデベロッパーは、EVMについて詳しく知る必要はありません。イーサリアム上のすべてのアプリケーションをダウンタイムなしで確実に動作させている存在であることを理解していれば十分です。
レベル2: スマートコントラクト
スマートコントラクト は、イーサリアムブロックチェーン上で実行可能なプログラムです。
スマートコントラクトは、EVMバイトコード(オペコードと呼ばれる低レベルの機械語)にコンパイルされる、特定のプログラミング言語を使用して記述されています。
スマートコントラクトは、オープンソースライブラリとして機能するだけではありません。本質的には、ダウンタイムなしで常時稼動しているオープンAPIサービスです。 スマートコントラクトは、ユーザーやアプリケーション (dapp) が許可を必要とせずにやり取りできるようにするパブリック機能を提供します。 どんなアプリケーションであっても、デプロイされたスマートコントラクトと統合することで、データフィードの追加などの機能の作成やトークンスワップのサポートが可能になります。 誰でも新しいスマートコントラクトをイーサリアムにデプロイして、アプリケーションのニーズを満たす独自の機能を追加できます。
Dappデベロッパーは、イーサリアムブロックチェーンに独自の機能を追加したい場合にのみ、スマートコントラクトを記述する必要があります。 実際には、既存のスマートコントラクトとの統合でプロジェクトのほとんどのニーズを達成することができます。 たとえば、ステーブルコインで支払いをサポートしたい場合や、トークンの分散型取引を可能にしたい場合などです。
レベル3: イーサリアムノード
アプリケーションがイーサリアムブロックチェーンとやり取りするためには、イーサリアムノードに接続する必要があります。 ノードに接続すると、ブロックチェーンデータの読み取りやネットワークへのトランザクションの送信が可能になります。
イーサリアムノードは、ソフトウェアを実行しているコンピュータ、すなわちイーサリアムクライアントです。 クライアントはイーサリアムの実装であり、各ブロック内のすべてのトランザクションを検証し、ネットワークの安全性とデータの正確性を維持します。 イーサリアムノードはイーサリアムブロックチェーンです。 イーサリアムブロックチェーンの状態をまとめて保存し、ブロックチェーンの状態を変更するためのトランザクションについてコンセンサスを得ます。
アプリケーションをイーサリアムノードに (JSON-RPC APIを介して) 接続することで、アプリはブロックチェーンからデータ (ユーザーアカウントの残高など) を読み取ることができ、また新しいトランザクションをネットワークにブロードキャストすることができます (ユーザーアカウント間でETHを送金したり、スマートコントラクトの機能を実行するなど) 。
レベル 4: イーサリアムクライアントAPI
多くの便利なライブラリ (イーサリアムのオープンソースコミュニティによって構築および維持されている) を活用すると、アプリケーションがイーサリアムブロックチェーンに接続して通信できるようになります。
ユーザー側のアプリケーションがウェブアプリの場合は、フロントエンドに直接、JavaScript APIをnpm install
できます。 あるいは、PythonまたはJava APIを使用して、この機能をサーバー側に実装することも可能です。
これらのAPIは、イーサリアムスタックにとって必須ではありませんが、イーサリアムノードと直接やり取りする際の複雑さの多くを抽象化してくれます。 また、こうしたAPIでは、ユーティリティ関数 (ETHをGweiに変換する関数など) も提供されています。そのため、デベロッパーは複雑なイーサリアムクライアントの作業に費やす時間を削減でき、自身のアプリケーションの独自機能の開発作業に専念できます。
レベル 5: エンドユーザーアプリケーション
スタックの最上位レベルには、ユーザー側のアプリケーションがあります。 これらは日常的に使用されている標準的なアプリケーションであり、主にウェブアプリとモバイルアプリです。
こうしたアプリケーションのユーザーインターフェースの開発方法も、本質的には変わりません。 多くの場合、ユーザーは使用しているアプリケーションがブロックチェーンを使用して構築されているかどうかを知る必要はありません。
スタックを選ぶ準備ができたら
イーサリアムアプリケーションのためのローカル開発環境のセットアップガイドをご覧ください。
参考文献
- Web 3.0 アプリケーションのアーキテクチャ(opens in a new tab) - Preethi Kasireddy
役に立つコミュニティリソースをご存知の場合は、 このページを編集して追加してください。