LINE Token Economyのアーキテクチャ

那須利将氏:Blockchain Labの那須です。本日は、8月末に発表した「LINE Token Economy」とホワイトペーパーに書いていない裏側、なぜブロックチェーン技術を使うようにしたのか、また「LINK Chain」の技術的なアーキテクチャについて紹介したいと思います。

まず弊社はサービス提供者として、サービスを利用してくれるユーザーへの対価の還元が正しくできているのか疑問に思っていました。

例えば、コンテンツを提供してくれるユーザーに対しては、サービス提供から得た対価を還元しています。

しかし、サービスを使ってくれている、サービスを楽しんでくれている、またはサービスを盛り上げてくれているユーザーに対して、うまく還元できているでしょうか。

とくにCGMのサービスは、現金もしくはサイト内で使えるポイントの付与などで、ユーザーに対価を還元しています。そのどれもが、直線的なユーザーの行動、コンテンツの提供に対して対価の還元になっています。

例えば、買い物をしたらポイントを付与したり、弊社で言えばLINEスタンプを作って販売してくれたら、現金もしくは「LINEポイント」の付与などを行っています。そして、ユーザーに還元することでよりよいコンテンツが生成される好循環を実現し、成功しているサービスもあります。

しかし、すべてのサービスがユーザーへの還元を実施していないのはなぜでしょうか。

もちろん、自分たちの利益、報酬を多くしたいという理由もあると思いますが、その仕組みを作ることが難しいからではないでしょうか。

また、複雑なシステムを作ったとしても、ユーザーはそれに見合った成果をサービス側から得ることができていないのではないでしょうか。実際に、弊社のいくつかのサービスで現金や「LINEポイント」などをユーザーに付与していますが、複雑な手続きやオフラインでの手続き、窓口申請などが必要で、かつ一部では手数料が発生する場合もあります。

ただ「LINEポイント」を見てみると、去年の9月から今年の8月までの1年の発行数は、300億ポイント以上と、手間がかかってもユーザーに「LINEポイント」を提供するに値するほどの人気がうかがえます。

また、みなさんの財布には多くのポイントカードがあったり、各種オンラインサイトでも多くのポイントを持っているのではないのでしょうか。

それは、サービス提供者が対価を還元したいという証拠ではありますが、そのまま捨てられてしまっているものがあったり、単純にユーザーのサイトを圧迫しているものがあったり、有効期限によりポイントが失効してしまったりと、サービス提供者にとってもユーザーにとっても、望ましい結果になっているとは言い難い状況だと思います。

こういった流れがあり、LINEはユーザーへの公平な還元、つまり透明性と安全性が確保されたサービスの提供という2つを改善すれば、より良いサービスを提供できるのではないだろうかと考えるようになりました。

そこで注目したのが、仮想通貨・ポイント・コンテンツ・自己証明など、透明性と安全性があり、トークンを発行してエコノミーを実現できるブロックチェーン技術でした。

なぜブロックチェーン技術を用いたのか?

とはいえ、「ちょっと待って! ブロックチェーン技術を使わなくても、LINEポイントでそれを実現できるのではないか?」と考える方もいるかもしれません。

しかし、今までのポイントシステムでは、サービス側がユーザーに正しく対価を還元したかどうかの証明手段がなかったり、透明性や安全性、ポイントの管理、紛失・失効管理などの実現が難しかったりします。

例えば、サービスからユーザーが受け取ったポイントが先月は6ポイントだったとします。今月のポイントが1ポイントだったとしたら、なぜそうなったのか、ユーザーは疑問に思うでしょう。ユーザーは「サービスに対してポイントを発行しているルールを教えてくれ」と考えるはずです。また、勝手にルールを変えられたとしたら、それを止めることはユーザーにとって簡単ではありません。

それに対してブロックチェーンの技術は、サービスからユーザーへの還元ルールから還元履歴まで、すべてがオープンで、誰でも閲覧できるようになっており、還元された対価の減少を多くの人が共有することで、盗難されても、どのユーザーにポイントが移動したかすぐに確認できるようになっています。

