イーサリアム仮想マシンEVMの紹介、スマートコントラクトの詳細説明

イーサリアムの例: スマート コントラクトとは何ですか?スマートコントラクトをデプロイ、呼び出し、実行するにはどうすればよいですか?スマートコントラクトはどのように機能しますか?スマートコントラクトはどこに存在しますか?スマートコントラクトが呼び出されているかどうかを区別するにはどうすればよいですか?世界状態データベース、EVM、スマート コントラクトの間にはどのような関係がありますか?

スマートコントラクトとは

「デジタル形式で指定された一連の約束。これには、契約当事者がそれらの約束を履行できる合意書が含まれます。」を指します。 1994 年には、アメリカのコンピューター科学者ニック・サボがスマート コントラクトの概念を提案しました。

スマートコントラクトとは、ブロックチェーン技術に基づいて契約を自動的に実行するコンピュータープログラムです。これらは、ブロックチェーン上で実行されるコードで記述された一連のルールとロジックです。スマート コントラクトは、特定の条件が満たされた場合に、仲介者の介入なしに実行する必要があるアクションを定義します。

イーサリアムは、スマート コントラクトをサポートする最もよく知られたブロックチェーン プラットフォームの 1 つです。イーサリアムでは、スマート コントラクトは Solidity と呼ばれるプログラミング言語で記述されます。これらのコントラクト コードはイーサリアム ブロックチェーン上にデプロイされ、ネットワーク全体のノードによって検証および実行されます。スマートコントラクトの実行結果やステータスはブロックチェーン上に保存され、透明性と改ざん性が確保されます。

スマート コントラクトは、デジタル通貨の転送、デジタル ID の管理、投票と投資の実行などを含むさまざまなタスクを実行できます。スマートコントラクトは自動実行性と透明性の性質により、サードパーティを信頼する必要性を排除しながら、より高いセキュリティを提供します。

スマートコントラクトを導入して実行する方法

イーサリアムを例に挙げます。スマート コントラクトは、イーサリアム仮想マシン EVM に展開して呼び出すことができます。
イーサリアムでは、コントラクト アドレスにトランザクションを送信することでコントラクトの実行がトリガーされます。契約アドレスは契約作成者のアドレスと作成者のアカウントのナンスから生成されるため、ブロックチェーン上の契約を一意に識別します。

契約締結までの流れは以下の通りです。

  1. コントラクトの作成: まず、誰か (作成者) が特別なトランザクション (コントラクト作成トランザクションと呼ばれる) を送信してコントラクトをデプロイします。このトランザクションには、コントラクトのバイトコード (つまり、コントラクトのコンパイルされたコード) とその他の必要なパラメーターが含まれています。このトランザクションでは、作成者は契約の最初の資金としてイーサ (ETH) を契約アドレスに送信します。

  2. コントラクト作成トランザクション: このコントラクト作成トランザクションはイーサリアム ネットワーク全体にブロードキャストされ、マイナーによってブロックに含められます。

  3. ブロックチェーンの確認: マイナーはトランザクションでコントラクト バイトコードを実行することで新しいブロックを作成します。これが、イーサリアムネットワークでコントラクトが作成される方法です。

  4. コントラクトのトリガー: コントラクトが作成されると、誰でもコントラクト アドレスにトランザクションを送信してコントラクトを呼び出すことができます。このトランザクションには、コントラクトを呼び出すためのデータ、つまり実行するコントラクト関数とそのパラメータが含まれます。

  5. コントラクトの実行: このトランザクションがマイナーによってパッケージ化され、ブロックチェーンに書き込まれると、イーサリアム ネットワーク内の各ノードはコントラクトのバイトコードを実行し、コントラクトの実装プロセスをシミュレートします。これにより、すべてのノードで同じ結果が得られます。

このように、コントラクトの実行は、トランザクションをコントラクト アドレスに送信し、トランザクションに実行するデータを含めることによってトリガーされます。イーサリアム ネットワークのノードは、トランザクション内のデータに基づいて、コントラクトのロジックに従って対応する操作を実行します。

スマートコントラクトの原則

