/*
|
|
Package merkle computes a deterministic minimal height Merkle tree hash.
|
|
If the number of items is not a power of two, some leaves
|
|
will be at different levels. Tries to keep both sides of
|
|
the tree the same size, but the left may be one greater.
|
|
|
|
Use this for short deterministic trees, such as the validator list.
|
|
For larger datasets, use IAVLTree.
|
|
|
|
Be aware that the current implementation by itself does not prevent
|
|
second pre-image attacks. Hence, use this library with caution.
|
|
Otherwise you might run into similar issues as, e.g., in early Bitcoin:
|
|
https://bitcointalk.org/?topic=102395
|
|
|
|
*
|
|
/ \
|
|
/ \
|
|
/ \
|
|
/ \
|
|
* *
|
|
/ \ / \
|
|
/ \ / \
|
|
/ \ / \
|
|
* * * h6
|
|
/ \ / \ / \
|
|
h0 h1 h2 h3 h4 h5
|
|
|
|
TODO(ismail): add 2nd pre-image protection or clarify further on how we use this and why this secure.
|
|
|
|
*/
|
|
package merkle
|