また、履歴管理をしているからこそ、改ざんしても過去のデータとの整合性が容易に崩れるようなデータ構造になっており、安全な管理を実現しています。

ですから、サービスからユーザーへの還元手段として、新たにブロックチェーンの技術を使い、トークンというかたちでシンプルに実現し、必要があればオンラインで価値を交換できるようにすることで、複雑な手続きを介さず、発生する手数料は本当に必要最小限で、ユーザーに対価の還元ができるモデルを新しく開発できると考えるようになりました。

サービス側は手数料などを気にせず、透明性を持ってユーザーにサービスの対価を還元でき、ユーザーは対価を安全に得ることでサービスのファンになり、よりよいサービスが実現できる。こうした好循環が生まれると考えるようになりました。

LINK Chainを作った理由

そこで開発、公開したのが「LINE Token Economy」を実現するためのLINEのブロックチェーンプラットフォーム「LINK Chain」です。

実際に「LINK Chain」を作りたいと決めてからいろいろと調査を始めましたが、もちろん簡単に実現できるわけではありませんでした。

すでに公開されているブロックチェーンのプラットフォームも多くありますし、それらを使って「LINK Chain」をリリースすることもできたと思います。ですが、既存のブロックチェーンのプラットフォームを使う場合、ユーザーがWalletを作る必要があったり、Private Keyを安全に管理する必要があったり、そもそもブロックチェーンのサービスを見つけるのが難しかったりしました。

Wallet、つまり財布をなくしたら大変ですよね。Private Key、つまり銀行の暗証番号(のようなもの)を誰にも盗まれず、自分自身も忘れないようにしなければなりません。ブロックチェーンを利用したサービスを開発する人にとっても、安全で堅牢で拡張性のあるサービスを開発することは、(サービスで得られる)利益も加味しながら、ブロックチェーン技術に対して適切なセキュリティ対策を施す必要があります。

実際に、昨今ではサービスのバグを突いた金融関連の被害なども出てきています。開発を始める前に、多くの時間をかけてこれらの準備をしていれば、スピーディーに開発が開始できます。

そこで、私たち自身がユーザーにとっても開発者にとってもアクセスしやすいブロックチェーンプラットフォーム「LINK Chain」を作ることにしました。ほかのブロックチェーンプラットフォームを利用するのではなく、自分たちで開発することで、スピーディーに改善していくことも可能となりました。

突然「dApps」と、見慣れない言葉が一番上に出てきていると感じる方がいるかもしれません。一般的に、ブロックチェーンのプラットフォームの上で動かすアプリケーション、もしくはブロックチェーンのプラットフォーム機能を使ったサービスをdAppsと呼んでいます。

dAppsは「Decentralized Applications」の略で、非中央集権のアプリケーションと呼ばれています。

これまでのインターネットのサービスは、サービス提供者を中心としたサービス自体への信頼と、サービス自体による中央集権的な運営管理で実現されています。

例えば、100万ポイントを山分けするサービスなどをよく目にすると思いますが、本当に100万ポイントを山分けしたのかどうか、誰でも一度は疑ったことがあると思います。dAppsなら、100万ポイントが何人に何ポイントずつ山分けされたのか、希望すれば誰でも完全な透明性を持って確認できるようになっています。

「LINK Chain」は「LINK Network」と「LINK Framework」の2階層構造の上にdAppsを展開している構成となっています。

「LINK Network」「LINK Framework」「dApps」の3つを紹介します。

LINK Networkの特徴

一番下にあった「LINK Network」は、いわゆるブロックチェーンです。ブロックチェーンは、一番重要と言っても過言ではないConsensus Algorithmを用いてユーザーのリクエスト、transactionを承認したかたちとしてのブロックというデータ構造を生成する重要な役割があります。

