Contract と Function のライフサイクルを管理する
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このドキュメントでは、ScalarDL における Contract と Function のライフサイクルについて、作成や登録からバグ修正や機能追加が必要な場合の更新まで説明します。
作成
ScalarDL では、ビジネスロジックを Contract と Function という2種類の Java プログラムとして実装します。Contract は Ledger 内の改ざん検知可能なアセットレコードを管理し、Function は Contract と連携して ScalarDB を通じた外部データベース内の可変レコードを管理します。
Contract または Function を作成するには、Contract の場合は JacksonBasedContract、Function の場合は JacksonBasedFunction などの定義済みベースクラスを拡張する Java クラスを作成します。
Contract と Function の書き方の詳細については、以下を参照してください:
登録
Contract または Function を作成した後、使用する前に ScalarDL に登録する必要があります。
Contract を登録するには:
scalardl register-contract --properties client.properties --contract-id StateUpdater --contract-binary-name com.org1.contract.StateUpdater --contract-class-file build/classes/java/main/com/org1/contract/StateUpdater.class
Function を登録するには:
scalardl register-function --properties client.properties --function-id test-function --function-binary-name com.example.function.TestFunction --function-class-file /path/to/TestFunction.class
登録コマンドとオプションの詳細については、ScalarDL クライアントコマンドリファレンスを参照してください。
Contract の登録制約
Contract を登録する際、以下の制約に注意してください:
- 一意な Contract ID: 各 Contract には一意な Contract ID が必要です。既に存在する ID で Contract を登録しようとすると、登録は失敗します。
- 一貫したバイナリ名とバイトコード: あるバイナリ名が特定のバイトコードで既に登録されている場合、同じバイナリ名で異なるバイトコードを登録できません。ただし、同じバイナリ名で同じバイトコードであっても、異なるクライアントや異なる Contract ID であれば登録できます。
Function の登録制約
Contract とは異なり、Function は同じ Function ID で再登録できます。動作は ScalarDL へのアクセス方法によって異なります:
- 特権ポート (デフォルト: 50052): Function は常に制限なく登録および上書きできます。
- 非特権ポート (デフォルト: 50051): Function の登録と上書きは管理者の設定によって制御されます。詳細については、名前空間に制限付きでアクセスするを参照してください。