如何在DAML选择执行中获得时间戳差异

  • 本文关键字:时间戳 执行 DAML 选择 daml
  • 更新时间 :
  • 英文 :


我正试图一个接一个地执行两个选择。两者的执行速度如此之快,以至于它们具有相同的时间戳。

时间戳=1607079031453,因此,很难在表格中按升序排列。

你能建议为此做些什么工作吗?

DAML中的getTime不会给您"系统时间";,因为在分布式系统上不存在系统时间的概念。它给你一种叫做";分类帐时间;此处记录:https://docs.daml.com/concepts/time.html

分类帐时间由提交节点指定,是整个交易的属性。这意味着在单个事务中对getTime的所有调用都将返回相同的时间。

如果你在一笔交易中创建了两个相同的合同,那么只有两种方法可以区分它们:

  1. 事务树中的位置
  2. 合同Id

ContractId是一个散列,因此除了一些值之外,没有任何有用的排序属性可供稳定排序。如果要按创建合同的顺序进行订购,则需要使用交易树中的位置。

我不知道您将数据存储在哪里,也不知道您使用哪个API将其存储在那里,但假设您使用了对事务服务的订阅,该服务按顺序返回Create事件,并将其存储到SQL数据库中,您只需在表上放一个自动递增的整数列,然后使用该整数进行排序。

@bame的回答主要针对DAML语言,我将从Ledger API的角度来探讨它。

如果您的目标是评估一个选择有效地发生在另一个之后,这两个选择作为不同交易的一部分发生,您可以使用偏移量。

从客户端的角度来看,偏移实际上是一个不透明的二进制blob,但它们必须在字典上具有可比性:取两个偏移,最小的偏移将出现在偏移较高的偏移之前。

请注意,这仅适用于将两个选项作为两个不同事务的一部分进行的情况。如果它们发生在同一个事务中,则当您按预购遍历事务树时,之前发生的选择将出现在之前。

最新更新