LINEはWebAssemblyのどこに注目しているか

高瀬亮氏(以下、高瀬):「LINE Blockchainでもプログラムを動かす-Web外で活躍するWebAssembly」というタイトルで、Blockchain Engineeringチームの高瀬と高橋が発表します。私はふだんLINE Blockchainの開発チームで、プログラマーとリサーチャーのような仕事をしています。よろしくお願いします。

さて、突然ですが、今WebだけでなくWeb以外の領域でもWebAssemblyが熱いです。Docker創設者のソロモン氏は、一昨年(2019年)Twitterで「WebAssemblyが2008年にあれば、我々はDockerを作る必要はなかったであろう」と発言し、世界を驚かせました。

このセッションではみなさんに、そんなWebAssemblyのどこが熱いのか、そしてWebAssemblyを使用する技術分野ではどのようなことが考えられているのか。これらをWeb外領域の1つであるBlockchainの立場からお伝えしようと思います。

みなさんの興味ある領域がBlockchainやWeb以外だったとしても、その領域でWebAssemblyを使用するヒントになると思います。

このセッションのアジェンダです。このセッションでは、前半に主にWebAssemblyについて私、高瀬から。後半に、そのVMについて高橋からお伝えしたいと思います。

前半の私からは、まずWebAssemblyがLINE Blockchainをどう変えるのか。次に、WebAssemblyのどこに注目しているのか。最後に、現在の界隈の動きについてお伝えできればと思います。

まずはLINE BlockchainがWebAssemblyに注目したきっかけについてお話しします。具体的には、スマートコントラクトという技術を「LINE Blockchain Developers」から使用可能にする予定であるというお話をします。

まずは、LINE Blockchain Developersの紹介です。LINE Blockchain Developersは、LINE Blockchainを使用したサービスを開発するためのプラットフォームです。

LINE Blockchain Developersは図のように、LINE Blockchainの操作に関するAPIとデベロッパーコンソールから成っています。つまり、開発者や彼らの開発したサービスとLINE Blockchainの橋渡しを行っています。

では実際、どのようなサービスを作成できるのかを見ていきます。これは公式チュートリアルのサンプル、「Mage Duel」というゲームサービスです。

画像に映っているカード1枚1枚をNFT、Non-Fungible Tokenで表現し、ゲーム内通貨をFT、Fungible Tokenで表現しています。このセッションでは、これらのトークン、カードや通貨をどのアカウントがどれだけ持っているかをLINE Blockchainが記録しているとだけ理解していただければ十分です。

このトークンは、LINE Blockchain Developersを通じて開発者がチェーン上に発行したり、ユーザーのアカウントに送信したりすることができます。

この画像はMage Duelのカードショップの様子です。ユーザーはここで、ゲーム内通貨であるルビーを使ってカードを買うことができます。カードの品揃えは一定時間でランダムに変更されます。ユーザーはすぐに品揃えを変更してほしい場合、右上のボタンを押し、ルビーを支払って品揃えを更新してもらうこともできます。

ブロックチェーン技術「スマートコントラクト」

では実際の更新の実装を見てみましょう。まず、ゲームクライアントからゲームサーバーに品揃えの更新をしたいとリクエストをします。そして、LINE Blockchain Developersとゲームサーバーが通信し、ルビーの支払いを行います。支払いの確認が取れたら、サーバー上で品揃えの更新を行うプログラムを実行し、サーバーはショップの内容を再びクライアントに伝えます。

ここで注目したいのは、それぞれがどこで実行されるかです。ルビーの支払いはLINE Blockchainで行われ、チェーンに記録が残ります。品揃えの更新はゲームサーバーが独自に行う実行で、この記録はLINE Blockchainには残りません。

そのため、ある疑問が生じるかもしれません。ユーザー側からすれば、「更新をブロックチェーンに公開しないのはなぜ? もしかして、レアカードとか出にくくしてるんじゃないの?」という疑問が生まれるかもしれません。

ゲーム開発者側からすれば、「いやいや、更新は実際には公平なんだけど、サーバーのロジックだったり、その実行を公開するのは難しいし、どうやって公平性を担保したらいいんだろうか?」という疑問が生じるかもしれません。

もし、更新部分のプログラムやその実行をブロックチェーンに記録できれば、この問題は解決します。ではなぜ、LINE Blockchain Developersでは、このような機能をサポートしていないのか。

それは、現在のLINE Blockchain Developersの提供しているAPIは、トークンの発行や移動などの簡単な操作のものだけであり、どうしてもサービス固有のロジックであったり操作のAPIは提供がしにくい状態であるからです。

そこで、サービス固有の操作をサービス開発者がLINE Blockchainに組み込めないだろうかと考えました。我々が注目したのが「スマートコントラクト」というブロックチェーン技術です。

スマートコントラクトでは、開発者がコードをブロックチェーンにデプロイし、またユーザーはデプロイされたコードを呼ぶことができます。

先ほどの例でいえば、品揃えの更新にあたるAPIをゲームの開発者がブロックチェーンに追加できるということです。コードのデプロイや実行、また実行の結果は、通常の送金と同様、ブロックチェーンに記録されます。

