def METHOD_NAME(self, obj: models.Model, timestamp: int) -> str:
    """
    Obtain and hash obj state properties.
    Token consumption should mutate the obtained state properties, leading to
    token invalidation. Failing that, eventually :attr:`token_timeout_days` will
    invalidate the token.
    """
    parts = self.get_hash_value_parts(obj)
    assert all(
        (isinstance(bit, str) for bit in parts)
    ), "All hash value parts should be strings."
    joined_parts = "".join(parts)
    return f"{joined_parts}{timestamp}"