【问题标题】:Doing CRUD on the DA Ledger through a gRPC client通过 gRPC 客户端在 DA Ledger 上执行 CRUD
【发布时间】:2019-07-26 02:48:22
【问题描述】:

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

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

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

【问题讨论】:

  • 对于如何使用 API 的一般性问题,我相信您最好在 DAML Driven Slack 频道上提问。 digitalasset-dev.slack.com

标签: php grpc daml


【解决方案1】:

读取给定方的所有合同

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

创建合同或行使选择权

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

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

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

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

【讨论】:

  • 我在您的消息中没有看到任何关于包 ID 或分类帐 ID 的提及。我无法获取包 ID,因为 php 没有 daml_lf。如何从 GetPackageResponse 解析 archive_payload?
  • 您说得对,DAML-LF 原型目前并未作为 SDK 的一部分提供,但我们计划很快将其包含在内。与此同时,您可以在这里找到它们:digitalassetsdk.bintray.com/DigitalAssetSDK/com/digitalasset/…
  • 我从链接下载了 DML-LF 原型。我不认为他们是我要找的。我想做的是访问解析'GetPackageResponse'对象中的archive_payload所需的函数库。我可以从 java 绑定和 node.js 绑定中看到它被称为 DAML_LF。例如`DamlLf.ArchivePayload.parseFrom(getPackageResponse.getArchivePayload());'来自“PingPongMain.java”。我认为这个功能不依赖于 DA Ledger 服务器,并且与任何 .proto 文件无关。
  • 不管怎样,我认为我可以不用 DAML_LF 函数,只需使用从 ListPackages() 返回的最后一个包。我可以从我的 DAML 代码中硬编码模块名称和实体名称。如果是这样,则不需要解析 archive_payload。 (正如他们在题为“使用 Ledger API 与数字资产平台集成”的网络研讨会上所做的那样)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 2020-12-16
  • 2018-05-15
  • 2018-07-27
  • 2020-06-03
  • 1970-01-01
相关资源
最近更新 更多