先ほどの品揃えの更新も、実行をブロックチェーンに記録・公開できるようになるというわけです。これにより、トークンの管理以上のさまざまな機能をブロックチェーンに持たせることができるようになります。

WebAssemblyが満たす3つの要件

では、チェーンにコードの記録ができるようになればスマートコントラクトが実現できるのかというと、そう単純ではありません。特にコードに関して代表的な要件が3つあると考えられています。

1つはSafe、安全性です。ブロックチェーンでは、多くのマシンが協力してチェーンを維持していくことが一般的です。スマートコントラクトでは、さまざまな開発者がデプロイしたコードをすべてのマシンから実行することになります。デプロイされるコードがブロックチェーンの仕組みであったり、それらのマシンを脅かすことは防がなければいけません。

2つ目はExecutableとDeterministicです。簡単に言うと、Executableは、ブロックチェーンを維持するすべてのマシンがデプロイされたプログラムを実行できること。Deterministicは、すべてのマシンで同じコードと同じ入力であれば同じ結果を返すという性質です。これらは、すべてのマシンが協力してチェーンを維持していくのに必要となっています。

3つ目はEffective、実行が効率的であるということです。これが必要な理由は簡単で、実行が遅くてブロックチェーンのほかの機能、送金などの妨げになってはいけないということです。

最近では、WebAssemblyがこれら3つの要件をうまく満たしていそうだという理由で注目されています。

では、なぜWebAssemblyがスマートコントラクトに適しているのかについて見ていきたいと思います。その前にまずは、WebAssemblyに関する基礎的な部分を紹介します。

WebAssemblyは、C++やRustなどの言語からコンパイルされるバイナリ形式の実行ファイルです。コンパイルされたあとのWebAssemblyは、ブラウザが専用のVMで実行することで動作します。

WebAssemblyは、マシンネイティブな実行ファイルと遜色ない速度で動作するように設計されており、実際に、3Dゲームであったり画像加工をブラウザ上で行うことも可能になっています。

では、WebAssemblyはどういう仕組みでブラウザの計算を高速にしているのか、わかりやすいように従来のWebアプリと比較してお話しします。

従来のWebアプリがHTMLとCSS、そしてJavaScriptから成っているとすると、WebAssemblyはJavaScriptのライブラリのようにそこに追加されます。つまり、特にマシンパワーを必要とする部分をWebAssemblyに切り分けてやることで、より複雑な計算をブラウザ上で行えるというわけです。

なぜWebAssemblyがスマートコントラクトに適しているのか

さて、ではブロックチェーンに話を戻して、なぜWebAssemblyがスマートコントラクトに適しているのかを見ていきます。簡単に言ってしまえば、WebAssemblyの特徴がうまくスマートコントラクトの要件を満たしているからです。また、その開発のしやすさも注目されている理由です。

ここからは、WebAssemblyの特徴とスマートコントラクトの要件との対応をこの図に合わせて見ていきます。これらの特徴はブロックチェーンに限らず、さまざまな分野に共通して使用できるものとなっています。

ぜひみなさんの興味ある分野にWebAssemblyが使用可能かどうか考えながら聞いていただくとおもしろいかと思います。みなさまがWebAssemblyの導入を考える際の指標であったりヒントにもなると思います。

まずは、WebAssemblyのPortableという特徴です。Portableは、どのような環境で開発されたWebAssemblyでも、環境を選ばずに実行が可能であるという性質です。さまざまなマシンで実行されるスマートコントラクトにはうれしい性質になっています。

次に、Deterministicです。同じ入力に対しては、環境やほかの条件を問わず常に同じ結果を返すということですね。WebAssemblyは引用したとおり、一部の明示的に定義されている命令を除き、動作がDeterministicになるように定義されています。

つまり、それらの命令が使用できないように制限してやれば、自然と出力が一定となり、スマートコントラクトにも使用できるようになります。

次に、Efficient and Fastです。WebAssemblyは、JITやAOTといったコンパイル技術を使用できるように設計されています。これによりマシンネイティブな命令と遜色ない速度での実行が可能です。性能が必要なスマートコントラクトにもうれしい性質です。

次は、Safeです。WebAssemblyは、ホストマシンのプロセスやメモリ、ディスクへ直接アクセスする命令が書けないように設計されています。代わりに、VMが用意するサンドボックス上のリソースを使用して実行されます。スマートコントラクトでも、ホストマシンを脅かさないことを簡単に保証することが可能です。

次は、Open。VMが用意したAPIを使用できるという性質です。少しわかりにくいのでファイル操作の例を使って説明します。WebAssemblyからホストマシンのファイルを操作することを想像してください。

当然、WebAssemblyが自由にファイル操作を行えてしまうのは安全ではありません。そこで、ファイル操作のAPIをVMから提供する解決策を取ります。権限の管理はホストマシンとVMが担い、バイナリからそれを切り分けてやるというわけです。これはOS間のファイル操作の差異の吸収にも一役買っています。

