Fabric Lab
1.Fabric环境搭建与基本操作
2.Fabric链码基础
3.Fabric项目架构
Fabric实践一:环境搭建与基本操作
一、Fabric环境搭建
本文用于指导Fabric在基于Ubuntu的Linux系统中的安装与配置,如有未安装过的同学可以参考本指南自行配置。
相关组件版本号:
名称 版本
Ubuntu 16.04
Fabric 1.4
Docker 20.10.5
Docker-compose 1.8.0
Go 1.12.5
Git 2.7.4
Curl 7.47.0
Pip 20.3.4
Node.js 8.17.0
Npm 6.14.6
Gcc 5.4.0
1.前置环境安装
a)安装vmtools
sudo apt-get install open-vm-tools
b)ubuntu换源
换阿里源:参考:https://www.daweibro.com/node/142 //找不到文件夹
注意里面使用到vim文本编辑器,它的操作比较复杂,没有使用过的同学可以使用gedit,将里面的vim换成gedit即可。
c)安装 git、curl、pip
sudo apt-get install git
sudo apt-get install curl
sudo apt-get install python-pip
d)安装go
(1)安装文件下载
下载网址:https://www.golangtc.com/download
本次安装使用的源码版本为:go1.12.5.linux-amd64.tar.gz
(2)执行以下命令,解压安装文件到指定目录
sudo tar -xzvf go1.12.5.linux-amd64.tar.gz -C /usr/local//自己到文件夹解压
(3)添加环境变量(下面环境变量的添以自己目录结构为准)
编辑/etc/profile文件,在最后添加如下信息后,保存。
export GOROOT=/usr/local/go
export GOBIN=
H
O
M
E
/
w
o
r
k
s
p
a
c
e
/
g
o
/
b
i
n
/
/
找
不
到
文
件
夹
e
x
p
o
r
t
P
A
T
H
=
HOME/workspace/go/bin//找不到文件夹 export PATH=
HOME/workspace/go/bin//找不到文件夹exportPATH=PATH:
G
O
B
I
N
:
GOBIN:
GOBIN:GOROOT/bin//找不到文件夹
export GOPATH=$HOME/workspace/go//找不到文件夹
(4)执行以下命令使文件生效
source /etc/profile//找不到文件夹
(5)检查环境变量是否配置成功
go version(如显示go version go1.12.7 linux/amd64则表示安装成功)
e)安装node.js、npm
sudo apt-get install nodejs//有几个软件包无法安装
安装完成后,能使用 nodejs -v 命令查看版本号,则说明安装成功。由于 node.js 自带了 npm,只需安装 nodejs即可。//程序尚未安装,使用sudo apt install nodejs-legacy
f)安装gcc
sudo apt-get build-dep gcc
安装完成后,能使用gcc --version命令查看版本号,则说明安装成功。
2.docker、docker-compose安装
手动安装:
a)安装docker
(1)卸载可能存在的旧版本:
sudo apt-get remove docker docker-engine docker-ce docker.io
(2)更新 apt 包索引:
sudo apt-get update
(3)执行以下安装命令,使得 apt 可以通过 HTTPS 使用存储库(repository):
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
(4)添加Docker官方GPG密钥:
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
(5)设置 stable 存储仓库:
sudo add-apt-repository “deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable”
(6)再次更新 apt 包索引:
sudo apt-get update
(7)执行以下命令,安装最新版本的 Docker-ce:
sudo apt-get -y install docker-ce
(8)启动 Docker,并设置开机启动
启动 Docker:sudo systemctl start docker
设置开机启动:sudo systemctl enable docker
(9)运行 hello-world 镜像(测试是否安装成功)
sudo docker run hello-world
b)安装docker-compose
docker-compose 是支持通过模板脚本批量创建 docker 容器的一个组件。直接执行以下命令安装:
pip install docker-compose
使用docker-compose –version查看,若有版本信息则安装成功。
Sudo apt-get install docker-compose
3.fabric安装
a)创建并进入 hyperledger 目录:
mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/Hyperledger
b)下载fabric源码:
git clone https://github.com/hyperledger/fabric.git
c)将 fabric 切换至 1.4 版本:
cd fabric
git branch -a
sudo git checkout release-1.4
d)安装fabric-samples1.4.11至fabric目录内
下载地址:https://github.com/hyperledger/fabric-samples/tags 或使用网盘中的文件
将压缩包拖拽到ubuntu中的某个目录(如download),在目录中打开terminal。
sudo tar -xzvf fabric-samples-1.4.11.tar.gz -C ~/workspace/go/src/github.com/hyperledger/fabric/
e)下载fabric二进制文件和配置文件:
下载地址:https://github.com/hyperledger/fabric/releases/tag/v1.4.11
把压缩包拖拽到ubuntu中的某个目录(如download),在目录中打开terminal。
sudo tar -xzvf hyperledger-fabric-linux-amd64-1.4.11.tar.gz -C ~/workspace/go/src/github.com/hyperledger/fabric/fabric-samples-1.4.11/
下载并解压上图标红的压缩包,将解压得到的bin文件夹和config文件夹放至fabric/fabric-samples文件夹内。至此,相关组件均已完成安装。
二、fabric基本操作:first-network
参考https://hyperledger-fabric.readthedocs.io/en/release-1.4/build_network.html
a)下载必要的docker镜像
sudo docker pull hyperledger/fabric-peer:1.4.11
sudo docker pull hyperledger/fabric-orderer:1.4.11
sudo docker pull hyperledger/fabric-tools:1.4.11
b)修改镜像标签
sudo docker tag hyperledger/fabric-peer:1.4.11 hyperledger/fabric-peer:latest
sudo docker tag hyperledger/fabric-orderer:1.4.11 hyperledger/fabric- orderer:latest
sudo docker tag hyperledger/fabric-tools:1.4.11 hyperledger/fabric- tools:latest
c)运行以下命令进入到first-network准备启动网络:
cd fabric-samples/first-network
d)运行以下命令建立fabric网络:
./byfn.sh generate
注:其中first-network提供了一个带有完整注释的脚本—byfn.sh,该脚本利用Docker映像来快速引导Hyperledger Fabric网络,该网络默认情况下由代表两个不同组织的四个节点和一个排序节点组成。它还将启动一个容器来运行脚本化执行,该脚本将对等节点加入到通道(Channel)中,部署链码(Chaincode),并根据已部署的链式代码完成交易
链码:是用Go,node.js或Java编写的程序,可实现规定的接口,能够通过应用程序提交的交易初始化和管理账本状态。链码通常处理网络成员同意的业务逻辑,因此可以将其视为“智能合约”。
通道:是用于实现区块链网络中业务的隔离,一个联盟多个通道,每个通道可代表一项业务,并且对应一套账本,通道内的成员为业务参与方,一个组织可以加入多个通道。
e) 运行以下命令启动网络,包括通道和链码(当看到START和END后表示启动成功):
./byfn.sh up
注:(1)上面的命令将编译Golang链码。因为Golang是默认的链代码语言,但是还支持Node.js和Java链代码。如果使用其他语言节点链码来完成本教程,请改用以下命令:./byfn.sh up -l java;(2)如果想以Raft或者Kafka对交易进行排序,可以分别以下述两种命令重启网络,./byfn.sh up -o etcdraft和./byfn.sh up -o kafka。
f)运行以下命令关闭网络(如果要重启网络必须先关闭网络):
./byfn.sh down