mirror of
https://github.com/monero-project/monero.git
synced 2025-08-09 19:12:18 -04:00
Don't copy when flattening leaves
This commit is contained in:
parent
cbf6a5d618
commit
30fc80b33e
4 changed files with 10 additions and 11 deletions
|
@ -2038,7 +2038,7 @@ bool BlockchainLMDB::audit_tree(const uint64_t expected_n_leaf_tuples) const
|
||||||
throw0(DB_ERROR(lmdb_error("Failed to get parent in first layer: ", result).c_str()));
|
throw0(DB_ERROR(lmdb_error("Failed to get parent in first layer: ", result).c_str()));
|
||||||
|
|
||||||
// Get the expected leaf chunk hash
|
// Get the expected leaf chunk hash
|
||||||
const auto leaves = m_curve_trees->flatten_leaves(leaf_tuples_chunk);
|
const auto leaves = m_curve_trees->flatten_leaves(std::move(leaf_tuples_chunk));
|
||||||
const fcmp::curve_trees::Selene::Chunk chunk{leaves.data(), leaves.size()};
|
const fcmp::curve_trees::Selene::Chunk chunk{leaves.data(), leaves.size()};
|
||||||
|
|
||||||
// Hash the chunk of leaves
|
// Hash the chunk of leaves
|
||||||
|
|
|
@ -677,17 +677,16 @@ CurveTrees<Helios, Selene>::LeafTuple CurveTrees<Helios, Selene>::leaf_tuple(
|
||||||
};
|
};
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
template<typename C1, typename C2>
|
template<typename C1, typename C2>
|
||||||
std::vector<typename C2::Scalar> CurveTrees<C1, C2>::flatten_leaves(const std::vector<LeafTuple> &leaves) const
|
std::vector<typename C2::Scalar> CurveTrees<C1, C2>::flatten_leaves(std::vector<LeafTuple> &&leaves) const
|
||||||
{
|
{
|
||||||
std::vector<typename C2::Scalar> flattened_leaves;
|
std::vector<typename C2::Scalar> flattened_leaves;
|
||||||
flattened_leaves.reserve(leaves.size() * LEAF_TUPLE_SIZE);
|
flattened_leaves.reserve(leaves.size() * LEAF_TUPLE_SIZE);
|
||||||
|
|
||||||
for (const auto &l : leaves)
|
for (auto &l : leaves)
|
||||||
{
|
{
|
||||||
// TODO: implement without cloning
|
flattened_leaves.emplace_back(std::move(l.O_x));
|
||||||
flattened_leaves.emplace_back(l.O_x);
|
flattened_leaves.emplace_back(std::move(l.I_x));
|
||||||
flattened_leaves.emplace_back(l.I_x);
|
flattened_leaves.emplace_back(std::move(l.C_x));
|
||||||
flattened_leaves.emplace_back(l.C_x);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return flattened_leaves;
|
return flattened_leaves;
|
||||||
|
|
|
@ -237,8 +237,8 @@ public:
|
||||||
|
|
||||||
LeafTuple leaf_tuple(const PreprocessedLeafTuple &preprocessed_leaf_tuple) const;
|
LeafTuple leaf_tuple(const PreprocessedLeafTuple &preprocessed_leaf_tuple) const;
|
||||||
|
|
||||||
// Flatten leaves [(O.x, I.x, C.x),(O.x, I.x, C.x),...] -> [scalar,scalar,scalar,scalar,scalar,scalar,...]
|
// Flatten leaves [(O.x, I.x, C.x),(O.x, I.x, C.x),...] -> [O.x, I.x, C.x, O.x, I.x, C.x...]
|
||||||
std::vector<typename C2::Scalar> flatten_leaves(const std::vector<LeafTuple> &leaves) const;
|
std::vector<typename C2::Scalar> flatten_leaves(std::vector<LeafTuple> &&leaves) const;
|
||||||
|
|
||||||
// Convert cryptonote tx outs to contexts ready to be converted to leaf tuples, grouped by unlock height
|
// Convert cryptonote tx outs to contexts ready to be converted to leaf tuples, grouped by unlock height
|
||||||
void tx_outs_to_leaf_tuple_contexts(const cryptonote::transaction &tx,
|
void tx_outs_to_leaf_tuple_contexts(const cryptonote::transaction &tx,
|
||||||
|
|
|
@ -495,7 +495,7 @@ bool CurveTreesGlobalTree::audit_tree(const std::size_t expected_n_leaf_tuples)
|
||||||
{
|
{
|
||||||
MDEBUG("Auditing global tree");
|
MDEBUG("Auditing global tree");
|
||||||
|
|
||||||
const auto &leaves = m_tree.leaves;
|
auto leaves = m_tree.leaves;
|
||||||
const auto &c1_layers = m_tree.c1_layers;
|
const auto &c1_layers = m_tree.c1_layers;
|
||||||
const auto &c2_layers = m_tree.c2_layers;
|
const auto &c2_layers = m_tree.c2_layers;
|
||||||
|
|
||||||
|
@ -582,7 +582,7 @@ bool CurveTreesGlobalTree::audit_tree(const std::size_t expected_n_leaf_tuples)
|
||||||
// Now validate leaves
|
// Now validate leaves
|
||||||
return validate_layer<Selene>(m_curve_trees.m_c2,
|
return validate_layer<Selene>(m_curve_trees.m_c2,
|
||||||
c2_layers[0],
|
c2_layers[0],
|
||||||
m_curve_trees.flatten_leaves(leaves),
|
m_curve_trees.flatten_leaves(std::move(leaves)),
|
||||||
m_curve_trees.m_leaf_layer_chunk_width);
|
m_curve_trees.m_leaf_layer_chunk_width);
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue