手把手教你 hyperledger fabirc v1.1

发布于 2021-08-10 22:56:23 字数 7912 浏览 1297 评论 0

视频教程:https://pan.baidu.com/s/1mFMPIXTSR1-wuRaLm7y6hw

网上大多数 hyperledger fabric 的教程都是基于 0.6 或者 1.0 等比较老的版本,主要采用 go 语言开发 chaincode,采用 java-sdk 去调用链码。

从 fabirc1.1 开始,官方推荐使用 nodejs 去开发链码,node-sdk 调用代码,带您使用 nodejs 开发 hyperledger。

0.环境搭建准备工作

建议使用 ubuntu 服务器,这里我直接使用了阿里云的乞丐版服务器,配置如下:

操作系统为 Ubuntu 14.04 64位 为保证后续步骤一致,请使用跟我相同的版本。

1. 远超登录终端准备

用 putty 或者 xshell 远超连接进去

2. 安装 git

apt-get update
apt-get install git

3. 安装docker-ce

请不要直接 apt 安装旧版本的 docker

阿里云安装 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

安装完毕后效果如下,查看版本

4. 设置阿里云 docker 加速服务

从 docker 官方的镜像服务器里面下载 image 非常慢,使用阿里云的好处是可以拥有阿里的镜像加速服务,速度可以达到百兆级别,如果不配置也没有问题,多等一段时间就行了。

ubuntu 14.04 系统采用不支持 systemctl

#重启docker服务
service docker restart

5. 安装 hyperledger 的工具和 docker 镜像

点击官方 参考文档

注意:按照官方文档执行,需要全局翻墙才行。

安装完检查目录结构和 docker 镜像:

6. 下载官方的示例代码 fabric sample

git clone https://github.com/hyperledger/fabric-samples.git

7. 切换到 first-network 目录

8. 启动 fabric ledger 的第一个网络

运行如下命令:

#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

9. 修复阿里云服务器网络错误的问题

腾讯云不存在这个问题,自己装 ubuntu 也不存在这个问题。

/etc/resolv.conf

注释掉 options timeout:2 attempts:3 rotate single-request-reopen 重新执行

./byfn.sh -m down
./byfn.sh -m up

就能够正常启动了.

10. 验证网络搭建

接下来你能看到,peer 节点启动,通道建立,加入通道,设置锚节点,实例化链码,调用链码等一系列的操作。如果你看到下面的图,恭喜你 你的网络搭建好了。

看到上面的截图,说明你的开发环境已经准备好,接下来我们就可以搭建自己的组织结构,编写 nodejs 的链码了。

11. 停止网络请使用命令

./byfn.sh -m down

12. 切换到 basic-network 目录

来到 fabirc-sample 目录的 basic-network 文件夹

13. 修改 basic-network 的 docker-compose.yml

说明:启用开发者模式,这样加快调试部署,减少资源开销,开启7052端口,开发模式下不使用 tls 会减少出错的概率,生产环境需要启用 tls

14. 修改 脚本 start.sh


增加 cli 节点,cli 是方面我们执行控制指令的终端。我们会使用他与各个 peer 节点进行交互。后面这些手动的命令,会通过 nodejs 的 api 来调用

15. 启动脚本 start.h

可以看到启动了 ca 节点。peer 节点,order 节点,cli 节点和 couchdb,创建了 channel,peer 加入了 channel

16. 查看状态

docker ps
#可以看到当前运行的docker容器, peer,order,couchdb,ca,cli节点
docker exec -it bash 
#进入cli容器
peer channel list
#查看当前peer加入的channel

17. chaincode 编写需要使用 nodejs

请安装>8.0版本的 nodejs,官网连接 点我直达

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

18.编写 nodejs 的 chaincode

#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 文件

19. 编写 nodejs 链码

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());

20. 把 chaincode 注册给 peer

他们之间通过 grcp 协议通信

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

21. 在 peer 上 install 安装链码

这是 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/

22. 在 peer 上实例化链码

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

23. 测试链码调用

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

可以查看到zzh账户上有100块钱.

24. 同理大家可以实现转账的操作.

试着自己实现一下 transfer 方法吧

25. 停止网络使用

./stop.sh ./teardown.sh

26. 查看环境是否清理干净

docker ps

无内容就说明环境清理干净

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文