ScalarDL 設計ドキュメント
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
この設計ドキュメントでは、ScalarDL の設計と実装について簡単に説明します。ScalarDL の背景と目的については、ScalarDL の概要を参照してください。
設計目標
ScalarDL の主な設計目標は、データの改ざん検知性と高性能のスケーラビリティの両方を実現することです。ScalarDL は、ACID 準拠、正確なファイナリティ、線形化可能な一貫性、および高可用性を提供します。ScalarDL のパフォーマンスは、基盤となるデータベースのパフォーマンスに大きく依存しますが、疎結合アーキテクチャのため、基盤となるデータベースを要件に適したものに置き換えることが可能です。使いやすさとシンプルさも、ScalarDL をスケーラブルにするための鍵となるため、主な設計目標の一部です。
故障モデル
ScalarDL は、ビザンチン故障を扱う以前の研究の標準的な仮定に則っています。1 そのため、ScalarDL は、ビザンチン故障ノード (たとえば、Ledger コンポーネント) が任意に動作すると想定しています。つまり、故障の動作に関する仮定はありません。
データモデル
ScalarDL は、データをアセットの集合として抽象化します。アセットは任意のデータですが、データの履歴として考える方が適しています。たとえば、アセットは有形 (不動産やハードウェア) から無形 (契約や知的財産) まで多岐にわたります。
アセットは1つ以上のアセットレコードで構成され、各アセットレコードはアセット ID と世代で識別されます。世代が M
のアセットレコードには、世代が M-1
の以前のアセットレコードの暗号化ハッシュがあり、ハッシュチェーンを形成します。そのため、チェーンをトラバースすることで、中間のアセットレコードの削除または更新を検出できます。
さらに、複数のアセット間にはチェーン構造が存在します。このチェーンは、ScalarDL では「コントラクト」と呼ばれる ビジネスロジックまたはアプリケーションロジックによって構築される関係です。たとえば、銀行アプリケーションでは、あるアカウントから別のアカウントに送金されると、両方のアカウントが更新され、アセット間にこのような関係が作成されます。
コントラクト
ScalarDL は、コントラクト (スマートコントラクトとも呼ばれます) を電子署名されたビジネスロジックとして管理します。コントラクトとその引数は、コントラクト所有者の秘密鍵で電子署名され、ScalarDL に渡されます。このメカニズムにより、コントラクトは所有者のみが実行でき、システムはデータの改ざんなどの悪意のあるアクティビティを検出できます。
ユーザーは、アセットの読み取りやアセットの書き込みなどのインターフェースを使用して、コントラクトに任意のビジネスロジックを定義できます。たとえば、銀行アプリケーションでは、口座の作成、預金、引き出し、支払いをコントラクトとして記述できます。詳細については、シンプルな銀行口座アプリケーションのサンプルを参照してください。