We're updating the issue view to help you get more done. 

Cannot transfer cash from using the a 3.2 Finance Cordapp from a 3.2 Ent node to a 4.0 O/S node

Description

Steps to recreate:

  • Clone https://github.com/corda/cordapp-example

  • Checkout branch release-enterprise-V3

  • Modify it to use to use the correct artifactory repository

  • In the root build.gradle, update ext.corda_release_version = '3.2'

  • From the root directory run gradlew :kotlin-source:deployNodes

  • Copy corda.jar and corda-webserver.jar from the O/S 4.0-RC01 artifacts into the kotlin-source/build/nodes/PartyB directory

  • Delete persistent.mv.db and persistence.trace.db from the kotlin-source/build/nodes/PartyB directory (there is no DB upgrade path from ENT 3.2 -> O/S 4)

  • Run /kotlin-source/build/nodes/runnodes

  • In PartyB, self issue some cash by running: flow start CashIssueFlow amount: "10 GBP", issuerBankPartyRef: "1234" , notary: "O=Notary,L=London,C=GB"

  • In PartyB, make a payment to PartyA by running: flow start CashPaymentFlow amount: "10 GBP", recipient: PartyA, anonymous: false

Node shows:

1 2 3 4 5 6 7 8 9 Starting Generating anonymous identities Generating transaction Signing transaction Finalising transaction Requesting signature by notary service Requesting signature by Notary service Validating response from Notary service Broadcasting transaction to participants

And then hangs.

The logs for PartyA show a serialisation 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 46 Caused by: java.lang.IllegalArgumentException: net.corda.core.contracts.TransactionState -> net.corda.core.contracts.TransactionState -> data(net.corda.core.contracts.ContractState) -> Not a valid Java name: net.corda.core.contracts.FungibleState<net.corda.core.contracts.Issued<java.util.Currency>> at net.corda.serialization.internal.carpenter.ClassCarpenterImpl.validateSchema(ClassCarpenter.kt:440) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.carpenter.ClassCarpenterImpl.build(ClassCarpenter.kt:137) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.carpenter.MetaCarpenterBase.step(MetaCarpenter.kt:79) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.carpenter.MetaCarpenter.build(MetaCarpenter.kt:109) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.SerializerFactory.runCarpentry(SerializerFactory.kt:307) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.SerializerFactory.processSchema(SerializerFactory.kt:300) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.SerializerFactory.processSchema$default(SerializerFactory.kt:274) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.SerializerFactory$get$2.invoke(SerializerFactory.kt:241) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.SerializerFactory$get$2.invoke(SerializerFactory.kt:55) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.SerializerFactory.get(SerializerFactory.kt:239) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput.readObject$serialization(DeserializationInput.kt:158) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput.readObjectOrNull$serialization(DeserializationInput.kt:136) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.PropertySerializer$DescribedTypePropertySerializer.readProperty(PropertySerializer.kt:92) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.ObjectSerializer.readObjectBuildViaConstructor(ObjectSerializer.kt:121) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.ObjectSerializer.readObject(ObjectSerializer.kt:103) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput.readObject$serialization(DeserializationInput.kt:165) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput.readObjectOrNull$serialization(DeserializationInput.kt:136) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput$deserialize$1.invoke(DeserializationInput.kt:113) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput.des(DeserializationInput.kt:91) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput.deserialize(DeserializationInput.kt:108) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.AbstractAMQPSerializationScheme.deserialize(AMQPSerializationScheme.kt:190) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:136) ~[corda-serialization-3.2.jar:?] at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:77) ~[corda-core-3.2.jar:?] at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:136) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:106) ~[corda-serialization-3.2.jar:?] at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:91) ~[corda-core-3.2.jar:?] at net.corda.serialization.internal.SerializationFactoryImpl.deserialize(SerializationScheme.kt:136) ~[corda-serialization-3.2.jar:?] at net.corda.core.transactions.TraversableTransaction$outputs$1.invoke(MerkleTransaction.kt:367) ~[corda-core-3.2.jar:?] at net.corda.core.transactions.TraversableTransaction$outputs$1.invoke(MerkleTransaction.kt:28) ~[corda-core-3.2.jar:?] at net.corda.core.transactions.TraversableTransaction.deserialiseComponentGroup(MerkleTransaction.kt:76) ~[corda-core-3.2.jar:?] at net.corda.core.transactions.TraversableTransaction.<init>(MerkleTransaction.kt:35) ~[corda-core-3.2.jar:?] at net.corda.core.transactions.WireTransaction.<init>(WireTransaction.kt:54) ~[corda-core-3.2.jar:?] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_181] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_181] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_181] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_181] at net.corda.serialization.internal.amqp.ObjectSerializer.newInstanceUnwrapped(ObjectSerializer.kt:173) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.ObjectSerializer.construct(ObjectSerializer.kt:167) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.ObjectSerializer.readObjectBuildViaConstructor(ObjectSerializer.kt:119) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.ObjectSerializer.readObject(ObjectSerializer.kt:103) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput.readObject$serialization(DeserializationInput.kt:165) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput.readObjectOrNull$serialization(DeserializationInput.kt:136) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput$deserialize$1.invoke(DeserializationInput.kt:113) ~[corda-serialization-3.2.jar:?] at net.corda.serialization.internal.amqp.DeserializationInput.des(DeserializationInput.kt:91) ~[corda-serialization-3.2.jar:?] ... 27 more

(full log attached}

Status

Assignee

Unassigned

Reporter

Anthony Keenan

Labels

None

Affected OS

None

Severity

High

Target Version/s

None

Feature Team

Corda Core

Affects versions

Corda 4 RC01

Priority

Medium