また、ブロックチェーンでも課題の1つ、スケーラビリティを解決するために、スケーリングしやすいアーキテクチャ構成となっています。今日のセッションは、ここを後ほど詳しくご説明します。ちなみにConsensus Algorithm、つまり合意形成アルゴリズムとは、先ほど話をしたサービスからユーザーへの対価を承認することに使っています。

サービス提供者の人以外であっても誰でも承認できる。つまり、サービス提供者以外の人によって、透明性を担保することを実現するために使っています。

また、ブロックチェーンの問題としてスケーラビリティの問題があるという話をしましたが、すでにリリースされているブロックチェーンのプラットフォームは、分散してデータを保存しているとはいえ、実はすべてのノード、つまりすべてのサーバでまったく同じデータを持つ構造になっています。

現在のデータの生成速度なら、まだ10年は大丈夫だと言われていますが、成長スピードが上がり、今のデータ生成処理能力が上がったら、10年がさらに短くなるのは明白です。また、データの分散性から安全性を得たとはいえ、拡張性がないのは問題ですよね。「LINK Framework」は、そのスケーラビリティを備えているということです。

LINK Frameworkとは何か?

次に、「LINK Network」の分野である「LINK Framework」ですが、サービスログイン時の自動Wallet生成、Private Keyの安全管理、ブロック情報やWalletのバランスの確認など、APIの機能の提供を行っています。

このように、サービス開発者にとって必要な機能を提供しています。

つまり「LINK Chain」の上でサービスを開発するための簡単な仕組みを提供するのが「LINK Framework」となっています。現在「LINK Chain」のプラットフォーム上で提供しているdAppsは、弊社が提供するもののみになりますが、これらのサービスでは、LINEのオープンプラットフォームを利用してLINEと連携しつつ、「LINK Point」が定義されたSmart Contractを、先ほどの「LINK Framework」を通じて呼び出しています。

こちらが、Smart Contract。

先ほど、100万ポイントを山分けするサービスの話をしましたが、このSmart Contractは、100万円というバリューを山分けしたいユーザーを管理する変数と、何をしたらいくらポイントが貰えるのかというルールと、実際にポイントを付与する仕組みを定義するということです。

つまり、実際にSmart Contractという小さなアプリケーションを開発して、さらに公開します。「LINK Point」のSmart Contractは、サービスがいくらポイントを持っているかがわかり、ユーザーに指定した「LINK Point」を付与、転送する機能があります。

それをテンプレート化しているので、サービスで使うのがすごく容易になっています。ここまで話してきたことをまとめると、私たちのブロックチェーンプラットフォームは、ユーザーはサービスを簡単に見つけられて、そして開発者にとってはサービスを簡単に開発できるようにしているということです。

つまり、LINEのブロックチェーンプラットフォームは、LINEのサービス志向のブロックチェーンプラットフォームと言えます。

LINK Chainの全体像

ここからは「LINK Chain」の全体、詳細を説明していきたいと思います。

「LINK Network」についての詳細は後ほど拡大して説明していきますので、ご安心ください。

ちなみに、ちょっとした宣伝になりますがdAppsとしては、11月の時点でWizball4CASTをベータリリースしています。

本日会場にいらっしゃるみなさまは、LINE DEVDAY 2018の公式アカウントを友だち追加していると思いますが、LINEのチャットで、ローマ字で「Wizball」や「4CAST」とサービス名称を送ると、それぞれのサービスリンクが送られてくるので、お時間があればお試しください。

なお「Wizball」では、このセッションに関する質問を受け付けていますので、ご参加いただき「LINK Point」を集めてください。

では「LINK Network」のコアとなる要素と周辺の仕組みを説明していきます。

「LINK Network」は、弊社のリンクシステムであるIMONと、標準的なOSSのミドルウェアでモニタリングされています。また弊社のコア技術になっているOSSの「Kafka」を通じて、ブロックチェーンの透明性の証にもなっているブロックエクスプローラー機能を「LINK Scan」として提供しています。