この図では、ファイルAへの読み書きは、ホストマシンがVMを通じて許可している状態です。このAPIを使用できるという性質はスマートコントラクトでもよく働いています。VMにチェーンの情報取得などブロックチェーン独自の機能をAPIとして持たせることで、スマートコントラクトから安全かつ簡単にそれらを利用できるというわけです。

次に、Readable and Debuggableです。WebAssemblyはバイナリ形式ですが、それと1対1に対応するテキスト形式であるwatを提供しています。これは開発者や管理者にとって、デバッグやコード管理の助けとなります。

最後に、Language Independentです。WebAssemblyは、さまざまな言語からのコンパイルのしやすさを意識して開発されています。実際に現在は、C++やRustからのコンパイルが可能となっています。現在のスマートコントラクト開発は、専用の言語やツールの使用が必要となることがほとんどです。そのため、開発にはある程度キャッチアップが必要となってきます。

ブロックチェーン以外の領域でもたまに目にする光景だと思います。もしこれをWebAssemblyで代替できるようになれば、C++やRustなど一般的な言語を使用できるほか、C++やRustの従来のツール、知識、資産の流用も可能になってきます。

LINE Blockchain進化のカギとなるWebAssembly

このようにWebAssemblyは、そのさまざまな特徴がスマートコントラクトに適しているとして、今ブロックチェーンから注目されています。LINE Blockchainでも、今後WebAssemblyを利用したスマートコントラクト技術の導入を行う予定です。

これによりLINE Blockchainは、こう変わります。サービスの開発者、つまりみなさん主体でそれぞれのサービスに特化したプログラム、APIをLINE Blockchainに組み込むことができるようになります。

言い換えれば、今まで単なるアカウントとデータの管理場所だったLINE Blockchainが、さまざまなロジックを持つこともできるサーバーのような存在へと進化します。そして、開発にはC++やRustなど一般的なツールを使用することができます。

さて、みなさまに、WebAssemblyはスマートコントラクトと非常にマッチしているということ、LINE Blockchainがそれを取り入れる予定であることをお話ししてきました。少しでもWebAssemblyとスマートコントラクトの関係に興味を持っていただけたなら幸いです。

ブロックチェーンの開発現場の未来

最後に、この章では、スマートコントラクトをサポートするブロックチェーンの開発現場が、今どのようなことを考えているかをお伝えできればと思います。

まずは簡単なおさらいですが、ブロックチェーンにおいてスマートコントラクトはVMで実行されます。そのためブロックチェーンでスマートコントラクトをサポートする際には、まずVMについて考えなくてはいけません。

現在使用されるVMは大きく分けて2種類になります。1つはEVMのクローンやフォークであるVM、そしてもう1つは、今までお話ししたWebAssemblyのVMです。

EVMは、現在のスマートコントラクトのデファクト、Ethereumが開発したVMです。EVMではスマートコントラクトの要件を満たすため、実行ファイルの形式や開発言語、ツールをEthereumが独自に定義、開発しています。

VM選定の観点から、この2つのVMを比較してみます。EVMの利点は、ユーザーがEthereumのツール、知識、資産を流用できること。欠点は、Ethereum独自の機能に対して自分たちのチェーンでも互換を取る必要が生まれてくることです。

WebAssemblyのVMを採用する利点は、ユーザーがより一般的な分野の知識、ツール、資産を利用できるようになること。欠点は、ある程度自分たちでVMにブロックチェーン向けのチューンを施す必要があることです。

現在、スマートコントラクトをサポートする場合、これらを考えつつ採用するVMを選ぶという状態です。また、WebAssemblyのVMを使用する場合には、さらにさまざまなVMや技術の選択肢が存在しています。それぞれの選択肢の特徴に関しては、後半、高橋から詳しくお話しする予定です。

さて、名前の挙がったEthereumですが、彼らがWebAssemblyには注目していないかというと、そうではありません。Ethereumも従来のスマートコントラクトとの互換を取りながらWebAssemblyも使用可能にする計画を進めています。

そのために、Ethereumが開発を進めているのがWebAssemblyのサブセット、「eWASM」です。eWASMは、すでに紹介した一般的な要件に加えて従来のEthereum独自の開発との互換を考えて定義されています。

その一般的な要件としては、Deterministic、実行コストの計測、APIとそのライブラリサポートの提供です。これらは当然、WebAssemblyのVMの開発の場合にも課題となってきています。Ethereum独自の課題としては、従来のコードやセキュリティ機構、また開発言語のサポート、後方互換のサポートなどが挙げられています。

このように現在、Ethereum含め、さまざまなブロックチェーンがWebAssemblyに注目しています。LINE BlockchainでもWebAssemblyをスマートコントラクトとして使用できるようサポートをしていく予定です。

前半の私からのお話は以上となります。みなさまにもWebAssemblyとスマートコントラクトの魅力や、その関係のおもしろさがお伝えできたならば幸いです。また、みなさまのWebAssemblyの使用、導入のためのヒントをお伝えできていたならばさらに幸いです。

後半は高橋から、よりVMに特化したお話をしたいと思います。ありがとうございました。

後半へつづく