スマートコントラクトのイメージを掴もう
イーサリアムの革新性は、ビットコインのブロックチェーンを拡張することで実現した汎用性の高いスマートコントラクトにあります。
ビットコインでもスマートコントラクトを実行することはできますが、イーサリアムの場合は決済や送金シーンに限らず様々な領域で活躍することが可能です。
イーサリアムには2つのアカウント(EOAとコントラクト)が存在することは既に学習しました。
スマートコントラクトを理解する上で重要なのが、コントラクトアカウントです。
EOAは内部にプログラムのコードやストレージを有していませんが、コントラクトはそれらを有しています。
スマートコントラクトの特徴は、一度デプロイ(実行)されるとそのプログラムコードを変更することができない点にあります。
スマートコントラクトを変更する唯一の方法は、新たなスマートコントラクトを定義してそれをデプロイすることです。
レッスン2で学習した通り、コントラクトはEOAによって開始されたトランザクションによってのみ実行されます。
従って、イーサリアムの全てのスマートコントラクトはEOAから始まるトランザクションによって実行されるのです。
実行されたコントラクトは別のコントラクトを実行させることができ、別のコントラクトもまた次のコントラクトを実行することができます。
第三者が存在しない状態で連鎖的に実行されていく点は、スマートコントラクトの特徴そのものだといえるでしょう。
そしてこの特徴こそが、イーサリアムをワールドコンピュータとしての地位を確立させている要因となります。
例えば各種DeFiサービスでは、お互いのスマートコントラクトを接続することで連鎖的な自動実行を実現しています。
そんなスマートコントラクトを記述するには、専用の高級プログラミング言語を使用するのが一般的です。
どんな高級言語でもスマートコントラクトを記述することはできますが、このあと学習するEVMがサポートしているのは「Solidity」「Vyper」「LLL」「Serpent」「Bamboo」といったものになります。
中でも人気があるのはSolidityです。
Solidityは、JavaScriptやC++、Javaに似た構文を持つ命令型のプログラミング言語であり、事実上のイーサリアム高級言語だといえます。
なお、イーサリアムにおける最初の高級言語はSolidityではなくLLLです。(現在はほとんど使われていません)
Periksa kemajuan pelajaran
Setelah Anda memahami konten pelajaran,
klik tombol "Periksa"!
スマートコントラクトにデータを提供するオラクル
ブロックチェーンはデジタルデータしか扱うことができません。
しかしながら、我々の生活はデジタル世界に閉じているわけではなく、むしろ現実世界の比重の方がまだまだ大きいのが事実です。
そこで重要なのが、ブロックチェーンのデジタル世界に現実世界の情報を持ち込む仕組みです。
この仕組みを実現するために重要な役割を担うのがオラクルと呼ばれる仕組みになります。
オラクルは、現実世界やオフチェーンとブロックチェーンを繋ぐ橋渡しの役割を担います。
オラクルが存在することで、スマートコントラクトの活用範囲を大幅に拡大することができるのです。
例えば、スマートコントラクトの契約条件に現実世界で起きたイベントを組み込むことなどができるでしょう。
オラクルによって提供される可能性があるデータの例としては、主に以下のようなものがあげられます。
- 現実世界の物理的な出来事:宝くじの当選者に対して、決まった日時に間違いなく当選金を支払う
- 為替レート:仮想通貨と法定通貨を換金
- スポーツイベント:スポーツの試合結果に関する予測市場を開設
- イーサの市場価格:ガス価格を法定通貨で表示
オラクルには、集権型のものと分散型のものが存在します。
集権型のものは、当該のオラクルを信用することでブロックチェーンの外部からデータを提供しますが、当然ながらオラクルへの信用問題が付いて回ります。
これに対して分散型では、オンチェーンによるデータ集約システムを備えた個々のデータ提供者からなるネットワークを構成します。
分散型オラクルでは、正しいデータを提供する行為に対してインセンティブを与える一方で、誤ったデータを提供すると罰則が与えられる仕組みとなっています。
Periksa kemajuan pelajaran
Setelah Anda memahami konten pelajaran,
klik tombol "Periksa"!
EVMとステート
スマートコントラクトをデプロイないし実行するにはバーチャルマシン(仮想マシン)が必要になります。
イーサリアムには専用のEthereum Virtual Machine(EVM)が存在し、ほとんど全てのトランザクションを実行する際にEVMが動かされます。
バーチャルマシンは、イーサリアムに限らず様々なシーンに存在するシステムです。
OSのインスタンス全体の仮想化やJavaで記述されたプログラムの実行など、昨今のソフトウェア開発にはバーチャルマシンが欠かせません。
ここまでに学習した通り、EVMが実行するコントラクトは、基本的にSolidityやVyperといった高級言語で記述されています。
なぜなら、EVMは専用の高級言語をコンパイルすることで生成される、独自のバイトコードで記述された命令セットを実行するからです。
EVMの特徴としては、一般的なバイトコードの操作に加えて、アカウント情報(アドレスやイーサ残高など)やブロック情報(ブロックナンバーやガス価格など)にアクセスできる点があげられます。
また、EVMはスタックベースのアーキテクチャを有しており、一時的な値は全てスタックに格納されます。
合わせて、次のデータコンポーネントも保有しています。
- ROM:実行されるスマートコントラクトのバイトコードが読み込まれている
- メモリ:揮発性で、明示的に初期化されている
- ストレージ:明示的に初期化されたイーサリアムの状態の一部となる
EVMの役割は、イーサリアムの状態(ステート)を更新することにあります。
イーサリアムは、全てのトランザクションによる影響を受け、常にステートを変化させています。
Periksa kemajuan pelajaran
Setelah Anda memahami konten pelajaran,
klik tombol "Periksa"!
イーサリアムのコンセンサス、イーサリアム2.0へ
イーサリアムカリキュラムの前半パートの最後に、コンセンサスについて触れておきましょう。
イーサリアムのPoWは、ビットコインとは異なりEthash(イーサッシュ)と呼ばれるものです。
Ethashには、ASICによるマイニングを阻止する仕組みが存在します。
ASICマイニングを防止することで、マイニングの集権化を避けネットワークのセキュリティを向上させることが狙いです。
イーサリアムは、「イーサリアム2.0」と称した大型アップデートによりコンセンサスアルゴリズムをプルーフオブワーク(PoW)からプルーフオブステーク(PoS)へと移行します。
PoWを採用するイーサリアムにはいくつかの大きな課題が存在するため、これを解決するためにはPoSへの移行が必要です。
イーサリアム2.0は、イーサリアムにおける過去未来にわたる最大のアップデートとなります。
イーサリアムが真に「ワールドコンピュータ」になるための大きな転換点であるイーサリアム2.0について、このあとのレッスンで理解を深めていきましょう。
Periksa kemajuan pelajaran
Setelah Anda memahami konten pelajaran,
klik tombol "Periksa"!