如何在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 评估从分类帐中查询状态的交易。