如何找出daml中的因果单调性不一致错误?

How to figure out causal monotonicity inconsitency error in daml?

如果数据被修改,我会不断获取数据并启动新合同并更新模板。我收到以下错误,我无法确定它是在更新时发生的还是其他一些原因。

Error: 3 INVALID_ARGUMENT: Inconsistent: Causal monotonicity violated
    at Object.callErrorFromStatus (/home/prachi/Documents/waste-water-management/trip_daml/contractService/node_modules/@grpc/grpc-js/build/src/call.js:31:26)
    at Object.onReceiveStatus (/home/prachi/Documents/waste-water-management/trip_daml/contractService/node_modules/@grpc/grpc-js/build/src/client.js:176:52)
    at Object.onReceiveStatus (/home/prachi/Documents/waste-water-management/trip_daml/contractService/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:342:141)
    at Object.onReceiveStatus (/home/prachi/Documents/waste-water-management/trip_daml/contractService/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:305:181)
    at /home/prachi/Documents/waste-water-management/trip_daml/contractService/node_modules/@grpc/grpc-js/build/src/call-stream.js:124:78
    at processTicksAndRejections (internal/process/task_queues.js:79:11) {
  code: 3,
  details: 'Inconsistent: Causal monotonicity violated',
  metadata: Metadata {
    internalRepr: Map { 'content-type' => [Array] },
    options: {}
  }
}

因果单调性确保账本时间遵循因果关系。例如,合约上的 fetch 在账本时间中不可能发生在其 create 之前。精确规则解释 here.

在早期版本的 DAML 中,客户端应用程序必须通过名为 ledger_effective_time 或类似的 API 字段提供分类帐时间。该时间必须以这样一种方式设置,即交易的分类账时间等于或晚于该交易的任何输入合约的分类账时间。这在实践中确实非常困难,因为可以通过 ContractIds 和 Contract Keys 提取输入合约。

因此,SDK 1.0 中的模型发生了变化,合适的账本时间由命令提交到的节点决定。不仅可以使用 min_ledger_time_absmin_ledger_time_rel 参数给出最小界限。

那么,如果您使用的是 <1.0 版的 SDK,您将 运行 遇到旧的 Ledger Time 模型的已知困难。您要么需要非常小心地设置 ledger_effective_time,要么升级到 SDK >= 1.0.

如果您已经在使用 SDK >= 1.0,您可能 运行 遇到了错误,您应该向开发人员报告。