イーサリアム入門。スマートコントラクト

イーサリアムは、その主な機能であるスマートコントラクトにより、ウェブ通信の未来の概念実証となりました。どのように機能するかを説明します。

Ethereum Sphere as a Crystal
Visualisation an abstract concept of Ethereum smart contracts

Ethereumとは何か?

まず第一に、Ethereumはブロックチェーン技術に基づいて動作する、分散型オンラインサービスを作成するためのプラットフォームです。第二に、それは暗号通貨です。Ethereumと、例えばBitcoinとの主な違いはスマートコントラクトにあります。スマートコントラクトはブロックチェーン内でのプログラミングを可能にします。これにより、NFTなどのより複雑なメカニズムをEthereumに統合することができます。

スマートコントラクトのおかげで、新しいビジネスの方法、透明な金融機関、透明な特許取得、透明な投票、そして透明な契約の作成を探求することができます。実際、スマートコントラクトの応用範囲は非常に広く、新しいアイデアが日々生まれています。

スマートコントラクト

基本的に、コントラクトはSolidityというプログラミング言語で書かれたコードを含むテキストファイルです。これは、スマートコントラクト内で使用できる関数やトリガーの形で特定のAPIを提供します。

Ethereumにおけるスマートコントラクトの実行のロジック

Ethereumでのコントラクトの実行は、いくつかの段階で行われます:

  1. トランザクションの作成

    すべてはユーザーによるトランザクションの作成と送信から始まります。このトランザクションにはスマートコントラクトの関数を呼び出すための指示が含まれ、コントラクトに転送するデータやETHを含む場合もあります。

  2. トランザクションの拡散

    送信されたトランザクションはEthereumネットワーク上のノードに拡散されます。トランザクションプールで待機し、マイナー(またはPoSではバリデーター)が新しいブロックに含めるために選択するのを待ちます。

  3. マイナーによるトランザクションの処理

    マイナーはプールからトランザクションを選択し、処理を開始します。これにはトランザクションの正当性(署名)の検証と、ガスを支払うのに十分な資金があるかの確認が含まれます。

  4. コントラクトの実行

    検証後、マイナー(またはバリデーター)はスマートコントラクトのコードを実行します。この実行はEthereum Virtual Machine(EVM)という隔離された環境で行われ、各操作は一定量のガスを消費します。

  5. 状態の変更

    コントラクトの実行の結果、ブロックチェーンの状態に変化が生じることがあります。例えば、トークンの転送やコントラクト内のデータの変更などです。

  6. ブロックの確認

    マイナーがトランザクションを含むブロックの形成を完了すると、このブロックをネットワークに拡散します。他のノードはブロックを検証し、成功すると自分たちのブロックチェーンに追加します。

  7. ガスの支払い

    トランザクションを送信したユーザーはETHでガス料金を支払います。この料金はトランザクションの処理とネットワークの維持に対する報酬として、マイナー(またはバリデーター)に渡ります。

  8. 確定

    ブロックが確認されると、トランザクションとそのすべての結果(コントラクトの実行を含む)は最終的かつ不可逆的なものとみなされます。

スマートコントラクトの計算費用は誰が負担するのか

Ethereumネットワークでスマートコントラクトを実行する際の計算費用は、トランザクションを送信するユーザーが負担します。これらのユーザーはガス料金を支払い、トランザクションの処理とスマートコントラクトの実行に必要なリソースを補います。

ガス料金に影響を与える要素は何か

ガス料金は以下の要因によって決まります:

  1. 計算の複雑さ

    より複雑な操作はより多くの計算資源を必要とするため、コストが高くなります。

  2. ネットワークの混雑

    ネットワークが混雑していると、ユーザーは自分のトランザクションを迅速にブロックに含めるために競い合い、ガス価格が上昇することがあります。

  3. ガスリミット

    ユーザーはトランザクションの実行に費やすガスの最大量を設定します。リミットが低すぎると、トランザクションが実行されない可能性があります。

