在发布单个FungibleAsset(例如Cash.State)并且预计会有许多计划流量以不同量使用它的情况下,设置方案的最佳方法是什么?虽然我了解CashSelection实施有助于创建更改,但它是否可以容纳多个计划的流同时访问各州的情况?例如,如果存在一个100美元的Cash.State,并且为每个消费2美元设置了50个ScheduledFlow,那么如何避免公证人意外地发现已经被消费的国家的情况?
当在单个节点上背对背启动多个流并针对单个或一小组状态时,会看到类似的异常。我正在通过CentOS Linux在Java版本1.8.0_131的开源Corda 3.3上运行。
这是我看到的例外:
[WARN] 2018-11-12T18:53:03,422Z [节点线程2] flow。[1ecbfdff-a0b6-4e0e-94d1-95c432822a02] .run-流程结束于 异常{} net.corda.core.flows.NotaryException:无法公证 transaction2DFF6E03F64B7445A49191EDBEF70B3054BCF37F541A2FBA012A63FB8F5DEA53: 一个或多个输入状态已在另一笔交易中使用 net.corda.core.flows.NotaryFlow $ Service.call(NotaryFlow.kt:149) 〜[corda-core-3.3-corda.jar :?]在 net.corda.core.flows.NotaryFlow $ Service.call(NotaryFlow.kt:133) 〜[corda-core-3.3-corda.jar :?]在 net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:96) [corda-node-3.3-corda.jar :?]在 net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:44) [corda-node-3.3-corda.jar :?]在 co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) [quasar-core-0.7.9-jdk8.jar:0.7.9]在 co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) [quasar-core-0.7.9-jdk8.jar:0.7.9]在 co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) [quasar-core-0.7.9-jdk8.jar:0.7.9]在 co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) [quasar-core-0.7.9-jdk8.jar:0.7.9]在 java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) [?:1.8.0_192]在 java.util.concurrent.FutureTask.run(FutureTask.java:266)[?:1.8.0_192] 在 java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_192]在 java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_192]在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_192]在 java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_192]在 net.corda.node.utilities.AffinityExecutor $ ServiceAffinityExecutor $ 1 $ thread $ 1.run(AffinityExecutor.kt:62) [corda-node-3.3-corda.jar:?]
答案 0 :(得分:0)
该平台提供了一种软锁定机制,以防止多个流试图同时花费相同的FungibleAsset
。在NodeVaultService.tryLockFungibleStatesForSpending
中,我们有以下行:
softLockReserve(lockId, claimedStates.map { it.ref }.toNonEmptySet())
您能否更新您的问题以显示如何从Vault检索FungibleAsset
?