def _get_channel_state_statelessly(self, grpc_channel, channel_id):
        """
        We get state of the channel (nonce, amount, unspent_amount)
        We do it by securely combine information from the server and blockchain
        https://github.com/singnet/wiki/blob/master/multiPartyEscrowContract/MultiPartyEscrow_stateless_client.md
        """
        server     = self._get_channel_state_from_server    (grpc_channel, channel_id)
        blockchain = self._get_channel_state_from_blockchain(              channel_id)

        if (server["current_nonce"] == blockchain["nonce"]):
            unspent_amount = blockchain["value"] - server["current_signed_amount"]
        else:
            unspent_amount = None # in this case we cannot securely define unspent_amount yet

        return (server["current_nonce"], server["current_signed_amount"], unspent_amount)