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

Description

Steps to reproduce:

  1.  

  2.  

  3.  

  4.  

  5. set validating = false in net.corda.bank.BankOfCordaCordform to make the notary non-validating

  6.  

  7.  

  8.  

  9.  

  10. remove issuableCurrencies and webAddress entries from BankOfCorda/node.conf

  11.  

In BankOfCorda (V4 node) shell:

  1.  

  2.  

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

Activity

Show:
Shams Asari
January 17, 2019, 4:23 PM
Edited

This is a bug fix for V3.

Anthony Keenan
January 17, 2019, 6:38 PM
Edited

Just linked to as well as the same happens with an ENT 3.2 node - so we will also need to fix in ENT 3.3.

Dimos Raptis
January 23, 2019, 11:39 AM

Summary from the Slack discussion:

  • The carpenter is purposed to synthesize only POJOs & enums, so it fails to synthesize this interface

  • One possible workaround to avoid this would be to ignore interfaces during serialization. Currently, the infrastructure needed to do that selectively based on the nature of the usage (i.e. interfaces as properties VS interfaces as generic types) is not there, so it would be an ignore-all situation, which could introduce runtime errors.

Another thing I was thinking we could use to mitigate risk could be a gating approach, i.e. ignore this specific interface FungibleState, only for platform versions earlier that when it was introduced. This should be safe, without degrading the CX, since there should be no expectation of using a feature of a later version.

However, waiting for to come back from leave, so that we can chat on the repercussions of these.

Dimos Raptis
February 4, 2019, 2:29 PM

Update:

  • For v3, we will do the following: interfaces will be attempted to be loaded, only when there's a class that implements that interface that's missing from the classpath and thus will need to be carpented .The fix PR for v3 has been approved and pending to be merged.

  • This issue won't exist from v4 and going forward. The reason is that interfaces are also carpented (using only their "getter" properties). So, in our case, the missing interface would be carpented, even though the associated class is loaded from the classpath.

Katelyn Baker
February 26, 2019, 5:03 PM

Assignee

Dimos Raptis

Reporter

Shams Asari

Labels

None

Sprint

None

Epic Link

None

Priority

High

Severity

Medium

CVSS Score

None

CVSS Vector

None

Due Date

None

Engineering Teams

None

Fix versions

Affects versions

Ported to...

None

Story Points / Dev Days

None
Configure