Sharding②-IOST

Immm
TeamGeekHash
Published in
4 min readFeb 11, 2019

前回の記事で述べたようにシャーディングを行うためにはシャードごとにハッシュパワーを均一にしなくてはならず、また、特定のノードがどのシャードに割り振られるかを容易に予測できなくする必要があります。
この記事では、一例としてIOSTがどのようにshardingを行なっているのかを解説していきます。

Efficient Distributed Sharding

Efficient Distributed ShardingはIOSTで採用している sharding方式です。1Distributed Randomness Protocol(DRP)
2悪意のある、もしくは失敗したノードが存在する場合の対策
3シャード構成方式
4shard間トランザクションの処理

1Distributed Randomness Protocol(DRP)

IOSTではノードのシャードの割り当てとリーダーの選定において、より効率的にランダム性を持たせるために、Distributed Randomness Protocol(DRP)を用いてランダム値を生成しています。より詳細な説明は省きますが、このプロトコルにおいては、ランダム性の生成とランダム性検証の2段階で構成されており、最初にランダムで作成したグループを作成し、各サーバーがグループごとに暗号化された入力値を共有します、次にクライアントが署名を行なったのちにサーバーが自分の共有した情報を複合し、クライアントに送信します。これによってランダム値の生成前に各グループの一員がランダム値の全体を知ることなく、ランダム値を生成することができます。

2悪意のある,失敗したノードが存在する場合の対策

この方法ではクライアントがまとめてDRPを実行する必要があるため、悪意のある、もしくは失敗したノードがある場合には機能しません。
そのため、DRPを実行するリーダーの選出に際してバックアップが可能な設計を用意しています。選出フェーズごとにバリデーターの中から1つのリーダーと2つのバックアップリーダーが選出され、リーダーがDRPの実行に失敗するとバックアップリーダーが次のリーダーとなり、全ての選出されたリーダーが失敗した場合選出フェーズがやり直されます。これによってDRPの実行が行わなかったとしても継続的に次のリーダーを選出することができ、悪意のあるバリデータがいた場合は次の選出から除外されます。

3シャード構成方式

IOSTでは動的なシャード構成方式を利用しており、シャードの構成が変更されていきます。IOSTではTransEpochを用いており、シャードの変更が行われている最中においてシステムが維持できなくなるのを防ぐために、シャードの変更されるバリデータの数を1/3以下にし、変更をランダムにすることで、変更中のシステムの維持と安全性の保障を行なっています。

4shard間トランザクションの処理

シャード間のトランザクションはOmniledgerアルゴリズムを変形したAtomix in the UTXO state modelを使用することでサポートしています。
簡単に説明すると、ABのシャード間のトランザクションが発生した時、A内の全てのノードで承認を行い、その後にBのブロックチェーンにトランザクションを送信、Bの全てのノードで承認が行われた時のみトランザクションが終了し、この最中で承認を受けられなかった場合、元のノードに資金が返されます。

より詳細な説明は以下を参照ください。

https://github.com/iost-official/Documents/blob/master/Technical_White_Paper/EN/Tech_white_paper_EN.md#efficient-distributed-sharding

--

--