寄付窓口はこちら

ホワイトペーパーに書いていない LINE Token Economy の裏側 #linedevday

linedevday.linecorp.com

今年8月末に公開した LINE Token Economy と、その White Paper ですが、技術的なアーキテクチャや今後の予定などは詳しく紹介できていませんでした。LINE が Blockchain 技術を使ったサービス展開をなぜやるのか、またなぜ独自の Blockchain Platformを開発してリリースしたのか、そして現在取り組んでいる課題とそれをどのように解決していく予定なのかについてお話ししたいと思います。また LINE Token Economy の Block 生成基盤、SmartContract 実行基盤がどのようなアーキテクチャなのかについても具体的に説明したいと思います。

f:id:niwatako:20181121164011j:plain

f:id:niwatako:20181121164017j:plain

本日は8月末に発表したLINE Token Economyと、White Paperに書いていない裏側、なぜ、ブロックチェーン技術を使うようにしたのか、また、技術的なアーキテクチャについてご紹介したいと思います。

まず私達はサービス提供者として、ユーザーへの価値の還元が正しく提供できているのか疑問に思っていました。

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

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

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

例えば買い物をしたらポイント、スタンプを作ってくれたら現金、LINEポイント付与などを行っています。

ユーザーに還元することでより良いコンテンツが生まれ成功する循環が実現して成功しているサービスもあります。

でもすべてのサービスがユーザーへの還元をやっていないのは何故でしょうか?

もちろん自分たちの報酬を大きくしたいということもあるでしょうが、システムを作ることが難しいのではないでしょうか。

また、複雑なシステムを作ったとしても、それに見合ったせいかをサービスが得られていないのではないでしょうか。

実際弊社もいくつかのサービスで現金やポイントを付与していますが、複雑な手続き、オフラインでの手紙や窓口申請をおこない、かつ一部手数料が発生するサービスを提供しています。

ただ、LINE Pointを見てみると、去年から今年まで1年の発行数は300億ポイント以上と、手間がかかっても人気があります。

皆さんの財布や、各種サイトにも、多くのポイントがあるのではないでしょうか。

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

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

そこで注目したのが仮想通貨、ポイント、コンテンツ、事故証明など、透明性と安全性を持ってトークンを発行できるブロックチェーンでした。

とはいえちょっとまって、ブロックチェーンじゃなくても、ラインポイントで実現できのでは、と思う方もおられるかもしれません。

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

たとえば受け取ったポイントが先月5ポイント、今月1ポイントだと、ユーザーはなぜかと疑問を持つと思います。

ユーザーはサービスに対して、ポイントを発行するルールをおしえてほしいとなると思います。または勝手にルールが変わっても止めることは難しいと思います。

それに対してブロックチェーンはサービスからユーザーへの還元履歴、還元ルールが、オープンに閲覧できるようにして、多くの人とデータを共有することで誰からどこにポイントが映ったか把握できる。

履歴管理しているからこそ、改ざんしても過去とのデータの整合性が崩れるので、安全に管理できる。

だから、新たなサービスからユーザーへの還元にトークンを使いシンプルに実現して、更にオンラインとの価値が交換できれば、複雑な手続きなしに、ユーザーに対価が還元できるシステムができると考えるようになった。

サービスは手数料など気にせず還元ができて、ユーザーは対価を安全に得て、ファンになり、よりよいサービスができる好循環ができると考えるようになりました。

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

作りたいと思ってから調査を始めるともちろん簡単にできるわけではありませんでした。

すでに公開されたオープンなプラットフォームもあるので、それらを使ってLINK Chainを公開することも出来たかもしれません。ですが、既存プラットフォームはユーザーにとって、ウォレットを自分で用意したり鍵を管理したり、そもそもブロックチェーン上にあるサービスを見つけるのが難しかったりします。

つまりウォレットを紛失したら大変ですよね。誰にも盗まれず自分も忘れないことが必要。

ブロックチェーンを利用したサービスを開発する人にとっても、安全で堅牢で拡張性のあるようにするには、ブロックチェーンの技術を深く理解し、セキュリティ対策が必要。

実際、昨今サービスのバグを突いたハッキング被害も出てきている。

開発を始める前にこれら多くの時間をかけて準備をしていては、スピーディーに開発を開始できない。

そこでユーザーにも開発者にもアクセスしやすいブロックチェーンのプラットフォーム、LINK Chainを開発することにしました。

他のブロックチェーンプラットフォームを使うのではなく、自分たちで開発することで、スピーディーに開発することも可能に。

f:id:niwatako:20181121164821j:plain

