暗号通貨のスケーラビリティについて考える

こちらはブロックチェーンアドベントカレンダー12日目の記事です。

https://qiita.com/advent-calendar/2017/blockchain

今年は価格の暴騰以外にも色々と話題を事欠かないBitcoinですが、その中でもSegwit、Segwit2Xは記憶に新しいのではないでしょうか。

Bitcoinにかぎらず、多くの暗号通貨はそのスケーラビリティに上限があり、それらに対して幾つかの解決策を見出そうとしているのが現状となります。今回はそのスケーラビリティに対する現状について、特にパブリックなチェーンに対するものを中心にまとめてみようと思います。

そもそもBlockchainのスケーラビリティとは

VISAカードなどが対処しているトランザクションは秒間4000~6000と言われていますが、Blockchainはその仕組み上、マイナー(PoSではバリデーター)の数が増えてもスケールするとは必ずしも言えず、Bitcoinのケースだと設計上10分間に1Blockの採掘を行う事となっています。

1Blockあたりに含められるトランザクション数は限度があり、おおよそ現時点では2000tx前後なので、1秒あたり3~4トランザクションが現状であるといえます。

参考:Blockあたり取引数の推移 https://blockchain.info/ja/charts/n-transactions-per-block

現実的な決済系を支えるためには、現時点から1000倍以上のスケーリングが必要となり、このスケーリングを中心としたカンファレンスが開かれているほどです。

Scaling Bitcoin https://scalingbitcoin.org/

余談ですが、Scaling Bitcoinは来年東京での開催とのことで楽しみですね。

大まかな分類

実際にスケーリングしようと考えると、その手法は下記のように分類できます。

大まかなBlockchainのスケーリング

Block timeの調整

これは非常に単純ですね。Block採掘に必要な時間を小さくすることで時間あたりのブロック数を引き上げる対策です。

例えばLitecoinはBitcoinと非常に近い構成の通貨ですが、Block timeはBitcoinの1/4ほどに設定されており、結果として処理可能なトランザクション数は4倍に増えています。

PoWではハッシュ計算(やその他の高コストな計算)のdifficultyを調整することで、Block time自体は調整可能ですが一般的にこれはセキュリティ的な強度とのトレードオフ関係にあります。

Blockあたりトランザクション数の改善

これも明快ですね。1Blockあたりのトランザクション数を如何に増やすかという視点でのスケーリングです。

8/1のSegwitはトランザクション展性の対応に加えて、こうしたスケーリングにも対応する対応策でした。Witnessと呼ばれる領域をトランザクションとは別領域に保持することで、1Blockのサイズを変えること無くトランザクションサイズを小さくしてブロックあたりトランザクション数を上げるものです。

またビッグブロック派のスケーリングは1Blockのサイズそのものを拡大していくことで1Blockにおけるトランザクション数を拡大しようという試みです。Bitcoin cashではすでにテストネットにて1GBという巨大なブロックを掘る実験に成功しており、これまでを遥かに上回るトランザクション数を実行できる可能性を示しました。

ブロックサイズが大きくなることは例えばネットワーク帯域次第では運用が難しいマイナーが出て来るなどのデメリットもありますが、今後の展開が気になります。

チェーン外でのスケーリング

オフチェーン処理

P2Pである特性を活かし、2者間の高頻度なトランザクションをチェーンの外側で実行するような手法です。

これらに該当するのはMicro Payment Channelや、その応用として最近メインネットでの検証が終わったBitcoinのLightning NetworkやEthereumのRaiden, μRaidenがこれらの事例になるかと思います。

これらのLayer 2 技術は、取引者間での複数回のトランザクションをMultisigとCLTVやCSV、Hashed Time Lockなどの技術を利用しトラストレスに二者間の複数回支払いを一つのトランザクションにまとめる手法をベースにしています。

具体的には、支払額より大きな金額をMultisigアドレス向けに送金してデポジット、そのMultisigアドレスから送金対象者に対しての送金トランザクションと、不正対策としての期限付きなデポジットの返金トランザクションを用意します。二者間での取引終了後、問題なければ最終結果のtx_outを記録したトランザクションをブロードキャストし、問題があれば返金トランザクションをブロードキャストすることでデポジットを取り戻します。

こうして複数回のトランザクションを一つのトランザクションとして記録することで、ブロックチェーン上のトランザクション数を省略できます。

詳しくは、弊社のmosa_siruがMicro Payment Channelについてまとめているのでそちらを参考にすると良いかもしれません。

サイドチェーン

オフチェーンと近い概念ですが、サイドチェーンという手法が存在します。

サイドチェーンとは、独自通貨とチェーン実装を持ったブロックチェーンを元のチェーン(メインチェーン)上の通貨との双方向移動を可能にした形でつなげた仕組みです。また、このチェーン間の双方向移動の仕組みを2-way peggingと呼びます。

有名なブロックチェーンでいうとBitcoinのサイドチェーンとして実装されたLiquidやRootstockが登場しています。Rootstockについて見てみると、これはBitcoinのサイドチェーン上でEthereum Virtual Machine(EVM)互換のVirtual Machineを稼働させようというプロジェクトですが、すでにMainNetの検証が始まっています。BitcoinでEthereum相当のスマートコントラクトが実装可能となるので個人的に注目しています。

Rootstock (RSK) https://www.rsk.co/

サイドチェーンは、メインチェーンの通貨との交換を保証しつつ、目的に応じた実装を許容する手法であるため、例えば高頻度な取引に特化したチェーン実装を持ち込むことなどを通じてメインチェーンの性能を拡張していくものとして期待できます。Liquidはまさにこの事例で、Trustlessでないという指摘はありつつも、Liquid上で高速に取引を実行し、Bitcoinのメインチェーンへ戻すことが可能な実装となっていますね。

特化型のチェーンとメインチェーンを2-way peggingで繋ぐことによるスケーリングにも今後注目したいところです。

番外編:DAG

特に自分が注目しているのはByteballですが、Directed Acyclic Graph(DAG、有向非巡回グラフ)を利用したPoWやPoSに依らないブロックチェーン様の仕組みが登場しています。

これらは、一定のルールの元でトランザクション間でDAGを構築していくことでブロックチェーン同等のトランザクションの存在証明や二重支払いの防止を提供する仕組みになります。Byteballに関して言えば、現状そのトランザクションの有効性を判定するWitnessと呼ばれるノード群が集権的になっていることやそのチェーンのサイズが課題ですが、とは言えPublicなチェーンにてトランザクションの確定性も持ち、PoWに依らないという特徴は一度学んでおくべきかと考えています。

余談ですが、Byteballの実装を見てると、トランザクションをMySQLにナイーブな形で記録するように見られるのですが、この辺のアーキテクチャ的なスケーラビリティが心配です。

DAGについて詳しくはByteballのWhite paperを参照してください。

Byteball White paper https://byteball.org/Byteball.pdf

最後に

以上、大雑把にスケーリング手法を5軸に分けて紹介しましたが、それぞれの技術は踏み込んで見るとより面白い技術が内在されています。

またこちらに紹介していない話として、bitFlyerのMiyabiやHyperLedger FablicなどPrivateChainについては別なスケーリング手法、Consensusアルゴリズムの採用などあり、一見の価値があると思います。

また、2018年はこうしたPublic Chainでのスケーリング手法それぞれが試され、成果が見えてくる年になるのではと予想しており楽しみにしています。