如何在node js sdk中使用qscc?
How to use qscc in node js sdk?
我正在尝试使用 qscc 中的 GetTransactionByID。
使用其中一个示例中的代码,我尝试了 运行 这个 :-
import fs from 'fs';
import yaml from 'js-yaml';
import path from 'path';
import { Wallets, Gateway } from 'fabric-network';
export async function submitTransaction(txnName: string, args: Array<any>) {
const walletPath = path.join(
process.cwd(),
'../identity/user/isabella/wallet',
);
const wallet = await Wallets.newFileSystemWallet(walletPath);
const gateway = new Gateway();
try {
const userName = 'isabella';
const yamlFile = path.join(
process.cwd(),
'../gateway/connection-org2.yaml',
);
let connectionProfile: any = yaml.load(
fs.readFileSync(yamlFile, 'utf8'),
);
let connectionOptions = {
identity: userName,
wallet: wallet,
discovery: { enabled: true, asLocalhost: true },
};
console.log('Connect to Fabric gateway.');
await gateway.connect(connectionProfile, connectionOptions);
console.log('Use network channel: mychannel.');
const network = await gateway.getNetwork('mychannel');
const contract = await network.getContract('qscc');
console.log('Submitting transaction');
const response = await contract.submitTransaction(txnName, ...args);
console.log('Transaction Response :-');
console.log(response);
} catch (error) {
console.log(`Error processing transaction. ${error}`);
console.log(error.stack);
} finally {
console.log('Disconnection from gateway');
gateway.disconnect();
}
}
submitTransaction('GetTransactionByID', [
'mychannel',
'f02954ae3723721459596f3ccdd89b36f8eca11d851f1aa7aeb4cb0bab148ab9',
]);
但是我得到以下错误:-
2021-02-11T17:25:46.564Z - warn: [TransactionEventHandler]: strategyFail: commit failure for transaction "476873023684d8af68f5e05c965fee91be06255659eabd961601dad05501de03": TransactionError: Commit of transaction 476873023684d8af68f5e05c965fee91be06255659eabd961601dad05501de03 failed on peer peer0.org2.example.com:9051状态 INVALID_CHAINCODE
我可以使用 peer cli 调用相同的方法:-
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "$ORDERER_CA" -C mychannel -n qscc -c '{"function" :"GetTransactionByID","Args":["mychannel", "f02954ae3723721459596f3ccdd89b36f8eca11d851f1aa7aeb4cb0bab148ab9"]}'
如何在节点 js 应用程序中调用此链代码?
如果您只是想查询分类帐,您可能想使用 contract.evaluateTransaction
而不是 contract.submitTransaction
。
来自Fabric Node SDK doc for Fabric NetworkContract interface:
合同允许应用程序:
- 使用 submitTransaction 将存储状态的交易提交到分类帐。
- 使用 evaluateTransaction 评估从分类帐中查询状态的交易。
我正在尝试使用 qscc 中的 GetTransactionByID。 使用其中一个示例中的代码,我尝试了 运行 这个 :-
import fs from 'fs';
import yaml from 'js-yaml';
import path from 'path';
import { Wallets, Gateway } from 'fabric-network';
export async function submitTransaction(txnName: string, args: Array<any>) {
const walletPath = path.join(
process.cwd(),
'../identity/user/isabella/wallet',
);
const wallet = await Wallets.newFileSystemWallet(walletPath);
const gateway = new Gateway();
try {
const userName = 'isabella';
const yamlFile = path.join(
process.cwd(),
'../gateway/connection-org2.yaml',
);
let connectionProfile: any = yaml.load(
fs.readFileSync(yamlFile, 'utf8'),
);
let connectionOptions = {
identity: userName,
wallet: wallet,
discovery: { enabled: true, asLocalhost: true },
};
console.log('Connect to Fabric gateway.');
await gateway.connect(connectionProfile, connectionOptions);
console.log('Use network channel: mychannel.');
const network = await gateway.getNetwork('mychannel');
const contract = await network.getContract('qscc');
console.log('Submitting transaction');
const response = await contract.submitTransaction(txnName, ...args);
console.log('Transaction Response :-');
console.log(response);
} catch (error) {
console.log(`Error processing transaction. ${error}`);
console.log(error.stack);
} finally {
console.log('Disconnection from gateway');
gateway.disconnect();
}
}
submitTransaction('GetTransactionByID', [
'mychannel',
'f02954ae3723721459596f3ccdd89b36f8eca11d851f1aa7aeb4cb0bab148ab9',
]);
但是我得到以下错误:-
2021-02-11T17:25:46.564Z - warn: [TransactionEventHandler]: strategyFail: commit failure for transaction "476873023684d8af68f5e05c965fee91be06255659eabd961601dad05501de03": TransactionError: Commit of transaction 476873023684d8af68f5e05c965fee91be06255659eabd961601dad05501de03 failed on peer peer0.org2.example.com:9051状态 INVALID_CHAINCODE
我可以使用 peer cli 调用相同的方法:-
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "$ORDERER_CA" -C mychannel -n qscc -c '{"function" :"GetTransactionByID","Args":["mychannel", "f02954ae3723721459596f3ccdd89b36f8eca11d851f1aa7aeb4cb0bab148ab9"]}'
如何在节点 js 应用程序中调用此链代码?
如果您只是想查询分类帐,您可能想使用 contract.evaluateTransaction
而不是 contract.submitTransaction
。
来自Fabric Node SDK doc for Fabric NetworkContract interface:
合同允许应用程序:
- 使用 submitTransaction 将存储状态的交易提交到分类帐。
- 使用 evaluateTransaction 评估从分类帐中查询状态的交易。