「LINK Scan」で提供している機能を実現するために、ブロック情報を直接使わず、こちらもLINEのコアストレージとして使われている「Radis」や「HBase」などを使ってブロックトランザクション情報などを提供しています。

ちなみに、こちらの「LINK Scan」のサイトにアクセスすると、先ほど話をしたSmart Contract「LINK Point」のテンプレートから生成されたdAppsごとのSmart Contractが確認できます。

今日、私は「透明性」と何度も連呼していますが、この「LINK Scan」を見るとSmart Contract以外にもユーザーのアドレス、ブロック、トランザクションなど情報がすべて確認できます。

こちらには、紹介した「Wizball」「4CAST」のSmart Contractがあります。

C-NodeとS-Nodeの仕組み

こちらに戻って、もっとも重要になるのは中央の四角い枠に囲まれた「C-Node」と「S-Node」です。

「Consensus-Node」ということで、ブロックチェーンの本業であるブロック生成と検証の役割を持っています。いわゆるブロックチェーンのことです。

サービスからユーザーへのポイントを還元するリクエストを、すべてトランザクションとして受け付けています。そして、そのトランザクションを承認した場合、トランザクションをブロックというデータ構造で保存します。

「C-Node」リーダーがブロック生成を行い、その他の「C-Node」がブロックの検証を行っています。また「C-Node」の前にはL7のロードバランサーがあり、ここでトランザクションを受け付けていますが、基本的に「C-Node」リーダーのすべてのトランザクションに転送され、ブロック生成しています。

次に「S-Node」は「Sync-Node」とも呼んでいますが、こちらは一般的なブロックチェーンではなかなか聞かない存在だと思います。

「C-Node」と違って、ブロック生成や検証はしませんが、ブロック情報は「C-Node」からフルシンクされて「S-Node」自身で持っています。

これはリンクフレームワークのAPIを参照し「LINK Scan」で利用するデータを読み上げるため、リードオンリーの役割として存在しています。ブロック生成・検証とブロック情報の提供を分けることで、それぞれの負荷を分散しています。

各「S-Node」が、それぞれの「C-Node」のロードランサーに対して、フルシンクのリクエストを投げて「C-Node」と「S-Node」のコネクションをキーパライブで結んで、ブロック情報のフルシンクをほぼ時差なく実現しています。

私たちのConsensus Algorithmは、承認速度やファイナライゼーションを優先したPBFTでブロック生成を行っています。PBFTでブロック生成を行っているため、気づいている方、ご存知の方もいるかもしれませんが、私たちの「C-Node」や「S-Node」などは、すべてプライベートネットワークで構築されています。

LINK NetworkにおけるPBFTの動作例

私たちのブロックチェーンは、プライベートブロックチェーンです。今の私たちのブロックチェーンプラットフォームは、宣伝を優先してプライベートブロックチェーンとして公開しています。プラットフォームの完成度を上げたのち、パブリックブロックチェーンにしようと思っています。

PBFTについて、少し簡単に「LINK Network」での動作を例に説明します。「C-Node」のリーダーにブロック生成のリクエストがくると、「C-Node」リーダーがPre Prepareフェーズに仮のブロック生成をして、そのブロック情報をほかの「C-Node」にブロードキャストします。

Prepareの投票フェーズでは、ほかのC-Nodeのブロック生成が正しいかどうかの検証をすべての「C-Node」で行い、かつお互いに正しく検証しているかどうか、結果確認のための検証結果をブロードキャストし合います。

そしてCommitフェーズですべての検証結果を評価して、ブロックを生成して、「C-Node」リーダーはファイナライゼーションして確定したブロック情報を、その他の「C-Node」にブロードキャストします。

かつ、受信した「C-Node」もブロック情報をブロードキャストし合います。これは、お互いの受信するタイミングに時差があるためです。

Replyフェーズは、リーダーからの完了通知のみです。

ちなみに「C-Node」リーダーは、ある一定のブロックを生成したり、障害などでブロックが生成できない場合に、ラウンドロビンでほかの「C-Node」の中から次のリーダーが選出されます。

