top of page
執筆者の写真ICP Japan

インターネットコンピュータ(ICP)上のWebAssembly(WASM)

※この記事は WebAssembly on the Internet Computer の内容を引用しています

DFINITY は、カーネギーメロン大学に新たに設立された WebAssembly 研究センターに参加し、WebAssembly アプリケーションをさらに研究し、インターネット コンピュータのさまざまな機能を最適化します。これは、ByteCode Alliance および W3C との既存のパートナーシップを補完し、将来の開発における WebAssembly の重要性を強化します。


WebAssembly(別名 Wasm)は、汎用コードを実行するための仮想マシンです。2015 年に、Apple、Google、Microsoft、Mozilla などの主要な Web ブラウザー ベンダーのコラボレーションとして初めて発表されました。元の設計者は、Web 上で信頼されていないコードをネイティブに近いパフォーマンスで実行するための安全でセキュアな実行環境としてこれを構想しました。WebAssembly は、2017 年に「WebAssembly で Web を高速化する」という論文とともに正式にリリースされました。それ以来、WebAssembly はすべての主要なブラウザーでシームレスに動作しています。


DFINITY Foundation は、インターネット コンピュータのアーキテクチャを設計する際に、ブロックチェーンの仮想マシンとしての WebAssembly の可能性を認識し、WebAssembly の共同設計者である Andreas Rossberg 氏をその開発に招きました。簡単に言うと、WebAssembly は当初からインターネット コンピュータの中核部分であり、大規模で高性能な分散型アプリケーションを実現する上で重要な役割を果たし続けています。


現在、WebAssembly エコシステムは30 を超えるランタイムと 20 を超えるプログラミング言語で繁栄しています。そして、最新の開発動向を把握するために、DFINITY はこの分野の専門家と積極的に協力しています。財団は、World Wide Web Consortium (W3C)およびBytecode Alliance ( Wasmtime ランタイムと呼ばれる WebAssembly の高性能実装を開発する組織)のメンバーです。そして今週、DFINITY はカーネギーメロン大学 (CMU) の WebAssembly 研究センターに誇りを持って参加しました


ブロックチェーン仮想マシンとしてのWebAssembly

---

インターネット コンピュータ(ICP)は、汎用アプリケーションをホストするブロックチェーン ベースのプラットフォームです。分散化やステートフルネスなどのブロックチェーンの利点をクラウド コンピューティングにもたらすことを目的としています。逆に言えば、高速でスケーラブルな汎用コンピューティングなどのクラウド機能をブロックチェーンの領域に持ち込むとも考えられます。


WebAssembly は、安全、安心、高速、決定論的になるように設計された汎用仮想マシンであるため、このミッションにおいて重要な役割を果たします。これらの属性は、信頼できないコードを複数の信頼できないノードで実行するというブロックチェーンのユースケースと完全に一致しています。WebAssembly のもう 1 つの利点は、幅広いプログラミング言語をサポートする豊富なエコシステムです。つまり、開発者はスマート コントラクトや分散型アプリケーションを作成するために、ブロックチェーン固有のカスタム言語を学習する必要がありません。


Internet Computer が WebAssembly を使用する方法

---

開発者について言えば、このセクションでは、コードの作成から展開、実行までのアプリケーション開発の過程を順を追って説明し、各段階での WebAssembly の役割に焦点を当てます。


アプリケーション開発は、サポートされているプログラミング言語の 1 つを選択することから始まります。WebAssembly は20 を超える言語をサポートしていますが、現在 Canister Development Kits (CDK) を備えているのは 4 つの言語だけです。CDK は、インターネット コンピュータと互換性のある WebAssembly バイナリを構築するためのライブラリとスクリプトのスイートです。これらの言語は、MotokoPythonTypeScript、およびRustです。WebAssembly System Interface (WASI)のサポートを実装したコミュニティ プロジェクトのおかげで、新しい言語の CDK の開発は以前よりもはるかに簡単になりました。これにより、将来的にコミュニティによってさらに多くの言語が追加される道が開かれることが期待されます。


プログラミング言語を選択した後の次のステップは、アプリケーションの実際のコードを記述することです。インターネット コンピュータのプログラミング モデルは、アクター モデルに基づいています。デプロイされた WebAssembly バイナリは、ユーザーや他のアクターからメッセージを受信し、他のアクターにメッセージを送信するアクターと考えることができます。各アクターは独自の状態とメモリを持っています。インターネット コンピュータでは、これらのアクターはキャニスターと呼ばれ、拡張されたスマート コントラクトです。アプリケーションには複数のキャニスターを含めることができます。図 1 は、キャニスターの構築とデプロイのプロセスを示しています。高級言語で記述されたキャニスターのソース コードは、CDK ライブラリとリンクされ、WebAssembly バイナリが生成されます。その後、WebAssembly バイナリはインターネット コンピュータにキャニスターとしてデプロイできます。

