汎用コントラクトおよびファンクションのリファレンスガイド
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このガイドでは、汎用コントラクトおよびファンクションの仕様について説明します。
汎用コントラクトおよびファンクションのリスト
- オブジェクト管理
object.Put
コントラクト: オブジェクトのハッシュ値を持つオブジェクトを配置します。object.PutToMutableDatabase
ファンクション:object.Put
コントラクトと組み合わせて可変レコードを配置します。object.Get
コントラクト: オブジェクトを取得します。object.Validate
コントラクト: オブジェクトのハッシュ値を検証します。
- コレクション管理
collection.Create
コントラクト: コレクションを作成します。collection.Add
コントラクト: コレクションに ID を追加します。collection.Remove
コントラクト: コレクションから ID を削除します。collection.Get
コントラクト: コレクションを取得します。collection.GetHistory
コントラクト: コレクションの変更履歴を取得します。collection.GetCheckpointInterval
コントラクト: チェックポイント間隔を取得します。
object.Put
コントラクト
オブジェクトのハッシュ値を含むオブジェクト ID を入力します。オブジェクトがすでに存在する場合は、アセットレコードが更新されます。存在しない場合は、新しいアセットレコードが追加されます。
入力
入力として次のフィールドを持つ JSON オブジェクトを指定します。
フィールド | 説明 |
---|---|
object_id | 配置するオブジェクトの ID。 |
hash_value | 指定されたオブジェクトのハッシュ値。 |
metadata | (オプション) 追加情報を保存するための JSON オブジェクト。 |
出力
成功した場合は null 値が返されます。
例
scalardl execute-contract --properties client.properties \
--contract-id object.Put \
--contract-argument '{"objct_id": "a.txt", "hash_value": "a3ae11", "metadata": {"note": "something"}}'
object.PutToMutableDatabase
ファンクション
object.Put
コントラクトと組み合わせて、変更可能なレコードを ScalarDB テーブルに格納します。レコードがすでに存在する場合は、レコードが更新さ れます。存在しない場合は、新しいレコードが追加されます。このファンクションの呼び出しはオプションです。
入力
入力として次のフィールドを持つ JSON オブジェクトを指定します。
フィールド | 説明 |
---|---|
namespace | 名前空間名の文字列値。 |
table | テーブル名の文字列値。 |
partition_key | パーティションキー列の JSON オブジェクトの配列。 |
clustering_key | クラスタリングキー列の JSON オブジェクトの配列。 |
columns | 通常の列の JSON オブジェクトの配列。 |
各列は、次のフィールドを持つ JSON オブジェクトです。
フィールド | 説明 |
---|---|
column_name | 列名の文字列値。 |
value | JSON 値。 |
data_type | ScalarDB でサポートされているデータ型の大文字と小文字を区別しない文字列値。 |
出力
成功した場合は null 値が返されます。
例
scalardl execute-contract --properties client.properties \
--contract-id object.Put \
--contract-argument '{"object_id": "a.txt", "hash_value": "a3ae11"}' \
--function-id object.PutToMutableDatabase \
--function-argument '{...}'
ファンクションの引数については、次の JSON オブジェクトの例を参照してください。
{
"namespace": "myns",
"table": "objects",
"partition_key": [
{ "column_name": "object_id", "value": "a.txt", "data_type": "TEXT" }
],
"clustering_key": [
{ "column_name": "version", "value": "1234aef", "data_type": "TEXT" }
],
"columns": [
{ "column_name": "status", "value": 3, "data_type": "INT" },
{ "column_name": "size", "value": 10.000, "data_type": "DOUBLE" },
{ "column_name": "timestamp", "value": 123456789, "data_type": "BIGINT" },
{ "column_name": "comment", "value": "hash-registered", "data_type": "TEXT" }
]
}
object.Get
コントラクト
指定された ID を持つオブジェクトを取得します。指定されたオブジェクトが存在しない場合は、null 値が返されます。
入力
入力として次のフィールドを持つ JSON オブジェクトを指定します。
フィールド | 説明 |
---|---|
object_id | 取得するオブジェクトの ID。 |
出力
次のフィールドを持つ JSON オブジェクトが返されます。
フィールド | 説明 |
---|---|
object_id | 取得するオブジェクトの ID。 |
hash_value | オブジェクトのハッシュ値。 |
metadata | 存在する場合は JSON オブジェクト。 |
例
scalardl execute-contract --properties client.properties \
--contract-id object.Get \
--contract-argument '{"objct_id": "a.txt"}'
Contract result:
{
"object_id" : "a.txt",
"hash_value" : "a3ae11",
"metadata" : {
"note" : "something"
}
}
object.Validate
コントラクト
オブジェクトの指定されたハッシュ値が、オブジェクトの保存されたハッシュ値と同じかどうかを検証します。デフォルトでは、最新のハッシュ値から指定された数のハッシュ値のみが検証されます。all
オプションを使用すると、指定されたバージョンの数が ScalarDL に保存されているバージョンの数と一致するかどうかも検証できます。
入力
入力として次のフィールドを持つ JSON オブジェクトを指定します。
フィールド | 説明 |
---|---|
object_id | 検証するオブジェクトの ID。 |
versions | 検証するバージョンを記述する JSON オブジェクトのリスト。最新から最古までの降順です。各 JSON オブジェクトには、version_id 、hash_value 、metadata (オプション) の 3 つのプロパティがあります。 |
options | (オプション) オプションを指定するための JSON オブジェクト。使用可能なオプション:all : ScalarDL アセット内 のすべての世代と世代の数を検証するかどうかを指定するブール値。verbose : 問題のあるバージョンの詳細情報を表示するかどうかを指定するブール値。 |
出力
次のフィールドを持つ JSON オブジェクトが返されます。
フィールド | 説明 |
---|---|
status | オブジェクトのステータス。correct または faulty のいずれか。 |
details | オブジェクトのステータスに関する詳細なメッセージ。 |
faulty_versions | デフォルトでは障害のあるバージョン ID の配列、または verbose オプションが指定されている場合は障害のあるバージョンの JSON オブジェクト。 |
corresponding_given_versions | ScalarDL のバージョンと一致しない、指定されたバージョンの JSON オブジェクトの配列 (verbose オプションが指定されている場合のみ)。 |
faulty_versions
と corresponding_given_versions
の各 JSON オブジェクトには、入力バージョンと同じフィールドがあります。
例
指定されたハッシュ値がすべて Ledger 内のハッシュ値と同じである場合、次の結果が返されます。
scalardl execute-contract --properties client.properties \
--contract-id object.Validate \
--contract-argument \
'{"object_id": "a.txt",
"versions": [
{"version_id": "v5", "hash_value": "a3ae11", "metadata":{...}},
{"version_id": "v4", "hash_value": "ea21f5", "metadata":{...}},
{"version_id": "v3", "hash_value": "440f28", "metadata":{...}}
]
}'
Contract result:
{
"status" : "correct",
"details" : "The status is correct.",
"faulty_versions" : [ ]
}
異なるハッシュ値が見つかった場合は、次の結果が返されます。
scalardl execute-contract --properties client.properties \
--contract-id object.Validate \
--contract-argument \
'{"object_id": "a.txt",
"versions": [
{"version_id": "v5", "hash_value": "xxxx11", "metadata":{...}},
{"version_id": "v4", "hash_value": "ea21f5", "metadata":{...}},
{"version_id": "v3", "hash_value": "xxxx28", "metadata":{...}}
]
}'
Contract result:
{
"status" : "faulty",
"details" : "A faulty version is found.",
"faulty_versions" : [ "v5", "v3" ]
}
verbose
オプションが指定され、異なるハッシュ値とメタデータが見つかった場合は、次の結果が返されます。
scalardl execute-contract --properties client.properties \
--contract-id object.Validate \
--contract-argument \
'{"object_id": "a.txt",
"versions": [
{"version_id": "v5", "hash_value": "xxxx11", "metadata": { "note": "foo" }},
{"version_id": "v4", "hash_value": "ea21f5", "metadata": { "note": "bar" }},
{"version_id": "v3", "hash_value": "440f28", "metadata": { "note": "bug" }}
],
"options": {"all": true}
}'
Contract result:
{
"status": "faulty",
"details": "A faulty version is found.",
"faulty_versions" : [
{"version_id": "v5", "hash_value": "a3ae11", "metadata": { "note": "foo" }},
{"version_id": "v3", "hash_value": "440f28", "metadata": { "note": "baz" }}
]
"corresponding_given_versions" : [
{"version_id": "v5", "hash_value": "xxxx11", "metadata": { "note": "foo" }},
{"version_id": "v3", "hash_value": "440f28", "metadata": { "note": "bug" }} ]
}
all
オプションが指定され、指定されたバージョンの数が ScalarDL に保存されているバージョンの数と異なる場合は、次の結果が返されます。
scalardl execute-contract --properties client.properties \
--contract-id object.Validate \
--contract-argument \
'{"object_id": "a.txt",
"versions": [
{"version_id": "v5", "hash_value": "a3ae11", "metadata":{...}},
{"version_id": "v4", "hash_value": "ea21f5", "metadata":{...}},
{"version_id": "v3", "hash_value": "440f28", "metadata":{...}}
],
"options": {"all": true}
}'
Contract result:
{
"status" : "faulty",
"details" : "The number of versions is mismatched.",
"faulty_versions" : [ ]
}