Smart Contractに関しては、「LINK Contract」と呼んでいますが、ブロックチェーンでよくある独自言語にある開発が必要なくPythonで開発でき、事前に検証した上でSmart Contractをホワイトリスト管理して安全に実行できるようにしています。

またSmart Contractのアップデートも可能としています。

C-Nodeの構造

こちらは先ほどの「LINK Chain」の全体図で一番見にくく、小さく書いてあったところです。

「C-Node」から吹き出して書いてあったものです。すべての「C-Node」はこちらの機能を内包していて、主なインターフェースとしてはGRPCベースの「jsonRPC」で通信できるようになっています。

内部通信は、Message QueueとしてOSSのRabbitMQを使って通信しています。そして、それはリンクコアと呼ばれるブロックチェーンのブロック生成基盤になるチャンネルやリンクサービスと呼ばれるSmart Contractなどの実行基盤チャンネルと通信しています。

この図のとおり、かなり細かく機能を分割しているので、もし変更が必要な箇所があればフレキシブルに対応可能となっています。

とくにチャンネルには、このような機能があります。

どのManagerでもモジュールが取り換え可能になっています。例えば、Consensus managerを取り替えるなら、ブロック生成のConsensus Algorithmを変更することも容易になっています。

またBlock Managerは、トランザクションにあるブロックや内部データを各「C-Node」で保存・管理する機能です。インターナルストレージとしては、OSSのLevelDBを使っています。

LINK Contract Managerの働き

最後に「LINK Contract Manager」を紹介します。「LINK Point」やdAppsで使うSmart Contract、デプロイ、アップデート、アクティベーションなどの機能を提供しています。

先ほどからアップデートの話をしていますが、Smart ContractのアップデートをConsensus Algorithmの上でやると、ひと工夫必要となります。まず、ホワイトリストのトランザクションの発行から始まります。

コミットベースなども、ガバナンスマネージャーを通じて登録されます。登録するユーザーのアドレスと実行可能なSmart Contractのアドレスのペアによって、Smart Contractを実行できるユーザーを決定しています。

次にSmart Contractのデプロイです。先ほども説明しましたがSmart Contractは小さなアプリケーションです。その小さなアプリケーションをzipに圧縮してトランザクションを発行し、Smart Contractが実行できる環境にデプロイしなければなりません。

そして、Consensus Algorithmの中で、いったんPrepareの段階で検証する必要があります。そのためテンポラリーの領域を用意して検証を行います。この図で言うトランザクションリスト3以降のトランザクション4と5がSmart Contractを実行するトランザクションなら、このテンポラリーの領域を使って検証するということです。

ファイナライゼーションをCommitフェーズでトランザクション3を処理するときに確認済領域に移されます。

このとき、トランザクションを処理するSmart Contractの実行としては、4と5が確認済の領域で実行されます。このように、テンポラリー領域と確認済領域の2つを用意してファイナライゼーションしなければいけません。

Smart Contractのアップデートが行われると、Prepareで、テンポラリー領域とすでにファイナライゼーションされている確認済領域を使って、検証が行われます。ここは矢印がクロスしていますが、検証フェーズなどで1と2は確認済領域で検証し、4と5はテンポラリー領域で検証しています。

「Update」のファイナライゼーションは、デプロイのファイナライゼーションと同様になりますが、1と2はファイナライゼーション前の確認済領域でSmart Contractが実行され、4と5はアップデートした確認済領域でSmart Contractが実行されます。

ブロックチェーンのConsensus Algorithmの中で、Smart Contractのアップデートを実証しようとしたら、このようになりました。ちょっと複雑でしたか? 長くなりましたが、ここまでが「LINK Network」の紹介です。

LINK Frameworkの構成とdAppsへの登録

次に「LINK Framework」を紹介します。

各種UIのモジュールで構成されています。これらを使ってどのようにサービスを作れるか、そしてユーザーがサービスを利用できるのか、説明していきます。ちなみに「LINK Framework」も、GRPCベースのjsonRPCでアクセス可能となっております。

