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))
def new_f(*args, **kwargs): try: inspect.getcallargs(f, *args, **kwargs) except TypeError: raise JSONRPCInvalidParamsError() else: return f(*args, **kwargs)
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
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
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