def jsonrpc_coinswap(self, *paramlist):
        """To get round txjsonrpc's rather funky function naming trick,
        we use 1 generic json rpc method and then read the real method as a field.
        This allows us to handle generic features like signatures and nonces in
        this function before deferring actual methods to sub-calls.
        All calls use syntax:
        sessionid, {noncesig dict}, method, *methodargs
        """
        if len(paramlist) < 3:
            return (False, "Wrong length of paramlist: " + str(len(paramlist)))
        sessionid = paramlist[0]
        if sessionid not in self.carols:
            return (False, "Unrecognized sessionid: " + str(sessionid))
        carol = self.carols[sessionid]
        valid, errmsg = self.validate_sig_nonce(carol, paramlist[1:])
        if not valid:
            return (False, "Invalid message from Alice: " + errmsg)
        return carol.get_rpc_response(paramlist[2], paramlist[3:])