Scalar DL 3.5 をリリースしました
先日、Scalar DLの新しいマイナーバージョンであるScalar DL 3.5.0をリリースしました。3.5.0においては、マイナーバージョンのリリースではありますが、新しいコントラクトインターフェース等の後方互換性がある機能追加や多くの改善が行われています。このエントリにおいては、その中のいくつかの重要な機能や改善について共有したいと思います。Scalar DLの設計や実装に関しては、過去のブログを参照してください。(英語版とこちら)
新しいContractとFunctionのインターフェース
これは3.5.0においては最も大きなアップデートです。これまでは、Contractのベースインターフェースとして、Contractがありました。このContractは、多くの場合は十分であったものの、一部のケースでは柔軟性が低い、効率性が悪いという課題がありました。具体的には、Contractの引数や戻り値の型(また、ContractにおけるLedgerインターフェースが扱うデータの型)がJSONPというJSONライブラリのクラスに固定されてしまっていました。
新しいContractインターフェース(ContractBase)はそのクラスをGenericsによって抽象化し、任意の型を定義できるようになりました。現在のContractの仕組み上、事前に定義されたサブクラスを使う必要がありますが、より柔軟かつ効率的なContractを記述できるようになりました。古いContractは引き続き利用できますが、これから新しいScalar DLアプリケーションを開発する場合は、新しいインターフェースをご利用ください。
また、Functionにおいても同様の課題があったため、新しいFunctionインターエースも導入されました。
新しいインターフェースに関するさらなる情報については、以下のドキュメントを参照してください。
- https://github.com/scalar-labs/scalardl/blob/master/docs/how-to-write-contract.md
- https://github.com/scalar-labs/scalardl/blob/master/docs/how-to-write-function.md
新しいClientServiceFactory
ClientService クラスはLedgerやAuditor等のScalar DLサーバとやりとりするためのエントリポイントです。これまでは、ClientServiceインスタンスを生成するためにClientServiceFactoryというファクトリクラスを提供してましたが、そのクラスはリソース使用量の効率性の観点で少し課題がありました。例えば、gRPCのコネクションを使い回せる状況下でも使いまわしていませんでした。3.5は、この課題を解消すべくClientServiceFactoryを刷新し、コネクションや署名のためのオブジェクト等を可能な限り再利用するようになりました。
ClientServiceFactoryの使い方については以下のドキュメントを参照してください。
Contractにおいてputとscanができるようになりました
これまでは、Ledgerインターフェースにおけるscanオペレーションは、トランザクションの正しさを保証するために、読み込み専用のContractにおいてのみ使うことができました。つまり、putオペレーションとscanオペレーションをContractの中に書くことができませんでした。新しいバージョンにおいてはこの制限は撤廃され、Contractの中において、putとscanを書くことができるようになりました。
まとめ
多くの新機能や改良点が盛り込まれているScalar DLの新しいバージョン3.5をリリースしました。Scalar DLについては過去のブログやドキュメントを参照ください。試してみたい方はぜひコンタクトしてください。