@ -88,7 +88,25 @@ bool blockchain_storage::init(const std::string& config_folder)
m_config_folder = config_folder ;
LOG_PRINT_L0 ( " Loading blockchain... " ) ;
const std : : string filename = m_config_folder + " / " CRYPTONOTE_BLOCKCHAINDATA_FILENAME ;
if ( ! tools : : unserialize_obj_from_file ( * this , filename ) )
if ( tools : : unserialize_obj_from_file ( * this , filename ) )
{
// checkpoints
// mainchain
for ( size_t height = 0 ; height < m_blocks . size ( ) ; + + height )
{
CHECK_AND_ASSERT_MES ( m_checkpoints . is_in_checkpoint_zone ( height ) & & m_checkpoints . check_block ( height , get_block_hash ( m_blocks [ height ] . bl ) ) , false , " checkpoint fail, blockchain.bin invalid " ) ;
}
// check alt chains
BOOST_FOREACH ( blocks_ext_by_hash : : value_type & alt_block , m_alternative_chains )
{
CHECK_AND_ASSERT_MES ( m_checkpoints . is_alternative_block_allowed ( m_blocks . size ( ) - 1 , alt_block . second . height ) , false , " stored alternative block not allowed, blockchain.bin invalid " ) ;
}
}
else
{
LOG_PRINT_L0 ( " Can't load blockchain storage from file, generating genesis block. " ) ;
block bl = boost : : value_initialized < block > ( ) ;
@ -743,7 +761,7 @@ bool blockchain_storage::handle_alternative_block(const block& b, const crypto::
return false ;
}
// b lock is not related with head of main chain
// B lock is not related with head of main chain
//first of all - look in alternative chains container
auto it_main_prev = m_blocks_index . find ( b . prev_id ) ;
auto it_prev = m_alternative_chains . find ( b . prev_id ) ;