如何找出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: {}
  }
}

解决方法

因果单调性确保Ledger Time遵循因果关系。例如,合同中的while loop不可能在账本时间的fetch之前发生。确切的规则在here中进行了说明。

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

因此,在SDK 1.0中对模型进行了更改,以使适当的“分类帐时间”由提交命令的节点确定。不仅可以使用ledger_effective_timemin_ledger_time_abs参数给出最小范围。

因此,如果您使用的是SDK min_ledger_time_rel,或升级到SDK> = 1.0。

如果您已经在使用SDK> = 1.0,则可能会遇到一个错误,应将该错误报告给开发人员。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...