図1. WebAssemblyバイナリの構築とデプロイ

デプロイされて実行されると、キャニスターはユーザーまたは他のキャニスターからメッセージを受信し、WebAssembly コードを実行してこれらのメッセージを処理します。図 2 は、メッセージの実行に関連する大まかな手順を示しています。


実行前に、WebAssembly バイナリがインストルメント化され、マシン コードにコンパイルされます。インストルメンテーションでは、実行された命令の数をカウントするために、WebAssembly バイナリにシステム コードを挿入します。これは、1) 実行のためのサイクル (他のブロックチェーンではガスとも呼ばれます) を充電するため、および 2) 長時間実行される実行を適切に処理して、ブロックチェーンの進行が停止しないようにするために必要です。


Internet Computer は、事前コンパイルと呼ばれる方式を採用しています。これは、WebAssembly バイナリが実行前にマシン コードにコンパイルされることを意味します。

図 2. WebAssembly のインストルメンテーション、コンパイル、実行

メッセージがキャニスターに到着すると、メッセージ ヘッダーで指定されたハンドラー関数の実行が開始されます。実行では、キャニスターの現在の状態と着信メッセージが入力として使用され、キャニスターの新しい状態と送信メッセージのリストが出力として生成されます。ここでの課題の 1 つは、このブログ投稿「IC Internals: Orthogonal Persistence」で説明されているように、状態の変化を効率的に追跡することです。


インターネット コンピュータは、上記の実行プロセスを複数のノードに複製し、ノード間でビザンチン フォールト トレランス コンセンサスを実行します。誠実なノード間のコンセンサスを保証するには、決定論的な実行を保証することが不可欠です。WebAssembly は決定論的な実行を念頭に置いて設計されているため、この点で優れています。WebAssembly にはマルチスレッドなどの非決定論的な機能もありますが、これらはよく知られており、簡単に無効にできます。


WebAssembly と EVM

---

インターネット コンピュータ上の WebAssembly と EVM との比較はどうでしょうか? WebAssembly と EVM はどちらもブロックチェーンを動かす仮想マシンであるため、これは Ethereum ネットワーク上で構築する開発者にとって自然な質問です。


最も顕著な違いは、WebAssembly が汎用仮想マシンであるということです。つまり、ブラウザからエッジ コンピューティング、組み込みシステム、ブロックチェーンまで、幅広いアプリケーションがあるということです。また、主流の言語のコンパイル ターゲットとしても機能します。一方、EVM は Ethereum 専用に設計されており、独自の言語である Solidity が付属しています。たとえば、EVM は 256 ビット値を使用し、残高の照会、暗号ハッシュの計算などのドメイン固有の命令がいくつか含まれています。インターネット コンピュータは、この機能を命令ではなくライブラリ関数として提供していることに注意してください。


コンピューティングとストレージの点では、次の表に示すように、仮想マシンには桁違いの違いが見られます。


インターネット コンピュータに移行する Ethereum 開発者は、プログラミング モデルの 1 つの顕著な違いを強調することがよくあります。インターネット コンピュータの設計者は、スケーラビリティを優先し、アクター モデルに大きく依存していました。各キャニスター スマート コントラクトは個別のアクターとして機能するため、メッセージの受け渡しを介して他のスマート コントラクトと非同期的にのみ通信できます。


インターネットコンピュータにおけるWebAssemblyの研究開発

---

DFINITY は、WebAssembly をインターネット コンピュータの重要な部分として認識しており、WebAssembly の統合を改善するための研究開発に投資してきました。プロジェクトのハイライトは次のとおりです。


完了:

進行中:

将来の潜在的な探査:


分散型の「あらゆるスタック」の構築

---

インターネット コンピュータ(ICP)は、WebAssembly モジュールとして汎用アプリケーションをホストする分散型の「すべてのスタック」として機能するように設計されており、最終的には従来の IT に代わる高速でスケーラブルなスマート コントラクト テクノロジにつながる重要なコンポーネントです。WebAssembly を中核とすることで、インターネット コンピュータ上で大規模かつ高性能な分散型アプリケーションを構築することがさらに可能になります。また、WebAssembly が複数のプログラミング言語をサポートしているという事実は、開発者の採用を促進し、新しいアプリケーションの機会を広げます。


一般的に、WebAssembly はシステムのサーバー側とクライアント ブラウザー側の両方で選択肢になりつつあります。また、Internet Computer は、より分散された安全な実行環境でサーバー WebAssembly コンポーネントとコードを実行するための安全なプラットフォームです。CMU WebAssembly 研究センターのメンバーであることにより、DFINITY の R&D チームはクライアントと企業の両方にとって新しいユース ケースを探求できるようになります。


インターネットコンピュータの技術開発をフォローしてください: @DFINITYDev

最新記事

すべて表示

Comments


bottom of page