Php 通过gRPC客户端对DA分类账进行CRUD

Php 通过gRPC客户端对DA分类账进行CRUD,php,grpc,daml,Php,Grpc,Daml,我正在编写DA分类账客户端应用程序。它的速度很慢,因为API文档没有解释如何结合提供的服务在分类账上进行简单的创建、读取、更新和删除。 例如,没有简单的服务允许客户端直接读取给定方的所有联系人。首先,客户需要获得分类帐id,然后(我认为)包id等等。有一个服务可以读取活动合同,但是不活动合同呢? 如果有一些文档可以解释和演示如何将对各种服务的调用组合到一起(例如): 阅读给定一方的所有合同 对给定的合同进行选择 创建新合同 我的应用程序是用php编写的。我不一定需要php示例,但我只想知道如

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

  • 阅读给定一方的所有合同
  • 对给定的合同进行选择
  • 创建新合同

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

阅读给定方的所有合同

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

创建合同或行使选择

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

  • 通过上的
    Submit
    提交创建或练习命令,并等待上的成功或错误消息。请注意,接收此类命令完成消息仅确认分类账可以成功接收该命令。它将不包含该命令的任何效果(创建和归档事件)。您将再次通过上述
    TransactionService
    收到这些信息

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


请注意,您可以从使用上面提到的
TransactionService
建立的分类账表示中获取进行选择所需的合同id。

有关如何使用API的一般问题,我相信您最好在DAML驱动的松弛通道上提问。我没有看到您的消息中提到任何包id或分类帐id。我在获取包id时遇到问题,因为php没有daml_lf。如何解析GetPackageResponse中的存档负载?没错,DAML-LF protos目前没有作为SDK的一部分提供,但我们计划很快将其包括在内。与此同时,你可以在这里找到它们:我从链接下载了DML-LF协议。我想它们不是我要找的。我想做的是访问函数库,这些函数是解析“GetPackageResponse”对象中的归档有效负载所需的。我可以从java绑定和node.js绑定中看到它被称为DAML\u LF。例如'damlf.ArchivePayload.parseFrom(getPackageResponse.getArchivePayload());'来自“PingPongMain.java”。我不认为这个函数依赖于DA Ledger服务器,Therefer与任何.proto文件都没有关系。无论如何,我认为我可以不使用DAML_LF函数,只使用从ListPackages()返回的最后一个包。我可以从my DAML代码中硬编码模块名和实体名。如果是这样,则不需要对存档有效负载进行解析。(正如他们在题为“使用分类账API与数字资产平台集成”的网络研讨会上所做的那样)