选择时出现无法恢复的检查点错误.摘要现金选择.未消耗现金状态用于支出 - 硬币选择失败



每当硬币选择失败时,都会抛出"unrestorable checkpoint"异常。

我正在测试计划的事件功能,当创建IOU时,事件被安排在特定时间付款。 从错误日志(见下文)中,每当硬币选择失败时,都会引发"无法恢复的检查点"异常,但该过程继续运行,重试直到硬币选择成功。

异常堆栈没有提供有关错误可能在哪里的信息,如何调试?

@Suspendable
public List<StateAndRef<Cash.State>> getFunds(Set<AbstractParty> issuers, Amount<Currency> amt) {
try {
AbstractCashSelection db = AbstractCashSelection.Companion.getInstance( () -> {
try {
return this.serviceHub.jdbcSession().getMetaData();
}catch(Exception e) {
throw new RuntimeException("getFunds error", e);
}
});
List<StateAndRef<Cash.State>> funds = db.unconsumedCashStatesForSpending(this.serviceHub, amt, issuers, null, this.flowRunId, new HashSet<OpaqueBytes>());
funds.forEach(s -> {
states.put(StateAndRefSerializer.getRef(s), s);
});
return funds;
}catch(Exception e) {
throw new FlowException("getFunds error", e);
}
}

日志文件中的错误:

