I am trying to create a gateway using @hyperledger/fabric-gateway
module in Nodejs.
I am able to enroll the admin and the user but after creating the gateway the NetworkImpl and ContractImpl both are blank.
and when trying to run the submitTransaction method it gives out this error:
NetworkImpl {}
ContractImpl {}
/home/kshitij/Desktop/api/fabric-test-task/node_modules/@hyperledger/fabric-gateway/dist/client.js:36
return new Promise((resolve, reject) => this.#client.makeUnaryRequest(exports.endorseMethod, serialize, deserializeEndorseResponse, request, buildOptions(this.#defaultOptions.endorseOptions, options), newUnaryCallback(resolve, reject, (err) => new endorseerror_1.EndorseError(Object.assign(err, { transactionId: request.getTransactionId() })))));
^
EndorseError: 14 UNAVAILABLE: Name resolution failed for target dns:grpcs://localhost:9051
at /home/kshitij/Desktop/api/fabric-test-task/node_modules/@hyperledger/fabric-gateway/dist/client.js:36:253
at Object.callback (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@hyperledger/fabric-gateway/dist/client.js:101:20)
at Object.onReceiveStatus (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@grpc/grpc-js/build/src/client.js:192:36)
at Object.onReceiveStatus (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:360:141)
... 2 lines matching cause stack trace ...
at process.processTicksAndRejections (node:internal/process/task_queues:77:11) {
code: 14,
details: [],
cause: Error: 14 UNAVAILABLE: Name resolution failed for target dns:grpcs://localhost:9051
at callErrorFromStatus (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@grpc/grpc-js/build/src/call.js:31:19)
at Object.onReceiveStatus (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@grpc/grpc-js/build/src/client.js:192:76)
at Object.onReceiveStatus (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:360:141)
at Object.onReceiveStatus (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:323:181)
at /home/kshitij/Desktop/api/fabric-test-task/node_modules/@grpc/grpc-js/build/src/resolving-call.js:99:78
at process.processTicksAndRejections (node:internal/process/task_queues:77:11)
for call at
at Client.makeUnaryRequest (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@grpc/grpc-js/build/src/client.js:160:32)
at /home/kshitij/Desktop/api/fabric-test-task/node_modules/@hyperledger/fabric-gateway/dist/client.js:36:62
at new Promise (<anonymous>)
at GatewayClientImpl.endorse (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@hyperledger/fabric-gateway/dist/client.js:36:16)
at ProposalImpl.endorse (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@hyperledger/fabric-gateway/dist/proposal.js:43:52)
at async ContractImpl.submitAsync (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@hyperledger/fabric-gateway/dist/contract.js:48:29)
at async ContractImpl.submit (/home/kshitij/Desktop/api/fabric-test-task/node_modules/@hyperledger/fabric-gateway/dist/contract.js:40:27)
at async getContractObject (/home/kshitij/Desktop/api/fabric-test-task/server.js:126:18)
at async main (/home/kshitij/Desktop/api/fabric-test-task/server.js:173:32) {
code: 14,
details: 'Name resolution failed for target dns:grpcs://localhost:9051',
metadata: Metadata { internalRepr: Map(0) {}, options: {} }
},
transactionId: '2778594f7660710c77d4a08c5f9ad943da3cf0e4c10db2523840dce29b0f0f90'
}
This the function using the gateway:
const getContractObject = async (wallet, ccp, userName, org, contractName) => {
let identity = await wallet.get(userName);
client = await getClient(ccp, userName, org);
const gateway = connect({
client,
identity: await getIdentity(identity),
signer: getSigner(identity)
});
const network = await gateway.getNetwork(process.env.CHANNEL);
console.log(network)
let contract = await network.getContract(contractName);
console.log(contract)
// console.log(contract.getContractName())
let result = await contract.submitTransaction('CreateEvidence', "xyxyx", userName, "100", "Hacking", "xss.png", "png", "zzzzz");
console.log(result)
// return result
}
helper functions:
const getClient = async (ccp, userName, org) => {
console.log(ccp.peers[`${userName}.${org}.evidence-vault.com`].url)
const tlsCredentials = grpc.credentials.createSsl(Buffer.from(ccp.peers[`${userName}.${org}.evidence-vault.com`].tlsCACerts.pem));
return new grpc.Client(ccp.peers[`${userName}.${org}.evidence-vault.com`].url, tlsCredentials, {
'grpc.ssl_target_name_override': ccp.peers[`${userName}.${org}.evidence-vault.com`].grpcOptions.ssl_target_name_override,
});
};
const getSigner = (identity) => {
const privateKeyPem = identity.credentials.privateKey;
const privateKey = crypto.createPrivateKey(privateKeyPem);
return signers.newPrivateKeySigner(privateKey);
};
const getIdentity = async (identity) => {
return { mspId: identity.mspId, credentials: identity.credentials.certificate };
};
The connection profile which i am using
{
"name": "EvidenceVault-Forensic",
"version": "1.0.0",
"client": {
"organization": "Forensic",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
}
}
}
},
"organizations": {
"Police": {
"mspid": "ForensicMSP",
"peers": [
"FD100.forensic.evidence-vault.com",
"FD101.forensic.evidence-vault.com"
],
"certificateAuthorities": [
"ca.forensic.evidence-vault.com"
]
}
},
"peers": {
"FD100.forensic.evidence-vault.com": {
"url": "grpcs://localhost:9051",
"tlsCACerts": {
"pem": "/home/kshitij/Desktop/EvidenceVault/artifacts/crypto-config/peerOrganizations/forensic.evidence-vault.com/peers/FD100.forensic.evidence-vault.com/msp/tlscacerts/tlsca.forensic.evidence-vault.com-cert.pem"
},
"grpcOptions": {
"ssl-target-name-override": "FD100.forensic.evidence-vault.com",
"hostnameOverride": "FD100.forensic.evidence-vault.com"
}
},
"FD101.forensic.evidence-vault.com": {
"url": "grpcs://localhost:10051",
"tlsCACerts": {
"pem": "/home/kshitij/Desktop/EvidenceVault/artifacts/crypto-config/peerOrganizations/forensic.evidence-vault.com/peers/FD100.forensic.evidence-vault.com/msp/tlscacerts/tlsca.forensic.evidence-vault.com-cert.pem"
},
"grpcOptions": {
"ssl-target-name-override": "FD101.forensic.evidence-vault.com",
"hostnameOverride": "FD101.forensic.evidence-vault.com"
}
}
},
"certificateAuthorities": {
"ca.forensic.evidence-vault.com": {
"url": "https://localhost:8054",
"caName": "ca.forensic.evidence-vault.com",
"tlsCACerts": {
"pem": "/home/kshitij/Desktop/EvidenceVault/artifacts/crypto-config/peerOrganizations/forensic.evidence-vault.com/ca/ca.forensic.evidence-vault.com-cert.pem"
},
"httpOptions": {
"verify": false
}
}
}
}
I think the name resolution error is because there is nothing present in the NetworkImpl and ContractImpl, Why is it happening?
Kshitij Sonawane is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.