refactor: have separate is_chain instead of overloading prev

This takes a bit more memory per extent but the code is simpler