この記事を読むだけでPolkadotとそれを取り巻くプロジェクトがなんとなくわかることを目標にして書いています。技術面の説明は出来るだけ避け概要部分にフォーカスしています。内容はかなり異なりますが、内部構成などはSaurabhさんの記事を参考にしました。
追記(10/15):Mediumの仕様の変更なのか、パラグラフ遷移できなくなしました。
追記(4/14):気づけば読むのに43分かかるとMediumに言われたので、読みやすいように目次からセクション毎に飛べるようにしました。
1. Polkadotの概要
PolkadotはEthereumの共同創業者であるDr.Gavinが2016年に考案した、現状のEthereumなどのブロックチェーンの課題であったスケーラビリティやセキュリティなどを解決することを目指しているプラットフォームです。
Polkadotの目的は2つあります:異なるブロックチェーンを繋げて相互互換性(Interoperability)を提供することでチェーン間でのメッセージ・価値・アイデンティティを交換可能にすること、セキュリティをプールすることでそれぞれのチェーンのセキュリティを守ること。
相互互換性(Interoperability)
BitcoinやEthereumなどを代表とするブロックチェーンには相互互換性がありません。ということは、お互いにデータを送り合うことや価値を交換することはできません。数年前の暗号通貨エコノミーではBitcoinのようなブロックチェーンの王者が誕生することでこの問題は解決されるとサイファーパンク達に信じられていましたが、最近では別の解決策を模索する人が増えてきています。Dr. Gavinもきっとそのうちの一人であり、彼の考案したPolkadotは、Bitcoinのような独立したブロックチェーンを繋げ、お互いにデータ・価値のコミュニケーションを可能にするプラットフォームを目指しています。
Ethereum創業者であるVitalikはここでパブリックブロックチェーンの相互互換性問題を解決する方法を述べています。要約するとこんな感じです:
- 中央集権的または、マルチシグ考証制度:チェインAでの特定のアクションの結果がチェインBでイベントとして処理される。
- サイドチェーン/リレイチェーン:チェーンA内のシステムがチェーンBのイベントを読んだり、検証したりできる。
- ハッシュロック:チェーンAとBのある関数が共通の合図によって引き起こされる。
相互互換性があるとできるようになること:
- 資産をチェーンAからBに送る。
- チェーンB上で起こったイベントに基づき、チェーンA上の資産がロックされる。例えばルールに沿わない行為が行われた場合のステイクへの罰則や、破産時の担保の没収など。
- アトミックスワップ:両者が送るか、どちらとも送らないことのいずれかを指す。例えば、AliceがBobに資産Xを送った場合、BobもAliceに資産Yを送らないといけない。エスクローを通さないP2Pの資産の交換。
- 一般的にクロスチェーンコントラクト。例えば、チェーンBで起こった事象(所有権の登録、資産の移転など)に基づいて、チェーンBで配当が配られる。
セキュリティプール
2つのチェーンが繋がった場合にまず考えられる問題は、チェーン同士の異なるセキュリティによって、二重支払いなどの攻撃が比較的簡単に行えるようになるということです。以下のケースを考えてみましょう:PoSのチェーン1からチェーン2に取引が送られました。1は2よりも経済的に弱いセキュリティを持っており、バリデータの悪行為によりチェーン1の取引ブロックは取消されてしまいました。この場合、チェーン2では確かに取引を受け取ったブロックがあるにも関わらず、チェーン1にはチェーン1から送られたという取引のブロックが存在しません。つまりチェーン1とチェーン2に同等のトークンや価値の複製が存在してしまいます。
100のブロックチェーンが繋がり、個人レベルで取引が行われているPolkadotを考えた時、一番経済的セキュリティが低いチェインが全体のセキュリティのレベルになってしまいます。複数のチェーンが繋がるためには同じセキュリティを持つ必要があり、Polkadotはリレイチェーンのバリテーターのセキュリティをプールすることでこの問題を解決しています。これにより、Polkadotのリレーチェーンに参加するチェーンは、チェーン間コミュニケーションを行う際にセキュリティについてそれほど心配する必要が無くなります。これは後々説明するリレーチェーンの構造やバリデータの役割などを知れば理解できると思います。
2. 内部構造
Polkadotは3つのパーツから構成されています:リレーチェーン、パラチェーン、ブリッジ:リレーチェーンはチェーン間のコンセンサスや取引を行う中心的なプラットフォーム。パラチェーンはリレーチェーンに繋がりるチェーンです。ブリッジはEthereumやBitcoinなど、独自のコンセンサスメカニズムを持つブロックチェーンとリレーチェーンとの橋渡しを行います。
Relaychain
Relaychainは繋がっているパラチェーンにセキュリティを提供し、チェーン間での取引が安全に行われることを保証することからその名がつけられています。RelaychainはEthereumと広義的な意味では似ています:アドレス、残高、取引数にマッピングされたstateシステム。2つ違いをあげるとすれば:
- Polkadotはアプリ機能を持たないため、Relaychainにコントラクトをデプロイすることはできない。
- Ethereumはトランザクションにガスを請求し、スパムを防いでいるが、それは取引の処理時間とスケーリングの問題を孕んでいる。対し、Polkadotはトランザクション料金はトランザクションの数に関係なく一律であり、スケーラブルである。スパム攻撃への対策はまだ決まっていない。
Parachain
パラチェーンはその名の通り、Polkadot上のRelaychainに並列(パラレル)に繋がるチェーンです。セキュリティはRelaychainの共有セキュリティを使いますが、パラチェーンによって行われる計算処理は完全に独立して行われます。なぜならRelaychainに繋がるパラチェーンは一般的に、専門化(用途、コンセンサス、言語など)していると想定されており、全て一緒に処理するシステムであれば、トランザクションが衝突する問題があるからです。よって、Ethereumのような汎用的なチェーンでは、処理はパラレルではなく、順番で行われ、スケーラビリティ問題を引き起こしている。Parachainではチェーン間の境界を明確に引くことで、並列処理を可能にし、スケール可能にしています。
Bridge
ブリッジはBitcoinやEthereumのような独自のコンセンサス/state履歴を持つチェーンをスマートコントラクト機能を使ってPolkadotに繋ぐレイヤーになります。
3. ステイクホルダー
Polkadotのエコノミーに参加する人は以下4つのいずれかの役割を持ちます:Validator(検証者), Collator(照合者), Nominator, Fisherman。これを読んで自分もエコノミーに参加してみたいという方はこの記事でやり方を説明したので参考にしてください。
ValidatorはRelaychainに生息し、Collatorから送られてくるブロックを受け取り、検証・ファイナライズし、Relaychainに送る役割を持つため、4人のうちで一番重要と言えます。ValidatorはネイティブトークンであるDotsを120日間?Stakeする(担保としてロックする)ことにより(この状態はBondedと呼ばれる)、ブロックを検証して、報酬を受け取ります。検証をするためにはRelaychainのブロックに常に同期し、オンラインである必要があります。繰り返しオフラインになっているところを見つかったり、悪いことをすると処罰(Slash)を受け、報酬を減らされたり、担保を没収されたりするので、良い子でいるインセンティブを持ちます。Validatorは一日数回、Validator志望者の中から数十人セットで選出され、Eraが終わるまでValidatorとなります。選ばれる確率はNominatorにサポートされると増える?
Collatorは下の画像でみてわかるように、各パラチェーン内に生息し、そのチェーンのフルノードを持ち、チェーン内のトランザクションをブロックに積めてValidatorに送る役割を持ちます。この時点でブロックは蓋がされておらず(un-sealed)、それを検証して蓋をするのがValidatorです。自分が送ったブロックが検証され、Relaychainに追加されると報酬が貰えます。CollatorになるためにはいくらかStakeする必要があり、送った先のValidatorが悪いことをすると、Collatorの担保は没収されます。CollatorはPoWでいう所の、マイナーと同じようなイメージです。
Nominatorは信頼できるValidatorのリストを公開する事によって、そのValidatorをサポートすることができます。Validatorと違い、Nominatorの数は限られておらず、NominatorになるにはValidatorと同じようにDotsをStakeする必要がありますが、ノードを動かしたり、検証する必要はありません。もしサポートしているValidatorが選出されたら、Nominatorは報酬の一部((総額-Validatorの取り分)/Nominatorの数)がもらえます。ValidatorがNominatorに人気すぎると貰える報酬が減るので、Nominatorには偏りなくノミネートするインセンティブが働きます。NominatorとValidatorについてはNPoS(Nominated Proof of Stake)に詳しい。
Fishermanはその名の通り、釣り人です。大物の魚を釣るために、粘り図よくその時を待っています。これは冗談ですが、これを言ったのはFishermanの役割のイメージを掴んでもらうためです笑。彼らはValidatorが悪い行為をしないかを見張っており、プロトコルに違反する行為を見つけたら通報し、そのValidatorのStakeを一部または全額貰えます。頻繁に怒るようなことではないため、一攫千金を狙うハンターのような存在であり、Polkadotのエコシステムを守る天使のような存在でもあります。スパムを行うとValidatorがgrief(無駄な処理)するため、Fishermanもある程度stakeする必要があります。
4. Substrate
Substrateはどのブロックチェーンを作るにも必要となるような機能を詰め込んだ夢のようなモジュールセットツールです。従来はBitcoinやEthereumのようなチェーンをフォークしてカスタマイズされていましたが、Substrateを使うことによって、簡単に効率的にチェーンを作ることができます。SubstrateとPolkadotは混合されがちですが、二つは全く別物であり、Substrateで作ったチェーンでPolkadotを構成することができます。例えるならPolkadotはEthernetで、Substrateはパソコンです。さらにPolkadotは特定のプロトコルで、Substrateは一般的な技術スタックです。Reactがウェブサイトのフレームワークなら、Substrateはブロックチェーンのためのフレームワークです。SubstrateはRustで書かれており、コア機能のStateマシーンはWasm(WebAssembly)で書かれています。これによるコア機能は2つのメリットがあります:Rustは高速処理を可能にする、Wasmでの処理は低速になるが、柔軟性を提供する。ノードが最新のランタイム(チェーンのロジック)にアップグレードする際、Rustをビルドしてネイティブで高速処理を行うか、Wasmインタープレターを使いホットフォークレスアップグレードのいずれかが可能です。具体的なやり方は「フォークレスチェーンアップグレードのやり方」で解説しています。
チェーンの種類
Substrateの詳細説明に入る前に、Polkadot上に存在するチェーンの種類を確認してみましょう。Substrateを使ってブロックチェーンを作ることは、必ずしもPolkadotのパラチェーンになるということは意味しません。これがPolkadotとSubstrateは別物であると言った所以です。PolkadotにデプロイせずにBitcoinやEthereumのような独立したチェーン(Solochain)として開発することもできます。下の図でわかると思いますが一応解説します。
- Solo Chain: 他のチェーンと繋がっておらず、独自のコンセンサスとSovereign(政治がどう行われるか?)をもつ。
- Solo Chain + Bridge: Bridgeを介してPolkadotに繋がることにより、限定的だがコミュニケーションが可能になる。BridgeはSolochain内のコンセンサスなどを翻訳し、Polkadotに伝える。独自のSovereignは保たれるため、セキュリティプールは使えず、自分たちで経済的インセンティブを考えなければならない。
- Parachain:説明した通り、PolkadotのRelaychainに繋がるチェーン。Polkadotのコンセンサスを使うので、セキュリティプールを使うことができる。
Substrateの構成
Substrateは3つのレイヤーで構成されています:Substrate Core、SRML、Substrate Node。そのレイヤーから始めるかによって、開発者は自由さと簡単さのトレードオフを行い、自由自在にチェーンを開発することができます。
Polkadot Core: これはSubstrateを全く使わないアプローチです。WasmにコンパイルできればPolkadotに繋げることは可能です。なのでSubstrateが提供する便利なツールを使わずとも自分でRPCやコンセンサス、通貨、ネットワーク、ストレージを作れます。このアプローチは効率と引き換えに、自由度を得られます。
Substrate Core: ブロックチェーンを作るための基礎機能を兼ね備えた最低限のスケルトンであり、開発者はRuntimeをカスタマイズするだけです。必要であれば提供されているCoreをカスタマイズすることもできます。以下がSubstrateCoreの機能リストです:
SRML: Substrate Runtime Module Libraryの略であり、チェーン特有のRuntime(State-transition-logic)を作るのに非常に役立つモジュールを提供しています。大体のチェーン開発者はここから始めるのではないでしょうか?Rust, C/C++, C#, Goなど、Wasmにコンパイルできる言語ならどれでも独自のRuntimeモジュールを開発ができます。SRMLを使えば、既に提供されているモジュールを繋げるだけで簡単にRuntimeを実装できます。Runtime開発を実際に手を動かして学びたい方は、既に日本語版を実装したSubstrate Kittiesのチュートリアルで簡単に始められます。
以下がSRMLが提供するモジュールの一部リストです:
Substrate Node: JSON fileで好みのチェーン仕様のconfigファイルで簡単にスマートコントラクトチェーンを作れます。ルームサービスに例えられます。
5. コンセンサス
Validatorが次にRelaychainに追加される有効なブロックに同意するプロセスのことです。同意が行われると、forward-verifiable proofによってブロックはFinalizeされます。つまり、現ブロックからgenesis(#0)ブロックまで辿って一貫性が保たれていることが証明できます。コンセンサスは、ある一定の割合のValidatorがブロックの有効性について同意する、BFT (Byzantine fault-tolerant)アルゴリズムによって行われます。Relaychain上のそれぞれのブロックは様々なParachainのトランザクション情報を含むため、システム全体で一貫したコンセンサスアルゴリズムが必須になります。
Probable(可能性の高い) Finality vs. Provable(証明できる) Finality
Bitcoinを代表とするPoWブロックチェーンではNakamotoコンセンサスという、いわゆる”Probable finality”が採用されています。Probably finality(多分ファイナリティ)は”Eventual consensus”とも呼ばれ、ブロックはファイナライズ(絶対に覆らない状態)されることはありません。Bitcoinのホワイトペーパーでは、6ブロックが追加されると”practically confirmed”とされていますが、決して100%のファイナリティは達することはできません。実際にはブロックが追加されるにつれて、ネットワークと参加者によりますが、それがファイナルである可能性が上がります。またこれは、最新のブロックにつれ、覆る可能性が高くなるということです。これがPoWチェーンはマイニング能力が高いコンピュータの誕生により、51%攻撃の危険性があると言われている理由です(longer chain rule)。
これに対し、GRANDPAやEthereumのCasperはブロックに強いファイナリティを提供しており、あるプロセスが行われると決して覆ることができなくなることを保証します。これをProvable Finalityと呼びます。ParityはProbablistic Finalityではなく、Deterministic(100%で決定的な) Finalityが必要であると考えています。Polkadotのコンセンサスは1/3がビザンチンノードでない限りは安全です。PoWではマイニングに電気代や機械代のコストがかかるため、悪い行為をしないインセンティブが設計されていますが、PolkadotのNPoSではStakeしているDOTがSlashされ内容に行動するように設計されています。
コンセンサスとは
一般的なコンセンサスアルゴリズムにはLivenessとSafetyという要素があります。Safetyは正直な参加者が二つのコンフリクトする事象に同意しないことを確証することで、Livenessは最終的には正直な参加者によって同意に達することを確証することです。ブロックチェーンの場合、SafetyはFinalityと同じで、ブロックが一度Finalizeされると、将来の正規チェーンに必ず含まれることを確証することです。Livenessはチェーンが成長し、有効なトランザクションは最終的にはFinalizeされるとことを確証することです。
この二つの要素は、参加者全体のByzantine(何割がオフラインか、または悪意を持って行動するか)の割合とNetwork間のメッセージ(同期、一部同期、非同期)の前提により影響を受けます。
これをブロックチェーンに考えた時、NakamotoコンセンサスではSafetyに達することはなく、Probablisticです。Polkadotはaccountable safety(説明可能なsafety)を実現しようとしており、1/3以上がByzantineにならない限り、プロトコルは安全ですが、1/3以上がByzantineの場合、誰がそうであるのかを特定し、SlashしてStakeを没収します。
メッセージがどのように届けられるかは何割がByzantineになってもコンセンサスプロトコルが維持されるかを決める要素となるので非常に重要です。
- 同期:メッセージは参加者全員が知っている、ある一定の時間T以内に常に届けられる。
- 部分的同期:ネットワークに基準時間が存在し、どのメッセージが遅れるか、時間T内に届くかが参加者に知られている。
- 非同期:メッセージはいずれ届けられる。
通常、probablistic以外のコンセンサスメカニズムには同意に達するまでに大量のメッセージを参加者間でやり取りする必要があります。メッセージの量はそのネットワーク参加者に比例して増加するため、一つ一つのブロックに対し同意をとれば、計算処理が高額になってしまいます。そのため、複数のブロックを同時にファイナライズする方法と、ブロック生成とファイナリティを別々に行う方法が注目されています。このハイブリッドにより、PoWコンセンサスと同等のブロック生成速度と、瞬時にファイナリティに達することが可能になります。
GRANDPA
Polkadotは、ネットワーク参加者が増えるに連れてスケールするDeterministicファイナリティの処理コストの問題を解決しようとしています。Liveness(ブロック生成)レイヤーはProbabilisticであり、Safety(Finality)レイヤーはDeterministicで複数のブロックを一斉にファイナライズすることができます(Cosmoと同じ?)。
PolkadotのRelaychainには上で説明したハイブリッドモデル+αを実現するFinality Gadget:GRANDPA(GHOST-based Recursive Ancestor Deriving Prefix Arrangement)が採用されています。GRANDPAが実現していることは、非同期メッセージで安全、説明可能safetyの提供、複数のブロックの同時ファイナライズです。
このアルゴリズムは「子供ブロックが有効である親ブロックは同じく有効である」という前提に基づいて開発されており、投票者は一つのブロックに投票するのではなく、有効だと思う最新の(highest)ブロック(つまりチェーン)に投票します。そしてアルゴリズムは全体の2/3以上が有効であると投票したブロックに対し、proof-of-finalityを発行します。この投票システムにより、GRANDPAは大量のブロックを瞬時にファイナライズすることが可能です。Finality Gadgetについてはここが詳しいです。
6. ガバナンス・トークン
DOTはPolkadotプラットフォーム上のネイティブトークンであり、主に3つの目的を持ったユーティリティトークンです:Polkadot内部の政治、ネットワーク参加者(Validator, Collator….)へのインセンティブ設計、Parachainデプロイ・維持。
政治:Polkadotプロトコルの完全なコントロールはDOT所持者達にあります。これはマイナーを持つ他のプラットフォームとは全く異なる点です。これによりプロトコルのアップグレードやバグを直すなどの特殊なイベントを参加者のみで潤滑に執り行うことができます。PoC5ではCoucil、投票システム、提案システムの実装なども考えられており、これによりネットワーク参加者の少数派の意思も尊重した政治が行えます。
参加者:DOT所持者はPolkadotの上で説明したValidator、Collatorなどの役割をもち、ゲーム理論的にインセンティブ設計のされたトークンエコノミーに参加します。このエコノミーでは、正直なプレイヤーは報酬を受け取り、悪意のあるプレイヤーはStakeの没収などの罰を受けます。これによりネットワークはセキュアに保たれます。
Parachain:トークンをStake(ロック)することにより、新しいParachainがRelaychainに追加されます。時代遅れや役に立たないParachainはロックしているトークンとともに除外され、このProof of Stateの形式です。
筆者の勝手なイメージではPolkadotは一つの大きな国であり、DOTはその国の政治が正しく行われること、住民(Validator…)がしっかり労働をすること、様々な街(Parachain)が発展することを深く考慮されたトークンエコノミー設計により可能にしています。あとは一般的なICOと同じく、Parityチームの資金調達の目的もあります。
トークンセール
全1000万DOTのうち、50%がメインネット移行後のジェネシスブロック生成時にspend all second price dutch auctionとしてセールが行われます。つまり2019年末頃になります。このオークション形式では500万DOTが落札される正しい値段が見つかった時点で、全員同じ値段で購入できます。詳細はLightPaperのp.13で見つかります。
追記:2017年に行われたICOで500万DOTがすでに販売されているようです。2019年末に行われる予定のオークションでは、残りの20%である200万DOTが販売されると思います。詳しい情報は調査中です。0xb59f67A8BfF5d8Cd03f6AC17265c550Ed8F33907 に配分記録があるみたいです。
7. Polkadotの仕組み
実際にPolkadotでParachainがどのように繋がっているのか、トランザクションを送り合っているのか、Parachainオークションについて話します。
トランザクション処理
Polkadot上の2つのParachainがトランザクションを行うときのフローです:
- Parachain AでParachainBに向けて作られたトランザクションは、まずParachainAにいるCollatorに送られます。
- Collatorはそのトランザクションが有効であると確認したのち、ブロックに挿入し、ParachainAのValidatorにState transition proofと共に送ります。
- Validatorは受け取ったブロックが有効なトランザクションのみを含んでいることを検証し、DOTsをそのブロックにStakeします。
- 十分なDOTsがValidatorとNominatorにStakeされたら、ブロックはRelaychainに送られます。
- トランザクションは実行され、ParachainAからのデータや価値はParachainBに送られます。
一般的なParachainがどのようにしてインターチェーントランザクションを行うのかを理解したところで、EthereumやBitcoinなどの独自チェーンがいかにBridgeを介してトランザクションを行うのかを見ていきましょう。
PolkadotとEthereum
PolkadotからEthereumにトランザクションを送る場合、solidityのスマートコントラクト(break-inコントラクト)が使われます。このコントラクトには最大で144人分の署名が可能であり、有効性はその2/3である97人のValidatorによりファイナライズされます。EthereumとPolkadotのネットワークを維持するには540,000gas/dayが必要と考えられており、Bridgeを介した基本トランザクションは$0.11(一定の計算処理が必要の場合は+そのコスト)かかります。これらから1年間の費用を算出すると$45(540,000*ETH_price*10^(-9)*gas_price)になります。
EthereumからPolkadotにトランザクションを送る場合、今度はbreak-outコントラクトが使われます。このコントラクトは必要な支払いを受け取ったのちに、Merkle proofを介してその存在を証明する指示ログとそのブロックヘッダーの有効証明を発行します。ValidatorはEthereumのフルノードを走らせる必要があり、かなりの重労働を強いられます。これを解決するためにはSPV(Special Payment Verification) — 無効なヘッダーであるという証明を発行する第三者を利用することが考えられます。
BitcoinとPolkadot
Sidechainの”Two-way peg”ようなBitcoinにすでに実験されている方法を使うことで双方向メッセージが行われます。BitcoinからPolkadotは、Ethereumのbreak-outコントラクトのように簡単にできます。問題はPolkadotからBitcoinです。Bitcoinでは計算処理能力が限られており、ほとんどのBitcoinクライアントは最大3人までのマルチシグトランザクションしか受け付けていないのでValidator人数を増やしてセキュリティを確保することが困難です。また、Bitcoinのプロトコルの仕様を変えることはハードフォークを意味するのでそれも非現実的です。
上のセキュリティ問題を説明します。Validatorのローテーションによってセキュリティ担保が増加すると問題が発生します。システムを少数のバリデータと多額の担保で運用する場合、Validatorが悪意のある行動をした時に、担保から差し引かれる可能性のある預金の総額が減少します。これは基本的に、2つのブロックチェーン間で安全に取引できる資金に上限が必要であることを意味します。詳細はWhitepaperの6章にあります。
Parachainキャンドルオークション
Relaychainには複数のParachainを繋げるスロットが用意されており、それぞれはキャンドルオークションによって一定期間借りることができます。キャンドルオークションとは16世紀に行われていた、ロウソクの火が消えると落札額が決定する終了するオークション形式です。オークションの終了時間にランダム性を再現することにより、終了直前を狙ったスナイピング入札を防ぐ目的があります。
それぞれのスロットは最大2年間、4ユニット(6ヶ月)の期間借りることができ、オークションはスロットが始まる6ヶ月前に執り行われます。入札はフォーマットに従い、「入札額と期間」を送ることで可能です。入札は1スロット単位で計算され、入札が1スロット未満の場合は、期間の被らない他の入札者の入札と共有されます。
例えば、下の入札の場合、DaveとEmilyの入札は合算され(280DOTs)、Charlieの300DOTsと比べられます。この状態でオークションが終了した場合、Charlieの方が1スロットの入札額が高いのでChalieが落札したことになります。誰が誰と合算されるのかは不明ですが、一番高額になるコンビネーションをアルゴリズムが反復計算処理をして導き出すのではないでしょうか。詳しくはここを確認してください。
Charlieが75 DOTsで1–4ユニット → 75DOTs* 4 = 300DOTs
Daveが100 DOTsで3–4ユニット → 100DOTs * 2 = 200DOTs
Emilyが40 DOTsで1–2ユニット → 40DOTs * 2 = 80DOTs
8. 他プロジェクト(Cosmos/Ethereum)との比較
Polkadotについての理解が深まったところで、競合プロジェクトの有無について考えて見ましょう。ここではPolkadotと同じようにInteroperabilityやスケーラビリティの課題を解決しようとしているCosmosとEthereum2.0との比較を行います。Cosmosは少し詳しく説明するので、長かったら最後の表だけチェックしてください。
追記(4/16):他プロジェクトとの比較は別記事で詳しく解説しています。
Ethereum vs. Polkadot
Ethereumはスマートコントラクトというp2p計算処理されるプログラムをオンチェーンでデプロイできるプラットフォームです。Ethereum1.xは現在のEtheumの事を指し、Ethereum2.0はspecで計画されているsharded chainを指します。二つは仕様、目的共に大きく異なりますので、別々に考えます。
Ethereum1.x
Ethereum現モデルとPolkadotとの違いはかなり大きいと言わざるを得ないでしょう。まず、EthereumはSmartContractのデプロイができる単一チェーンであるのに対し、PolkadotはWhitepaperでも述べられているように”fully extensible and scalable blockchain development, deployment and interaction test bed” — 完全拡張可能・スケーラブルブロックチェーン開発、デプロイ、操作テスト環境です。パブリックは勿論、プライベート・コンソーシアムチェーンの追加や多種の異なるチェーン同士のコミュニケーションも可能にしています。
Ethereum2.0
Eth2.0 specに示されているshard chainとbeacon chainは、PolkadotのRelaychainとparachainに比較できます。一見課題解決方法として似ているように見えますが、shard chainはhomogeneous(同種)であるのに対し、Polkadotのparachainはheterogeneous(多種)です。これはつまり、Polkadotは多種多様なロジックに基づいたチェーン同士が共存できる柔軟性を提供しのに対し、Eth2.0 shardsは単一のロジックしか許可していません。さらに、Polkadot上のparachainはセキュリティプールによってセキュリティが守られます。beacon chainはLMD(Latest Message-Driven)GHOSTをフォーク選択ルールとしていますが、PolkadotのRelaychainはブロック作成をBABEに、FinalityをGRANDPAにしています。
Cosmos vs. Polkadot
CosmosはPolkadotと同じように相互互換性を目的としているプロトコルでる故に、他のどのプロジェクトよりもPolkadotの競合となる可能性が高いでしょう。ここでこの二つのプロジェクトの違いを明確にして置きたいと思います。既にこの比較はPolkadot Wikiでまとめられているので、詳しく学びたい方はそちらを参照してください。
hubとzone vs. parachainsとrelaychain
Cosmosではチェーンはzoneと呼ばれ、それぞれがTendermintコンセンサスアルゴリズムの個別のインスタンスを使っています。チェーン間コミュニケーションはマスターのhubで処理され、転送は通貨にのみ限られます。一方のPolkadotではhubに相当するrelaychainは通貨だけではなく、メッセージやアイデンティティなどのarbitrary(任意的)なデータ転送をもサポートしています。また、Polkadotはparachainが繋がるrelaychainhは、常に単一の正規チェーンのみであることを確証していますが、Cosmosはhubとzoneの自由なデプロイを許可しています。
コンセンサス
CosmosのコンセンサスアルゴリズムであるTendermintはPBFT(Practical Byzantine-Fault-Tolerent)に基づいたコンセンサスアルゴリズムであり、1/3のbyzantineまで安全。有効性は最新のブロックのハッシュを含んでいることにより認められるため、ブロック生成とFinalityが一体である。Polkadotは説明したようにブロック生成(BABE)とFinality(GRANDPA)のハイブリッドモデル。TendermintのコンセンサスはBizantineが1/3未満である(n > 3f (nは全投票数、fはByzantine))に基づいており、Finalizeには最低でも3f + 1の正直な投票数が必要になる。TendermintとGRANDPAは1/3がByzantineになった場合、直ちにFinalize作業を安全に中止することができるが、ここでの違いはBABEはブロック生成を続けることができる点です。
Finality
GRANDPAとTendermintのFinalityはValidator間のメッセージのBandwidthとLatencyに影響され、Validatorの数の増加とともに送られるメッセージの数が比例するため、Finalityに必要な時間と処理が増加する。これはトレードオフであり、少数のValidatorはネットワークのセキュリティを犠牲に高速なFinalityを実現し、多数Validatorは速度を犠牲に堅牢なネットワークを実現する。分散型ネットワークはセキュリティを重視するため後者が好まれやすく、CosmosもPolkadotもその例外ではない。
ここでの違いは、ブロック生成とFinalityを分離するかしないか。Cosmosは先ほど説明したように、ブロック生成には最新のブロックのハッシュが必要なため、Finalityの順番待ちが発生します。PolkadotではFinalityが滞ったとしても、ブロック生成は別で行われるため、十分な数のValidatorが投票するまでの順番待ちが起こらず、生成されたブロックはチェーン毎にまとめてFinalizeされるので高速Finalityを実現できます。テストネット実装はPoS3で完了しているのでここでFinalizeが行われている様子を実際に見ることができます。執筆時点(4/14)では各ブロック約6秒でFinalizeされています。Cosmosの実際のFinalityの時間は見つかっていないので、知っている方いたら教えてください。TestnetはOfflineでした。
9. Parity Technologies・開発状況・他の活動
Parity Technologiesについて
ParityTechnologiesはDr. Gavin WoodがCEOを務め、Web3Foundationによりサポートを受けている企業です。分散型WebであるWeb3.0を実現するために必要なインフラとして、PolkadotとSubstrateを開発しています。Web3.0とは何かについては前回書いたこの記事を読んでください。他にもBitcoinやEthereumクライアントを開発。チームにはGavin Woodの他に、ブロックチェーン業界で非常に著名なRobert HabermeinerとAlistair Stewartがいます。
開発状況:
メインネットは2019年末に以降予定。
- PoC-5 (Release date TBD)
- PoC-4 (Release date 3 April 2019) — Interchain communications to be added
- PoC-3 (Released 21 Dec 2018) — GRANDPA finality gadget added, Testnet: “Alexander” Release Blog Post
- BBQ-Birch testnet (Went live: 15 October 2018): Added smart contract support.
- PoC-2 (Released 29 Jul 2018) — Support for parachains added; rewards and slashing added to PoS consensus algorithms. Testnet: “Krumme Lanke”. First automatic upgrade via governance. Release Blog Post
- PoC-1 (Released 16 May 2018, Testnet went live 18 May 2018) — Initial proof of concept — included basic state transition engine for relay chain and on-chain governance. Release Blog Post
10. まとめ TL;DR
ここまで読んでいただけたなら、Polkadotの全体像がなんとなく分かったのではないでしょうか。最後に今回話したことを簡単にまとめます。
- Polkadotは様々な種類の(Heterogeneous)チェーンでできたマルチプロトコルである。それぞれのパラチェーンは専門化することにより、特有のチェーン内政治、コンセンサス、通貨を持つことができる。
- Relaychainに繋がることにより、チェーン間の相互互換性が確保され、他のParachainとコミュニケーションをすることができる。
- セキュリティプールにより、Relaychain内のセキュリティは守られる。よってParachainは自分たちのプラットフォーム開発に専念できる。
- Polkadotは3つのパート:Relaychain,Parachain, Bridgeから構成されている。ParachainはRelaychainに繋がるそれぞれのブロックチェーンで、Bridgeは異なるコンセンサスを採用する独自チェーン(Ethereumなど)とのコミュニケーションを提供する。
- ネットワーク参加者はValidator,Collator,Nominator, Fishermanのいずれかであり、それぞれがインセンティブ設計されたエコノミーで役割を持つ。
- コンセンサスはブロック生成とファイナリティ部分のハイブリッドモデルを採用しており、高速でブロックのFinalizeを可能にする。
- PolkadotのネイティブトークンであるDOTは、Polkadot内部の政治(Validator, Collator….)、ネットワーク上のインターチェーンコミュニケーション、Parachain作成・維持に使われる。
- Substrateはブロックチェーンを簡単・効率的に作ることのできるツールセットである。Core, SRML, Nodeで構成されており、開発者のニーズに合わせて自由度と効率性をトレードオフにカスタマイズ可能。
11. これからPolkadotについて勉強/貢献したい君へ
Polkadotは近年誕生した世界中で開発が爆速で進んでいる非常に変化の激しいプロジェクトです。なのでネット上で見つかる勉強リソースや最新情報の多くは英語で書かれており、日本人にとっては勉強コストがかなり高いと思います。できる限りハードルを低くして多くの方に興味を持ってコミュニティに参加してもらいたいという思いで、ホワイトペーパーやSubstrateKittiesの翻訳や、この記事の執筆を行なっています。
以下のリソースを利用してPolkadotについて学び、プロジェクト開発やコミュニティの参加を通してコミュニティに貢献していただけることを願います。
PolkadotとSubstrate周りのプロジェクト
Polkadot含むその周りのインフラやツールなどのプロジェクトは、Parityメンバーとオープンソースコミュニティによって開発されています。以下にメジャーなプロジェクトのリストを置いておきます。:
- Polkadot Telemetry Service — テストネットで動いているノードやチェーンなどのネットワーク情報が見れるUI。
- Polkadot APP UI — Polkadotのエコノミーに参加するための基本的な管理UI。React.jsとRxJSで作られている。APIドキュメンテーション。
- Substrate UI — built with the Bonds oo7 library. API Docs available.
- Polkadash — validator monitor.
- Polkabot — network monitoring and reporting.
- Polkascan — blockchain data explorer and analytics.
勉強リソース
- SubstrateKitties(日本語): Runtime開発を学ぶための最も有用なハンズオンチュートリアル。チェーンを開発してみたいならまずはここから始めましょう。
- Whitepaper(日本語):Gavinが2017年に執筆した一番最初のPolkadotのアイデアです。当時の情報から多くの変更が加えられたとは思いますが、Polkadotのエコノミーや役割など非常に重要なことを学べます。
- SRML: ソースを見るのはRuntime開発に必須
- Polkadot WIKI:トピック毎のPolkadotの仕様など解説されています
コミュニティに参加する
- 勉強会1: UnchainedではDevUxというブロックチェーンを実際にハンズオンで開発してみることを目的に毎月勉強会を行なっています。興味のある方はConnpassから参加登録お願いします。
- 勉強会2:Staked株式会社とUnchainedが合同で行なっているSubstrate/Polkadotに特化した勉強会です。こちらは概要や哲学にフォーカスして月1で勉強会を行なっています。
- Reddit:Parityからの告知や情報発信、トピック毎の議論の場となる掲示板です。
- RIOT(日本語):技術でもそうでなくてもなんでも聞いてください。筆者もいます
- RIOT(Polkadot):Polkadot全般の質問などはここで。
- RIOT(Substrate/技術面): 技術的な質問ができます。Gavinはじめコアデベロッパーが丁寧に答えてくれます。
- Telegram:日本のオンラインコミュニティでは一番参加者が多い気がします。
最後に
筆者はParityやWeb3Foundation率いるこのPolkadot/Substrateにブロックチェーン、延いてはインターネットやこれからの社会、経済の未来を感じています。現状のブロックチェーンはインターネットのアナロジーを用いると、インターネットに繋がっていないブログや社内ホームページであり、その真価は全てが繋がることにより発揮されます。BitcoinやEthereumなどのプラットフォームはその技術と振興哲学故に非常に画期的なものですが、実際に社会実装をなし得るためには既存のサービスや他のブロックチェーンとの『相互互換性』とそれを支えるインフラが必要不可欠です。Polkadotはブロックチェーンを繋げる次のインターネットとなり、Substrateはブロックチェーンを簡単に作るためのReactやWordpressになります。これらの前提技術が出揃って初めて、ユーザの権利が守られ、透明であるというインターネットが本来目指していた姿に近づけるのではないかと考えています。
Polkadotのような次のインターネットを作るために日進月歩で世界中で開発されているプロジェクトに関わることは、国境を越えて他の優秀な方との刺激的な出会いと日々たくさんの学びを与えてくれます。日本でもブロックチェーン界隈は基本的にとてもオープンで優秀な人が多く、海外や各国の優秀な人とのネットワークも広がります。あなたも今日からコミュニティに参加し、一緒に次のインターネットを作りませんか。
この記事はParityやオープンソースコミュニティのメンバーが執筆した記事を参考に書いています。何か間違いや質問があれば、Twitter、または本記事にコメントにておしらせください。
参考資料
Analysis of Polkadot, https://medium.com/@saurabh.s.deshpande/analysis-of-polkadot-e155bdd1f8c7
A brief summary of Polkadot, https://www.parity.io/a-brief-summary-of-everything-substrate-polkadot/
How Nominated Proof-of-Stake will work in Polkadot, https://medium.com/web3foundation/how-nominated-proof-of-stake-will-work-in-polkadot-377d70c6bd43
Substrate has arrived, https://www.parity.io/substrate-has-arrived/