bool block_chain_impl::pop_from(block_detail::list& out_blocks,
    uint64_t height)
{
    size_t top;
    if (!database_.blocks.top(top))
        return false;

    for (uint64_t index = top; index >= height; --index)
    {
        const auto block = std::make_shared<block_detail>(database_.pop());
        out_blocks.push_back(block);
    }

    return true;
}
bool simple_chain_impl::release(uint64_t begin_index,
                                block_detail::list& released_blocks)
{
    size_t last_height;
    if (!database_.blocks.top(last_height))
        return false;

    for (uint64_t height = last_height; height >= begin_index; --height)
    {
        const auto block = std::make_shared<block_detail>(database_.pop());
        released_blocks.push_back(block);
    }

    return true;
}