「サービスのインターネット」ブロックチェーンプロジェクト、IOSTについて
IOSTとはEthereum、EOS、TRONに次ぐブロックチェーンアプリケーションプラットフォーム。
ブロックチェーンアプリケーションプラットフォームの定義などは曖昧ですが、ここでは主にアプリケーションを動かすことを目的としたプラットフォームのことをいいます。
IOSTの由来はInternet of Service Token。
シンガポールを拠点とした(開発チームは北京にいるみたいです。籍だけシンガポールという感じなのでしょうか)非営利のIOST財団が率いるプロジェクトです。
IOSTが売りにしているのは、
『イーサリアムより早くEOSより分散している』
ことです。
シャーディング技術を使用して(まだ実装されてはいません)秒間数万のトランザクションを捌くことができ、分散性に関しては寡占を防ぐPoBという仕組みを採用しています。
以下詳細です。
速さ
現在のブロックチェーンプラットフォームはもれなくスケーラビリティの問題を抱えています。
スケーラビリティとは日本語では拡張性といい、システムやネットワークの拡張に対し機能や性能をどれだけ落とさずに運用していけるかの度合いのことです。
どんどん大きくなっていっても機能や性能が変わらずに運用できているシステムやネットワークは、スケーラブルである、と言えます。
スケーラビリティの1つの指標としてよく例に出されるのは
TPS(Transaction Per Second)です。
その名の通り「一秒間に何個のトランザクションを処理できるか」を示す単位です。
これが大きければ大きいほどスケーラブルだと言えるわけです。
ではメジャーなブロックチェーンネットワークでのTPSはどのようになっているのでしょうか。
*ビットコイン:約5〜7TPS
*イーサリアム:約15TPS
*EOS:約4000〜6000TPS
これを見てみるとビットコインやイーサリアムはEOSほどスケーラブルではないと言えますね。
また界隈でよく言われているのがブロックチェーンのトリレンマです。
それに関してはこちらの記事で説明しています。
この問題を解決しようと各ブロックチェーンプロジェクトがこぞって開発に取り組んでいます。
IOSTはこの問題に対してシャーディングを実装することで対処しようとしています。
シャーディング(Sharding )はもともとイーサリアムでも導入が検討されている技術で、1つのブロックチェーンの中に小さなブロックチェーンを作ることによってブロック生成を同時多発的に行うことを可能にし、トランザクションのスピードを向上させるというものです。
分業化、並列化することでボトルネックを取り除こうという、いわゆるスケールアウトという考え方に基づいています。
IOSTではそのシャーディング技術の導入を予定しており、
Efficiently Distributed Sharding(EDS、効率分散型シャーディング)と呼んでいます。
これはシャーディングで現在議論されている問題に対処するために、ランダムにシャードに振り分ける、短いインターバルでシャードの振り分けを常に行う、ということをしています。
シャーディングの問題についてはこちら。
しかしシャーディングにも問題があります。
シャードを多くするということはそれぞれのシャードに参加するノード数が少なくなるということであり、つまりブロック生成の際に不正を可能にするハードルが低くなってしまいます。
また、それぞれのノードがどのシャードに振り分けられるか、ということも難しいところで、そこに恣意性が介在する余地を与えてしまうと、これもまた不正の抜け道になってしまう可能性があります。
例えば悪意のあるノード同士が同じシャードにいけちゃったり、そういうことです。
そこでランダムにシャードに振り分けていくわけです。
例えば乱数を発生させて数学的にそれぞれのシャードに入る確率を等しくします。
いや、等しくしようと、試みます。
しかしここでもまた問題です。
みなさん高校の確率の問題を解く、例えばサイコロの問題を解く時に、問題文の最後に書いてあった言葉を覚えているでしょうか。
そうです、「それぞれの目が出る確率は同様に確からしいとする」ってやつです。
同様に確からしいんです。
つまりそのサイコロは確実に6分の1の確率でそれぞれの目が出て、例えば雨の日は2が出やすい、とか、1、3が連続して出たらその次は5が出やすいとか、そういったことはありえないという前提のサイコロな訳です。
コンピュータでこれを実装するのは難しいんです。
コンピュータはある決められたことしかできないわけで、同じ入力に対しては同じ出力を返すという確定的なものです。
プログラミング言語には乱数を作る関数がありますが、これは完全にランダムな数ではなく、ランダムに見せかけた数字です。
プログラム上のいくつかの要素を入力として受け取ることで、入力が同じ、という状況を極力避けるているだけです。
なのでその、いくつかの要素、が同じであればその関数は同じ結果を返します。
これをうまく利用して確定的に出力を取り出したりしているのがゲームなどで使われる乱数調整というやつです、例えばポケモンで決まった個体値を出そうとするとか。
もし完全な乱数を出力することが出来るプログラムがあれば乱数調整は不可能です。
分散性
PoBはProof of Believabilityの頭文字でコンセンサスアルゴリズムの一種。
IOSTネットワーク内のノードはノードは主に2つのグループに分けられます。トランザクション承認のみを行うノーマルリーグとブロック生成を行うビリーバブルリーグです。
ビリーバブルリーグにいるノードはServiノードと呼ばれます。
IOSTでのブロック生成は順番制になっています。
1回のラウンドではServiノードの中から17のノードが選ばれ、それぞれ1ブロックずつ生成を行います。
これだけ聞くとEOSのDPoSのようにブロック生成者が寡占状態になってしまうと思うかもしれませんが、17のノードの選出方法により分散性を実現し、また不正をするリスクを高める事によりブロック生成ノードが不正をする可能性を極限まで小さくしています。
まず選出方法についてです。
Serviノードは他のノードからの投票や、またトランザクションの承認、スマートコントラクトの実行、ストレージ提供などを行うことによりSERVIというポイントを獲得することが出来ます。
このSERVIを多く保持する上から17番目までのノードがビリーバブルノードとしてブロック生成を行います。
一度ブロック生成をするとそのラウンドでブロック生成をしたノードのSERVIは一律で減少します。
減る量はそのラウンドの17番目のノードが持っていたSERVI量です。
つまり17番目として選ばれたノードはSERVIをすべて失います。
そのため何回も連続して17番目以内に入ることは困難で、ブロック生成者の顔ぶれはラウンド毎に大きく入れ替わります。
このようにIOSTでは、EOSで問題となっている寡占状態をある程度回避して分散性を保っています。
SERVIは売買することは出来ず、ネットワーク内で定められた行為で貢献することでしか手に入らないため不正をしてブロック生成者になることは困難です。
またServiノードであればどのノードでもブロック生成をして貢献報酬をもらう事が可能であり、ノーマルノードもServiノードに投票することでトークンを得ることが出来る、という全体としてシステムが機能するためのインセンティブ設計がうまく出来ているプラットフォームだと感じます。
ここまではアメでしたがムチもあります。
ブロックがチェーンに組み込まれるプロセスは、まず生成者がブロックを生成、それを同じグループ内のノーマルノードがチェックしてブロックにファイナリティを与えます。
イーサリアムやビットコインとは違い、確定的ファイナリティを持ちます。
もしここで不正なトランザクションがブロックに含まれている事が発覚した場合、そのブロックを生成したノードには説明責任が課され、それが故意である場合などにはブロックを生成したノードは所持するすべてのIOSTトークンを没収されます。
これは他のPoSチェーンでも見られるディスインセンティブで、いわゆるSlashingというものです。
まとめ
まだまだIOSTに関する資料は少なく、今回の記事は主にホワイトペーパーを参考にしたのですが、当時とは違う形で実装されている機能や改善もあると思います。今後追記や修正をしていきます。
iRAM, iGASなどについても別記事で書こうと思います。
もし記述に不備や不明な点があればTwitterなどで遠慮なく指摘お願いします
IOSTはまだまだイーサリアムやEOSほど開発環境が整っておらず、開発に参入するハードルは依然高いです。
初めて触ったブロックチェーンがIOSTだったので、開発する時に毎回Dockerで環境構築してアカウントインポートしてコントラクトデプロイして、アップデートして、、、
っていうのがブロックチェーン開発では普通なのかと思ってたのですが、この間イーサリアムを少し触ってみてGanacheだったりInfuraだったり、整いすぎてて感動しました。
やはりコミュニティの命運を左右するのは、どれほど多くの質の良い開発者がいるか、のような気がするのでこれからのIOSTの課題はそこだと思います。
まだメインネットローンチから2か月なのでこれからに期待です。
IOSTホワイトペーパー(英語)