diff --git a/libraries/chain/block_database.cpp b/libraries/chain/block_database.cpp index 2dd9b7a2..b7a7441c 100644 --- a/libraries/chain/block_database.cpp +++ b/libraries/chain/block_database.cpp @@ -76,6 +76,10 @@ void block_database::flush() void block_database::store( const block_id_type& _id, const signed_block& b ) { + if (true == replay_mode){ + return; + } + block_id_type id = _id; if( id == block_id_type() ) { @@ -271,4 +275,9 @@ optional block_database::last_id()const return optional(); } +void block_database::set_replay_mode(bool mode) +{ + replay_mode = mode; +} + } } diff --git a/libraries/chain/db_management.cpp b/libraries/chain/db_management.cpp index e82602b1..cbf7f018 100644 --- a/libraries/chain/db_management.cpp +++ b/libraries/chain/db_management.cpp @@ -232,7 +232,12 @@ void database::open( FC_ASSERT( *last_block >= head_block_id(), "last block ID does not match current chain state", ("last_block->id", last_block)("head_block_id",head_block_num()) ); + + _block_id_to_block.set_replay_mode(true); + reindex( data_dir ); + + _block_id_to_block.set_replay_mode(false); } _opened = true; } diff --git a/libraries/chain/include/graphene/chain/block_database.hpp b/libraries/chain/include/graphene/chain/block_database.hpp index c5cf5df9..5a1df1a1 100644 --- a/libraries/chain/include/graphene/chain/block_database.hpp +++ b/libraries/chain/include/graphene/chain/block_database.hpp @@ -47,7 +47,11 @@ namespace graphene { namespace chain { optional fetch_by_number( uint32_t block_num )const; optional last()const; optional last_id()const; + + void set_replay_mode(bool mode); private: + bool replay_mode = false; + optional last_index_entry()const; fc::path _index_filename; mutable std::fstream _blocks;