【完全保存版】EVM以外のVMを使用しているスマートコントラクトプラットフォームについて
当記事は、こちらの記事を翻訳・編集したものです。
0 はじめに
スマートコントラクトは、特定のニーズに合わせた、ブロックチェーン上のオリジナルの利用シーンを構築することができます。
ブロックチェーンがスマート・コントラクトをサポートするには、スマート・コントラクト実行環境またはスマート・コントラクト仮想マシンが必要です。
最も人気のある環境はイーサリアム仮想マシン(EVM)で、イーサリアム・ブロックチェーンによって最初に導入され、その後、イーサリアムが作ることができた巨大なエコシステムを活用したい多くの異なるネットワークによって採用されました。
しかし、EVM以外のスマートコントラクト仮想マシンもあり、そのほとんどはWebAssembly(WASM)をベースにしています。
1 EVMとWASMの比較
EVMはスタックベースのステートマシンで、EVMのオペコードをブロックチェーンの上で実行できる計算命令に解釈します。
これは、Polkadotの創設者であるGavin Wood博士によって作られました。
開発者はSolidityやVyperなどのコントラクト指向言語を使って、EVMのバイトコードまでコンパイルできるアプリケーションを書くことができます。
EVMは1024アイテムの深さを持ち、各アイテムは256ビットのワード(長さ)です。
1024項目という制限は、EVMスマートコントラクトの複雑さに本質的な限界があることを意味します。
その上、すべての演算が256ビットであるため、256ビットでないプロセッサー(つまりすべて)は、これらの演算を計算する際にかなりのオーバーヘッドを抱えることにもなります。
さらに、EVMバイトコードはゼロから作られているため、他の言語がEVMをターゲットにする場合、コンパイラをゼロから作らなければならず、拡張性が非常に難しくなるため、言語能力も問題となります。
また、コントラクト指向言語としては珍しい構文であるため、参入障壁が非常に高いことは言うまでもありません。
全体として、EVMの制限により、Solidity dAppの開発者が複雑なユースケースを作成することは非常に困難です。
より高度なユースケースになると、スマートコントラクトはより複雑さを要求し、EVMはその限界を見せています。
そこで登場するのがWASMベースのスマートコントラクトです。
WASMは技術的にはバイナリ命令フォーマットで、V8などの命令を実装したスタックベースの仮想マシン上で実行できます。
しかし、一般の人々やこの文脈では、WASMと言えば、WASM命令を実行できる一般的な仮想マシンを指します。
WASM自体は、ブラウザ環境からネイティブレベルの操作を実行するための共通規格です。
Google、Microsoft、Mozilla、Appleなどの業界リーダーが開発を主導しています。
WASMのパワーを使えば、ゲームのようなハードウェア負荷の高い作業も、ネイティブレベルに近いパフォーマンスでブラウザから実行できます。
EVMと同様に、WASMもバイトコードで動作するスタックベースのVMです。
WASMでプログラミングするということは、WASMのサンドボックス(VM)内でのみ実行可能なWASMバイトコードにコンパイルできる高級言語を使うということです。
言い換えれば、WASMはスマートコントラクトVMにとって完璧な適合性を持つ可能性があります。
WASMにインスパイアされた、あるいはWASMを直接使用したカスタムVMを使用する高パフォーマンスのネットワークが増えているように、多くの人気のあるブロックチェーンがこの思いを共有しています。
WASMがEVMに対して持つ主な利点は以下の通りですが、これらに限定されるものではありません。
ネイティブの32/64ビットオペレーション
広範な言語サポート
エコシステムの拡張が容易
高いパフォーマンスと互換性
WASMベースのスマートコントラクトが技術的にEVMより優れていることはわかりましたが、dApp開発に関してはなぜEVMがいまだに王者なのでしょうか?
なぜ多くのネットワークがいまだにEVMを使っているのでしょうか?
簡単な答えは、その開発者エコシステムがあるからです。
Solidityは多くの新しいdApp開発者にとってゲートウェイ言語であり、流動性の高いブロックチェーンのほとんどがEVMをサポートしているため、新しいプロジェクトがEVMを無視することは難しくなっています。
それでは、代替VMを使用している他のブロックチェーンネットワークは、EVMにもかかわらず、どのようにエコシステムを維持しているのでしょうか?
2 その他のスマートコントラクトプラットフォーム
1 Solana
Solanaは、そのほぼ瞬時の確定性(finality)とスマート・コントラクトのパフォーマンスでよく知られています。
興味深いことに、彼らはスマート・コントラクトを「オンチェーン・プログラム」と呼んでおり、C++やRustで書くことができます。
そして技術的には、SolanaはWASMでは動作しません。
代わりに、彼らはVMとしてBerkeley Packet Filter(BPF)バイトコードを使用します。
しかし、コントラクト言語は、彼らのプログラムをコンパイルするためにLLVM(WASMをターゲットとする同じコンパイラ)を使用しています。
そのため、必要な変更を最小限に抑えてWASMに再コンパイルできます。
主なドキュメントはSolanaの公式ドキュメントにあります。新しい開発者はここから始めることになります。
しかし、コアチームによって維持され、支持されている他の教材はありません。
彼らのクライアントAPIである@solana/web3.jsは、オンチェーンプログラムとの通信がどのように機能するかという点で、精彩を欠いています。
しかし、彼らの最大の強みは、Solanaコマンドラインツールと呼ばれるオールインワンツールにあります。
単一のCLIツールから、ユーザーは以下の機能を使うことができます
faucet エアドロップ
アカウント管理
オンチェーンプログラムのデプロイ
トランザクションの構築
ノード管理
ステーキング
署名ユーティリティ
CLIにはscaffolding(基本的なテンプレート)が埋め込まれていませんが、コア・チームが管理する別のリポジトリがあり、開発者はそれをプロジェクトに使用することができます。
2 Near
Nearはnightshadeシャードと高性能なWASMスマートコントラクトVMで有名です。
しかし、開発者の間で有名なもう一つの理由は、その洗練された開発者エコシステムでしょう。
RustとAssemblyScript(TypeScriptの一種)でNearのスマートコントラクトを書くことができます。
Solanaと同様、Nearにも単一のドキュメントサイトがあります。
初めて開発する人は、クライアントサイドとスマートコントラクトの両方の開発にこのドキュメントが必要なだけで、その中にノード管理/開発へのリンクもあります。
また、フロントページには、学びたい開発者に役立つ外部リソースのリストもあります。
Nearはまた、near-api-jsと呼ばれる独自のJavaScriptクライアントAPIを持っています。
開発者はこのAPIを使って、スマートコントラクトの呼び出しやトランザクションの実行など、ノードのあらゆるRPCを作成できます。
これはNode.jsのCLIツールで、near-api-jsをバックにしてNearブロックチェーンとやりとりします。
Near CLIでは以下のことができます。
アカウント管理
スマート・コントラクトのデプロイ
スマートコントラクトとの対話
トランザクションの構築
バリデータの管理
ScaffoldのdAppリポジトリ(コントラクトとフロントエンド)
3 Cosmos
Cosmosエコシステムは、相互運用性を念頭に置いたモジュラー型ブロックチェーンを構築するためのコアSDKを備えているという意味で、Polkadotエコシステムとよく似ています。
CosmWasmはCosmos SDKのモジュールで、Cosmosエコシステムにスマートコントラクト機能を追加します。
これを使用する有名なネットワークにTerraがあります。
現在、CosmWasmはRustスマートコントラクトのみを公式にサポートしていますが、コアモジュールはGoを使用して作られているため、将来的には言語サポートの拡大が想像できます。
CosmWasmはCosmos SDKのモジュールであるため、メインのCosmWasm開発者ドキュメントと、CosmWasmモジュールを使用するCosmosエコシステムのプロジェクトによって維持されている複数の小さなドキュメントがあります。
例えば、Terra Academyは、Rustを使ったハンズオン開発とCosmWasmを使ったスマートコントラクトの開発を学ぶための主な情報源です。
そして、Terraのメイン・ドキュメントには、CosmWasmスマート・コントラクトの開発者リファレンスしか含まれていません。
開発者向けドキュメントのほとんどは、CosmWasmのメインドキュメントページにあります。
しかし、CosmWasmは独立したブロックチェーンではないため、ほとんどの新規開発者はCosmWasmモジュールを使用しているプロジェクトによって管理されているドキュメントから始め、最終的にメインドキュメントを参照して詳細を確認することになります。
CosmWasmは、CosmJsと呼ばれる独自のJavaScript APIと、Terra Network上のWASMスマートコントラクトと対話するために作られたTerra.jsを持っています。
他のネットワークとは異なり、CosmWasmは専用のオールインワンCLIツールを持っていません。
その代わりに、cargoを使用してRustスマートコントラクトをコンパイルし、wasmdと呼ばれるGo CLIを使用してターミナルからデプロイして対話します。
しかし、CosmWasmの開発環境をセットアップするには、多くの手動設定や前提条件が必要です。
そのため、TerraにはTerrainというオールインワンのCLIツールがあります。
Terrainでできることは以下の通り
アカウント管理
ネットワーク管理
Scaffold dAppリポジトリ(コントラクトとフロントエンド)
テスト
スマートコントラクトのデプロイ
コントラクトとの対話
クライアント・スクリプト・フレームワーク
4 Polkadot/Substrate
Polkadotのエコシステムもまた、Polkadotネットワーク自体がスマート・コントラクトをサポートしないという興味深い構造を持っています。
その代わりに、Substrate(Polkadot SDKに相当)で構築されたブロックチェーンは、コントラクト・パレットと呼ばれるランタイム・モジュールを実装することができます。
このパレットを実装すれば、どのブロックチェーンでもWASMスマートコントラクトを実行できるようになります。
現在、ink!(RustのeDSL)をサポートしており、AssemblyScriptのeDSLをサポートするための作業も行われています。
Substrateはコントラクトパレット、WASMコントラクト言語(ink)、JavaScript APIを別々のプロジェクトとして扱っているため、SubstrateのWASMコントラクトのドキュメントはかなり乱雑で、単一のソースではなく分散しています。
Substrateノード開発者は、Substrate開発者向け公式ドキュメントやワークショップでコントラクトパレットについて学ぶことができます。
Polkadotのエコシステムを構築したい新規開発者は、Polkadotの公式ドキュメントがあります。
しかし最終的には、ink!の公式ドキュメントや、Astar Networkのような各パラチェーンの開発者向け文書から、詳細な開発ガイドラインを読む必要があります。
おそらく、Polkadot/Substrateエコシステムのための最も包括的で成熟したWASMスマートコントラクト開発者向けドキュメントは、SuperColonyによって維持されているOpenBrushでしょう。
ink!を使った一般的なWASMコントラクト開発については、これが最高のソースです。
Polkadot/Substrateには、@polkadot/apiと呼ばれるJavaScript APIもあり、これにも独自のドキュメントがあります。
スマートコントラクトAPIはPolkadot APIパッケージの一部であるため、ドキュメントはPolkadot.jsチームによって管理され、ここに保管されています。
ご覧のように、Polkadot/Substrateエコシステムには、他のプロジェクトのようにWASMスマートコントラクトを開発するための単一のドキュメントがありません。
また、コントラクトパレット、言語コンパイラ、コントラクトとやり取りするためのJavaScript APIは別々のプロジェクトとして扱われているため、新しい開発者が一目ですべてを確認できる単一のソースがなく、ドキュメントが別々に保管されています。
CLIツールについては、Polkadot/Substrateは、Terrain、Near CLI、Solana CLIのようなスマートコントラクトを構築するためのオールインワンツールや標準的な開発者環境を持っていません。
その代わり、ツールはSubstrateノード管理ツールと言語コンパイラツールに分かれています。
(スマートコントラクト開発者のためのノードセットアップとアカウント管理プロセスを合理化するRedspotというツールがありましたが、このツールは現在保守されていません。)
Substrate CLIは以下を提供します。
アカウント管理
署名者ユーティリティ
ノード管理
ネットワーク管理
ink!コントラクト・コンパイラCLI(Cargoコントラクトとしても知られています)はこちらです。
コントラクトのビルド
コントラクトのデプロイ
ユニットテストの実行
スマート・コントラクトとの対話
コントラクトデータのデコード
5 一目でわかるエコシステム
さて、WASMコントラクト・エコシステムが提供するものを探ってきたので、これらのネットワークを比較対照してみましょう。
お分かりのように、単一のブロックチェーン・ネットワークが統一された開発者環境とドキュメントを提供する方がはるかに簡単で、新しい開発者が一目ですべてを理解しやすくなります。
一方、CosmosやPolkadot/Substrateのようなブロックチェーンフレームワークやレイヤー0チェーンは、特定のネットワークに偏りが出る可能性があるため、統一された開発者環境やCLIツールを作るのが難しいです。
だからこそ、そのフレームワークの上に構築されるブロックチェーンが、Terraのようにドキュメントやツールを提供するのは自然なことです。
CosmWasmは、Substrateのように言語、コントラクトモジュール、JavaScript APIをすべて別個に扱うのではなく、ひとつのプロジェクトの一部として扱うため、Substrateの扱い方よりもはるかに統一されています。
次にツールのサポートを見てみましょう。
NearやSolanaのようなブロックチェーンが開発者により統合されたオールインワンのツールを提供しているのに対して、CosmWasmを持つCosmosエコシステムは基本的な機能しか提供しておらず、既存のツールとともに完全に統合された環境を構築するためにTerraのようなエコシステムのプロジェクトに依存していることは明らかです。
一方、SubstrateのCLIツールは、開発者が最初にデプロイターゲットとしてローカルコントラクトノードをセットアップしなければならないため、非常に散在しています。
Cargoコントラクトはありますが、Substrateエコシステムはaskのようなスマートコントラクト言語が増えることを期待しています。
3 WASMを再びスワンキーに😎
これまでのセクションでお分かりのように、WASMコントラクトのエコシステムはまだ新しいものですが、この技術を大量採用に向けて強力に推進している注目度の高いプロジェクトがたくさんあります。
しかし、Substrateエコシステムの進歩は、基礎となるテクノロジーが優れていないとしても、同等であるにもかかわらず、まだ遅れており、混乱しているように見えます。
そこで我々の出番となります。
Astar Networkは、Astar Networkの相互運用性を活用したいすべての将来のdAppsのために、Substrate WASMエコシステムを推進することを目指しています。
そのために、私たちAstar Networkは、Astar Networkから開発者の旅を始める開発者ドキュメントの統一、開発者教育の強化、新しい革新的なWASM dAppsのインキュベーションと助成金の提供、そして最も重要なSwanky CLIの作成に注力します。
Swanky CLIは、私たちのエコシステムが最も必要としているSubstrate WASMコントラクト開発者のためのオールインワンCLIツールです。
このツールはまだ開発中ですが、以下のような様々な機能をサポートする予定です。
ユニットテスト
コントラクトの相互作用
デプロイ
アカウント管理
開発者ノードのセットアップ
6月末までには、そして将来的には、以下を追加する予定です:
統合テスト
フロントエンド・アプリとコントラクトの両方のためのスキャフォールディング
その他多数
コードベースはモジュール性を念頭に作られているため、Swankyは、エコシステムを拡大するために、より多くのプロジェクトが参加するにつれて、複数のスマートコントラクト言語のサポートを追加する予定です。
私たちはスマート・コントラクトの未来の一部になれることに興奮しています。
そして、WASMスマートコントラクト開発者エコシステムへのヒッチハイクガイドはこれで終わりです。
ありがとうございました。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