Welcome to the Linux Foundation Forum!

submitTransaction.js Issue: Commit of tx failed.

After following the docs' steps of deploying a production network, I think I finally achieve the goal (without mutual TLS) in a local environment (5 orderers, 5 peers, 5 CAs and 5 TLSCA). The problem appears when I use the application with this network configuration. Both enrollUser.js and registerUser.js works but submitTransaction does not. Here I got the error logs. It looks like the tx proposal is sent 3 times to the same peer because I attached to the 5 dev-peers docker containers and only one executes the function. If I execute the peer invoke command using the bash, the tx updates the world state. I do not know if I must point to the endorsers inside the node.js application.

I have searched on Google but I can not solve this problem.

Any help would be appreciated.

And the submitTransaction.js

'use strict';

const fs = require('fs');
const path = require('path');
const { Wallets, Gateway } = require('fabric-network');

const testNetworkRoot = path.resolve(require('os').homedir(), 'go/src/github.com/hyperledger/fabric-samples/tfm/tfm-network/fabric-ca/');

async function main() {
const gateway = new Gateway();
const wallet = await Wallets.newFileSystemWallet('./wallet');

try {
    let args = process.argv.slice(2);

    const identityLabel = args[0];
    const functionName = args[1];
    const chaincodeArgs = args.slice(2);

    // const orgName = identityLabel.split('@')[1];
    const orgNameWithoutDomain = 'originator';

    let connectionProfile = JSON.parse(fs.readFileSync(
        path.join(testNetworkRoot,  
            orgNameWithoutDomain, 
            `/connection-${orgNameWithoutDomain}.json`), 'utf8')
    );

    let connectionOptions = {
        identity: identityLabel,
        wallet: wallet,
        // clientTlsIdentity: 'tlsadmin@originator',
        discovery: {enabled: true, asLocalhost: true}
    };

    console.log("Here");
    console.log('Connect to a Hyperledger Fabric gateway.');
    await gateway.connect(connectionProfile, connectionOptions);

    console.log('Use channel "securitization".');
    const network = await gateway.getNetwork('securitization');

    console.log('Use Origination.');
    const contract = network.getContract('securitizationcode');

    console.log('Submit ' + functionName + ' transaction.');
    contract.createTransaction(functionName)
    // const response = await contract.createTransaction(functionName, ...chaincodeArgs);
    const response = await contract.submitTransaction(functionName, ...chaincodeArgs);
    if (`${response}` !== '') {
        console.log(`Response from ${functionName}: ${response}`);
    }

} catch (error) {
    console.log(`Error processing transaction. ${error}`);
    console.log(error.stack);
} finally {
    console.log('Disconnect from the gateway.');
    gateway.disconnect();
}

}

main();

Comments

  • Bobbijn
    Bobbijn Posts: 190

    Hello, Let's see if we can determine what is happening. You stated you were following the docs' steps of deploying a production network It would be helpful if you could specify what lab exercise you were attempting before your error message for the submitTransaction request. Thanks Bobbi

  • Hi Bobbi, I followed these instructions to create my own network and I used the Main Application Components content (registerUser.js, addToWallet.js, enrollUser.js and submitTransaction.js of Balance Transfer app) to customize my client applications. I can register and enroll with each orgCA as well as addToWallet, but submitTransaction does not work (I also tried the createTransaction method instead of submitTransaction). However if I invoke that chaincode function using invoke command it works. Thanks, Oliver

  • Bobbijn
    Bobbijn Posts: 190

    :)

Categories

Upcoming Training