From 9594e8b2dc240dfead15567062fce5f684725e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wo=CC=81jcik?= <3044353+pwojcikdev@users.noreply.github.com> Date: Thu, 9 Jan 2025 20:28:51 +0100 Subject: [PATCH] Fix request aggregator reply for account open block --- nano/node/request_aggregator.cpp | 37 ++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/nano/node/request_aggregator.cpp b/nano/node/request_aggregator.cpp index d06a9b26c..ab84cc60c 100644 --- a/nano/node/request_aggregator.cpp +++ b/nano/node/request_aggregator.cpp @@ -202,21 +202,36 @@ auto nano::request_aggregator::aggregate (nano::secure::transaction const & tran { std::vector> to_generate; std::vector> to_generate_final; + for (auto const & [hash, root] : requests_a) { - // Ledger by hash - std::shared_ptr block = ledger.any.block_get (transaction, hash); - - // Ledger by root - if (!block && !root.is_zero ()) - { - // Search for block root - if (auto successor = ledger.any.block_successor (transaction, root.as_block_hash ())) + auto search_for_block = [&] () -> std::shared_ptr { + // Ledger by hash + if (auto block = ledger.any.block_get (transaction, hash)) { - block = ledger.any.block_get (transaction, successor.value ()); - release_assert (block); + return block; } - } + + // Ledger by root + if (!root.is_zero ()) + { + // Search for successor of root + if (auto successor = ledger.any.block_successor (transaction, root.as_block_hash ())) + { + return ledger.any.block_get (transaction, successor.value ()); + } + + // 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) { release_assert (block);