突然Dappsと見慣れない言葉が出てきたと思われているかもしれません。

一般的にブロックチェーンプラットフォーム、機能を使うアプリケーションがDappsと呼ばれます。

Decentralized Applicationsということで、Dappsは非中央集権なサービスと言われています。

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

f:id:niwatako:20181121164837j:plain

100万ポイント山分け、本当に山分けされている?と疑ったことがあると思います。

Dappsなら誰でも希望すれば透明性を持って確認できます。

f:id:niwatako:20181121164916j:plain

LINK ChainはLINK NetworkとLINK Frameworkの2階層構造になっています。

LINK NetworkとLINK FrameworkとDappsについてご説明します。

一番下にあったLINK Network、いわゆるブロックチェーン

ブロックチェーンはいちばん重要とも言えるコンセンサスアルゴリズムを用いてユーザーのリクエスト-トランザクションを承認したブロックを生成する重要な役割があります。もう一つスケーリングの問題を解決するための、スケーリングしやすいアーキテクチャになっている。ここを後ほど詳しく説明します。

ちなみに合意形成アルゴリズムとは、サービスからユーザーへの対価の証明に使っています。いかにサービス提供者以外の人にとって透明性を担保できるかに使っている。

ブロックチェーンの問題にスケーラビリティ問題があると話しましたが、通常のブロックチェーンでは、分散してデータを保存しているとはいえ、すべてのノードで全く同じデータを持つ構造です。現在のデータ生成速度ならまだ10年大丈夫と言われているが、成長スピードが上がったり、データ生成能力が増えたりしたら10年は短くなるのは明白です。

分散性から安全性を得ても、拡張性がないのは問題ですよね。

LINKは拡張性を備えています。

次にLINK Frameworkですが、サービスログイン時の自動ウォレット生成、プライベートキーの安全管理、ブロック情報やウォレットのバランス(残高)の確認などの開発者にとって必要な機能の提供を行っています。

LINK Chainの上でサービスを開発するのが簡単になるツールを提供しているのがFrameworkです。

f:id:niwatako:20181121165129j:plain

f:id:niwatako:20181121165150j:plain

現在LINK Chainのプラットフォーム上で提供されているアプリは弊社のもののみだが、これらのサービスではLINEのオープンプラットフォームを利用して、LINEと連携しつつ、LINKポイントが定義されたスマートコントラクトを先程のLINK Frameworkを通じて呼び出しをしています。

SmartContract、スマートな契約とは、たとえば、100万ポイントというValueと、山分けされたいユーザーを管理する変数と、何をしたらいくらポイントもらえるかというルールと、実際にポイントを付与する仕組みを作る。

SmartContractという小さなアプリケーションを開発して公開する。

LINKポイントは、ユーザーがいくら持っていて、付与、転送などの機能をテンプレート化しているのでサービスで使うのは容易です。

f:id:niwatako:20181121165311j:plain

ここまで話したことは、ユーザーにとって簡単にサービスを見つけられて、開発者が簡単にサービスを開発できるということです。

つまりサービス指向のブロックチェーンプラットフォームといえます。

ここからLINKチェーンの詳細を説明したいと思います。

f:id:niwatako:20181121165332j:plain

ちょっとしたCMですがWizballと4CASTをベータリリースしています。本日招待したチャットでサービス名称をメッセージで送るとサービスリンクが送られてくるので試してください。

f:id:niwatako:20181121165405j:plain

Wizballではセッションの質問も募集しています。参加してLINKポイントをあつめてください。

コアと周辺の仕組みを説明します。

f:id:niwatako:20181121165435j:plain

システムは、IMONという標準的OSSでモニタリングされている。

コア技術となっているOSSののkafkaを通じて透明性の証にもなるブロックエクスプローラーをLINK Scanとして提供しています。ブロックチェーンの情報を直接使わず、コアストレージになっているRedisやHBaseを使ってトランザクション情報などを提供しています。

LINK SCAN

https://scan.link.network/contracts

ちなみにアクセスすると、スマートコントラクト、Dappsごとのスマートコントラクトが確認できます。

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

さてこちらに戻り、ここで最も重要なのは中央四角く囲まれたC-NodeとS-Nodeです。

C−Nodeは、コンセンサスノード

f:id:niwatako:20181121165608j:plain

ブロックチェーンの本業、ブロック生成、検証の役割を持つ、いわゆるブロックチェーンのノードです。

サービスからユーザへポイントを還元するリクエストをすべてトランザクションとして受け付けています。

トランザクションを承認すると、ブロックという構造で保存します。

