イーサリアムとWebassemblyを使ってスマート・コントラクトをプログラムするには?

イーサリアムは最も人気のある暗号通貨の一つであるが、それ以上のものである。アルゴリズムのおかげで、暗号通貨は完全に自律的に管理できる。しかし、「スマート・コントラクト」はどのように機能するのだろうか?

イーサリアムにおけるスマート・コントラクトの仕組み
イーサリアムにおけるスマートコントラクトの原理を理解するためには、まずプログラミング言語の世界に少し入ってみる必要がある。現在のプログラミング言語は、基本的にインタプリタ型言語とコンパイル型言語の2つのグループに分けられる。最初のグループでは、プログラムは高級言語で書かれ、インタープリターによって実行される。よく使われる例としては、PythonとJavaScriptがある。インタプリタ型言語は、多くのアプリケーション分野(ウェブなど)で一般的です。また、非常に普遍的で、追加のツールを必要とせず、さまざまなプラットフォームで使用することができます。

これとは対照的に、コンパイル言語があり、コンパイラはまずプログラム・テキストを別の言語、多くの場合はバイナリのマシン・コードに変換する。このバイナリ・コードはプラットフォームに依存し、プロセッサ上で直接実行される。コンパイラーは、例えばARMやインテル互換CPUのように、プロセッサーの命令セットに合わせてカスタムコードを生成することができる(はずである)。このタイプの代表としてよく知られているのは、CとRustだ。

しかし、現実はいつものように、これらの単純な分類が示唆するよりも複雑だ。以前から、Javaのようなハイブリッド型もある。Javaコンパイラーは、Javaコードを「実際の」マシン・コードに直接変換するのではなく、特別な中間フォーマットに変換する。この中間フォーマットは、次にインタプリタ(Java仮想マシン)によって、プロセッサの具体的なアーキテクチャ上で実行される。

イーサリアムのスマートコントラクトも同様の仕組みだ。イーサリアムでトランザクションを検証し、新しい通貨を抽出するすべてのノードには、イーサリアム仮想マシン(EVM)のインスタンスが含まれている。イーサリアムの技術仕様であるイエローペーパーには、EVMをサポートする命令と、その実行方法が詳細に定義されている。

これは、多くの特別な機能を備えた独自の開発である:

外部世界との相互作用は不可能で、すべてのアルゴリズムによる決定はブロックチェーンとそのトランザクションからもたらされなければならない。
演算は、より大きなアドレスと金額を扱いやすくするために256ビットの値に基づいている。
ハッシュ関数などの特殊な演算は、パフォーマンスを高めるために統合されている。
すべての命令にはコスト関数(燃料)が割り当てられ、これは必要な実行時間と必要なメモリ量にほぼ対応する。英語ではmeteringという用語が一般的である。
EVMでのプログラミング
Javaエコシステムと同様に、EVMコンパイラが利用可能なプログラミング言語はいくつかあります。最も一般的な言語はSolidityで、表面的には(構文的には)JavaScriptに似ている。2020年末、イーサリアムのドキュメントには、PythonをベースにしたVyperと、完全に独立した開発のYul Plusという2つの言語が追加されている。

これらの言語に共通しているのは、汎用言語とは異なり、特殊な特徴を持つニッチな領域を占めているため、ドメイン特化型であるということであり、特に特殊な実行エンジンであるEVMを採用していることである。もちろん、これらのドメイン固有言語(DSL)は、基本的にはアプリケーションの複雑さを軽減するための良いアイデアである。

しかし、EVMの場合、これはほとんど意味がないように思える。結局のところ、ブロックチェーンの外の世界と相互作用する能力がないにかかわらず、任意のアルゴリズムを実行することができるので、(簡単に言えば)チューリング完全なのだ。

なぜ既存の言語と実行環境を使わないのか?
必要であれば、いくつかの機能を削除しなければならないが、より長い経験、より安定したツール、そしてもっと重要なことだが、より幅広いプログラマーの基盤を利用することができる。実際、今日では、プログラミング言語の人気は、それが特に簡潔であるか、型安全であるか、動的であるかだけでなく、既存の多くのライブラリやパッケージへのアクセスがいかに容易であるかによって決まるというのが常識である。この時代の変化は、その粗雑なセマンティクスで批判されることの多いJavaScriptが最もよく表しているが、NPMパッケージが100万個を突破して以来、最新のところでは最も人気のあるプログラミング言語と見なされているに違いない。

世界共通の中間言語、Webassembly
イーサリアムの仕様の背後にいる人々は、普遍的な言語を支持してカスタム開発を放棄することによって特定の問題を解決できるという結論に達した。大きな犬であるJavaScriptに代わるものを確立するための開発がウェブ上で進行中であることは、なんと便利なことだろう: Webassembly(WASM)だ。これは普遍的な中間言語であり、バイナリフォーマットであり、インタプリタの仕様と組み合わされている。その名前が示すように、このオープンスタンダードはもともとウェブ用に設計されたものだ。その一方で、他の応用分野(スマートフォンアプリケーションなど)も検討されてきた。

WASMの開発は、マイクロソフト、グーグル、アップルといった業界大手が主導している。この言語の大きな特徴は、最初から移植性を考慮して設計されていることです。これは、Rust、C++、Goといった既存のプログラミング言語の多くが、すでにウェブアセンブリ用にコンパイル可能であることからもわかります。

    同じトピックで

    Découvrez nos outils