Fix request aggregator reply for account open block

This commit is contained in:
Piotr Wójcik 2025-01-09 20:28:51 +01:00
commit 9594e8b2dc

View file

@ -202,22 +202,37 @@ auto nano::request_aggregator::aggregate (nano::secure::transaction const & tran
{ {
std::vector<std::shared_ptr<nano::block>> to_generate; std::vector<std::shared_ptr<nano::block>> to_generate;
std::vector<std::shared_ptr<nano::block>> to_generate_final; std::vector<std::shared_ptr<nano::block>> to_generate_final;
for (auto const & [hash, root] : requests_a) for (auto const & [hash, root] : requests_a)
{ {
auto search_for_block = [&] () -> std::shared_ptr<nano::block> {
// Ledger by hash // Ledger by hash
std::shared_ptr<nano::block> block = ledger.any.block_get (transaction, hash); if (auto block = ledger.any.block_get (transaction, hash))
{
return block;
}
// Ledger by root // Ledger by root
if (!block && !root.is_zero ()) if (!root.is_zero ())
{ {
// Search for block root // Search for successor of root
if (auto successor = ledger.any.block_successor (transaction, root.as_block_hash ())) if (auto successor = ledger.any.block_successor (transaction, root.as_block_hash ()))
{ {
block = ledger.any.block_get (transaction, successor.value ()); return ledger.any.block_get (transaction, successor.value ());
release_assert (block); }
// If that fails treat root as account
if (auto info = ledger.any.account_get (transaction, root.as_account ()))
{
return ledger.any.block_get (transaction, info->open_block);
} }
} }
return nullptr;
};
auto block = search_for_block ();
auto should_generate_final_vote = [&] (auto const & block) { auto should_generate_final_vote = [&] (auto const & block) {
release_assert (block); release_assert (block);