diff --git a/libraries/chain/db_block.cpp b/libraries/chain/db_block.cpp index 0bb841ee..d7c1e214 100644 --- a/libraries/chain/db_block.cpp +++ b/libraries/chain/db_block.cpp @@ -417,9 +417,10 @@ void database::pop_block() auto head_id = head_block_id(); optional head_block = fetch_block_by_id( head_id ); GRAPHENE_ASSERT( head_block.valid(), pop_empty_chain, "there are no blocks to pop" ); - pop_undo(); - _block_id_to_block.remove( head_id ); + _fork_db.pop_block(); + _block_id_to_block.remove( head_id ); + pop_undo(); _popped_tx.insert( _popped_tx.begin(), head_block->transactions.begin(), head_block->transactions.end() ); diff --git a/libraries/chain/fork_database.cpp b/libraries/chain/fork_database.cpp index c97b9395..83d4880c 100644 --- a/libraries/chain/fork_database.cpp +++ b/libraries/chain/fork_database.cpp @@ -38,7 +38,10 @@ void fork_database::reset() void fork_database::pop_block() { - if( _head ) _head = _head->prev.lock(); + FC_ASSERT( _head, "no blocks to pop" ); + auto prev = _head->prev.lock(); + FC_ASSERT( prev, "poping block would leave head block null" ); + _head = prev; } void fork_database::start_block(signed_block b)