Uploaded image for project: 'Corda'
  1. CORDA-2455

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

    Details

    • Type: Bug
    • Status: Closed Duplicate (View workflow)
    • Priority: High
    • Resolution: Duplicate
    • Affects Version/s: Corda 4 RC01
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None
    • Severity:
      High
    • Feature Team:
      Corda Core
    • Sprint:

      Description

      Steps to recreate:

      • Clone https://github.com/corda/cordapp-example
      • Checkout branch release-V3
      • 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. node.conf will need udpating to:
        devMode=true
        myLegalName="O=PartyB,L=New York,C=US"
        p2pAddress="localhost:10010"
        rpcSettings {
            address="localhost:10011"
            adminAddress="localhost:10051"
        }
        security {
            authService {
                dataSource {
                    type=INMEMORY
                    users=[
                        {
                            password=test
                            permissions=[
                                ALL
                            ]
                            user=user1
                        }
                    ]
                }
            }
        }
        
      • Copy corda.jar and corda-webserver.jar from the ENT 3.2 distribution into the kotlin-source/build/nodes/PartyC. Again, update node.conf to:
        devMode=true
        myLegalName="O=PartyC,L=Paris,C=FR"
        p2pAddress="localhost:10013"
        rpcSettings {
            address="localhost:10014"
            adminAddress="localhost:10054"
        }
        security {
            authService {
                dataSource {
                    type=INMEMORY
                    users=[
                        {
                            password=test
                            permissions=[
                                ALL
                            ]
                            user=user1
                        }
                    ]
                }
            }
        }
        
      • Run /kotlin-source/build/nodes/runnodes
      • In PartyB (O/S 4), self issue some cash by running: flow start CashIssueFlow amount: "10 GBP", issuerBankPartyRef: "1234" , notary: "O=Notary,L=London,C=GB"
      • In PartyB (O/S 4.0), make a payment to PartyC (ENT 3.2) by running: flow start CashPaymentFlow amount: "10 GBP", recipient: PartyC, anonymous: false

      Node shows:

      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 PartyC (the ENT 3.2 node) show a serialisation error:

      [INFO ] 2019-01-16T14:15:21,766Z [flow-worker] statemachine.StaffedFlowHospital.consultStaff - Flow [33d4beed-bfba-4beb-93bf-053c2d1b9583] has error [0] {fiber-id=10000001, flow-id=33d4beed-bfba-4beb-93bf-053c2d1b9583, invocation_id=d72af241-108b-482a-a28d-239eb6791156, invocation_timestamp=2019-01-16T14:15:20.949Z, session_id=d72af241-108b-482a-a28d-239eb6791156, session_timestamp=2019-01-16T14:15:20.949Z, thread-id=262}
      java.io.NotSerializableException: Unexpected throwable: net.corda.core.transactions.WireTransaction -> net.corda.core.transactions.WireTransaction -> Malformed transaction, OUTPUTS_GROUP at index 0 cannot be deserialised
      	at net.corda.serialization.internal.amqp.DeserializationInput.des(DeserializationInput.kt:95) ~[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.SignedTransaction.getCoreTransaction(SignedTransaction.kt:283) ~[corda-core-3.2.jar:?]
      	at net.corda.core.transactions.SignedTransaction.getId(SignedTransaction.kt:65) ~[corda-core-3.2.jar:?]
      	at net.corda.core.internal.InternalUtils.pushToLoggingContext(InternalUtils.kt:509) ~[corda-core-3.2.jar:?]
      	at net.corda.core.flows.ReceiveTransactionFlow.call(ReceiveTransactionFlow.kt:52) ~[corda-core-3.2.jar:?]
      	at net.corda.core.flows.ReceiveTransactionFlow.call(ReceiveTransactionFlow.kt:36) ~[corda-core-3.2.jar:?]
      	at net.corda.node.services.statemachine.FlowStateMachineImpl.subFlow(FlowStateMachineImpl.kt:281) [corda-node-3.2.jar:?]
      	at net.corda.core.flows.FlowLogic.subFlow(FlowLogic.kt:312) ~[corda-core-3.2.jar:?]
      	at net.corda.node.services.FinalityHandler.call(CoreFlowHandlers.kt:31) ~[corda-node-3.2.jar:?]
      	at net.corda.node.services.FinalityHandler.call(CoreFlowHandlers.kt:28) ~[corda-node-3.2.jar:?]
      	at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:225) [corda-node-3.2.jar:?]
      	at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:51) [corda-node-3.2.jar:?]
      	at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) [quasar-core-0.7.10-jdk8.jar:0.7.10]
      	at co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) [quasar-core-0.7.10-jdk8.jar:0.7.10]
      	at co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) [quasar-core-0.7.10-jdk8.jar:0.7.10]
      	at co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) [quasar-core-0.7.10-jdk8.jar:0.7.10]
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_181]
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_181]
      	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.22.Final.jar:4.1.22.Final]
      	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
      Caused by: java.lang.Exception: net.corda.core.transactions.WireTransaction -> net.corda.core.transactions.WireTransaction -> Malformed transaction, OUTPUTS_GROUP at index 0 cannot be deserialised
      	at net.corda.core.transactions.TraversableTransaction.deserialiseComponentGroup(MerkleTransaction.kt:80) ~[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}

        Attachments

          Issue links

            Activity

              People

              • Assignee:
                shams.asari Shams Asari
                Reporter:
                Anthony.Keenan Anthony Keenan
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: