diff --git a/libraries/chain/db_management.cpp b/libraries/chain/db_management.cpp index 7b1c1337..15466734 100644 --- a/libraries/chain/db_management.cpp +++ b/libraries/chain/db_management.cpp @@ -71,6 +71,30 @@ void database::wipe(const fc::path& data_dir, bool include_blocks) fc::remove_all( data_dir / "database" ); } +void database::open( + const fc::path& data_dir, + std::function genesis_loader ) +{ + try + { + object_database::open(data_dir); + + _block_id_to_block.open(data_dir / "database" / "block_num_to_block"); + + if( !find(global_property_id_type()) ) + init_genesis(genesis_loader()); + + _pending_block.previous = head_block_id(); + _pending_block.timestamp = head_block_time(); + + auto last_block = _block_id_to_block.last(); + if( last_block.valid() ) + _fork_db.start_block( *last_block ); + } + FC_CAPTURE_AND_RETHROW( (data_dir) ) +} + + void database::close(uint32_t blocks_to_rewind) { _pending_block_session.reset(); diff --git a/libraries/chain/include/graphene/chain/database.hpp b/libraries/chain/include/graphene/chain/database.hpp index 9e29fca3..657253d2 100644 --- a/libraries/chain/include/graphene/chain/database.hpp +++ b/libraries/chain/include/graphene/chain/database.hpp @@ -103,8 +103,10 @@ namespace graphene { namespace chain { * @param data_dir Path to open or create database in * @param genesis_loader A callable object which returns the genesis state to initialize new databases on */ - template - void open(const fc::path& data_dir, F&& genesis_loader); + void open( + const fc::path& data_dir, + std::function genesis_loader ); + /** * @brief Rebuild object graph from block history and open detabase * @@ -523,23 +525,4 @@ namespace graphene { namespace chain { } } - template - void database::open(const fc::path& data_dir, F&& genesis_loader) - { try { - object_database::open(data_dir); - - _block_id_to_block.open(data_dir / "database" / "block_num_to_block"); - - if( !find(global_property_id_type()) ) - init_genesis(genesis_loader()); - - _pending_block.previous = head_block_id(); - _pending_block.timestamp = head_block_time(); - - auto last_block= _block_id_to_block.last(); - if( last_block.valid() ) - _fork_db.start_block( *last_block ); - - } FC_CAPTURE_AND_RETHROW( (data_dir) ) } - } }