こんにちは。ALIS CTOの石井(@sot528)です。
ALISブロックチェーンブログ、今回はALISが実運用しているプライベートチェーンについて書きます。この記事では実装の話の前に、ある程度込み入ったÐAppsを作ろうと考えた時にどのように実現するか、ブロックチェーンと既存技術の切り分けをどうするか、その技術選定や意思決定について書きます。
ALISのプライベートチェーンはParity PoAを採用したEthereumのプライベートチェーンであり、このサービス(https://alis.to)で実際に稼働しています。また、AWS CloudFormationによるインフラ構成を含め、すべてのコードはGitHubで公開しています。
実際に運用されているプライベートチェーンがそのまま公開されている例はあまり無いので、導入を検討されている方の参考になれば嬉しいです。
FYI: ちょうど私達がβ版をリリースした2018年4月にAWSからAWS Blockchain Templates、5月にはMicroSoftがAzure Blockchain Worckbench、AWSがKareidoを発表しており、それぞれEthereumのプライベートチェーンをサポートしています。プライベートチェーンの運用を検討されている方はこちらもチェックしてみると良いかもしれません。
OK、あと3ヶ月早く出してもらいたかったんだぜ。
目次:
・プライベートチェーンの必要性
・ALISのプライベートチェーンと技術動向
・3ヶ月運用した所感
・備考
ここでは、なぜALISではプライベートチェーンを使用する判断をしたのか。その理由を記載してゆきます。
実はプロジェクト開始当初は、トークン周り、レピュテーション周りはすべてEthereumメインネットにÐAppsとして構築しようと考えていました。しかし諸事情によりそれが難しくなりました。Ethereumのスケーリング問題が顕在化したためです。
詳細は以下の記事で触れましたので割愛いたします。
2017年末当時、EthereumメインネットでÐAppsとして我々のサービスを実装する場合、当時のレートで毎日20万円前後のトランザクション・フィー(gas)がかかる計算となりました。許容できるコストではありません。さらにEthereumは使用するアプリケーションがプラットフォーム全体のトランザクション逼迫を気にする必要があるのが現状です。毎日のトークン配布、将来的な投げ銭など、トークンの動きを重視する我々のサービスを乗せるには時期尚早と言えました。
EthereumにはCasperと呼ばれるPoS移行、Sharding、レイヤー2のPlasmaやState Channel等のソリューションが同時並行的に進んでいます。しかしすべて実運用の段階にはなく、ある程度安定した環境が実現するまで早くとも1年〜1年半程度はかかるだろうと読みました。
ではどうするか。打ち手はいくつかありました。
・無理を承知でメインネット一本で実装
・通常のWebアプリとして実装する
・プライベートチェーンを使用する
ひとつひとつ見てゆきましょう。
無理を承知でメインネット一本で実装
さきほど現実的ではないと書きましたが、しかしそれでも無理を承知でメインネット一本でゆくという方法も検討しました。トークンの配布期間をたとえば1週間や1ヶ月に一度にしたり、ある程度アプリケーションの仕様を妥協することでメインネットに寄せることも可能かもしれません。
本音を言えばメインネットに寄せたいところです。なんといっても非中央集権の考え方に沿っていますし、インフラの運用も不要です。ユーザの資産を預かる場合、そのシステムや運用はミッションクリティカルです。それはリスクと必要リソースが大きいことを意味し、メインネットに寄せればその観点でも大きなメリットがあります。
しかし私達にはどうしても許容できないデメリットがありました。それはUXです。現状、メインネットに構築したÐAppsを使用する場合は実質MetaMaskが必須と言えます。MetaMask。Chrome等のブラウザ拡張機能です。秘密鍵の管理方法の知識も必須と言えるでしょう。
ALISは現在、暗号通貨・ブロックチェーン縛りのメディアとして運用しています(※2018年8月に他のトピックも開放しました)。今のユーザ層なら暗号通貨の知識があり、一定以上のリテラシーを期待できるので問題無いかもしれません。しかし、私達はALISをより一般的なユーザ層にも使ってもらいたいと考えています。具体的には、私達はすぐに他のトピックも書けるようにする予定です。
そうなるとハードルは上がります。MetaMaskを入れて使ってもらう、というオペレーションはそう容易ではありません。ブラウザ拡張機能という概念を知らない方は大勢いるのです。むしろIE以外のブラウザを知らない方も相当数いるでしょう。gas用のETHはどう用意すればいいでしょう? gasプライスの設定は? トランザクションが失敗したら? 秘密鍵は適切に管理しなければなりません。しかし実際、これは何者でしょうか? 無くしそうなのでITに詳しい息子へメールで送信して良いものでしょうか?
結論としては、私達のメディアをメインネットへ寄せるのは明らかに時期尚早でした。技術的にも社会的にも、まだまだ準備が整っていないというのが現状です。
とはいえ、個人的には界隈の将来を楽観視しています。前の記事でも書きましたが、私は近い将来すべてのブラウザが暗号通貨/DAppsをサポートすると考えています。さらにiOSやAndroidのようなスマートフォン用OSを含む多くのOSがサポートするでしょう。ツールや世の中のリテラシーも並行して向上し続けるはずです。そうでなければ暗号通貨やDAppsに未来は無いと言えます。
通常のWebアプリとして実装する
メインネットが不可能なら、まず思いつくのはWebアプリです。Webの技術は歴史があり枯れていて妥当な選択肢に思えます。実のところ、暗号通貨の取引所等でこのような実装になっているサービスは多々あります。
しかしそこには考慮すべき点があります。まず、私がこのシステムの初期にブロックチェーンに担わせたかったのはトークン周りの機能です。トークンは金銭に準じる存在です。必然、システムはミッションクリティカルと言えます。そしてミッションクリティカルなシステムを設計・実装・運用するのは容易なことではありません。Webアプリケーションとして実装するには極めて多くのリソースによる徹底的な品質担保が必要です。ちゃちゃっと実装して「はいできました」とはいかないのです。
実際にはそのように作られているシステムも多々あるのがこの業界の現状ですが、端的に言えばそれはプロの仕事ではない。そのようなシステムは当然の帰結として問題を起こします。金銭が関わる以上、そんな業界が放置されるわけがありません。そして過剰な規制に繋がります。堅牢なシステムが必要なのです。でなければ業界を巻き込んで国家単位で自滅します(そして今その真っ最中です。クール・ジャパン)。
お金を扱うシステムを、堅牢に。幸いなことに私達は最適な技術を知っています。
プライベートチェーンを使用する
私は別の記事で非中央集権の重要性について書きました。
その中で、以下のように記載しています。
だからと言って中央集権なプロダクトが無価値とか無意味であると主張しているわけではありません...(中略)...中央集権のブロックチェーンには、従来の技術に比較して圧倒的なコスト削減や堅牢性・可用性をもたらす非常に大きな有用性があると言えます
上で述べたとおりWebアプリケーションとして金銭に関わるまともなシステムを作るには極めて大きなリソースが必要です。そしてそのリソースの大部分が品質の担保に費やされるのです。なぜなら金銭に関わるシステムはミッションクリティカルであり、ミッションクリティカルなシステムに失敗は許されないからです。
詳細はこの記事の範疇を超えるので割愛しますが、ブロックチェーンは金銭を堅牢に扱うことに極めて親和性が高い技術です。非中央集権の通貨Bitcoinを実現するために生まれた技術がブロックチェーンなので当然といえば当然です。そして、その特性はブロックチェーンを従来の技術の中で1ミドルウェアとして使用した場合でも変わりません。(※その場合はもちろん非中央集権性が失われることはご留意ください。非常に重要な観点です)
こと金銭の扱いでは、従来の技術でどれだけリソースを投下してもブロックチェーンのプロトコルとしての堅牢性は凌駕できません。いかなる大銀行のシステムであっても、ブロックチェーンがカバーする領域においてはその堅牢性には勝てないのです。(※念の為付記しますが、これはブロックチェーンを使えばシステムが堅牢という話ではありません。ブロックチェーンをミドルウェアとして利用したシステムの全体を見た場合、ブロックチェーンはあくまで既存システムのごく一部を代替するだけであり、その周囲のシステムや構成・運用の如何によってはいくらでも脆弱となりえます)
さらにコストの低さもブロックチェーンの強みです。上記の通り金銭関連のシステムには非常に大きな工数がかかります。当然、一般的なシステムよりもその構築には長い期間を要します。
しかしブロックチェーンを用いれば、そのプロトコルがカバーする金銭にまつわる部分にはテストが不要か最小限で済みます。そしてまさにこの部分が、既存技術で品質を担保するために最も工数をかけるべき部分です。ブロックチェーンを利用すればこのやっかいな実装を代替できるので大幅な工数削減(=実装期間の短縮,費用の削減)が可能です。利用できる条件が揃っているのであればブロックチェーンを使わない手はないでしょう。
また別観点として、サーバレスアーキテクチャとの親和性が挙げられます。
この点については以前の記事で軽く言及しているのでよろしければご一読ください。また、ALISのサーバレスアーキテクチャについても近日中に記事を書く予定で、そちらではより詳細を記載します。
※追記:書きました
最後になりますが、ALISはブロックチェーン企業を標榜しています。そんなチームが金銭に準じるエンティティの扱いに既存技術を用いるなら、それはちょっと残念な感じです。ブロックチェーンの利点を理解していない or 利用する技術力が無いと言っているようなものです。何より面白くありません。
このような理由で、ALISではプライベートチェーンを採用しています。
そうはいっても、意思決定した段階(2017暮れ〜2018初頭)では本当にこの意思決定で良いのか確たるエビデンスはありませんでした。参考になるプロダクトが見当たらなかったからです。
そんな中、2018年02月にPolkadotを推進するWeb3ファウンデーションが以下の記事を公開しました。
もしご興味があれば記事をお読みいただければと思いますが、Ethereumの短期的なスケーリングソリューションとしてPoAのプライベートチェーンをお勧めするという内容です。
the scaffolding required to scale Ethereum is under construction. Examples include, Cosmos, Sharding, Plasma, Raiden and Polkadot, to name a few. These technologies have been well covered elsewhere. Instead, in this article we will focus on one example of a readily available scaling solution: Proof-of-Authority chains.
Ethereumをスケールするために必要なソリューションは絶賛開発中です。一例を上げると、Cosmos, Sharding, Plasma, Raiden, Polkadotなど。これらの技術は他の場所でもよく言及されています。そこでこの記事ではそのかわりに、すぐに使える(一時的な)スケーリング・ソリューションの一例としてProof-of-Authorityチェーンに注目します。
同じ思考経路を辿り、同じ結論に至ったこの記事を読み、私達の方向性について自信を深めることができました。
ALISではプライベートチェーンの構築にgethではなく、Parityを使用しています。gethにもCliqueと呼ばれるRinkebyテストネットで運用されるPoA実装が存在しますが、まさにこの記事に記載のあるPrity Bridgeへの期待からParity PoAを採用しました。(※Parity PoAもkovanテストネットで運用されています)。
Parityの詳細な運用については、別途記事を書く予定です。
FYI: 私は未評価ですが、EnterpriseEthereumにはJ.P.モルガンによる実装のQuorumでコンソーシアムチェーンに適したIBFT、もっとも中央集権にはなりますがより効率的な処理が可能なRaftといったコンセンサスアルゴリズムの実装も存在します。
実現方法
プライベートチェーンを構築する意思決定をした後は実現方法の検討に入りました。冒頭に書いたとおり2018年07月現在はMicroSoft AzureやAWSからプライベートチェーンの構築・運用に利用可能なソリューションが提供されていますが、当時は何もありませんでした。AWSでのブロックチェーンの運用についてサポートへ問い合わせても「サポート内にEthereumの運用事例や知見は無い」との返答でした。
であれば、ということで試行錯誤しながら構築したのが私達のプライベートチェーンです。こちらも別記事で詳細を解説する予定です。
私達は現状のプライベートチェーンをあくまで暫定的な構成と位置づけており、将来的にはしかるべきタイミングで非中央集権な作りへ移行してゆく予定です。その理由は、前回の記事で書いたとおり私達は非中央集権を重要視しているからです。
その実現方法はこのところ議論と実装が盛んなPlasmaかもしれませんし、筋の良いState Channelの実装があればそちらも積極的に検討してゆきます。何にせよ今後開発する機能により最適な選択肢が決まってゆくでしょう。サービスの仕様を考えると過度な期待はできませんが、メインネット一本に寄せられる日も来るかもしれません。
とはいえ、先のWeb3ファウンデーションの記事にもあるとおりEthereumのスケーリング・ソリューションは目下の所すべてunder constructionです。ざっくりとした肌感覚ですが、ある程度信頼を置ける実装が成されミニマムのベスト・プラクティスがたまるまで半年〜1年半、それぞれの運用実績を元に安心して技術選定・導入ができるまで1年半〜2年,あるいはそれ以上の期間が必要となるでしょう。
その間、ALISではプライベートチェーン(or それに類する技術)を利用してゆく予定です。
プライベートチェーンを運用する上でキーとなるのはEthereumメインネットとの接続(pegging)でしょう。プライベートチェーンで完結するプロジェクトでは問題となりませんが、ALISの場合は違います。すでにメインネットではALISトークン・コントラクトは稼働しており、取引所に上場しています。そのためプライベートチェーンへデプロイしたトークンコントラクトと繋ぎ込む必要があります。しかし現状、高い信頼性を担保しつつプライベートチェーンをメインネットとpeggingするベスト・プラクティスは確立していません。
以下のStackExchangeで2018年05月にやりとりされたQ&Aが端的に現状を表しています。
Q. Are there any good tutorials or resources for sidechain development or are these just specialized private chain pegged to the ethereum network?
Sidechain開発の良いチュートリアルやリソースはありますか? プライベートチェーンをメインネットに繋ぐ方法さえわかればそれでもいいんですが
A. There are no tutorials, because the state of the art is still in Research & Development and nobody has deployed a true sidechain yet.
チュートリアルは無いよ。現在の技術水準はまだR&Dの段階だから、イケてるSidechainはまだ誰も実現てきてないんだ
短期的なソリューションとして期待しているPrity Bridgeも未だalphaです。
DISCLAIMER: we recommend not using the bridge in "production" (to bridge significant amounts) just yet. it's missing a code audit and should still be considered alpha.
免責事項: 現状、プロダクション環境で大量のbridgeを行うことは非推奨です。まだCode Auditを行っておらず、アルファ版とお考えください
もちろん自前で実装することも可能です。しかし、すでに進行中のソリューションを上回る品質が担保できない限り、筋の良い打ち手とは言えないでしょう。堅牢なシステムが必要なのです。そして先に書いたように、ミッションクリティカルなシステムを設計・実装・運用するのは容易なことではないのです。そこには多大なリソースがかけられてしかるべきであり、安易な実装を行うべきではありません。
私達のサービスの場合、ここに明確なトレードオフが存在します。現状はプライベートチェーンとメインネットのpeggingは行っていませんが、いつまでもこのままという訳にはいきません。ゼロベースでサービスを思考した場合、トークンの入出金など早々に実装されてしかるべきと言えるでしょう。しかしそれを堅牢に実現するには技術的には時期尚早です。
多くの文脈で判断が難しいタイミングではありますが、私はコミュニティの幸福度最大化という観点をぶらさずリスクと提供価値の適切なバランスを考慮してしかるべき意思決定を行います。
結論としては、プライベートチェーンは安心感を持って運用できています。
新規ユーザ登録時のEOA作成とトークン配布というシンプルな機能しか果たしていない現状はありますが、今後様々な機能を追加しても金銭を扱うプロトコルとしての堅牢性は揺るがないでしょう。今のところ何一つ問題なく動作しており、想定以上に安定しているという印象です。Kovanテストネットの運用実績があるので当然と言えば当然ですが。
当初、前例の少ないプライベートチェーンの構築・運用を選択することにはそれなりの抵抗感がありました。対して、慣れ親しんだWebアプリケーションの技術を使うことにはやはり安心感があります。しかし前述のとおり堅牢なシステムを限られたリソースで実現するためにプライベートチェーンの利用は不可欠だったと言えます。プライベートチェーンを利用しなければ、金銭が絡むシステムを半年で出すことは不可能だったでしょう。少なくとも、あるべき品質を担保したサービスは実現不可能でした。
今のところ、プライベートチェーン利用の意思決定は妥当であったと考えています。現段階でのミドルウェアとしてのParity PoAプライベートチェーンの評価は、堅牢で可用性が高く導入&運用コストが低いため有用性が高いと言えます。導入の意思決定の参考になれば幸いです。
スケーリング文脈において今後もしばらくはプライベートチェーンが現実的な選択肢となる状況に加え、先日Googleも2018年末にGCPでのEthereumサポートを発表するなど、ITの巨人たちも本腰を入れ始めています。実運用へのハードルが急速に下がりつつあると言えるでしょう。
ALISでもしばらくはプライベートチェーンを運用してゆく必要があります。今後も引き続き新しい情報をキャッチアップし、実運用で得られた知見ともどもアウトプットしてゆきます。
今回はALISのシステムの1ミドルウェアとしてのプライベートチェーンについて、導入に至った思考経路と技術動向、今後の展望等について書きました。次回は実際にALISのプライベートチェーンのコードを見ながらその詳細を解説いたします。
異論・反論・誤りの指摘・マサカリ大歓迎です。
・ALIS CTO 石井(@sot528)
・この記事は、運営による記事のためいいねによるトークン配布はありません
・ALISではエンジニア・R&Dメンバー絶賛募集中です 😉