如何解决如何找出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_time
和min_ledger_time_abs
参数给出最小范围。
因此,如果您使用的是SDK min_ledger_time_rel,或升级到SDK> = 1.0。
如果您已经在使用SDK> = 1.0,则可能会遇到一个错误,应将该错误报告给开发人员。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。