视频教程 https://pan.baidu.com/s/1mFMPIXTSR1-wuRaLm7y6hw
网上大多数hyperledger fabric的教程都是基于0.6或者1.0等比较老的版本, 主要采用go语言开发chaincode, 采用java-sdk去调用链码.
从fabirc1.1开始,官方推荐使用nodejs去开发链码,node-sdk调用代码. 传智播客物联网+区块链学院带您使用nodejs开发hyperledger.
建议使用ubuntu服务器,这里我直接使用了阿里云的乞丐版服务器,配置如下:
操作系统为Ubuntu 14.04(64位)为保证后续步骤一致,请使用跟我相同的版本.
用putty或者xshell远超连接进去
apt-get update apt-get install git
请不要直接apt安装旧版本的docker
# step 1: 安装必要的一些系统工具 sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common # step 2: 安装GPG证书 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # Step 3: 写入软件源信息 sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # Step 4: 更新并安装 Docker-CE sudo apt-get -y update sudo apt-get -y install docker-ce
安装完毕后效果如下: 查看版本 image
从docker官方的镜像服务器里面下载image非常慢, 使用阿里云的好处是可以拥有阿里的镜像加速服务, 速度可以达到百兆级别. 如果不配置也没有问题~ 多等一段时间就行了.
ubuntu14.04系统采用不支持systemctl
#重启docker服务
service docker restart点击官方参考文档
- 注意: 按照官方文档执行, 需要全局翻墙才行
- 安装完检查目录结构和docker镜像:
git clone https://github.com/hyperledger/fabric-samples.git
运行如下命令:
#1. 配置环境变量, fabirc的二进制工具 export PATH=/root/bin:$PATH #2. 生成hyperledger fabric的各种区块链配置 ./byfn.sh -m generate #3. 安装docker-compose curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 参考文档 https://github.com/docker/compose/releases #4. 启动first-network ./byfn.sh -m up
(腾讯云不存在这个问题,自己装ubuntu也不存在这个问题)
/etc/resolv.conf 注释掉 options timeout:2 attempts:3 rotate single-request-reopen 重新执行
./byfn.sh -m down ./byfn.sh -m up
就能够正常启动了.
接下来你能看到,peer节点启动,通道建立, 加入通道, 设置锚节点,实例化链码,调用链码等一系列的操作.如果你看到下面的图,恭喜你! 你的网络搭建好了. image
看到上面的截图,说明你的开发环境已经准备好, 接下来我们就可以搭建自己的组织结构,编写nodejs的链码了.
./byfn.sh -m down
来到fabirc-sample目录的basic-network文件夹
说明: 启用开发者模式,这样加快调试部署,减少资源开销 开启7052端口, 开发模式下不使用tls会减少出错的概率,生产环境需要启用tls
image 增加cli节点, cli是方面我们执行控制指令的终端. 我们会使用他与各个peer节点进行交互. 后面这些手动的命令,会通过nodejs的api来调用
可以看到启动了ca节点,peer节点,order节点,cli节点和couchdb,创建了channel,peer加入了channel
docker ps #可以看到当前运行的docker容器, peer,order,couchdb,ca,cli节点 docker exec -it bash #进入cli容器 peer channel list #查看当前peer加入的channel
请安装>8.0版本的nodejs
官网连接 点我直达
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs#1.创建mycc文件夹 mkdir mycc #2. 初始化package.json文件 npm init #3. 修改package.json文件 npm install --save fabric-shim --registry=https://registry.npm.taobao.org
成功后 目录结构如下: 终于package.json文件 image
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());
他们之间通过grcp协议通信
CORE_CHAINCODE_ID_NAME="mycc:v0" npm start -- --peer.address grpc://192.168.0.1:7052这是peer上chaincode的生命周期
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/
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:7050CORE_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可以查看到zzh账户上有100块钱.
试着自己实现一下transfer方法吧
./stop.sh ./teardown.sh
docker ps
无内容就说明环境清理干净