C-Nodeのリーダーがブロックを生成して、その他のC-Nodeがブロックの検証を行っています。

C-NodeのまえにはL7ロードバランサがあり、トランザクションを受け付けています。基本C-nodeリーダーにすべて転送されて、ブロック生成される。

続いて、S-Node。SyncNodeの略で、一般のブロックチェーンではなかなか聞かないと思います。

f:id:niwatako:20181121165707j:plain

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

LINK SCANで使うデータを読み上げる、リードオンリーのために存在しています。

生成と提供を分けることで負荷分散しています。SがCのロードバランサにフルシンクのリクエストをしてKeepAliveで結んで、フルシンクをほぼじさなく実現しています。

私達のコンセンサスアルゴリズムは承認速度やファイナライズ優先のPBFTです。

f:id:niwatako:20181121165802j:plain

PBFTのため、気づいている方もおられるかもしれませんが、すべてプライベートネットワークで構成されています。

今はすべてプライベートブロックチェーン

いまは私達のブロックチェーンプラットフォームの洗練を優先している。完成度を挙げてパブリックにしようと思っています。

PBFTの動作をLINKを例に説明すると、

C Nodeのリーダーにリクエストが来ると、C Nodeリーダーがプリペアフェーズになり仮のブロック生成をして、ブロック情報を他のC-Nodeにブロードキャストします。

Prepareでは、ほかのC-Nodeが検証を行い投票を行い、お互いに正しく検証しているか結果確認のための検証結果をブロードキャストしあいます。

コミットフェーズで、すべての検証結果を評価してブロックを生成して、C-Nodeリーダーが確定した情報をその他のC-Nodeにブロードキャストします。かつC-Nodeもお互いに確定した情報をブロードキャストし合います。

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

f:id:niwatako:20181121165925j:plain

f:id:niwatako:20181121165948j:plain

リーダーは、一定量ブロックを作ったり、障害が起きたら、ラウンドロビンで他のリーダーが選ばれます。

私達のSmartContractは、LINKコントラクトと呼んでいますが、Pythonで開発出来ます。

f:id:niwatako:20181121170015j:plain

事前に検証してコントラクトをホワイトリスト化して安全に実行できるようにしています。コントラクトのアップデートも可能にしています。

f:id:niwatako:20181121170032j:plain

こちらは全体像の中で見にくく、C-Nodeから吹き出しで書いてあった部分です。

すべてのCノードはこちらの機能を搭載していて、主なインターフェースはGRPCベースのJSONRPCで通信できます。内部通信はメッセージキューとしてOSSのRabbitMQを利用しています。

そしてそれをLINK Coreを呼ばれる、ブロック生成基盤となるチャネルや、LINK Serviceと呼ばれるコントラクトの実行基盤となる通信チャネルと通信しています。

絵の通り、かなり細かく機能を分割実装しているのでフレキシブルに対応可能です。

チャンネルにはこちらの機能があります。

f:id:niwatako:20181121170134j:plain

どれもモジューラブルで取替可能になっており、たとえばコンセンサスアルゴリズムの変更も容易です。

ブロックマネージャーはトランザクションやブロックや内部データを各C-Nodeで保存管理する機能です。InternalStorageとしてはOSSのLevelDBを使っています。

LINK Contract Managerは、LINKポイントやスマートコントラクトで使う、デプロイ、アップデート、アクティベーションなどの機能を提供しています。

実は先程も今もアップデートの話をしていますが、スマートコントラクトのアップデートをコンセンサスアルゴリズムの上でやろうとすると一工夫が必要になります。

f:id:niwatako:20181121170233j:plain

まずWhitelistの登録トランザクションの発行から始まります。コミットフェーズのガバナンスマネージャーを通じて登録されます。

登録される情報の、ユーザーのアドレスと、実行可能なスマートコントラクトアドレスのペアによって、スマートコントラクトを実行できるユーザーを限定しています。

次に、スマートコントラクトのデプロイです

スマートコントラクトは小さなアプリケーションです。ZIP圧縮してトランザクションを発行しデプロイする必要があります。コンセンサスアルゴリズムの中で一旦、Prepareの段階で検証する必要があります。テンポラリ領域を容易して検証します。

この図の3移行、4,5が、スマートコントラクトをデプロイするトランザクションなら、テンポラリ領域を使って検証をする。

f:id:niwatako:20181121170316j:plain

Finalizationは、コミットフェーズで、トランザクション3を処理するとき、確認済み領域に移されます。このときトランザクションを処理するコントラクトの実行としては、

f:id:niwatako:20181121170327j:plain

4,5が確認済み領域で実行されます。

