diff --git a/rai/core_test/ledger.cpp b/rai/core_test/ledger.cpp index 83f5aeab..364f17c2 100644 --- a/rai/core_test/ledger.cpp +++ b/rai/core_test/ledger.cpp @@ -1845,6 +1845,23 @@ TEST (ledger, utx_open_previous_fail) ASSERT_EQ (rai::process_result::gap_previous, ledger.process (transaction, open1).code); } +TEST (ledger, utx_open_source_fail) +{ + bool init (false); + rai::block_store store (init, rai::unique_path ()); + ASSERT_TRUE (!init); + rai::ledger ledger (store); + rai::genesis genesis; + ledger.utx_parse_canary = genesis.hash (); + rai::transaction transaction (store.environment, nullptr, true); + genesis.initialize (transaction, store); + rai::keypair destination; + rai::utx_block send1 (rai::genesis_account, genesis.hash (), rai::genesis_account, rai::genesis_amount - rai::Gxrb_ratio, destination.pub, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0); + ASSERT_EQ (rai::process_result::progress, ledger.process (transaction, send1).code); + rai::utx_block open1 (destination.pub, 0, rai::genesis_account, 0, 0, destination.prv, destination.pub, 0); + ASSERT_EQ (rai::process_result::gap_source, ledger.process (transaction, open1).code); +} + TEST (ledger, utx_send_change) { bool init (false); diff --git a/rai/core_test/rpc.cpp b/rai/core_test/rpc.cpp index f82e4377..004cb01f 100644 --- a/rai/core_test/rpc.cpp +++ b/rai/core_test/rpc.cpp @@ -3242,10 +3242,10 @@ TEST (rpc, block_create_utx_open) ASSERT_NE (nullptr, utx_block); ASSERT_EQ (rai::block_type::utx, utx_block->type ()); ASSERT_EQ (utx_hash, utx_block->hash ().to_string ()); - ASSERT_TRUE (system.nodes [0]->latest (key.pub).is_zero ()); + ASSERT_TRUE (system.nodes[0]->latest (key.pub).is_zero ()); auto process_result (system.nodes[0]->process (*utx_block)); ASSERT_EQ (rai::process_result::progress, process_result.code); - ASSERT_FALSE (system.nodes [0]->latest (key.pub).is_zero ()); + ASSERT_FALSE (system.nodes[0]->latest (key.pub).is_zero ()); } TEST (rpc, wallet_lock) diff --git a/rai/ledger.cpp b/rai/ledger.cpp index 65adc48b..2def6910 100644 --- a/rai/ledger.cpp +++ b/rai/ledger.cpp @@ -218,6 +218,10 @@ void ledger_processor::utx_block_impl (rai::utx_block const & block_a) { // Account does not yet exists result.code = block_a.previous ().is_zero () ? rai::process_result::progress : rai::process_result::gap_previous; // Does the first block in an account yield 0 for previous() ? (Unambigious) + if (result.code == rai::process_result::progress) + { + result.code = !block_a.hashables.link.is_zero () ? rai::process_result::progress : rai::process_result::gap_source; // Is the first block receiving from a send ? (Unambigious) + } } if (result.code == rai::process_result::progress) {