Blockchain 解析线性指针是抛出错误

Blockchain 解析线性指针是抛出错误,blockchain,corda,Blockchain,Corda,我试图在我的应用程序中使用linearinter。当我试图在需要未使用的最新版本的位置解析状态数据时,它抛出了非法参数异常。我正在添加日志 {actor_id=internalShell, actor_owning_identity=O=PartyB, L=Tokyo, C=JP, actor_store_id=NODE_CONFIG, fiber-id=10000004, flow-id=56a4acbd-971f-4e79-8b89-314a910de58a, invocation_id=b

我试图在我的应用程序中使用
linearinter
。当我试图在需要未使用的最新版本的位置解析状态数据时,它抛出了
非法参数异常
。我正在添加日志

{actor_id=internalShell, actor_owning_identity=O=PartyB, L=Tokyo, C=JP, actor_store_id=NODE_CONFIG, fiber-id=10000004, flow-id=56a4acbd-971f-4e79-8b89-314a910de58a, invocation_id=b191db29-3ad2-4276-9136-217269398148, invocation_timestamp=2020-09-25T12:29:40.292Z, origin=internalShell, session_id=99a63055-16d6-4515-82e4-145399148cae, session_timestamp=2020-09-25T12:28:11.858Z, thread-id=160}
[WARN ] 2020-09-25T12:29:40,533Z [Node thread-1] interceptors.DumpHistoryOnErrorInterceptor. - Flow [56a4acbd-971f-4e79-8b89-314a910de58a] error - List has more than one element. [errorCode=1af3t2i, moreInformationAt=https://errors.corda.net/OS/4.5/1af3t2i] {actor_id=internalShell, actor_owning_identity=O=PartyB, L=Tokyo, C=JP, actor_store_id=NODE_CONFIG, fiber-id=10000004, flow-id=56a4acbd-971f-4e79-8b89-314a910de58a, invocation_id=b191db29-3ad2-4276-9136-217269398148, invocation_timestamp=2020-09-25T12:29:40.292Z, origin=internalShell, session_id=99a63055-16d6-4515-82e4-145399148cae, session_timestamp=2020-09-25T12:28:11.858Z, thread-id=160}
java.lang.IllegalArgumentException: List has more than one element.
    at kotlin.collections.CollectionsKt___CollectionsKt.single(_Collections.kt:480) ~[kotlin-stdlib-1.2.71.jar:1.2.71-release-64 (1.2.71)]
    at net.corda.core.contracts.LinearPointer.resolve(StatePointer.kt:197) ~[corda-core-4.5.jar:?]
    at statePointer.example.flows.UpdateVehicleFlow.call(UpdateVehicleFlow.kt:44) ~[?:?]
    at statePointer.example.flows.UpdateVehicleFlow.call(UpdateVehicleFlow.kt:28) ~[?:?]
    at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:299) ~[corda-node-4.5.jar:?]
    at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:66) ~[corda-node-4.5.jar:?]
    at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) ~[quasar-core-0.7.12_r3-jdk8.jar:0.7.12_r3]
    at co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) ~[quasar-core-0.7.12_r3-jdk8.jar:0.7.12_r3]
    at co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) ~[quasar-core-0.7.12_r3-jdk8.jar:0.7.12_r3]
    at co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) ~[quasar-core-0.7.12_r3-jdk8.jar:0.7.12_r3]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_201]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_201]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_201]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_201]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_201]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_201]
    at net.corda.node.utilities.AffinityExecutor$ServiceAffinityExecutor$1$thread$1.run(AffinityExecutor.kt:63) ~[corda-node-4.5.jar:?]

我尝试的代码是

val queryCriteria = QueryCriteria.LinearStateQueryCriteria(
                null,
                listOf(vehicleState!!.state.data.serviceStationDynamic.resolve(serviceHub).state.data.linearId.id),
                null, Vault.StateStatus.UNCONSUMED)

        // Use the vaultQuery with the previously created queryCriteria to fetch the ServiceStation to be used as input
        // in the transaction.
        val serviceStationStateAndRef = serviceHub.vaultService.queryBy<ServiceStation>(queryCriteria).states.singleOrNull()
        val chargeFromDynamicPointer=serviceStationStateAndRef!!.state.data.serviceCharge
val queryCriteria=queryCriteria.LinearStateQueryCriteria(
无效的
列表(vehicleState!!.state.data.serviceStationDynamic.resolve(serviceHub.state.data.linearId.id)),
null,Vault.StateStatus.Unused)
//将Vault查询与先前创建的queryCriteria一起使用,以获取要用作输入的ServiceStation
//在交易中。
val serviceStationStateAndRef=serviceHub.vaultService.queryBy(queryCriteria).states.singleOrNull()
val chargeFromDynamicPointer=serviceStationStateAndRef!!。state.data.serviceCharge

一个
LinearState
linearId
在其整个演化过程中对于特定的状态是唯一的。这意味着当一个线性状态演化时,它的所有历史状态都应该共享相同的
linearId
。但是,对于不同的线性状态,它需要是唯一的

错误消息表明您有多个线性状态具有相同的
linearId
,这就是解析失败的原因