def test_query_block_by_hash_encoded(self): loop = asyncio.get_event_loop() loop.run_until_complete(self.invoke_chaincode()) orgs = ["org1.example.com"] for org in orgs: org_admin = self.client.get_user(org, "Admin") # get hash value from block response = self.client.query_info(requestor=org_admin, channel_name=self.channel_name, peers=[self.peer], decode=True) channel_info = loop.run_until_complete(asyncio.gather(response)) last_block_hash = channel_info[0].currentBlockHash response = self.client.query_block_by_hash( requestor=org_admin, channel_name=self.channel_name, peers=[self.peer], block_hash=last_block_hash, decode=False) res = loop.run_until_complete(asyncio.gather(response)) self.assertEqual(len(res), 1) block = common_pb2.Block() try: block.ParseFromString(res[0]) except Exception as e: raise e self.assertEqual(block.header.number, 2)
def decode(block_bytes): """Constructs a JSON Object containing all decoded values from protobuf encoded `Block` bytes. :param block_bytes: Block instance :return: Dictionary containing decoded Block instance. :type block_bytes: bytes """ block = {} try: proto_block = common_pb2.Block() proto_block.ParseFromString(block_bytes) block['header'] = decode_block_header(proto_block.header) block['data'] = decode_block_data(proto_block.data, True) block['metadata'] = decode_block_metadata(proto_block.metadata) except Exception as e: raise ValueError("BlockDecoder :: decode failed", e) return block
def get_channel_config(self, requestor, channel_name, peer_names, decode=True): """ Get configuration block for the channel :param requestor: User role who issue the request :param channel_name: name of channel to query :param peer_names: Names of the peers to query :param deocode: Decode the response payload :return: A `ChaincodeQueryResponse` or `ProposalResponse` """ peers = [] for peer_name in peer_names: peer = self.get_peer(peer_name) peers.append(peer) channel = self.get_channel(channel_name) tx_context = create_tx_context(requestor, ecies(), TXProposalRequest()) responses = channel.get_channel_config(tx_context, peers) try: if responses[0][0].response and decode: _logger.debug('response status {}'.format( responses[0][0].response.status)) block = common_pb2.Block() block.ParseFromString(responses[0][0].response.payload) envelope = common_pb2.Envelope() envelope.ParseFromString(block.data.data[0]) payload = common_pb2.Payload() payload.ParseFromString(envelope.payload) config_envelope = configtx_pb2.ConfigEnvelope() config_envelope.ParseFromString(payload.data) return config_envelope return responses[0][0] except Exception: _logger.error("Failed to get channel config block: {}", sys.exc_info()[0]) raise
def test_query_transaction_id_encoded(self): loop = asyncio.get_event_loop() tx_id = loop.run_until_complete(self.invoke_chaincode()) response = self.client.query_block_by_txid(requestor=self.org1_admin, channel_name=self.channel_name, peers=[self.peer], tx_id=tx_id, decode=False) res = loop.run_until_complete(asyncio.gather(response)) self.assertEqual(len(res), 1) block = common_pb2.Block() try: block.ParseFromString(res[0]) except Exception as e: raise e self.assertEqual(block.header.number, 2)
def test_query_block_encoded(self): loop = asyncio.get_event_loop() loop.run_until_complete(self.invoke_chaincode()) orgs = ["org1.example.com"] for org in orgs: org_admin = self.client.get_user(org, "Admin") response = self.client.query_block(requestor=org_admin, channel_name=self.channel_name, peers=[self.peer], block_number='1', decode=False) res = loop.run_until_complete(asyncio.gather(response)) self.assertEqual(len(res), 1) block = common_pb2.Block() try: block.ParseFromString(res[0]) except Exception as e: raise e self.assertEqual(block.header.number, 1)