<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def closing_address( self, participant1: Address, participant2: Address, block_identifier: BlockSpecification, channel_identifier: ChannelID = None, ) -> Optional[Address]: """ Returns the address of the closer, if the channel is closed and not settled. None otherwise. """


        try:
            channel_data = self._detail_channel(
                participant1=participant1,
                participant2=participant2,
                block_identifier=block_identifier,
                channel_identifier=channel_identifier,
            )
        except RaidenRecoverableError:
            return None

        if channel_data.state >= ChannelState.SETTLED:
            return None

        participants_data = self.detail_participants(
            participant1=participant1,
            participant2=participant2,
            block_identifier=block_identifier,
            channel_identifier=channel_data.channel_identifier,
        )

        if participants_data.our_details.is_closer:
            return participants_data.our_details.address
        elif participants_data.partner_details.is_closer:
            return participants_data.partner_details.address

        return None