QuarkChainの説明、パート3:QuarkChainでのシャーディング—状態分割

(シャーディングの詳細なコンテキストを理解するには、パート2:シャーディング—ブロックチェーンの簡単な紹介と課題を確認してください)

QuarkChain Shardingの概要設計

既存のブロックチェーンモデルを前提として、QuarkChainは次のデザインで既存のモデルを強化します。

  • (状態からパーティションへ):QuarkChainはスマートコントラクトをパーティション分割します。つまり、リシャードイベントが発生した場合に異なるコントラクトにスマートコントラクトを配置します。スマートコントラクトにはコードとストレージが含まれ、データサイズはユーザーアカウントよりもはるかに大きくなる可能性があります(多数のアドレスとバランスのマッピングを備えたERC20を検討してください)。
  • (状態からパーティションへ):ユーザーアカウントをパーティション分割せず、ユーザーは、アカウントの状態(大部分はバランス)を、クロスシャードトランザクションを介して別のシャードに簡単に移動できます。これにより、秘密鍵を持つユーザーは、すべてのシャード内のすべてのリソース(スマートコントラクト)にアクセスできます。
  • (アトミック性):各スマートコントラクトにはシャードキー(コードベースのfullShardId)があり、同じシャードキーを持つすべてのスマートコントラクトのバッチ操作はアトミックです。また、スマートコントラクトは、異なるシャードキーを持つ別のスマートコントラクトにアクセスしようとすることは禁止されています。
  • (ロード/サイズのバランス):スマートコントラクトのシャードキーが均等に分散されると仮定することにより、スマートコントラクトは異なるシャードに均等に分割されることが期待されます。
  • (リシャード):低移行コストでシャードを追加するために、スマートコントラクトのシャードキーに従ってシャードを2つのシャードに分割します。これにより、他のリシャード前のシャードからのデータ移行が排除されるため、リシャードが簡素化されます。
  • (リシャード):スマートコントラクトの動作は、リシャードの前後で同じです。つまり、スマートコントラクトの結果を同じ値で読み取り、スマートコントラクトの結果を同じシステム状態の変更で書き込みます。リシャード。

QuarkChainのシステム状態と状態パーティション

QuarkChainでのCRUD操作のバッチの原子性をサポートするために、QuarkChainは各アドレスに32ビットのシャードキーを追加することにより、ユーザーアカウントとスマートコントラクトのアドレスを再定義します。

住所:= RIPEMD160(公開鍵)+シャード鍵、

ここで、+はデカルト積演算子、QuarkChainのアドレスは192ビットのデータであり、アドレスの最初の160ビットをQuarkChainのアドレスの受信者と呼びます。

QuarkChainネットワークのシャードの数(シャードサイズ)は2のべき乗であり、リシャード操作はネットワーク内のシャードの数を2倍にします。シャードサイズを指定すると、シャードは次のようにインデックス付けされます。

シャードID:=シャードキー%シャードサイズ。

シャードの状態はキーと値のマッピングです。キーはアドレスの受信者であり、値には

  • バランス;
  • ノンス;
  • コード;
  • ストレージ;
  • シャードキー。

ShardKeyは、キーと値のペアが作成されるときに設定され、それ以降は不変です。

アドレスに追加のシャードキーがあると、ユーザー(または受信者)は、単一の秘密キーですべてのシャードのすべてのアドレスを管理できます。

QuarkChainのトランザクション

残高移動トランザクション

残高転送トランザクションは、送信元および宛先アドレスに依存します。

  • (シャード内トランザクション):両方のアドレスが同じシャードIDを持っている場合(シャードキーが異なる場合でも)、転送はシャード内トランザクションであり、そのようなトランザクションは同じシャード内の受信者の残高のみを更新します。
  • (クロスシャードトランザクション):両方のアドレスのシャードIDが異なる場合、転送はクロスシャードトランザクションであり、トランザクションの原子性にはさらに調整が必要です。幸い、このようなトランザクションは、両方のシャードが同じ暗号通貨(QKC)を実行するため、従来のクロスチェーントランザクションよりもはるかに簡単です。クロスシャードトランザクションの詳細については、別の記事で説明します。

スマートコントラクトトランザクション

スマートコントラクトトランザクションは同じシャードで発行する必要があります。つまり、ソースユーザーアカウントのシャードIDと宛先スマートコントラクトは同じでなければなりません。スマートコントラクトは、同じシャードキーで別のスマートコントラクトを呼び出すことができます(別のスマートコントラクトの受信者、つまりEVMのアドレスをEVMのアドレスに提供して、EVMの下位互換性を維持します)。ただし、スマートコントラクトが異なるシャードキーを使用している場合、そのようなコントラクトコールは失敗します。このようなコールは、次のアセンブリコードでスマートコントラクトを呼び出すことと同等です。

PUSH 0x0
DUP1
逆転

同じシャードキーを持つスマートコントラクトは常に同じシャードにパーティション化されるため、スマートコントラクト(読み取り/書き込み)の動作は、システム状態がどのようにパーティション化されていても同じであることが保証されます(QuarkChainのReshardセクションを参照してください詳細)。