スマートコントラクトとブロックチェーンのフレームワーク図
上の図は、スマート コントラクトの構造を示しています。一般に、「値」と「ステータス」という 2 つの属性があります。コード内で If-Then ステートメントと What-If ステートメントを使用して、コントラクトの対応するトリガー シナリオと応答ルールを事前設定します。条項。スマート コントラクトは複数の当事者によって共同で合意され、それぞれが署名した後、ユーザーが開始したトランザクション (トランザクション、Txn) とともに送信され、P2P ネットワークを通じて伝播され、マイナーによって検証され、ブロックチェーンの特定のブロックに保存されます。ユーザーは、返されたコントラクト アドレス、コントラクト インターフェイス、その他の情報を取得した後、トランザクションを開始してコントラクトを呼び出すことができます。 「マイナー」は、システムの事前設定されたインセンティブ メカニズムによって動機付けられ、トランザクションを検証するために自分のコンピューティング能力を提供します。

コントラクトの作成または呼び出しトランザクションを受信した後、「マイナー」はコントラクトを作成するか、ローカルのサンドボックス実行環境 (イーサリアム仮想マシンなど) でコントラクト コードを実行します。コントラクト コードは、信頼できる外部データ ソース (別名: とも呼ばれます) に基づいています。 Oracle Machines].]およびワールド状態チェック情報は、現在のシーンがコントラクトのトリガー条件を満たしているかどうかを自動的に判断して、応答ルールを厳密に実行し、ワールド状態を更新します。トランザクションが有効であることが確認された後、新しいデータ ブロックにパッケージ化されます。新しいブロックがコンセンサス アルゴリズムによって認証されると、メインのブロックチェーン チェーンにリンクされ、すべての更新が有効になります。

イーサリアム仮想マシン EVM

EVM は、スマート コントラクトの展開と運用を容易にするコンピューティング エンジンです。 EVM がなければ、イーサリアム プロトコルでソフトウェア プログラムを実行することは不可能です。したがって、EVM はイーサリアムのコア アーキテクチャの重要な部分です。

仮想マシン

仮想マシンは、物理コンピュータの動作をシミュレートするプログラムです。仮想マシンにはストレージと処理ユニットがあり、コンピュータ上でプロセスとして実行されます。これは、1 台のコンピューターを別のコンピューターの上で実行するようなものです。

仮想マシンは、通常の Windows または MacOS ソフトウェアと似ています。ここでの違いは、仮想マシンがより高度な機能を実行するように設計されていることです。さらに、通常のオペレーティング システムとは異なり、仮想マシンはストレージや帯域幅などのコンピュータの他の部分にアクセスできません。

エミュレータを使用して PC で Android ゲームをプレイしたことがある場合は、仮想マシンに馴染みがあるかもしれません。エミュレータと仮想マシンは大きく異なりますが、どちらも「サンドボックス」環境でコードを実行するハードウェアの能力に近いものです。

チューリング完全性

英国の数学者アラン・チューリングは、今日のコンピューターの先駆けとなる最初のチューリング マシンを発明しました。十分な時間とリソースがあれば、チューリング マシンはどんなに複雑な計算でも処理できます。

ここで、これらのアイデアを組み合わせて、イーサリアム仮想マシンを定義しましょう。

Ethereum Virtual Machine (EVM) は、コードのデプロイと実行を可能にする巨大な仮想マシンです。 EVM にアクセスするために必要なクライアント ソフトウェアをインストールするだけで、EVM を使用してイーサリアム上でプログラムを実行できます。基本的に、EVM は「ワールド コンピューター」として機能し、分散環境でソフトウェア操作を実行します。

集中管理がないため、EVM は報酬と引き換えにシステムにコンピューティング能力を提供する複数の個人/企業によって維持されます。したがって、どの当事者からも一方的にシャットダウンできない検閲耐性のあるアプリケーションの作成に役立ちます。

EVM は、さまざまな複雑さの計算を実行するために使用できるため、完全なチューリングです。これがイーサリアムとビットコインの違いです。ビットコインはチューリングが不完全であり、機能が制限されているためです。

ビットコインの主な機能は、価値の移転ルールを規定する「分散台帳」です。値の転送の処理に加えて、イーサリアムは (EVM 経由で) スマート コントラクトの展開もサポートします。したがって、イーサリアムは「分散ステートマシン」と呼ばれます。

