async def fetch_state(self, request): """Fetches data from a specific address in the validator's state tree. Request: query: - head: The id of the block to use as the head of the chain - address: The 70 character address of the data to be fetched Response: data: The base64 encoded binary data stored at that address head: The head used for this query (most recent if unspecified) link: The link to this exact query, including head block """ error_traps = [ error_handlers.InvalidAddressTrap, error_handlers.StateNotFoundTrap] address = request.match_info.get('address', '') head = request.url.query.get('head', None) head, root = await self._head_to_root(head) response = await self._query_validator( Message.CLIENT_STATE_GET_REQUEST, client_state_pb2.ClientStateGetResponse, client_state_pb2.ClientStateGetRequest( state_root=root, address=address), error_traps) return self._wrap_response( request, data=response['value'], metadata=self._get_metadata(request, response, head=head))
async def _get_state_by_addr(self,request,address): LOGGER.debug('BgxRouteHandler:_get_state_by_addr %s',address) state_address = make_smart_bgt_address(address) error_traps = [error_handlers.InvalidAddressTrap] #,error_handlers.StateNotFoundTrap] head = request.url.query.get('head', None) head, root = await self._head_to_root(head) response = await self._query_validator( Message.CLIENT_STATE_GET_REQUEST, client_state_pb2.ClientStateGetResponse, client_state_pb2.ClientStateGetRequest( state_root=root, address=state_address), error_traps) LOGGER.debug('BgxRouteHandler:_get_state_by_addr %s',address) try: result = cbor.loads(base64.b64decode(response['value'])) LOGGER.debug('BgxRouteHandler: _get_state_by_addr result=%s',type(result)) except BaseException: LOGGER.debug('BgxRouteHandler: Cant get state FOR=%s',address) return None return result