From fbaf67ac68ff2d146b71d04aebcc5294e0c8e405 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Wed, 7 Mar 2018 16:40:14 -0700 Subject: [PATCH] Support gap_source for ublocks (#695) --- rai/core_test/ledger.cpp | 2 +- rai/ledger.cpp | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/rai/core_test/ledger.cpp b/rai/core_test/ledger.cpp index c02f9350..f7dcf36a 100644 --- a/rai/core_test/ledger.cpp +++ b/rai/core_test/ledger.cpp @@ -1711,7 +1711,7 @@ TEST (ledger, utx_unreceivable_fail) ASSERT_EQ (rai::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); ASSERT_EQ (rai::genesis_amount - rai::Gxrb_ratio, ledger.weight (transaction, rai::genesis_account)); rai::utx_block receive1 (rai::genesis_account, send1.hash (), rai::genesis_account, rai::genesis_amount, 1, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0); - ASSERT_EQ (rai::process_result::unreceivable, ledger.process (transaction, receive1).code); + ASSERT_EQ (rai::process_result::gap_source, ledger.process (transaction, receive1).code); } TEST (ledger, utx_receive_bad_amount_fail) diff --git a/rai/ledger.cpp b/rai/ledger.cpp index 33740f4c..745f95a2 100644 --- a/rai/ledger.cpp +++ b/rai/ledger.cpp @@ -212,12 +212,16 @@ void ledger_processor::utx_block (rai::utx_block const & block_a) { if (!block_a.hashables.link.is_zero ()) { - rai::pending_key key (block_a.hashables.account, block_a.hashables.link); - rai::pending_info pending; - result.code = ledger.store.pending_get (transaction, key, pending) ? rai::process_result::unreceivable : rai::process_result::progress; // Has this source already been received (Malformed) + result.code = ledger.store.block_exists (transaction, block_a.hashables.link) ? rai::process_result::progress : rai::process_result::gap_source; // Have we seen the source block already? (Harmless) if (result.code == rai::process_result::progress) { - result.code = result.amount == pending.amount ? rai::process_result::progress : rai::process_result::balance_mismatch; + rai::pending_key key (block_a.hashables.account, block_a.hashables.link); + rai::pending_info pending; + result.code = ledger.store.pending_get (transaction, key, pending) ? rai::process_result::unreceivable : rai::process_result::progress; // Has this source already been received (Malformed) + if (result.code == rai::process_result::progress) + { + result.code = result.amount == pending.amount ? rai::process_result::progress : rai::process_result::balance_mismatch; + } } } else