通过 gRPC 客户端在 DA Ledger 上执行 CRUD

Doing CRUD on the DA Ledger through a gRPC client

我正在编写 DA Ledger 客户端应用程序。它进展缓慢,因为 API 文档没有解释如何组合提供的服务来在分类帐上进行简单的创建、读取、更新和删除。
例如,没有允许客户端直接读取给定方的所有联系人的简单服务。首先,客户端需要获取分类帐 ID,然后(我认为)包 ID。等等。有一个服务可以读取活跃的合同,但是不活跃的合同呢? 如果有一些文档可以解释和演示如何将对各种服务的调用组合到(例如):

我的应用程序正在 php 中编写。我不一定需要 php 中的示例,但我只是想知道如何使用提供的服务来完成简单的任务。

阅读指定方的所有合同

DAML 分类帐本质上是一个事件驱动的系统。因此,它不像传统数据库那样提供查询访问。相反,您的应用程序订阅 TransactionService using the GetTransactionsRequest and specifying LEDGER_BEGIN 作为 begin 偏移量。这将为您提供自分类帐启动以来发生的所有 CreatedArchived 事件。在您的应用程序中,您可以使用这些事件来构建分类帐的表示(内存中或持久化),然后您可以方便地查询。例如,您可以按合同类型填充字典,为每个 Created 事件添加一个条目,并在收到 Archived 事件时再次删除它。

创建合同或行使选择权

有两种方法可以做到这一点:

  • 通过 CommandSubmissionService and wait for a success or error message on the CommandCompletionService 上的 Submit 提交创建或练习命令。请注意,收到此类命令完成消息仅确认分类账可以成功接收该命令。它不会包含来自该命令的任何效果(创建和存档事件)。这些您将在上述 TransactionService 上再次收到。

  • 通过 CommandService 上的 SubmitAndWait 提交创建或练习命令。该服务在对服务器端的同步调用中结合了命令提交和完成,因此只有在命令被服务器接受或拒绝后才会 return 。使用这种命令提交方式通常更方便,因为它处理了前一种方法所需的一些异步事件处理。

请注意,您可以从使用上述 TransactionService 建立的分类帐表示中获取行使选择权所需的合约 ID。