「状態」とは、任意の時点におけるシステムに関する情報を指します。イーサリアムでは、状態とは、特定の時点で存在するアドレス、アカウント残高、スマート コントラクト コードを指します。各トランザクションはイーサリアムの状態の変化 (状態遷移) を引き起こし、それがネットワーク全体に反映されます。

スマートコントラクトはどこに存在しますか?

イーサリアムでは、コントラクトのコードは必ずしもイーサリアム仮想マシン (EVM) に保存されるわけではありません。代わりに、契約が作成され、ブロックチェーン上の契約アカウントに保存されるときに、契約のコードがブロックチェーンに書き込まれます。

コントラクトをデプロイすると、コントラクトのバイトコード (つまり、コントラクトのバイナリ表現) を含む特別なトランザクションが作成されます。このトランザクションはブロックチェーン上のブロックをトリガーします。このブロックには契約の作成が含まれ、契約のバイトコードが契約アカウントに保存されます。

契約アドレスは、契約作成者のアドレスと作成者のアカウントのナンスから計算されます。これにより、コントラクト アドレスがイーサリアム ネットワーク内で一意であることが保証されます。

トランザクションをコントラクト アドレスに送信すると、イーサリアム ノードはアドレスがコントラクト アドレスと一致するかどうかを確認します。一致する場合、イーサリアム ノードは契約アカウントに保存されている契約コードを実行し、契約実行のためのトランザクション データを提供します。

契約口座

イーサリアムでは、契約アカウントは通常のアカウントとは異なる方法で保存されます。契約アカウントは、通常のアカウントのように秘密キーとアドレスに関連付けられていませんが、契約コードとストレージ容量に関連付けられています。

契約アカウントの保存場所はイーサリアムの世界状態データベース内にあります。イーサリアムはデータベースのような構造を使用して、アカウント残高、契約コード、契約ストレージデータなどを含むネットワーク全体のステータスを保存します。このデータベースの各状態はブロックに対応しているため、イーサリアムのネットワーク全体の状態は各ブロックの生成とともに更新されます。

具体的には、契約アカウントのデータは、アカウントのアドレスの下に保存されます。コントラクト アドレスは、コントラクトを作成したトランザクションの送信者アドレスと送信者アカウントの nonce 値から計算されます。このアドレスは契約アカウントを一意に識別し、契約のコードとデータをイーサリアムの世界状態データベースに保存します。

なお、契約アカウントのアドレスは作成者とnonceから計算されますが、アカウントの秘密鍵は直接存在しません。秘密キーはトランザクションの署名とアカウントの制御に使用されますが、コントラクト アカウントには秘密キーがなく、その実行はトランザクションによってトリガーされ、コントラクト コードのロジックに依存します。

世界国家データベース

イーサリアムでは、世界状態データベースは、イーサリアム ブロックチェーン ネットワーク全体のアカウントと契約のステータス情報を追跡および管理するために使用される永続的なグローバル状態ストレージ システムです。その機能には主に次のものが含まれます。

  1. ストレージ アカウント情報: 世界状態データベースには、各アカウントの現在の残高、契約コード、契約ストレージ データ、およびその他の情報が保存されます。

  2. グローバル ステータスの提供: 各アカウントのステータスを記録することで、世界状態データベースは各アカウントの現在の状況を反映するグローバル ブロックチェーン ステータスを提供します。

  3. スマート コントラクトのサポート: スマート コントラクトは、イーサリアム上の自己実行コードです。契約のステータスとデータは、世界状態データベースに保存されます。これにより、トランザクションとブロックが実行されるときにコントラクトの状態を変更できるようになります。

  4. ブロックチェーン履歴の保存: 世界状態データベースにはブロックチェーンの履歴状態も保存され、各ブロックは状態に対応します。これにより、過去のステータスを遡って確認し、トランザクションの正当性を検証できます。

原則:
世界状態データベースの原則には、マークル ツリーとデータ構造の設計が含まれます。各ブロックには、マークル ツリーのルート ノードである状態ルートが含まれており、すべてのアカウント状態のハッシュ値が含まれています。新しいブロックが生成されると、世界状態データベースが更新され、新しい状態が計算されて保存され、新しい状態ツリーが形成されます。これにより、データの不変性と整合性が保証されます。

マークル ツリー構造を採用することにより、イーサリアムは効率的な状態変更と検証メカニズムを実装します。アカウントのステータスを確認する必要がある場合、データベース全体を調べるのではなく、対応するマークル証明を確認するだけで済みます。この設計により、グローバルな一貫性を維持しながら、パフォーマンスとスケーラビリティが向上します。

