通过gRPC客户端在DA分类帐上执行CRUD

时间:2019-03-04 18:14:59

标签: php grpc daml

我正在编写DA Ledger客户端应用程序。之所以进展缓慢,是因为API文档没有说明如何组合提供的服务以在账本上执行简单的创建,读取,更新和删除操作。
例如,没有简单的服务允许客户直接读取给定方的所有联系人。首先,客户需要获取分类帐ID,然后(我认为)包裹ID。等等。有一项服务可以读取有效合约,但是无效合约又如何呢? 拥有一些说明和演示如何将对各种服务的调用组合到(例如)的文档会有所帮助。

  • 阅读给定方的所有合同
  • 执行给定合同上的选择
  • 创建新合同

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

1 个答案:

答案 0 :(得分:1)

阅读给定方的所有合同

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

创建合同或行使选择权

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

  • 通过CommandSubmissionService上的Submit提交创建或执行命令,然后等待CommandCompletionService上的成功或错误消息。注意,接收到这样的命令完成消息仅确认分类帐可以成功接收到该命令。它不会包含该命令的任何效果(创建和存档事件)。您将在上述TransactionService上再次收到这些邮件。

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

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