示例#1
0
def validating_rpc_caller(method, args, kwargs, client):
    if len(args) > 0:
        raise JSONRPCInvalidParamsError("No positional arguments allowed")
    try:
        return method(client, **kwargs)
    except ValidationError as e:
        raise JSONRPCInvalidParamsError("Invalid params:" + str(e.messages))
    except Exception as e:
        raise Exception("Internal server error: " + str(e))
示例#2
0
文件: jsonrpc.py 项目: youzg/pyethapp
 def new_f(*args, **kwargs):
     try:
         inspect.getcallargs(f, *args, **kwargs)
     except TypeError:
         raise JSONRPCInvalidParamsError()
     else:
         return f(*args, **kwargs)
示例#3
0
    def newFilter(self, filter_dict):
        if not isinstance(filter_dict, dict):
            raise BadRequestError('Filter must be an object')
        required_keys = set(['fromBlock', 'toBlock'])
        if not required_keys.issubset(set(filter_dict.keys())):
            raise BadRequestError('Invalid filter object')

        b0 = self.json_rpc_server.get_block(block_id_decoder(filter_dict['fromBlock']))
        b1 = self.json_rpc_server.get_block(block_id_decoder(filter_dict['toBlock']))
        if b1.number < b0.number:
            raise BadRequestError('fromBlock must be prior or equal to toBlock')
        address = filter_dict.get('address', None)
        if is_string(address):
            addresses = [address_decoder(address)]
        elif isinstance(address, Iterable):
            addresses = [address_decoder(addr) for addr in address]
        elif address is None:
            addresses = None
        else:
            raise JSONRPCInvalidParamsError('Parameter must be address or list of addresses')
        topics = [data_decoder(topic) for topic in filter_dict.get('topics', [])]

        blocks = [b1]
        while blocks[-1] != b1:
            blocks.append(blocks[-1].get_parent())
        filter_ = Filter(self.chain.chain, reversed(blocks), addresses, topics)
        self.filters[self.next_id] = filter_
        self.next_id += 1
        return self.next_id - 1
示例#4
0
 def newBlockFilter(self, s):
     if s not in ('latest', 'pending'):
         raise JSONRPCInvalidParamsError('Parameter must be either "latest" or "pending"')
     pending = (s == 'pending')
     latest = (s == 'latest')
     filter_ = Filter(self.chain.chain, pending=pending, latest=latest)
     self.filters[self.next_id] = filter_
     self.next_id += 1
     return self.next_id - 1
示例#5
0
文件: jsonrpc.py 项目: youzg/pyethapp
    def newFilter(self, filter_dict):
        if not isinstance(filter_dict, dict):
            raise BadRequestError('Filter must be an object')
        b0 = self.json_rpc_server.get_block(
            block_id_decoder(filter_dict.get('fromBlock', 'latest')))
        b1 = self.json_rpc_server.get_block(
            block_id_decoder(filter_dict.get('toBlock', 'latest')))
        if b1.number < b0.number:
            raise BadRequestError(
                'fromBlock must be prior or equal to toBlock')
        address = filter_dict.get('address', None)
        if is_string(address):
            addresses = [address_decoder(address)]
        elif isinstance(address, Iterable):
            addresses = [address_decoder(addr) for addr in address]
        elif address is None:
            addresses = None
        else:
            raise JSONRPCInvalidParamsError(
                'Parameter must be address or list of addresses')
        if 'topics' in filter_dict:
            topics = []
            for topic in filter_dict['topics']:
                if topic is not None:
                    topics.append(big_endian_to_int(data_decoder(topic)))
                else:
                    topics.append(None)
        else:
            topics = None

        blocks = [b1]
        while blocks[-1] != b0:
            blocks.append(blocks[-1].get_parent())
        filter_ = Filter(self.chain.chain, reversed(blocks), addresses, topics)
        self.filters[self.next_id] = filter_
        self.next_id += 1
        return self.next_id - 1