QuarkChainでのリシャード

リシャード操作は各シャードを2つの別々のシャードに分割し、シャードのサイズは結果として2倍になります。シャードのサイズを2倍にした後、ユーザーアカウント/スマートコントラクトの宛先は、新しいシャードIDの余分な有効ビットによって識別されます。ユーザーアカウント/スマートコントラクトのシャードキーが均一に分散されていると仮定すると、ユーザーアカウント/スマートコントラクトの半分を新しいシャードに分割し、残りを別のシャードに分割する必要があります。さらに、分割されたシャードには、コードをREVERTコードに置き換えてストレージを無効にすることにより、別の分割されたシャードのスマートコントラクトが含まれている場合があります。これらのダミースマートコントラクトにより、新しいシャード内のスマートコントラクトは、同じシャード内にあるが異なるシャードキーを持つスマートコントラクトの呼び出しに失敗します。

両方の分割されたシャードを処理する現在のノードの容量が不足している場合、新しいノードをネットワークに追加して、その状態を移行することで新しいシャードを処理できます。したがって、シャード/ノードの数が増えると、システム容量を増やすことができます。これはクラスターによって実現されます。クラスターについては、今後の記事で説明します。

QuarkChainでのシャードキーの選択

QuarkChainでの負荷分散の鍵は、すべてのスマートコントラクトをすべてのシャードに確実に分散させることです。スマートコントラクトの作成後、シャードキーは不変であるため、作成中のキーの選択は重要です。

まず、作成されるスマートコントラクトが他のスマートコントラクトに依存する場合、シャードキーは依存するスマートコントラクトと同じである必要があります。

次に、スマートコントラクトが他のスマートコントラクトに依存しない場合、ユーザー(またはウォレット)はシャードキーを自由に選択できます。そうしないと、システムがいくつかのルールを課す可能性があります。

  • ランダムに生成されたシャードキー。または
  • 送信元アドレスの任意の32ビット受信者。または
  • ウォレットのIPアドレス。

最初の2つの選択により、シャードキーが均一に分散される可能性があります。ただし、数百または数千の破片があると仮定します。ネットワーク内のスマートコントラクトにアクセスするユーザーは、頻繁にクロスシャードトランザクションを行うか、複数のバランスを維持する必要があります。これにより、シャーディングの効率が低下したり、ユーザーエクスペリエンスが悪化したりします。

IPアドレスを使用すると、スマートコントラクトを地理情報でグループ化することで問題を軽減できます。スマートコントラクトとのユーザーの相互作用が地理的に関連している場合(たとえば、地元の商品/サービスと相互作用する場合)、ユーザーは、ユーザーが居住または旅行する場所に関連するシャードの残高を維持するだけで、不要なクロスシャードトランザクションの多くとユーザーアカウント管理の簡素化。

QuarkChainとGoogleのBigTableの比較

QuarkChainのシャーディングデザインの多くは、GoogleのBigTableに触発されており、どちらも本質的にキーバリューストアであるため、多くの類似点を共有しています。次の表では、それらを並べて比較しています。

QuarkChainには、類似点の他に、BigTableといくつかの大きな違いがあります。

  • QuarkChainは、シャード間のトランザクションをネイティブにサポートします。これにより、あるシャードの1つのアカウントから別のシャードの別のアカウントに残高が転送されますが、BigTableは複数の行キーにわたるトランザクションをサポートしません。
  • BigTableでは、削除のために2つのテーブルが小さい場合、2つの隣接するタブレット(シャード)を1つのタブレットにマージできます。対照的に、削除操作(たとえば、自己破壊)はブロックチェーンではめったに使用されないため、マージ操作は必要ありません。これにより、QuarkChainのシステムモデルと脅威モデル(リプレイ攻撃など)が大幅に簡素化されます。

概要

既存のスケーラブルなシステムに着想を得て、新しいブロックチェーンシステムモデルを提案し、シャーディングスキームについて説明しました。さらに、提案されたモデルとGoogleのBigTableの比較を提示しました。次の記事パート4:QuarkChainでのシャーディング:コンセンサスでは、シャーディングをサポートするコンセンサスの構築方法と、対応するQuarkChainの脅威モデルについて説明します。

QuarkChainについて

QuarkChainは、水平スケーラビリティ技術を利用してブロックチェーンのスケーラビリティ問題に対処することを目指しています。 QuarkChainの使命は、世界中の誰もがいつでもどこでもブロックチェーン技術を使用できるようにすることです。 QuarkChainに興味がある場合は、次のリンクで詳細を確認してください。

ウェブサイトhttps://www.quarkchain.io

Telegram https://t.me/quarkchainio

Twitter https://twitter.com/Quark_Chain

Steemit https://steemit.com/@quarkchain

中https://medium.com/quarkchain-official

Reddit https://www.reddit.com/r/quarkchainio/

Weibo https://weibo.com/QuarkChain