V3 node unable to record finalised transaction containing a V3 FungibleAsset state created by a V4 node

Description

Steps to reproduce:

  1.  

    1 git checkout M19-RC02
  2.  

    1 ./gradlew buildCordaJAR
  3.  

    1 cp node/capsule/build/libs/corda-4.0-RC02.jar /tmp
  4.  

    1 git checkout release-V3
  5. set validating = false in net.corda.bank.BankOfCordaCordform to make the notary non-validating

  6.  

    1 ./gradlew samples:bank-of-corda-demo:deployNodes
  7.  

    1 cd samples/bank-of-corda-demo/build/nodes
  8.  

    1 cp /tmp/corda-4.0-RC02.jar BankOfCorda/corda.jar
  9.  

    1 rm BankOfCorda/cordapps/bank-of-corda-demo-*.jar
  10. remove issuableCurrencies and webAddress entries from BankOfCorda/node.conf

  11.  

    1 ./runnodes

In BankOfCorda (V4 node) shell:

  1.  

    1 start CashIssueFlow amount: £1000, issuerBankPartyRef: 123, notary: "Notary Service"
  2.  

    1 start CashPayment amount: £500, recipient: BigCorporation, anonymous: false

The flow will fail with Counter-flow errored message. In BigCorporation's logs (the V3 node) you will see the following error:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 java.io.NotSerializableException: Unexpected throwable: net.corda.core.transactions.WireTransaction -> net.corda.core.transactions.WireTransaction -> null java.lang.reflect.InvocationTargetException: net.corda.core.transactions.WireTransaction -> net.corda.core.trans actions.WireTransaction -> null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer.construct(ObjectSerializer.kt:138) at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer.readObjectBuildViaConstructor(ObjectSerializer.kt:97) at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer.readObject(ObjectSerializer.kt:82) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.readObject$node_api(DeserializationInput.kt:135) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.readObjectOrNull$node_api(DeserializationInput.kt:109) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.readObjectOrNull$node_api$default(DeserializationInput.kt:108) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput$deserialize$1.invoke(DeserializationInput.kt:98) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.des(DeserializationInput.kt:80) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.deserialize(DeserializationInput.kt:96) at net.corda.nodeapi.internal.serialization.amqp.AbstractAMQPSerializationScheme.deserialize(AMQPSerializationScheme.kt:123) at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:111) at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66) at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:111) at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:86) at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:80) at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.deserialize(SerializationScheme.kt:111) at net.corda.core.transactions.SignedTransaction.getCoreTransaction(SignedTransaction.kt:273) at net.corda.core.transactions.SignedTransaction.getInputs(SignedTransaction.kt:71) at net.corda.core.internal.ResolveTransactionsFlow$Companion.dependencyIDs(ResolveTransactionsFlow.kt:36) at net.corda.core.internal.ResolveTransactionsFlow$Companion.access$dependencyIDs(ResolveTransactionsFlow.kt:35) at net.corda.core.internal.ResolveTransactionsFlow.<init>(ResolveTransactionsFlow.kt:31) at net.corda.core.flows.ReceiveTransactionFlow.call(ReceiveTransactionFlow.kt:41) at net.corda.core.flows.ReceiveTransactionFlow.call(ReceiveTransactionFlow.kt:24) at net.corda.core.flows.FlowLogic.subFlow(FlowLogic.kt:290) at net.corda.node.services.FinalityHandler.call(CoreFlowHandlers.kt:21) at net.corda.node.services.FinalityHandler.call(CoreFlowHandlers.kt:18) at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:96) at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:44) at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) at co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) at co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) at co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at net.corda.node.utilities.AffinityExecutor$ServiceAffinityExecutor$1$thread$1.run(AffinityExecutor.kt:62)
1 2 3 4 5 Caused by: java.lang.Exception: Malformed transaction, OUTPUTS_GROUP at index 0 cannot be deserialised at net.corda.core.transactions.TraversableTransaction.deserialiseComponentGroup(MerkleTransaction.kt:70) at net.corda.core.transactions.TraversableTransaction.<init>(MerkleTransaction.kt:25) at net.corda.core.transactions.WireTransaction.<init>(WireTransaction.kt:43) ... 43 more
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Caused by: java.io.NotSerializableException: Unexpected throwable: Not a valid Java name: net.corda.core.contracts.FungibleState<net.corda.core.contracts.Issued<java.util.Currency>> java.lang.IllegalArgumentException: Not a valid Java name: net.corda.core.contracts.F ungibleState<net.corda.core.contracts.Issued<java.util.Currency>> at net.corda.nodeapi.internal.serialization.carpenter.ClassCarpenter.validateSchema(ClassCarpenter.kt:410) at net.corda.nodeapi.internal.serialization.carpenter.ClassCarpenter.build(ClassCarpenter.kt:108) at net.corda.nodeapi.internal.serialization.carpenter.MetaCarpenterBase.step(MetaCarpenter.kt:69) at net.corda.nodeapi.internal.serialization.carpenter.MetaCarpenter.build(MetaCarpenter.kt:98) at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory.processSchema(SerializerFactory.kt:236) at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory.access$processSchema(SerializerFactory.kt:42) at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory$get$1.invoke(SerializerFactory.kt:190) at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory$get$1.invoke(SerializerFactory.kt:42) at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory.get(SerializerFactory.kt:189) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.readObject$node_api(DeserializationInput.kt:131) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.readObjectOrNull$node_api(DeserializationInput.kt:109) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.readObjectOrNull$node_api$default(DeserializationInput.kt:108) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput$deserialize$1.invoke(DeserializationInput.kt:98) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.des(DeserializationInput.kt:80) at net.corda.nodeapi.internal.serialization.amqp.DeserializationInput.deserialize(DeserializationInput.kt:96) at net.corda.nodeapi.internal.serialization.amqp.AbstractAMQPSerializationScheme.deserialize(AMQPSerializationScheme.kt:123) at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:111) at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66) at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:111) at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:86) at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:80) at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.deserialize(SerializationScheme.kt:111) at net.corda.core.transactions.TraversableTransaction$outputs$1.invoke(MerkleTransaction.kt:357) at net.corda.core.transactions.TraversableTransaction$outputs$1.invoke(MerkleTransaction.kt:18) at net.corda.core.transactions.TraversableTransaction.deserialiseComponentGroup(MerkleTransaction.kt:66) at net.corda.core.transactions.TraversableTransaction.<init>(MerkleTransaction.kt:25) at net.corda.core.transactions.WireTransaction.<init>(WireTransaction.kt:43) ...

Status

Assignee

Dimos Raptis

Reporter

Shams Asari

Priority

High

Labels

None

Severity

Medium

Fix versions

Ported to...

None

Feature Team

Corda Core

Affects versions

Corda 3.3
Corda Enterprise 3.2