diff --git a/rai/core_test/block_store.cpp b/rai/core_test/block_store.cpp index 43a074aa4c..4474860f66 100644 --- a/rai/core_test/block_store.cpp +++ b/rai/core_test/block_store.cpp @@ -863,6 +863,26 @@ TEST (block_store, sequence_flush) ASSERT_EQ (*seq3, *vote1); } +TEST (block_store, sequence_flush_by_hash) +{ + auto path (rai::unique_path ()); + bool init (false); + rai::block_store store (init, path); + ASSERT_FALSE (init); + rai::transaction transaction (store.environment, true); + rai::keypair key1; + std::vector blocks1; + blocks1.push_back (rai::genesis ().hash ()); + blocks1.push_back (1234); + blocks1.push_back (5678); + auto vote1 (store.vote_generate (transaction, key1.pub, key1.prv, blocks1)); + auto seq2 (store.vote_get (transaction, vote1->account)); + ASSERT_EQ (nullptr, seq2); + store.flush (transaction); + auto seq3 (store.vote_get (transaction, vote1->account)); + ASSERT_EQ (*seq3, *vote1); +} + // Upgrading tracking block sequence numbers to whole vote. TEST (block_store, upgrade_v8_v9) { diff --git a/rai/node/lmdb.cpp b/rai/node/lmdb.cpp index c6b881f2bc..58f212ce52 100644 --- a/rai/node/lmdb.cpp +++ b/rai/node/lmdb.cpp @@ -231,16 +231,10 @@ rai::mdb_val::operator std::shared_ptr () const rai::mdb_val::operator std::shared_ptr () const { - auto result (std::make_shared ()); rai::bufferstream stream (reinterpret_cast (value.mv_data), value.mv_size); - auto error (rai::read (stream, result->account.bytes)); - assert (!error); - error = rai::read (stream, result->signature.bytes); - assert (!error); - error = rai::read (stream, result->sequence); + auto error (false); + std::shared_ptr result (std::make_shared (error, stream)); assert (!error); - result->blocks.push_back (rai::deserialize_block (stream)); - assert (boost::get> (result->blocks[0]) != nullptr); return result; }