From ee1da880784545ba3de52671a24ec2b2e04ad29c Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Wed, 3 Oct 2018 19:33:00 -0600 Subject: [PATCH] Check epoch_link before checking balance of state blocks (#1255) --- rai/secure/ledger.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/rai/secure/ledger.cpp b/rai/secure/ledger.cpp index 386cb06a..9da7b2fe 100644 --- a/rai/secure/ledger.cpp +++ b/rai/secure/ledger.cpp @@ -183,19 +183,27 @@ public: void ledger_processor::state_block (rai::state_block const & block_a) { result.code = rai::process_result::progress; + auto is_epoch_block (false); // Check if this is an epoch block - rai::amount prev_balance (0); - if (!block_a.hashables.previous.is_zero ()) + if (!ledger.epoch_link.is_zero () && block_a.hashables.link == ledger.epoch_link) { - result.code = ledger.store.block_exists (transaction, block_a.hashables.previous) ? rai::process_result::progress : rai::process_result::gap_previous; - if (result.code == rai::process_result::progress) + rai::amount prev_balance (0); + if (!block_a.hashables.previous.is_zero ()) { - prev_balance = ledger.balance (transaction, block_a.hashables.previous); + result.code = ledger.store.block_exists (transaction, block_a.hashables.previous) ? rai::process_result::progress : rai::process_result::gap_previous; + if (result.code == rai::process_result::progress) + { + prev_balance = ledger.balance (transaction, block_a.hashables.previous); + } + } + if (block_a.hashables.balance == prev_balance) + { + is_epoch_block = true; } } if (result.code == rai::process_result::progress) { - if (block_a.hashables.balance == prev_balance && !ledger.epoch_link.is_zero () && block_a.hashables.link == ledger.epoch_link) + if (is_epoch_block) { epoch_block_impl (block_a); }