マイナーやバリデーター(ネットワークがプルーフ・オブ・ワークまたはプルーフ・オブ・ステークを使用しているかによります)は、収益を増やすためにガス料金が高いトランザクションを選択します。これらの料金はEthereumネットワークの運用を維持するためのインセンティブとなります。

コントラクトで利用可能な機能の範囲

Ethereumのスマートコントラクトは幅広い計算を行うことができますが、考慮すべき制限や特徴があります:

  1. チューリング完全性

    SolidityやVyperなどのスマートコントラクトのプログラミング言語はチューリング完全であり、理論的には従来のプログラミング言語と同様のあらゆる計算を実行できます。

  2. 限られたリソース

    コントラクト内の各操作は一定量のガスを消費し、1つのトランザクションで使用できるガスの量は限られています。そのため、非常に複雑またはリソース集約的な計算は、高いガスコストやブロック制限のために実用的でない場合があります。

  3. 決定性

    スマートコントラクト内の計算は決定的でなければなりません。つまり、同じ入力に対して常に同じ出力を生成する必要があります。これはブロックチェーンの状態の一貫性を維持するために重要です。

  4. 外部ネットワークへのリクエスト不可

    スマートコントラクトは外部のサーバーやAPIに直接リクエストを送信できません。外部データを取得するためにはオラクルが使用されます。

  5. データの保存

    コントラクトはその状態にデータを保存できますが、ガスコストのため大量のデータを保存することは高価になる可能性があります。

  6. 数学的・論理的操作

    コントラクトはさまざまな数学的および論理的操作を実行し、実行フロー(ループ、条件分岐)を管理し、他のコントラクトを作成・相互作用できます。

  7. 暗号学的関数の処理

    Ethereumはハッシュ化やデジタル署名の検証などの特定の暗号学的関数をサポートしています。

  8. 実行時間の制限

    各トランザクションのガスリミットのため、スマートコントラクトは長い実行時間を必要とする計算には適していません。

これらの制限と能力は、Ethereumでスマートコントラクトを使用して効果的に実装できるアプリケーションや計算の種類を定義します。

ウェブサイトのAPIなど、ブロックチェーンから外部リソースへのアクセス

Ethereumのスマートコントラクトのコード内で、外部のウェブサイトにリクエストを送信したり、外部APIを呼び出すことは直接的には不可能です。しかし、Ethereumのスマートコントラクトで外部データやAPIと相互作用するためには、オラクルが使用されます。オラクルは外部世界からブロックチェーンにデータを提供する第三者サービスです。彼らは仲介者として機能し、スマートコントラクトが必要とするデータを収集し、信頼性があり検証された形でブロックチェーンに提供します。

オラクルの使用例には、資産価格の取得、天気データ、スポーツイベントの結果などが含まれます。しかし、オラクルを使用することはデータプロバイダーへの信頼を必要とし、分散型アプリケーションのこの側面の中央集権化に関連するリスクを適切に管理する必要があります。

これはブロックチェーンとスマートコントラクトのいくつかの重要な特徴に関連しています:

  1. 決定性

    ブロックチェーンは各トランザクションとコントラクトの実行が決定的であることを要求します。つまり、ネットワーク内のすべてのノードがコントラクトコードを実行する際に同じ結果に達する必要があります。外部へのリクエストは異なる時点で異なる結果をもたらす可能性があり、この原則を侵害します。

  2. セキュリティと隔離

    ブロックチェーンに外部データやリクエストを組み込むことは、攻撃のベクトルやネットワークセキュリティの脆弱性を生み出す可能性があります。

  3. 同期性と速度

    Ethereumブロックチェーンは同期モードで動作しており、外部の非同期リクエストへの依存を追加すると、マイニングやトランザクションの検証プロセスを大幅に遅延させたり混乱させたりする可能性があります。

スマートコントラクトにおけるデータの保存