イーサリアムでは、各ノードに独自のローカル世界状態データベースがあります。これは、イーサリアムが分散型ブロックチェーン ネットワークであり、各ノードが独自の状態データベースを独立して維持および更新する必要があるためです。各ノードはブロックチェーン ネットワークを通じてトランザクションを受信して​​検証し、スマート コントラクトを実行して、ローカル世界の状態を更新します。

各ノードには独自のローカル状態データベースがありますが、ブロックチェーンのコンセンサス メカニズムにより、最終的に各ノードは同じコンセンサス状態に到達する必要があります。これは分散型コンセンサスの中心的な概念です。各ノードは異なる開始点から開始する可能性がありますが、コンセンサス アルゴリズムを通じて、最終的には同じ状態、つまり同じ世界状態に到達します。これにより、ネットワーク全体の一貫性が確保されます。

スマート コントラクトを呼び出しているかどうかを確認するにはどうすればよいですか?

Ethereum では、トランザクションには to というフィールドが含まれており、トランザクションの受信者アドレスを指定します。 to フィールドが null であるか設定されていない場合、トランザクションは契約作成トランザクションとみなされます。

トランザクションをコントラクト アドレスに送信すると、イーサリアム ネットワークはこのアドレスを通じて対応するコントラクトを見つけ、トランザクション データに対応するコントラクト内の関数を実行します。これは、トランザクションの入力データ (入力データと呼ばれます) を通じて実現されます。

コントラクトのアドレスはコントラクトの作成者と作成者のアカウントのナンスによって生成されるため、ブロックチェーン上で一意です。トランザクションをコントラクト アドレスに送信すると、イーサリアム ネットワークはそのアドレスがコントラクト アドレスであることを認識するため、トランザクション データに対応するコントラクト コードを実行します。

つまり、イーサリアムは、主にトランザクションの to フィールドとトランザクションの入力データを通じて、単純なトランザクションではなくコントラクトを呼び出していることを認識します。 to フィールドにコントラクト アドレスが指定されている場合、イーサリアム ネットワークは入力データに対応するコントラクト内の関数を実行します。

世界状態データベース、EVM、スマートコントラクトの関係

イーサリアムでは、世界状態データベース (World State)、EVM (イーサリアム仮想マシン)、およびスマート コントラクトの間に密接な関係があります。それらの間の関係は次のとおりです。

  1. EVM とスマート コントラクト:

    • 実行環境: EVM はイーサリアムのランタイム環境であり、スマート コントラクトのバイトコードの実行を担当します。
    • スマート コントラクト コード: スマート コントラクトは、開発者によって Solidity や Vyper などの言語で書かれたプログラム コードです。これらのコードは、EVM 実行可能バイトコードにコンパイルされます。
  2. EVM と世界状態データベース:

    • 状態の維持: EVM は、世界状態データベースを読み取り、更新することでスマート コントラクトの状態を維持します。
    • 状態の読み取りと書き込み: スマート コントラクトを実行するとき、EVM はステート ワールド データベース内の現在の状態を読み取り、スマート コントラクトの実行結果に基づいてこれらの状態を更新できます。
  3. 世界国家データベースとスマートコントラクト:

    • 状態ストレージ: 世界状態データベースはイーサリアムのグローバル データベースであり、すべてのアカウント (ユーザー アカウントとスマート コントラクト アカウントを含む) の現在のステータスが保存されます。
    • スマート コントラクトのステータス: 変数値やその他の情報を含むスマート コントラクトのステータスは、世界状態データベースに保存されます。各スマート コントラクトには、世界状態データベースのエントリに対応する一意のアドレスがあります。

要約すると、スマート コントラクトは EVM を通じて実行され、実行プロセス中に世界状態データベースの読み取りと書き込みが行われます。 EVM はスマート コントラクトのバイトコードを実行する仮想マシンとして機能し、世界状態データベースはスマート コントラクトとアカウントの現在のステータスを保存する役割を果たします。これら 3 つの共同作業は、イーサリアム上のスマート コントラクトの実行および状態管理メカニズムを構成します。

おすすめ

転載: blog.csdn.net/ydl1128/article/details/134916882