docs: def json_rpc(self, method, *args):
          """
          This method takes a ZMQ REQ-socket and submits a JSON-object containing
          the RPC (JSON-RPC 2.0 format) to the supplied method with the supplied arguments.
          Then it waits for a reply from the server and blocks until it has received
          a JSON-response. The method returns the response and the id it used to tag
          the original request, which is a random UUID (uuid.uuid4).
  
          :param method: Method to call on remote.
          :param args: Arguments to method call.
          :return: JSON result and request id.
          """
          request_id = str(uuid.uuid4())
  
          try:
              self._socket.send_json(
                  {'method': method,
                   'params': args,
                   'jsonrpc': '2.0',
                   'id': request_id
                   })
  
              return self._socket.recv_json(), request_id
          except zmq.error.Again:
              raise ProtocolException(
                  'The ZMQ connection to {} timed out after {:.2f}s.'.format(
                      self._connection_string, self.timeout / 1000))