See this thread in RocketChat: https://chat.hyperledger.org/channel/besu?msg=BiJ5Cy3uaJWPBASpm:
Hi Guys, so sorry for the persistence about interaction between private and public contract. I have downloaded the latest version 1.3.1 release and tested scenario when I deploy a private contract between TWO participants.(node 1, node 2). For that I did the following steps:
1. deployed a public contract
2. deployed a private contract between two nodes. That private contract is able to read a variable of the public contract.
3. After that tested the functionality when node 1 access the private contract and reads the variable of the public contract.
4. In the same way tested the functionality when node 2 also access the same private shared contract and performs a call to read a variable of the public smart contract.
5. Up to this point all works well; but after that whole nodes in the network, other than Node 1 and Node 2, throws an error and are rejected. So at the end only node 1 and node 2 remains live in the network.
6. If I try to delete the database of some of the rejected nodes and start again that node, then it is still rejected being not able to join.
Original issue in the thread (EVM crash) solved in https://pegasys1.atlassian.net/browse/PAN-3222
Some additional context from Lucas (copied from PAN-3222):
There is a new problem now. The EVM isn’t crashing anymore. What I believe it is happening is that the new nodes added in the network are trying to process the privacy transaction markers, but for some reason, instead of skipping the tx (because they don’t have the payload) they are failing.
And because they fail processing the tx, they end up in a forked state and that’s why they don’t peer with node1 and node2