Ethereumのスマートコントラクトは計算結果を保存する能力を持っています。これらのデータはブロックチェーンの状態に保存され、コントラクト自体や他のコントラクト、外部からの問い合わせでもアクセス可能です。データ保存の主要な側面は以下のとおりです:

  1. ステート変数:スマートコントラクトはブロックチェーンに保存され、コントラクトの関数を通じて変更可能なステート変数を定義できます。これらの変数は数値、文字列、配列、複雑なデータ構造などを保存できます。

  2. ステートの変更:スマートコントラクトがトランザクションの結果として実行され、ステート変数を変更すると、これらの変更はトランザクションの成功後にブロックチェーンに記録されます。

  3. 長期的な保存:データはブロックチェーンに記録されるため、長期的かつ不変であり、Ethereumネットワークが存在する限り保存されます。

  4. データの読み取り:スマートコントラクトは保存されたデータを読み取るための関数を含めることができます。これらの関数はトランザクションを送信せず、ガスを消費せずに外部ユーザーや他のコントラクトから呼び出すことができます。

  5. ガスの制限とコスト:Ethereumブロックチェーンにデータを保存するにはガスが必要であり、特に大量のデータを保存する場合は高価になる可能性があります。これはストレージの最適化と経済的な使用を必要とします。

スマートコントラクトは暗号通貨の残高の追跡、投票結果、NFT(非代替性トークン)のユニークな識別子など、さまざまな目的でストレージを使用できます。

したがって、データの保存と管理のメカニズムはEthereum上のスマートコントラクトの設計と機能における重要な要素です。

ネットワークへのデプロイ後のスマートコントラクトの修正

スマートコントラクトがEthereumネットワークにデプロイされると、そのコードは不変になります。つまり、デプロイ後にコントラクトのロジックや機能を変更することはできません。この特徴の主要な側面は以下のとおりです:

  1. コードの不変性:スマートコントラクトのコードとそのすべての操作はEthereumブロックチェーンに記録され、その歴史の不可欠な部分となります。デプロイ後、コントラクトコードを変更または削除することはできません。

  2. セキュリティと信頼:この不変性はネットワーク内のセキュリティと信頼を確保するための重要な特徴です。コントラクトと相互作用するユーザーや関係者は、デプロイ後にコントラクトのロジックが変更されないことを確信できます。

  3. アップデートと修正:スマートコントラクトのロジックを更新または変更する必要がある場合、開発者は通常、新しいコントラクトをデプロイし、必要に応じて古いコントラクトからデータを移行します。場合によっては、開発者はコントラクトに一部の側面(例:他のコントラクトのアドレス)を更新するためのメカニズムを含めますが、核心となるロジックは変更されません。

  4. 自己破壊:Solidityにはselfdestructという関数があり、コントラクトを「破壊」してブロックチェーンのスペースを解放し、残りの資金を指定されたアドレスに返すことができます。しかし、この関数を呼び出した後、コントラクトは機能しなくなり、そのコードは歴史としてブロックチェーンに残ります。

  5. プロキシコントラクトのアーキテクチャ:より柔軟で更新可能なシステムを作成するために、開発者はプロキシコントラクトのアーキテクチャを使用することがあります。ここでは、ロジックは別のコントラクトに保存され、プロキシコントラクトが関数呼び出しをそれに委任します。これにより、ロジックを持つコントラクトのみを更新することでロジックを更新できますが、このアプローチには独自の注意点やリスクがあります。

スマートコントラクトの核心となるロジックと機能はデプロイ後に変更されず、変更を行うには通常新しいコントラクトの作成が必要です。

まとめ

Ethereumは単なる暗号通貨以上の存在です。このようなプラットフォームは、私たちに支払い取引の自由を提供するだけでなく、官僚的な手続きを必要とせずに異なる企業間のコミュニケーションを可能にします。官僚主義の欠如は、人類のより迅速な進歩につながります。