Implement parallel backchain resolution across participants and integrate it into CollectSignaturesFlow & FinalityFlow

Description

Implement an enhanced version of backchain resolution that executes in parallel across multiple participants and integrate this with the existing platform flows (CollectSignaturesFlow, FinalityFlow). This involves:

  • implementing a new version of ResolveTransactionsFlow that receives a mapping of sessions to transactions to resolve. This flow will be implemented differently on OS and ENT. In OS, a naive, sequential implementation will be added (potentially just re-using the existing flow). The ENT implementation will contain the enhanced version that performs backchain resolution across the sessions in parallel.

  • implementing a new version of SendTransactionFlow / SendStateAndRefFlow that receives a mapping of sessions to transactions/states. Again, there will be different implementations in OS & ENT. In OS, the transaction will be sent to every session (and the backchain resolved) sequentially. In ENT, this will be done in parallel.

  • implementing a new version of ReceiveTransactionFlow / ReceiveStateAndRefFlow that receives a mapping of sessions to transactions/states with different implementations in OS & ENT (serial & parallel correspondingly).

  • Enhancing CollectSignaturesFlow / FinalityFlow in ENT to make use of the new versions of SendTransactionFlow to perform broadcast & backchain resolution.

Notes:

  • Care should be taken to integrate these changes properly with Nick’s improvements around batched backchain resolution.

  • If the parallelised backchain resolution cannot be done in a backwards compatible way (most likely scenario in order to get the largest degree of parallelism available), then implementation should be gated appropriately, so that backchain resolution is performed in parallel only if the counterparty is in a platform version that supports it.

Acceptance Criteria:

  • Integration tests have been added for the new flows.

  • Some manual compatibility testing is performed to ensure that older nodes are capable of interoperating with newer nodes, even if that’s without parallel backchain resolution.

  • Ideally, if we have managed to build a perf-testing CorDapp that exercises these new APIs, use it to demonstrate the concrete gains from the enhanced flows.

Assignee

Unassigned

Reporter

sachin.gokhale@r3.com

Labels

Sprint

None

Epic Link

None

Priority

Medium

Engineering Teams

Kernel

Fix versions

Affects versions

None

Ported to...

None

Story Points / Dev Days

10

Build cut

None
Configure