public class PartialMerkleTree
Building and verification of Partial Merkle Tree. Partial Merkle Tree is a minimal tree needed to check that a given set of leaves belongs to a full Merkle Tree.
Example of Merkle tree with 5 leaves.
h15
/ \
h14 h55
/ \ / \
h12 h34 h50 h00
/ \ / \ / \ / \
l1 l2 l3 l4 l5 0 0 0
l* denote hashes of leaves, h*  hashes of nodes below. 0 denotes zero hash, we use it to pad not full binary trees, so the number of leaves is always a power of 2.
Example of Partial tree based on the tree above.
___
/ \
_ _
/ \ / \
h12 _ _ h00
/ \ / \
I3 l4 I5 0
We want to check l3 and l5  now turned into IncudedLeaf (I3 and I5 above). To verify that these two leaves belong to the tree with a hash root h15 we need to provide a Merkle branch (or partial tree). In our case we need hashes: h12, l4, 0 and h00. Verification is done by hashing the partial tree to obtain the root and checking it against the obtained h15 hash. Additionally we store included hashes used in calculation and compare them to leaves hashes we got (there can be a difference in obtained leaves ordering  that's why it's a set comparison not hashing leaves into a tree). If both equalities hold, we can assume that l3 and l5 belong to the transaction with root h15.
Modifier and Type  Class and Description 

static class 
PartialMerkleTree.Companion 
static class 
PartialMerkleTree.PartialTree
The structure is a little different than that of Merkle Tree.
Partial Tree might not be a full binary tree. Leaves represent either original Merkle tree leaves
or cut subtree node with stored hash. We differentiate between the leaves that are included in a filtered
transaction and leaves that just keep hashes needed for calculation. Reason for this approach: during verification
it's easier to extract hashes used as a base for this tree.

Modifier and Type  Field and Description 

static PartialMerkleTree.Companion 
Companion 
Constructor and Description 

PartialMerkleTree(PartialMerkleTree.PartialTree root)
Building and verification of Partial Merkle Tree.
Partial Merkle Tree is a minimal tree needed to check that a given set of leaves belongs to a full Merkle Tree.

Modifier and Type  Method and Description 

PartialMerkleTree.PartialTree 
getRoot() 
boolean 
verify(SecureHash merkleRootHash,
java.util.List<? extends net.corda.core.crypto.SecureHash> hashesToCheck) 
public static PartialMerkleTree.Companion Companion
public PartialMerkleTree(PartialMerkleTree.PartialTree root)
Building and verification of Partial Merkle Tree. Partial Merkle Tree is a minimal tree needed to check that a given set of leaves belongs to a full Merkle Tree.
Example of Merkle tree with 5 leaves.
h15
/ \
h14 h55
/ \ / \
h12 h34 h50 h00
/ \ / \ / \ / \
l1 l2 l3 l4 l5 0 0 0
l* denote hashes of leaves, h*  hashes of nodes below. 0 denotes zero hash, we use it to pad not full binary trees, so the number of leaves is always a power of 2.
Example of Partial tree based on the tree above.
___
/ \
_ _
/ \ / \
h12 _ _ h00
/ \ / \
I3 l4 I5 0
We want to check l3 and l5  now turned into IncudedLeaf (I3 and I5 above). To verify that these two leaves belong to the tree with a hash root h15 we need to provide a Merkle branch (or partial tree). In our case we need hashes: h12, l4, 0 and h00. Verification is done by hashing the partial tree to obtain the root and checking it against the obtained h15 hash. Additionally we store included hashes used in calculation and compare them to leaves hashes we got (there can be a difference in obtained leaves ordering  that's why it's a set comparison not hashing leaves into a tree). If both equalities hold, we can assume that l3 and l5 belong to the transaction with root h15.
public boolean verify(SecureHash merkleRootHash, java.util.List<? extends net.corda.core.crypto.SecureHash> hashesToCheck)
merkleRootHash
 Hash that should be checked for equality with root calculated from this partial tree.hashesToCheck
 List of included leaves hashes that should be found in this partial tree.public PartialMerkleTree.PartialTree getRoot()