前回、Uniqys Projectの今後についてを伺いました。
編集長の木村が、Uniqys Kitについて、技術的な部分を中心に話を伺いました。
本記事は少し専門的な内容のインタビュー記事になっています。
木村 : Uniqys Kitのベースとなるブロックチェーンの技術は、Tendermint(※1)を参考にされていると言うことですが。
秦氏 : アルゴリズム的にはベースにしています。
木村 : Uniqys Kitを開発する上で参考にされたプロジェクトやソフトウェアはありますか?
秦氏 : 何か特定のソフトウェアを参考にしたということはないんですけど、
イーサリアムのソースコードはまず読みました。
あとは、Tendermintのソースコードを読んだりしています。
その辺ですかね。
Tendermintを参考にした理由は、PBFTベース(※3)にしようという。
トランザクションが早くなってほしいという欲求があったので、PBFTや、アルゴリズムがいろいろあるんですけど、その中で一番良かったのでTendermintにしました。
木村 : PBFTについて説明をお願いします。
秦氏 : Practical Byzantine Fault Tolelance。いわゆるプライベートチェーンやコンソーシアムチェーンでよくつかわれているコンセンサスアルゴリズムですね。
木村 : Uniqys Kitではいくつかコンセンサスアルゴリズム(※4)が選べるのですか?
秦氏 : コンセンサスは今のところTendermintベースなんですけど、ブロックチェーンのルール自体が選択できるようになっています。
Uniqys Kit自体の思想・設計は、サイドチェーンの形で、アプリケーションごとのブロックチェーンというアーキテクチャを使っているので。
アプリケーションごとのブロックチェーンとは何かというと、アプリケーションのロジックがルールのブロックチェーンということになるので、その部分をデヴェロッパーが書くことができるように作られています。
そのあたりはLoomNetworkやCosmos(※5)が近いですね。
※1 オープンソースで提供されている、ブロックチェーンを用いたアプリケーションが容易に開発できるプラットフォーム。
https://tendermint.com/
※2 LoomNetwork ゲームなどのDAppsプラットフォーム。トランザクション詰まりの問題を独自のサイドチェーンを用いて解決を目剤している。
https://loomx.io/
※3 Practical Byzantine Fault Tolelance 「実際的ビザンチン・フォールト・トレランス」とはビザンチン将軍問題に対して耐性がある事を意味している。 ビザンチン将軍問題についてはWikiPadiaを参照してほしい。
https://ja.wikipedia.org/wiki/%E3%83%93%E3%82%B6%E3%83%B3%E3%83%81%E3%83%B3%E5%B0%86%E8%BB%8D%E5%95%8F%E9%A1%8C
※4 コンセンサスアルゴリズム。分散されたシステムで、合意を形成する方法。
※5 Cosmos Tendermintを基盤に仮想通貨の自動相互取引を可能にするプロジェクト。https://cosmos.network/
秦氏 : ChainCoreはブロックチェーンのコアの部分のロジックをもっているもので、P2Pネットワークを作って、ブロックを同期して、コンセンサスを取る事をしています。
逆にChain Coreに無い部分は「ルール」です。
トランザクションをどう解釈してどう実行するかとか、実行結果を最終的にはハッシュの形でブロックに詰めるんですけど、
その実行結果のハッシュが何を表しているかと言う事は外部にあって、
それ以外をChain Coreでやっています。
秦氏 : イーサリアムだとEVM、VMを動かしているじゃないですか。
それがルールであって、あの部分が無いスポッと抜けていて、そこを拡張可能にしています。
それ以外のブロックチェーンで必要な部分を提供しているのがChain Core(※6)です。
利用する事でのメリットはブロックチェーンを一から作るのは大変なので、本当にアプリケーションに必要な部分を書くだけで、ブロックチェーンアプリケーションを作れるということが最大のメリットです。
とはいえ、内部的にはnodejsで動いているんですが、そこのインターフェースになっていて、ロジックをJSで書くことができるんですけど、あまりにも自由度が高い状態なんです。
そこで、その上にEasy Framework(※7)を作っています。
これは、今までのウェブアプリの概念を抽象化してブロックチェーンの間をつないでくれる仕組みなんですが、
Easy Frameworkを使う事で、自由度を減らす分、書きやすい状態を提供しています。
Chain Core、Easy Framework、その上にアプリのロジックと言う形ですね。
大沼 : こんな技術寄りで大丈夫ですか?(笑)
木村 : 技術寄りの記事にします(笑)
※6 Chain Core
モバイルファクトリーが開発したDAppsごとのサイドチェーンを構築するための、ブロックチェーンインフラを提供するシステム。ブロックチェーンをあまり意識しないでブロックチェーンを利用したアプリケーションの開発が行える。
※7 Easy Framework
Chain Coreを用いたDAppsの開発を簡単にするフレームワークです。
ブロックチェーンを意識せずにWEBアプリケーション開発と同様の感覚での開発を可能にする。
木村 : Uniqys Kitのドキュメントで気になったところですが、トランザクションを実行する際に、Memcached(※9)のプロトコルを使う理由を教えて下さい。
秦氏 : まずChain Core的には、トランザクションは何かというのは内部的には気にしていなくて、トランザクションをひっくるめたブロックをネットワーク内で合意を取ることと、トランザクションを実行して実行結果をブロックに書き込むというのがChain Coreがやっていることですね。
Easy Frameworkをその上に載せた状態だと何ができるかと言うと、フロントからHTTPリクエストを投げると、
投げる時に署名をつけて、それがトランザクションになっていて、Easy Frameworkがまずそれを受け取って、内部的なトランザクションの形に固めてブロックに詰めます。
後はChain Coreが同期を取り、コンセンサスが取れた後に、トランザクションを実行するんですが、実行するところは外にあり、実行する時にさらにHTTPリクエストに戻して、アプリのロジックがかかれたウェブサーバーに投げて、その中でリクエストを処理するという流れになっています。
アプリのWebサーバーは通常のウェブアプリのようにバックエンドを持っていて、そこが今だとMemcachedのプロトコルを話せるようなエンドポイントになっていて、最終的にMemcachedで話した内容がマークル木(※10)になって、ブロックに書き込まれるというそういう感じです。
デヴェロッパーは完全にMemcachedを使ってウェブアプリを作るようなコードを書けば十分で。
あとはそれをブロックチェーンにしてくれるのがUniqys Kitです。
木村 : Memcachedをインターフェースに採用した理由はなんでしょうか?
秦氏 : 最終的な理想としては、今はブロックチェーンに興味がある人が参入している状態ですけど、どちらかと言うと、普通にアプリを作っている人たちが参入しやすい状態をつくりたいなと思っています。
なので、既存の技術に寄せて作りやすい状態にしているというのが大きいです。
※9 Memcached
汎用の分散型メモリキャッシュシステム。
※10 マークル木
ファイルのような大きなデータを要約した結果を格納する。計算回数が非常に少なる特徴がある。
木村 : 素人的な質問になりますが、dAppsだと、solidity(※11)で書いたコントラクトをオンチェーンで実行しますが、Uniqys Kitではスマートコントラクトと連携する機能はありますか?
秦氏 : それで言うと、Uniqys Kitだけで考えるとそういう部分は存在していません。
ビットコインも送金しかできないアプリケーションで、ビットコインにスマートコントラクトってないですよね。
それと一緒でUniqys Kitは色んなアプリを作れます。
その中でスマートコントラクトを実現することもできるんですけど、デフォルトで何かすると言う事ではないです。
木村 : Uniqys Kit上で作られたdAppsで、ERC互換のトークンを作った場合、オンチェーンにトランザクションを書き込めるのでしょうか?
秦氏 : まだ実装されていないんですが、最終的にサイドチェーンの形でイーサリアムと連携を考えていまして、今考えているのはPlasma(※12)的な仕組みです。
例えばゲームだったら、剣を使って買うのはイーサリアムを使うけど、剣を使って戦うのはこっちのチェーンでやって、アイテムを手に入れたらイーサリアムへもっていくというのを考えています。
秦氏 : その時に手数料の話で、メインネットに書き込むときは手数料がかかる部分はどうしようもないですが、
ユーザーには結局、問題はお金がかかることなのか、Ethereumを手に入れる事なのかを考えていて。
場合によっては、UX的には中央集権にしたほうが良いと思っています。
プロキシ的なペグの仕組みを弊社で提供してあげて、その利用料を日本円なりで支払ってもらって、取引しますよと言う感じにすると、
手数料分の仮想通貨を手に入れることなく、イーサリアムと連携をすることができると考えています。
木村 : 今そういう仕組みで近いプロダクトはありますか?
秦氏 : 確かLoomNetworkがそういう仕組みですね。
Uniqys Kitのプロジェクがトスタートした段階ではLoomNetworkは情報を出していなくて、やっていったら情報が出てきて、LoomNetworkと同じこと考えているというのはありますね。
今の段階で技術的な差別化はあまりできていないとは思うんですが、LoomNetworkはSDKをオープンソースで出していなくて、中身の検証ができないという問題があります。
なので今回オープンソースにしたのはそことの差別化と言うのもありますね。
※11 solidity solidityはコンパイル後、イーサリアム上でコントラクトコードを実行可能なプログラム言語。
https://book.ethereum-jp.net/solidity/
※12 Plasma イーサリアムのスケーラビリティを解決する為の技術。
https://github.com/shogochiai/plasma-whitepaper-jp
木村 : セキュリティ対策の取り組みについはいかがですか?
通信のところで言うと、ローカルの話なんですね。
ブロックチェーンの各ノードでWEBサーバー的に動いているので、その部分のセキュリティは問題ないと思っています。
一方でサイドチェーンと言うか、アプリケーションごとのブロックチェーンを作るのはセキュリティ的にはあまりよくはなくて、
ブロックチェーンは結局参加者の数でセキュリティが決まるので、アプリごとでブロックチェーンが別れるという事は、それだけ参加者が減るので、何か不正をする時のハードルが下がります。
セキュリティはメインチェーンよりは下がります。
ただ、最終的にメインに持ってくる時に不正がされていなければ、基本的にはユーザー資産を害する事はないであろうというのと、
もう一つは、中央集権的な考え方ですが、仕組み的にValidatorをPBFTベースのコンセンサスベースでは、ある人がこのブロックチェーンのValidateをすると言うのが決まっていて。
リリース初期の段階では、誰も監視をしてくれる人がいない状態になるので、あえてDeveloperがハンドルすることで、誰かが不正をするということを避けれるようにしようとしています。
Validatorが限られているという所で言うとEOSもそうですし、LoomNetworkもそうですし。
いわゆるPoWじゃない、スケーラビリティがあると主張しているプロジェクトはだいたいそうです。
アプリごとにトレードオフとして、スケーラビリティとセキュリティのトレードオフを取っているという感じですね。
木村 : 秒間あたりのトランザクション処理数はどのくらいですか?
秦氏 : 本当は測定しないといけないんですけど、まだできていません。
実験の環境をどうするかというのが難しいなと思っていて、ローカルでやっていれば当然早いですし、AWSでやるにしてもリージョンをどうするのか、Validatorを何人にするのか、その辺のパラメーターがたくさんあって。
「TPSがいくら出ます」と言う数字を出しているプロジェクトはありますが、簡単に比較できると言う感じではないですね。
エンジニアとして、夢を語るのは必要ですが、正しいことを言いたいじゃないですか。
どういう環境でどういう事をやった結果、こういうスループットが出ましたと言うのはちゃんと示したいと思っています。
木村 : DAppsを初めて作るという方への入門として、Uniqys Kitは入りやすいですか?
吉田氏 : それはもう、Uniqys Kitはガス代を一切気にしなくていいので。
まあCryptOsushi(※13)はUniqys Kitで動いていますけど、Osushiを大量に連打して作るという事もできちゃうくらい早いので。
それにUniqys Kitの場合は、ウェブアプリの要領で既存の言語で書けるので、solidityで書くよりはハードルは低いと思っています。
秦氏 : Uniqys Kitを使う事だけで言うと、ブロックチェーンの知識は要らなくて、ハードルがほとんどない状態です。
solidityのキャッチアップで言うと、今は結構情報が整っているので、試してみる事が一番参入しやすいと思います。
一方で、コンセンサスアルゴリズムなどは日本語の情報がまだほとんどなくて、英語の情報も少なく、ソースコードを読まなければわからないというのもあるので、その辺のキャッチアップのハードルは全然違うなと思っています。
Uniqys Kitのソースコードは読みやすいので、ブロックチェーンの技術そのものに興味があって自分でブロックチェーンを作ってみたいと思っている人がいるならば、ぜひソースコードを読んでみて使ってみて欲しいというのがあります。
イーサリアムよりは規模も小さくすっきり書いてあるので読みやすいと思います。
※13 Uniqys Kitで作られたサンプルアプリケーション。
チュートリアルがmediumで公開されており、ソースコードはGitHubで公開されている。
https://cryptosushi.samples.uniqys.net/
秦氏 : 来年イーサリアムとの連携が急務だと思っています。ここは2019年度中にVer1として対応していきます。
その後の話でいうと、クライアントからDAppsを見つける仕組み、DNS的な仕組みの部分、スマートコントラクトのアップデート方法についても対応を検討しています。
スマートコントラクトのアップデートの方法については、みんなで合意を取りながら、プロトコルの中で合意を取りながらアップデートできる仕組みを準備してく予定です。
また、ハッカソンなどでデベロッパーにUniqys Kitを使ってもらうイベントを開催しながら、フィードバックを取り入れていくことも考えています。
ゲームデベロッパーさんが容易にアプリケーションを出せる環境を早く作っていきます。
専門的な話が多くなってしまいましたが、Uniqys KitでDAppsゲームの開発が簡単に作れる事が少しでも伝わったかと思います。更に詳しい解説はUniqys Kit
のMediumで公開されているので、興味がある方はそちらを参照すると良いと思います。
国産のDAppsゲーム向けプラットフォームとして来年のUniqys Kit正式版公開が大変楽しみなプロダクトです。