Skip to content

Commit

Permalink
AUTO: Sync ScalarDL docs in Japanese to docs site repo
Browse files Browse the repository at this point in the history
  • Loading branch information
josh-wong committed Oct 30, 2024
1 parent e0edb9f commit 47ea17e
Showing 1 changed file with 36 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,10 @@ setContext(context);

## 複雑なコントラクトを作成する

このセクションでは、複雑なコントラクトの書き方について説明します。

### ネストされた方法でコントラクトを呼び出す

コントラクトのコードが 100 行を超える場合は、コントラクトで複数のことを実行している可能性があることを示す良い兆候です。
各コントラクトが 1 つのことだけを実行するモジュール化されたコントラクトを作成し、コントラクトを結合してより複雑なビジネス ロジックを表現することは良い習慣です。

Expand Down Expand Up @@ -151,6 +155,38 @@ public class StateUpdaterReader extends JacksonBasedContract {

ネストされた呼び出し内のすべてのコントラクトは、ScalarDL でトランザクション的に (ACID 方式で) 実行されるため、完全に成功するか完全に失敗するかに注意してください。

### 誰がアセットにアクセスできるかを管理する

`getClientIdentityKey()` を呼び出すと、コントラクト内でコントラクトを実行しているユーザーを示す ID 情報を取得できます。この機能は、特定のアセットにアクセスできるユーザーを制御するのに役立ちます。次の例は、state-xxx (xxx は証明書またはシークレットのホルダーのエンティティ ID) という名前の制限付きアセットのみを更新できるように変更された `StateUpdater` を示しています。

詳細については、使用している ScalarDL バージョンの [Javadoc](https://javadoc.io/doc/com.scalar-labs/scalardl-java-client-sdk/latest/index.html) のベースコントラクトのページと `ClientIdentityKey ` ページを参照してください。

```java
public class StateUpdater extends JacksonBasedContract {

@Nullable
@Override
public JsonNode invoke(Ledger<JsonNode> ledger, JsonNode argument, @Nullable JsonNode properties) {
if (!argument.has("state")) {
throw new ContractContextException("please set state in the argument");
}

ClientIdentityKey clientIdentityKey = getClientIdentityKey();
String entityId = clientIdentityKey.getEntityId();
String assetId = "state-" + entityId;
int state = argument.get("state").asInt();

Optional<Asset<JsonNode>> asset = ledger.get(assetId);

if (!asset.isPresent() || asset.get().data().get("state").asInt() != state) {
ledger.put(assetId, getObjectMapper().createObjectNode().put("state", state));
}

return null;
}
}
```

## まとめ

ScalarDL の適切なコントラクトを作成するためのベスト プラクティスを次に示します。
Expand Down

0 comments on commit 47ea17e

Please sign in to comment.