信息 ] 2019-07-21T20:52:07,683Z [节点线程-1] IOU_nextScheduledActivity.info - com.example.iou.autopaymentImplis 计划于 2019-07-21T20:52:07.678Z, flowRef=com.example.iou.autopaymentImpl {actor_id=internalShell, actor_owning_identity=O=查理,L=纽约,C=美国, actor_store_id=NODE_CONFIG, 光纤 id=10000002, flow-id=0eebd34b-92be-4af5-a650-2d49675702c3, invocation_id=35bd0d5c-ea00-4a7d-972d-ff353bb9d2ec, invocation_timestamp=2019-07-21T20:51:57.700Z, origin=internalShell, session_id=13825f94-0f7c-4df7-80e2-c73511031bc7, session_timestamp=2019-07-21T20:51:57.304Z, 线程 id=229, tx_id=D0EDC810EF00AFC9E99494F2DEF50AD040F439DAE3FC554BBC7698B9DCBA6073} [信息] 2019-07-21T20:52:07,699Z [节点线程-1] corda.flow.notariseAndRecord - 本地记录的交易 成功。{actor_id=internalShell, actor_owning_identity=O=查理,L=纽约,C=美国, actor_store_id=NODE_CONFIG, 光纤 id=10000002, flow-id=0eebd34b-92be-4af5-a650-2d49675702c3, invocation_id=35bd0d5c-ea00-4a7d-972d-ff353bb9d2ec, invocation_timestamp=2019-07-21T20:51:57.700Z, origin=internalShell, session_id=13825f94-0f7c-4df7-80e2-c73511031bc7, session_timestamp=2019-07-21T20:51:57.304Z, 线程 id=229, tx_id=D0EDC810EF00AFC9E99494F2DEF50AD040F439DAE3FC554BBC7698B9DCBA6073} [信息] 2019-07-21T20:52:07,840Z [池-6线程-1] IOU_nextScheduledActivity.info - com.example.iou.autopaymentImplis 计划于 2019-07-21T20:52:07.839Z, flowRef=com.example.iou.autopaymentImpl [INFO ] 2019-07-21T20:52:07,891Z [节点线程-1] corda.flow.call - 自动付款 由可调度事件 {fiber-id=10000003 触发, flow-id=c8d1be17-aa32-4a73-b031-fff2707ed877, invocation_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, invocation_timestamp=2019-07-21T20:52:07.842Z,原点=调度程序, session_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, session_timestamp=2019-07-21T20:52:07.842Z, 线程 id=229} [信息] 2019-07-21T20:52:07,897Z [节点线程-1] corda.flow.info - 流 自动付款开始 {fiber-id=10000003, flow-id=c8d1be17-aa32-4a73-b031-fff2707ed877, invocation_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, invocation_timestamp=2019-07-21T20:52:07.842Z,原点=调度程序, session_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, session_timestamp=2019-07-21T20:52:07.842Z, 线程 id=229} [信息] 2019-07-21T20:52:07,912Z [节点线程-1] corda.flow.info - 自动付款 已完成 {fiber-id=10000003, flow-id=c8d1be17-aa32-4a73-b031-fff2707ed877, invocation_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, invocation_timestamp=2019-07-21T20:52:07.842Z,原点=调度程序, session_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, session_timestamp=2019-07-21T20:52:07.842Z, 线程 id=229} [信息] 2019-07-21T20:52:07,915Z [节点线程-1] corda.flow.createSubflowObject - 自动支付以调用流 com.charlie.iou.flows.SettleIOUInitiatorImpl {fiber-id=10000003, flow-id=c8d1be17-aa32-4a73-b031-fff2707ed877, invocation_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, invocation_timestamp=2019-07-21T20:52:07.842Z,原点=调度程序, session_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, session_timestamp=2019-07-21T20:52:07.842Z, 线程 id=229} [信息] 2019-07-21T20:52:07,922Z [节点线程-1] corda.flow.info - 流 SettleIOU startred {fiber-id=10000003, flow-id=c8d1be17-aa32-4a73-b031-fff2707ed877, invocation_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, invocation_timestamp=2019-07-21T20:52:07.842Z,原点=调度程序, session_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, session_timestamp=2019-07-21T20:52:07.842Z, 线程 id=229} [信息] 2019-07-21T20:52:08,062Z [节点线程-1] corda.flow.lambda$eval$3 - txbuilder::build command, cmd=Move, keys=["GfHq2tTVk9z4eXgyGKLLbMNy9c7hZ3XmrUEpRayxezT7VanQYX7c61RPCedL","GfHq2tTVk9z4eXgyQbQ5fnon7qDegNzvJ4s71djeDtZVSfoA466yXun6CLcK","GfHq2tTVk9z4eXgyV2oK18JdGAUozHXddWjBCFoMMKhMz5taj1qUyVYWBBfi"] {fiber-id=10000003, flow-id=c8d1be17-aa32-4a73-b031-fff2707ed877, invocation_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, invocation_timestamp=2019-07-21T20:52:07.842Z,原点=调度程序, session_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, session_timestamp=2019-07-21T20:52:07.842Z, 线程 id=229} [信息] 2019-07-21T20:52:08,063Z [节点线程-1] corda.flow.eval - txbuilder::build command, cmd=com.example.iou.SettleIOU,keys=["GfHq2tTVk9z4eXgyQbQ5fnon7qDegNzvJ4s71djeDtZVSfoA466yXun6CLcK","GfHq2tTVk9z4eXgySdF6Vz2jjYaaUP61nQVBgMJUAvmnhhWGA34bUwC9CaVn","GfHq2tTVk9z4eXgyV2oK18JdGAUozHXddWjBCFoMMKhMz5taj1qUyVYWBBfi"] {fiber-id=10000003, flow-id=c8d1be17-aa32-4a73-b031-fff2707ed877, invocation_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, invocation_timestamp=2019-07-21T20:52:07.842Z,原点=调度程序, session_id=09dbdf92-55cb-4bcc-8ce9-5eae3103a740, session_timestamp=2019-07-21T20:52:07.842Z, 线程 id=229} [信息] 2019-07-21T20:52:08,337Z [节点线程-1] corda.flow.call - 派对 O=bob,L=纽约,C=美国收到交易。 {actor_id=internalShell, actor_owning_identity=O=charlie, L=New York, C=US, actor_store_id=NODE_CONFIG, fiber-id=10000002, flow-id=0eebd34b-92be-4af5-a650-2d49675702c3, invocation_id=35bd0d5c-ea00-4a7d-972d-ff353bb9d2ec, invocation_timestamp=2019-07-21T20:51:57.700Z, origin=internalShell, session_id=13825f94-0f7c-4df7-80e2-c73511031bc7, session_timestamp=2019-07-21T20:51:57.304Z, 线程 id=229, tx_id=D0EDC810EF00AFC9E99494F2DEF50AD040F439DAE3FC554BBC7698B9DCBA6073} [信息] 2019-07-21T20:52:08,338Z [节点线程-1] corda.flow.call - 全部 各方成功收到交易。

在我们最近发布的 TokenSDK 1.1 中,我们正式引入了代币选择包。

这是二进制文件的链接:https://ci-artifactory.corda.r3cev.com/artifactory/webapp/#/artifacts/browse/tree/General/corda-lib/com/r3/corda/lib/tokens/tokens-selection

下面是如何将依赖项导入项目的示例: https://github.com/corda/samples-java/blob/master/Accounts/worldcupticketbooking/build.gradle#L120

以下是您的使用方式:

Pair<List<StateAndRef<FungibleToken>>, List<FungibleToken>> inputsAndOutputs =
tokenSelection.generateMove(Arrays.asList(partyAndAmount), buyerAccount, new TokenQueryBy(), getRunId().getUuid());

最新更新