nodejs编写链码

2019-12-14  本文已影响0人  52hz_55ed

https://github.com/itheima1/hyperledger

安装nodejs环境

在chaincode目录
mycc可以自定义名称

mkdir mycc
cd mycc

安装并初始化npm

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
npm init

将“test”键值对修改为“start”键值对(haha可自定义)

vi package.json
"start": "node haha.js"

下载fabric-shim环境

npm install --save fabric-shim
cat package.json

如果安装fabric-shim报错.则需要安装

sudo apt-get install -y build-essential

查看改js会发现多了以下键值对,说明安装成功

"fabric-shim": "^1.4.4"

生成对应的js文件

touch haha.js
vi haha.js

js文件模板(haha.js)

//导入环境依赖
const shim = require('fabric-shim');
const Chaincode = class{
    //链码初始化操作
    async Init(stub){
        //获取当前方法的名字和参数
        var ret = stub.getFunctionAndParameters();
        var args  = ret.params;
        var a = args[0];
        var aValue = args[1];
        var b = args[2];
        var bValue = args[3];
        await  stub.putState(a,Buffer.from(aValue));
        await  stub.putState(b,Buffer.from(bValue));
        return shim.success(Buffer.from('heima chaincodinit successs'));
    }
    
    async Invoke(stub){
        let ret = stub.getFunctionAndParameters();
        let fcn = this[ret.fcn];
        return fcn(stub,ret.params);
    }
    //查询操作
    async query(stub,args){
        let a = args[0];
        let balance = await stub.getState(a);
        return shim.success(balance);
    }

};
shim.start(new Chaincode());

开发者模式环境搭建

进入basic-network编辑docker-compose-cli.yaml

command:  peer node start
#command: peer node start --peer-chaincodedev=true
ports:
      - 7051:7051
      - 7053:7053

修改为

#command: peer node start
command: peer node start --peer-chaincodedev=true
ports:
      - 7051:7051
      - 7052:7052
      - 7053:7053

修改start.sh文件,在

docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb

修改为

docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb cli

chaincode注册给peer

他们之间通过grcp协议通信(在虚拟机终端输入)

CORE_CHAINCODE_ID_NAME="mycc:v0"  npm start -- --peer.address grpc://192.168.0.1:7052

注意:如果输入ifconfig发现docker0IP不同,需要修改为实际docker0的ip
若修改了nodejs,关闭通信,重复上面代码即可

安装链码

这是peer上chaincode的生命周期(在docker cli的终端输入)

CORE_PEER_LOCALMSPID=Org1MSP CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp peer chaincode install -l node -n mycc -v v0 -p /opt/gopath/src/github.com/mycc/

实例化链码(在docker cli的终端输入)

CORE_PEER_LOCALMSPID=Org1MSP CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp peer chaincode instantiate -l node -n mycc -v v0 -C mychannel -c '{"args":["init","zzh","100","czbk","100"]}' -o 192.168.0.1:7050

注意:此处ip同样需要通过ipconfig查询docker0的IP地址

测试链码调用(在docker cli的终端输入)

CORE_PEER_LOCALMSPID=Org1MSP CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp peer chaincode invoke -n mycc -C mychannel -c '{"args":["query","zzh"]}' -o 192.168.0.1:7050

停止网络使用

./stop.sh ./teardown.sh
上一篇 下一篇

猜你喜欢

热点阅读