merkle tree algorithm