Exclusion Complete Binary Merkle Tree

A merkle tree based on Nervos Complete Binary Merkle Tree to support verifiing a leaf is not on a certain tree.

Example Usage

```rust type StrKey = &'static str; type StrLeaf = SimpleLeaf; type StrRangeLeaf = SimpleRangeLeaf; // A helper to compute root and build proof type StrExCBMT = SimpleExclusionCBMT;

// Can be seen as a black list let allleaves: Vec = vec!["b", "e", "g", "x"] .intoiter() .map(StrLeaf::newwithkey) .collect(); let root = StrExCBMT::computeroot(&allleaves); // The keys not in the black list let excludedkeys = vec!["f", "y", "z", "a"]; let proof = StrExCBMT::buildproof(&allleaves, &excludedkeys).unwrap(); asserteq!( proof .rangeleaves() .iter() .map(|l| (*l.key(), *l.nextkey())) .collect::>(), vec![("e", "g"), ("x", "b")] ); assert!(proof .verifyexclusion(&root, &excludedkeys) .isok()); ```