【问题标题】:How can i get timestamp difference in DAML choice execution?如何在 DAML 选择执行中获得时间戳差异?
【发布时间】:2020-12-04 12:06:09
【问题描述】:

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

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

你能建议任何解决这个问题的方法吗?

【问题讨论】:

  • 你从哪里得到这个时间戳?分享您的代码可能有助于回答您的问题。

标签: daml


【解决方案1】:

DAML 中的getTime 不会给您“系统时间”,因为在分布式系统上没有系统时间的概念。它为您提供了此处记录的称为“分类帐时间”的内容:https://docs.daml.com/concepts/time.html

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

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

  1. 在交易树中的位置
  2. 合同编号

Contract Id 是一个散列,因此除了 some 值之外没有任何有用的排序属性可供您稳定排序。如果要按照合约创建的顺序排序,需要使用交易树中的位置。

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      相关资源
      最近更新 更多