June 18, 2019

Oracle blockchain error: chaincode fingerprint mismatch data mismatch

[#OBP]

There are two Organizations (one is the founder and the other is a participant) in a channel (channel name is team1)  in Oracle blockchain network. A chaincode (chain code name is "oow") is deployed and instantiated with version v1 in the founder. A line in the chaincode is changed and deployed the code in the participant with the same version v1. While executing the REST endpoints, below error occurred as Oracle blockchain tries to match the code and their versions in all the peers of the channel and the chaincode are not matching in the peers. Solution for this is to deploy the chaincode with the new version on all the organizations.

{
    "returnCode": "Failure",
    "info": {
        "proxyError": "Proposal not pass",
        "peerErrors": [
            {
                "peerId": "prodhonestpeer1",
                "errMsg": "Sending proposal to prodhonestpeer1 failed because of: gRPC failure=Status{code=UNKNOWN, description=error executing chaincode: could not get ChaincodeDeploymentSpec for oow:v1.2: get ChaincodeDeploymentSpec for oow/team1 from LSCC error: chaincode fingerprint mismatch data mismatch, cause=null}",
                "verified": false
            },
            {
                "peerId": "prodhonestpeer0",
                "errMsg": "Sending proposal to prodhonestpeer0 failed because of: gRPC failure=Status{code=UNKNOWN, description=error executing chaincode: could not get ChaincodeDeploymentSpec for oow:v1.2: get ChaincodeDeploymentSpec for oow/team1 from LSCC error: chaincode fingerprint mismatch data mismatch, cause=null}",
                "verified": false
            }
        ]
    },
    "txid": "973a7518438bf9c62db240ea41dce88ef78854caa20"
}

#OBP #OracleBlockchain #Blockchain

May 6, 2019

Oracle blockchain error: executing chaincode premature execution

[#OBPCS]

I received the below error while executing a rest service of a participant in the Oracle Blockchain network. I deployed and instantiated successfully a new version of a chain code into all the participants of a channel in the network. While executing the corresponding rest service, it has thrown the below error. This is because I executed the rest service immediately after the code was instantiated. It took a few seconds to available. I executed the rest service again after a few seconds and then it worked without any code or configuration changes. :).

It looks funny, but it worked for me.  So, when you see this error, don't be panic. Just wait a few seconds and try again. This is because it may take some time for chain code to be ready on rest servers as these changes have to be applied to many containers in the backend.

{
"returnCode":"Failure",
"info":{
"proxyError":"Failed query proposal from peer(s) prodorganicpeer1, prodorganicpeer0.",
"peerErrors":[
{
"peerId":"prodorganicpeer1",
"errMsg":"Sending proposal to prodorganicpeer1 failed because of: gRPC failure=Status{code=UNKNOWN, description=error executing chaincode: premature execution - chaincode (oow:v1.3) launched and waiting for registration, cause=null}",
"verified":false
},
{
"peerId":"prodorganicpeer0",
"errMsg":"Sending proposal to prodorganicpeer0 failed because of: gRPC failure=Status{code=UNKNOWN, description=error executing chaincode: premature execution - chaincode (oow:v1.3) launched and waiting for registration, cause=null}",
"verified":false
}
]
}}

#OBPCS #OracleBlockchain #Blockchain

March 22, 2019

OBP - Writing Blockchain chaincode in Node JS

[OBP]

This post is to show how to write a chain code in NodeJS. Since version 1.2, the opensource Hyperledger fabric blockchain framework supports nodeJS to write chain codes. As Oracle Blockchain Platform (OBP) built on Hyperledger fabric and it upgrades to Hyperledger fabric 1.3 (latest version), we can also write chain codes using NodeJS in OBP.

Let's see a sample chain code. Below is the procedure to write and deploy a chain code into OBP written in Node JS.

  • Create a package.json file with the basic details and dependencies of the libraries
  • Create node js file/files (.js) and configure them to the above package.json
  • Zip the folder with both js and package.json files
  • Click on "Deploy chain code" in OBP under "Chaincodes" tab and select the zip file
Note: You just need to create package.json, not required to run npm commands to install the dependent libraries in the folder before packaging(zip) the project as the OBP will run internally once you deploy the code.

Below is the sample package.json file.


{

"name": "reviews",
"version": "1.0.0",
"description": "Chaincode implemented in node.js",
"engines": {
"node": ">=8.4.0",
"npm": ">=5.3.0"
},
"scripts": { "start" : "node reviews.js" },
"engine-strict": true,
"license": "Apache-2.0",
"dependencies": {
"fabric-shim": "~1.1.0"
}
}


Below is the sample Node js file.


const shim = require('fabric-shim');

const Chaincode = class {

    async Init(stub) {
        return shim.success();
    }

    async Invoke(stub) {
        let ret = stub.getFunctionAndParameters();
        let method = this[ret.fcn];
        console.log("Inside invoke. Calling method: " + ret.fcn);
        if (!method) {
            shim.error(Buffer.from('Received unknown function ' + ret.fcn + ' invocation'));
        }

        try {
            let payload = await method(stub, ret.params);
            return shim.success(payload);
        } catch (err) {
            console.log(err);
            return shim.error(err);
        }
    }
    //Method to save or update a user review to a product
    async saveReview(stub, args) {
        console.log("inside saveReview: " + JSON.stringify(args));
        if (args.length < 3) {
            throw 'Incorrect number of arguments. Expecting productid,userid and rating.';
        }
        var assetReview = {};
        assetReview.productid = args[0];//String
        assetReview.userid = args[1];//String
        assetReview.rating = args[2];//Number
        assetReview.comment = args[3];//String
        await stub.putState(key, Buffer.from(JSON.stringify(assetReview)));

    }//End of method

}

shim.start(new Chaincode());


Note: In the above js sample, the first statement requires fabric-shim package which is mandatory to execute the chain code.