最近話題の分散型台帳 Scalar DLT について調べてみた（基礎編）

[株式会社Scalar](https://scalar-labs.com/)の開発している分散型台帳ソフトウェア、Scalar DLTについて調べてみました。
エンタープライズシステムでのユースケースを前提に開発されているようで、分類としては Hyperledger Fabric や Enterprise Ethereum に近い感じです。

# Scalar DLT とは
Scalar DLTは主に以下の２つで構成されています。

- 分散データベースソフトウェアである Scalar DB
- 分散型台帳ソフトウェアである Scalar DL

## Scalar DB
Scalar DBはACIDに準拠していない分散データベース/ストレージをACID準拠にするライブラリです。
現在はApache Cassandraに対応しており、一緒に使用することにより線形にスケールが可能で可用性も担保されます。

## Scalar DL
Scalar DLはブロックチェーンにインスパイアされた分散型台帳で、以下の特徴があります。

- デジタル署名、ハッシュチェーン、トランザクション順序の決定性、非中央集権的構造によって高い改ざん耐性を実現
- スケーラブルで可用性の高いACID準拠なスマートコントラクトの実行
- ファイナリティが存在し、リニアライザブルな一貫性が保たれる

細かく説明をしていこうとすると結構大変なので、詳しく知りたい方はGitHubにあるDesign Docを読まれることをオススメします。

[Scalar DL Docs](https://scalardl.readthedocs.io/en/latest/)

## ACIDとは
「ACID」という単語が出てきたのでここで少し補足したいと思います。
ACIDとは「トランザクション処理の信頼性を保証するために求められる性質」の事で、ACID準拠という事は以下に挙げる４つの項目の性質を満たしている状態と言えます。
※詳しくは[Wikipedia](https://ja.wikipedia.org/wiki/ACID_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%A7%91%E5%AD%A6))もご覧下さい。

- 原子性(Atomicity)
- 一貫性(Consistency)
- 独立性(Isolation)
- 永続性(Durability)

既存のMySQLやOracleなどのデータベースはACID準拠なのですが、分散データベースなどでは必ずしも準拠しているとは限りません。
準拠していないとなると、トランザクションの信頼性が下がってしまうのでエンタープライズでの利用は難しくなってしまいます。
そんな中で分散型で可用性も有りACID準拠という要件を実現しているのは凄いことではないでしょうか。



## Scalar DLT の全体図
上記２つのソフトウェアが組み合わさることにより「高い改ざん耐性と高いスケーラビリティの両立」が実現されています。
そこに以下のようなツール（詳細は後述）が付属したパッケージ全体をScalar DLTと呼びます。

- Sandbox
- Java, JavaScript, Node.js に対応したSDK
- エミュレータ
- エクスプローラー

なお、全体イメージは[公式ページ](https://scalar-labs.com/product/)から引用した以下の画像も参考にしてください。
![scalar-dlt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427707/959243e2-130e-f39a-8981-02da1e713b3f.png)

## 付属ツール
SandboxはScalar社がホスティングするScalar DLの共有環境で、実際の環境に近い状態でスマートコントラクトの実行が可能になっています。
実際の使い方はSDKの使い方と併せて後述します。

SDK は Java, Web(JavaScript), Node.js 向けのものが提供されており、以下の処理が簡単に実行可能です。

- クライアントの証明書の登録
- コントラクトの登録
- コントラクトの一覧表示
- コントラクトの実行
- 資産（アセット）が改ざんされていないかの検証

エミュレータはローカル環境でコントラクトの実行をテストできるツールです。
書き換え可能なローカルメモリ上のデータ構造を用いることにより、効率的なコントラクト開発が行えます。
putやgetなどのコマンドとそれに対応したコントラクトが予め登録されているため、お試しも非常に簡単です。
更にはファイルを読み込むことで一連の処理が実行可能なのでテストのコストも低いです。
こちらの詳しい使い方は次回以降で触れたいと思います。

エクスプローラーは資産（アセット）の現在値や履歴の取得、一覧表示、或いは改ざんされていないかの検証が可能です。
コマンドラインインターフェースなので、他のプログラムやスクリプトなどからの呼び出しが容易になっています。

## 他のブロックチェーンとの違い
一番の特徴は「対改ざん性とスケーラビリティの両立」になります。
その実現のためにブロックチェーンではなくDAG構造を採用しており、依存関係の無いトランザクションを並列処理することが可能になっています。
また非同期的にコンセンサスをとる仕組みなので、ハードウェアリソースを追加すれば処理速度を線形的に向上できる仕組みになっています。
上記の理由からTPSを向上させるのが容易であり、エンタープライズシステムに適していると言えます。

## 注意点
Scalar DBはApache License 2.0で公開されていますが、Scalar DLは現在のところは商用ライセンスのみなので利用するには[問い合わせ](https://scalar-labs.com/contact_us/)が必要だそうです。

## 情報の入手先
私が調べてみた範囲で情報の入手先をまとめてみました。

- [株式会社Scalar](https://scalar-labs.com/)
- [Twitterアカウント](https://twitter.com/scalar_labs)
- [Scalar DBの GitHub ページ](https://github.com/scalar-labs/scalardb) 
- [Scalar DLの GitHub ページ](https://github.com/scalar-labs/scalardl) 
- [Scalar DBのドキュメント](https://scalardb.readthedocs.io/en/latest/)
- [Scalar DLのドキュメント](https://scalardl.readthedocs.io/en/latest/)
- [INDETAIL社によるScalar DB入門](https://github.com/indetail-blockchain/getting-started-with-scalardb)
- [INDETAIL社によるScalar DL入門](https://github.com/indetail-blockchain/getting-started-with-scalardl)

と、リンク先をご覧になればわかりますが、ほぼ英語のドキュメントばかりです。
なのでここら辺の内容も回を分けて記事にしていければと思います。

# まとめ
というわけでScalar DLTについての情報でした。
エンタープライズシステムでのユースケースを前提にされているだけあって、とても考えられて設計されているのがわかりますね。
「対改ざん性とスケーラビリティの両立」というところは要注目です。
ツールも色々揃っているので、次回はそこら辺に触れていければと思います。