まずはdApps提供者のAdminのアカウントの作成が必要です。こちらのように、「LINK Framework」を呼び出すと、裏でAdminのWalletが生成されます。

次にdAppsの登録です。

このとき、dAppsのSmart Contractが登録され、かつMint……これは英語で「紙幣を鋳造する」という意味ですが、「LINK Point」がdAppsのSmart Contractの中に発行されます。また、AdminがdAppsのSmart Contractを実行できるようにするため、ホワイトリストに登録されます。

管理者1人以上で運営することがあると思いますので、必要に応じてオペレーターが追加できるようになっています。

その際、オペレーターのWalletの生成とホワイトリストへの登録が同時に行われます。これでdAppsのリリースは完了です。

次にユーザーですが、dAppsを利用するときに、今はLINE Loginを使っています。

そうすると、dApps側がユーザーのWalletを作成して管理してくれます。ユーザーは「Private Key」の管理が不要になります。なお、LINE Loginを使っていると話をしましたが「LINK Framework」もモジューラブルな構成になっているため、ほかの認証を実装すれば(そのサービスのアカウントでの認証が)可能となっています。

各種WalletやSmart Contractが用意されれば、あとは「LINK Point」の付与ができる状態になります。Adminまたはオペレーターからユーザーに対してTransferが実行できます。

その際にホワイトリストを確認してSmart Contractの実行点検をチェックし、Smart Contractを通じてユーザーに「LINK Point」を付与できます。API Callとしては、オペレーターの追加を含めてここまで5回。

このように、ユーザーはdAppsを経由して、基本的に「LINK Framework」を呼び出すだけで「LINK Network」に透過的にアクセスできることとなります。

Smart ContractやWalletの情報は「LINK Network」、つまりブロックチェーンに安全に保存され、「LINK Scan」を通じてSmart ContractやWalletなど、誰でも確認できるようになっています。そのために「LINK Framework」を用意しています。

つまり、LINEのブロックチェーンプラットフォームは「LINK Network」「LINK Framework」からできた、LINEのサービス志向のブロックチェーンプラットフォームと言えます。

LINK Chainのこれから

ここまで発表してきた「LINK Chain」が、9月にリリースされたものです。

今後は、よりスケーラブルな「LINK Network」を実現するための「Linear Network」への移行や、「LINK Framework」を通じたdAppsの開発をパートナー企業をはじめ、誰でも自由にできる、そうしたプラットフォームに変更していく予定です。

「Linear Network」とは、こちらのように「LINK Network」を「Root-chain」と「Leaf-chain」に分け、それぞれが独立していながら、「LINK Network」のブロックチェーンやお互いのブロックチェーン間でやりとりできるようにした構造のことです。それぞれの「Leaf-chain」にdAppsが配置される予定となっています。

また、パートナー企業や開発者のみなさまにもぜひ「LINK Chain」に参加いただき、dAppsを開発してサービスを提供してほしいと思っています。

その際、各種要望があるかと思いますので、こちらのように構想を練っているところです。

「LINK Framework」を通じた簡単かつセキュアなdAppsの提供、「LINK Network」による直接アクセス、また独自のSmart Contractによる、より機能的で柔軟なdAppsの提供。そして「Leaf-chain」として「Linear Network」においてさらに機能的で柔軟なdAppsの提供を検討しています。

みなさんに開発してもらうには、開発ツールキットや開発したdAppsをテストするためのテストネットの公開が必要だと認識していますし、「LINK Chain」のソースコードをGitHubで公開することも予定しています。

最後に、パブリックブロックチェーンに関しては本日紹介できることはありませんが、私たちはパブリックブロックチェーンにしないといけないと思っています。それはまた、今後の楽しみとして待っていただければと思います。

ユーザーとの距離、パートナーとの距離を(”CLOSING THE DISTANCE” する)。以上が私の発表になります。ありがとうございました。

(会場拍手)