diff --git a/src/zcash/IncrementalMerkleTree.cpp b/src/zcash/IncrementalMerkleTree.cpp index 0a391486a..c47862d1f 100644 --- a/src/zcash/IncrementalMerkleTree.cpp +++ b/src/zcash/IncrementalMerkleTree.cpp @@ -93,22 +93,20 @@ void IncrementalMerkleTree::append(Hash obj) { left = obj; right = boost::none; - // Propagate up the tree as much as needed - BOOST_FOREACH(boost::optional& parent, parents) { - if (parent) { - combined = Hash::combine(*parent, *combined); - parent = boost::none; + for (size_t i = 0; i < Depth; i++) { + if (i < parents.size()) { + if (parents[i]) { + combined = Hash::combine(*parents[i], *combined); + parents[i] = boost::none; + } else { + parents[i] = *combined; + break; + } } else { - parent = *combined; - combined = boost::none; + parents.push_back(combined); break; } } - - if (combined) { - // Create a new parent - parents.push_back(combined); - } } }