汎用コントラクトを用いた ScalarDL アプリケーションを書く
このページは英語版のページが機械翻訳された ものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このドキュメントでは、汎用コントラクトを使用した ScalarDL アプリケーションを作成する方法について説明します。ScalarDL で汎用コントラクトを使用する際に、アプリケーションで ScalarDL と対話し、エラーを処理し、データを検証する方法を学びます。
ScalarDL Client SDK で汎用コントラクトを使用する
汎用コントラクトを使用する際、ScalarDL と対話するには、次の2つのオプションがあります。
- 汎用コントラクトおよびファンクションの使用に示されているように、コマンドを使用する
- Java Client SDK を使用する
コマンドを使用すると、アプリケーションを作成する必要がないため便利です。ただし、コマンドは実行ごとにプロセスを呼び出すため、時間がかかります。そのため、コマンドは主に汎用コントラクトをすばやくテストするために使用されます。ScalarDL ベースのアプリケーションを作成する場合は、より効率的な Client SDK を使用することをお勧めします。
Client SDK は Maven Central で入手できます。Gradle などのビルドツールを使用して、アプリケーションにインストールできます。たとえば、Gradle では、次のように build.gradle
に依存関係を追加できます。VERSION
は使用する ScalarDL のバージョンに置き換えてください。
dependencies {
implementation group: 'com.scalar-labs', name: 'scalardl-java-client-sdk', version: '<VERSION>'
}
汎用コントラクト用の Client SDK API は、GenericContractClientService というサービスクラスによって提供されます。以下は、GenericContractClientService
を使用してコントラクトを実行する方法を示したコードスニペットです。
// ClientServiceFactory should always be reused.
ClientServiceFactory factory = new ClientServiceFactory();
// ClientServiceFactory creates a new GenericContractClientService object in every create method call
// but reuses the internal objects and connections as much as possible for better performance and resource usage.
GenericContractClientService service = factory.createForGenericContracts(new ClientConfig(new File(properties));
try {
// create an application-specific argument that matches the generic contract specification
JsonNode jsonArgument = ...;
ContractExecutionResult result = service.executeContract(contractId, jsonArgument);
result.getContractResult().ifPresent(System.out::println);
} catch (ClientException e) {
System.err.println(e.getStatusCode());
System.err.println(e.getMessage());
}
factory.close();
GenericContractClientService
オブジェクトを作成するには、常に ClientServiceFactory
を使用する必要があります。ClientServiceFactory
は、GenericContractClientService
の作成に必要なオブジェクトをキャッシュし、指定された設定に基づいてそれらを再利用するため、ClientServiceFactory
オブジェクトは常に再利用する必要があります。
GenericContractClientService
は、Ledger や Auditor などの ScalarDL コンポーネントと対話して、証明書の登録、コントラクトの登録、コントラクトの実行、データの検証を行うスレッドセーフなクライアントです。汎用コントラクトを実行する場合は、JsonNode
引数を指定する必要があります。入力引数の仕様の詳細については、汎用コントラクトおよびファンクションのリファレンスガイドを参照してください。
カスタマイズしたコントラクトを GenericContractClientService
経由で登録および実行しないでください。適切なアセット管理が保証されないため、汎用コントラクトとカスタマイズしたコントラクトを一緒に使用することはサポートされていません。
ClientServiceFactory
および GenericContractClientService
の詳細については、scalardl-java-client-sdk
Javadoc を参照してください。
エラーを処理する
アプリケーションでエラーが発生した場合、Client SDK はステータスコードを含む例外と、エラーコードを含むエラーメッセージを返します。エラーの原因を特定するには、ステータスコードとエラーコードを確認する必要があります。ステータスコードとエラーコードの詳細については、ステータスコードおよびエラーコード