diff --git a/app/platform/fabric/Proxy.ts b/app/platform/fabric/Proxy.ts index d8023ab45..2af88a6c9 100644 --- a/app/platform/fabric/Proxy.ts +++ b/app/platform/fabric/Proxy.ts @@ -597,4 +597,24 @@ export class Proxy { } return results; } + + /* + * @param {*} contract_name + * @returns + * @memberof Proxy + */ + async getContractMetadata(network_id, contract_name) { + const client = this.platform.getClient(network_id); + const channel_name = Object.keys(client.fabricGateway.config.channels)[0]; + let metadata; + try { + metadata = await client.fabricGateway.queryContractMetadata(channel_name, contract_name); + } catch (e) { + logger.debug('getContractMetadata >> ', e); + } if (metadata) { + return metadata; + } + logger.error('response_payloads is null'); + return 'response_payloads is null'; + } } diff --git a/app/platform/fabric/gateway/FabricGateway.ts b/app/platform/fabric/gateway/FabricGateway.ts index 3c8770060..bd41775f4 100644 --- a/app/platform/fabric/gateway/FabricGateway.ts +++ b/app/platform/fabric/gateway/FabricGateway.ts @@ -523,4 +523,14 @@ export class FabricGateway { return null; } } + async queryContractMetadata(channel_name, contract_name) { + const network = await this.gateway.getNetwork(channel_name); + // Get the contract from the network.        + const contract = network.getContract(contract_name); + // Get the contract metadata from the network. + const result = await contract.evaluateTransaction('org.hyperledger.fabric:GetMetadata'); + const metadata = JSON.parse(result.toString('utf8')); + logger.debug('queryContractMetadata', metadata) + return metadata; + } } diff --git a/app/rest/platformroutes.ts b/app/rest/platformroutes.ts index 517264a9a..19441e52c 100644 --- a/app/rest/platformroutes.ts +++ b/app/rest/platformroutes.ts @@ -254,6 +254,21 @@ export async function platformroutes( } }); }); - + + /** + * Return channel metadata + * GET /metadata + * curl -i 'http://:/metadata/' + */ + router.get('/metadata/:chaincode', (req, res) => { + const chaincode = req.params.chaincode; + if (chaincode) { + proxy.getContractMetadata(req.network, chaincode).then((data: any) => { + res.send({ status: 200, data: data }); + }); + } else { + return requtil.invalidRequest(req, res); + } + }); } // End platformroutes()