Fix request aggregator reply for account open block
This commit is contained in:
parent
418c8ec592
commit
9594e8b2dc
1 changed files with 26 additions and 11 deletions
|
|
@ -202,21 +202,36 @@ 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_final;
|
||||
|
||||
for (auto const & [hash, root] : requests_a)
|
||||
{
|
||||
// Ledger by hash
|
||||
std::shared_ptr<nano::block> 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<nano::block> {
|
||||
// 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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue