イーサリアム入門
最終編集者: @HiroyukiNaito(opens in a new tab), 2024年6月26日
ブロックチェーンとは
ブロックチェーンとは、単一のネットワークにつながる多くのコンピュータが更新・共有する公開データベースのことです。
この「ブロック」とは、データと状態が連続的にまとまったグループのこと(ブロックと呼ばれる)を意味します。 ETHを誰かに送金する場合は、その送金トランザクションデータがブロックに追加される必要があります。
「チェーン」とは、各ブロックが親ブロックを暗号化して参照しているという仕組みを指し、 各ブロックは連鎖してつながっています。 あるブロックのデータを変更するには後続のすべてのブロックを変更する必要があり、それにはネットワーク全体のコンセンサス(合意)が必要となるため事実上不可能となります。
ネットワーク上のすべてのコンピュータが、新しいブロックとチェーン全体に合意しなければなりません。 これらのコンピュータのことを「ノード」と呼びます。 ノードはブロックチェーン上で繋がるすべてのノードが、同じデータを保有することを保証します。 この分散化された合意形成を行うために、ブロックチェーンには合意メカニズムが必須となります。
イーサリアムは現在プルーフ・オブ・ステーク (PoS)合意メカニズムを使用しています。 新しいブロックをチェーンに追加するには、イーサリアムのネイティブ通貨であるETHを担保としてステーキングし、バリデータソフトウェアを実行する必要があります。 その後、ランダムに選択されたバリデータがブロックを提案し、他のバリデータが検証してブロックチェーンに追加します。 報酬とペナルティのシステムにより、バリデータは誠実かつ可能な限りオンラインで稼働することにインセンティブを与えられます。
ブロックチェーンデータのハッシュ化や、ブロックの履歴の追加方法については、ぜひこのデモ(opens in a new tab)をご覧ください。また、Anders Brownworth氏による、以下のビデオもおすすめです。
Anders氏によるブロックチェーンのハッシュに関する説明:
イーサリアムとは
イーサリアムとは、ブロックチェーンにコンピュータが組み込まれたもので、 分散型、自由参加型かつ、検閲耐性を備えたアプリや組織を構築するための基盤となっています。
イーサリアムの世界には、イーサリアムネットワーク上の誰もがその状態に同意できる単一の正規のコンピュータ(イーサリアム仮想マシンまたはEVMと呼ばれる)があります。 イーサリアムネットワークに参加するすべての人(全イーサリアムノード)は、このコンピュータの状態のコピーを保持します。 さらに、参加者は誰でもこのコンピュータに任意の計算を実行するようにリクエストをブロードキャストできます。 リクエストが配信されると、ネットワーク上の他の参加者は、計算を確認・検証し、実行します。 実行されるとEVMの状態が変更され、それが確定し、ネットワーク全体に伝播されます。
この計算作業のリクエストを「トランザクションリクエスト」と呼びます。すべてのトランザクションの記録とEVMの現在の状態はブロックチェーンに保存され、それがすべてのノードによって保存され、合意されます。
このような暗号メカニズムは、一度トランザクションが有効であると検証されてブロックチェーンに追加された後は、改ざんができないようにします。 また、このメカニズムにより、すべてのトランザクションが適切な「許可」があって、署名・実行されることが保証されます。(ここでの「許可」とは、例えばAliceのアカウントからデジタル資産を送信するのは、Alice以外の他者にはできないという意味)。
イーサとは
イーサ(ETH)はイーサリアムのネイティブ暗号通貨です。 ETHの目的は、ブロックチェーンに必要な計算の市場を可能にすることです。 このような市場は、トランザクションリクエストを検証し、実行するための経済的なインセンティブを与え、またネットワークに計算リソースを提供します。
また、新たなトランザクションリクエストをブロードキャストする参加者は、いくらかのETHを報酬としてネットワークに提供しなければなりません。 ネットワークは報酬の一部をバーンし、残りを最終的にトランザクションの検証、実行、ブロックチェーンへのコミット、およびネットワークへのブロードキャストを行った人に与えます。
支払われるETHの額は、トランザクションリクエストの計算に必要なリソースに相当します。 計算リソースに応じて報酬を払わなければならないため、これらの報酬は無限に計算したりリソースを大量に消費するスクリプトを実行することで意図的にネットワークを詰まらせる悪意のある参加者からも守ることができます。
また、ETHは暗号経済的なセキュリティを提供するため、主に次の3つの方法で使用されます。1) ブロックの提案、または他のバリデータの不誠実な行為を指摘したバリデータへの報酬。 2) 不誠実な行為に対する担保(バリデータはETHをステーキングしており、バリデータが不誠実な行為を行った場合、バリデータのETHを破壊)。3) 新しく提案されたブロックに対する「投票」の重み付けに使われ、合意メカニズムのフォーク・チョイスで使用。
スマートコントラクトとは
参加者はEVMで計算をリクエストするたびに、新たなコードを作成するわけではありません。 アプリケーションデベロッパーがプログラム(再利用可能なコードの一部)をEVMにアップロードし、ユーザーがそのコードをさまざまなパラメータで実行するようにリクエストします。 ブロックチェーン上のネットワークにアップロードされ、実行されるプログラムをスマートコントラクトと呼びます。
スマートコントラクトは、基本的なレベルでは、自動販売機のようなものだと考えることができます。つまり、特定のパラメータで呼び出され、一定の条件が満たされた場合、何らかのアクションや計算を実行するスクリプトです。 例えば、発信者が特定の受取人にETHを送信すると、スマートコントラクトが単純にデジタル資産の所有権を作成・割り当てるなどです。
デベロッパーであれば誰でも、スマートコントラクトを作成し、ブロックチェーンをデータ層として使ってネットワークに公開できます(ただし、フィー(手数料)が必要)。 また、すべてのユーザーはスマートコントラクトを呼び出してコードを実行できます(これにもフィーが必要)。
このように、スマートコントラクトを利用することで、デベロッパーは複雑なユーザー向けアプリや様々なサービス(マーケットプレイス、金融商品、ゲームなど)を構築し、ブロックチェーン上にデプロイできます。
用語集
ブロックチェーン
イーサリアムネットワークの過去の処理を踏まえてコミットされたすべてのブロックシークエンスのこと。 各ブロックが前のブロックへの参照を含んでいることが名前の由来。前のブロックを参照することにより、すべてのブロックの順序(つまり正確な履歴)が維持される。
ETH
イーサ(ETH)はイーサリアムのネイティブ暗号通貨。 コード実行リクエストが達成されるには、ユーザーは手数料としてETHを支払う必要がある。
EVM(イーサリアム仮想マシン)
EVM(イーサリアム仮想マシン)とは、イーサリアムネットワーク上のすべてのノードが同じ状態を保存し、同意するグローバルな仮想コンピュータ。 参加者は誰でも、EVMで任意のコードの実行をリクエストすることができ、コードが実行されると、EVMの状態が変更される。
ノード
EVMの状態を保存している実際のマシン。 ノードは相互に通信して、EVMの状態と新しい状態の変化に関する情報を伝達する。 あるノードからコード実行リクエストをブロードキャストすることで、コードの実行をリクエストできる。 イーサリアムネットワーク自体は、すべてのイーサリアムノードとその通信の集合体。
アカウント
ETHの保有先。 ユーザーはアカウントを初期化し、アカウントにETHを入金したり、アカウントから他のユーザーへETHを送金できる。 アカウントとアカウント残高はEVMの巨大なテーブルに保存され、これらはEVM全体の状態の一部。
トランザクション
「トランザクションリクエスト」とはEVM上でのコード実行リクエストの正式名称であり、「トランザクション」とは実行されたトランザクションリクエストとそれに伴うEVM状態の変化を指す。 すべてのユーザーは、ノードからネットワークにトランザクションリクエストをブロードキャスト可能。 トランザクションリクエストが、合意されたEVMの状態を変更するには、他のノードによって検証・実行され、「ネットワークにコミット」される必要がある。 コードを実行するとEVMの状態が変化し、コミットするとこの状態の変化がネットワーク内のすべてのノードにブロードキャストされる。 トランザクションの例:
- 自分のアカウントからAliceのアカウントに X ETHを送信
- スマートコントラクトのコードをEVM状態に公開
- EVMのアドレスXで、引数Yを使用してスマートコントラクトのコードを実行
ブロック
トランザクション量が非常に多いため、トランザクションはバッチまたはブロック単位で「コミット」される。 ブロックには通常、数十から数百のトランザクションが含まれる。
スマートコントラクト
デベロッパーがEVMの状態に公開する、再利用可能なコード(プログラム)の断片。 トランザクションリクエストを行うことで、誰でもスマートコントラクトコードの実行をリクエスト可能。 デベロッパーはスマートコントラクトを公開して、任意の実行可能なアプリケーション(ゲーム、マーケットプレイス、金融商品など)をEVMに書き込むことができ、これらは分散型アプリ(Dapp)と呼ばれる。
参考文献
- イーサリアムホワイトペーパー
- イーサリアムの仕組みについて(opens in a new tab) - Preethi Kasireddy (注: このリソースは依然として価値のあるものですが、マージ以前の情報であり、イーサリアムのプルーフ・オブ・ワークのメカニズムを参照しています。イーサリアムは現在、プルーフ・オブ・ステークで保護されています)
役に立つコミュニティリソースをご存知の場合は、 ページを編集して追加してください。
関連チュートリアル
- イーサリアムのデベロッパー向けガイド・パート 1 – Pythonとweb3.pyを使用した初心者向けのイーサリアムガイド