このようにテンポラリ領域と確認済み領域2つ用意してファイナライゼーションしないといけません。

スマートコントラクトのアップデートが行われると、テンポラリ領域と、すでにファイナライゼーションされている確認済み領域を使って検証が行われます。

f:id:niwatako:20181121170400j:plain

ここは矢印がクロスしていますが、検証フェーズなので、1と2は確認済み領域で、4と5はデプロイ領域で検証しています。

アップデートのファイナライゼーションは、デプロイの場合と同様ですが、1と2はファイナライゼーション前の確認済み領域でスマートコントラクトが実行され、

f:id:niwatako:20181121170433j:plain

4と5が、今アップデートされた確認済み領域でスマートコントラクトが実行されます。

ブロックチェーンのコンセンサスアルゴリズムの中で、スマートコントラクトのアップデートを実装しようとしたらこの様になりました。

ちょっと複雑でしたかね。

長くなりましたがNetworkの紹介でした。

LINK Frameworkを紹介します。各種UIとモジュールで構成されています。これらを使ってどのようにサービスを作れるか、そしてユーザーがサービスを利用できるのか、説明していきます。

f:id:niwatako:20181121170453j:plain

ちなみに、LINK Frameworkも、GRPCベースのJSONRPCでアクセス可能です。

まずはApp提供車となる管理者、adminの作成が必要です。こちらのようにLINKフレームワークを呼び出すとアドミンのウォレットが生成されます。

f:id:niwatako:20181121170523j:plain

次にDappの登録です。このとき、Dappのスマートコントラクトが登録されて、かつ、Mint-紙幣を鋳造する、LINKポイントが、Dappのスマートコントラクトの中に発行されます。

また、adminがDappのスマートコントラクトを実行できるようにするため、ホワイトリストへの登録も行われます。

f:id:niwatako:20181121170535j:plain

管理者一人以上で運営する場合に必要に応じてオペレータを登録できます。ウォレットとホワイトリスト登録が同時に行われます。

f:id:niwatako:20181121170555j:plain

これでリリースは完了です。

次にユーザーですが、Dapp利用時にいまはLINE ログインを使っています。

f:id:niwatako:20181121170615j:plain

そうするとDapp側がユーザーのウォレットを作成して管理してくれる。ユーザーは鍵管理不要。

LINEログインを使っているという話をしましたが、LINKフレームワークもモジューラブルな構成になっているため、他の認証も実装すれば可能となっています。

各種ウォレットやスマートコントラクトが用意されると、ポイント付与が可能になります。adminからユーザーにTransferが可能になります。

f:id:niwatako:20181121170650j:plain

ホワイトリストで実行権限が確認され、スマートコントラクトを通じてユーザーにLINKポイントが付与されます。

APIコールとしてはオペレーターの追加を含めてここまで5回。このようにLINK Frameworkを呼び出すだけでLINK Networkに透過的にアクセスできるということになります。

f:id:niwatako:20181121170717j:plain

スマートコントラクトやウォレットの情報は、LINK Network、つまりブロックチェーンに保存され、LINK Scanでスマートコントラクトやウォレットなどを誰でも確認できるようになっています。そのためにLINK Frameworkを用意している。

f:id:niwatako:20181121170754j:plain

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

f:id:niwatako:20181121170802j:plain

ここまで発表してきたLINK Chainが9月に発表されたものです。

f:id:niwatako:20181121170805j:plain

今後はよりスケーラブルにするためのリニアネットワークへの移行や、LINK Frameworkを通じたDappの開発をパートナー企業や、誰でも開発できるプラットフォームに変更していいく予定です

リニアネットワークはこちらのように

f:id:niwatako:20181121170835j:plain

LINKチェーンをRootチェーンとLeafチェーンに分けて、それぞれが独立したLINK Networkのブロックチェーンで、かつ、お互いのブロックチェーン間でやり取りをできるようにする構想が、リニアネットワークと呼んでいるものです。

それぞれのLINK ChainにDappsが配置される予定となっています。

f:id:niwatako:20181121170851j:plain

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

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

LINK Frameworkを通じた簡単かつセキュアなDappの提供、LINK Networkへの直接アクセス、また、独自のスマートコントラクトによる機能的で柔軟なDappの提供、リーフチェーンとしてリニアネットワークに参加して、更に機能的で柔軟なDappの提供を予定しています。

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

f:id:niwatako:20181121170947j:plain

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

f:id:niwatako:20181121171001j:plain

ユーザーとの距離を、パートナーとの距離を近づける。

f:id:niwatako:20181121171008j:plain

以上私の発表になります。ありがとうございました。