コード例 #1
0
    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)
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
    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)
コード例 #5
0
    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)