fabric安装

一、环境配置

  • 建议使用 Linux 操作系统(虚拟机或服务器)不建议使用 Windows docker。

  • 为虚拟机配置国内源,以配置清华源为例(方便后面安装软件)

    • 进入清华大学源 (https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/)

    • 选择 Ubuntu 对应版本,复制以下镜像源代码

    • sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份源 
      
    • vim /etc/apt/sources.list #在打开的文件里用新复制的源替换原有的(把原有的删掉,粘贴新复制的)
      
    • sudo apt upgrade && sudo apt update #更新源
      

二、基础环境搭建

1. 安装git

1
sudo apt install git

2. 安装cURL

1
sudo apt install curl

3. 安装Docker

1
sudo apt install docker.io

查看Docker版本信息

1
docker --version

建议在 docker 安装完成后,先配置镜像加速器,养成好习惯…

镜像加速器 镜像加速器地址
Docker 中国官方镜像 https://registry.docker-cn.com
科大镜像站 https://docker.mirrors.ustc.edu.cn
七牛云 https://reg-mirror.qiniu.com

4. 安装Docker-compose

1
apt install docker-compose

查看docker-compose版本信息

1
docker-compose --version

三、fabric安装与测试

安装

首先我们要将 fabric-samples 克隆下来。

然后我们可以看 Hyperledger Fabric 提供的官方中文文档

正常情况下直接按照文档上做就行,但是如果不能访问外网, https://bit.ly/2ysbOFE 这个链接是无法获取的。

所以我提供了快捷访问地址

放到 fabric-samples 文件夹里,然后 ./bootstrap.sh 运行,等待镜像下载完毕。

img_1.png

测试

我们进入到 fabric-samples/test-network 文件夹,启动Fabric的测试网络

1
sudo ./network.sh up

img_1.png

以上情况说明我们的测试网络已经启动起来了。

运行 docker ps -a 可以看到由 network.sh 脚本创建的三个节点

与Fabric网络互动的每个节点和用户都必须属于一个网络成员的组织。 Fabric网络成员的所有组织通常称为联盟(consortium)。 测试网络有两个联盟成员,Org1Org2。 该网络还包括一个维护网络排序服务的排序组织。

Peer 节点 是任何Fabric网络的基本组件。 对等节点存储区块链账本并在进行交易之前对其进行验证。 同行运行包含业务用于管理区块链账本的智能合约上的业务逻辑。

网络中的每个对等方都必须属于该联盟的成员。 在测试网络里,每个组织各自运营一个对等节点, peer0.org1.example.compeer0.org2.example.com.

每个Fabric网络还包括一个排序服务。 虽然对等节点验证交易并将交易块添加到区块链账本,他们不决定交易顺序或包含他们进入新的区块。 在分布式网络上,对等点可能运行得很远彼此之间没有什么共同点,并且对何时创建事务没有共同的看法。 在交易顺序上达成共识是一个代价高昂的过程,为同伴增加开销。

排序服务允许对等节点专注于验证交易并将它们提交到账本。 排序节点从客户那里收到认可的交易后,他们就交易顺序达成共识,然后添加区块。 这些区块之后被分配给添加这些区块到账本的对等节点。 排序节点还可以操作定义Fabric网络的功能的系统通道,例如如何制作块以及节点可以使用的Fabric版本。 系统通道定义了哪个组织是该联盟的成员。

该示例网络使用一个单节点Raft排序服务,该服务由排序组织运行。 可以看到在机器上正在运行的排序节点orderer.example.com。 虽然测试网络仅使用单节点排序服务,一个真实的网络将有多个排序节点,由一个或多个多个排序者组织操作。 不同的排序节点将使用Raft共识算法达成跨交易顺序的共识网络。

创建一个通道

现在我们的机器上正在运行对等节点和排序节点, 我们可以使用脚本创建用于在Org1和Org2之间进行交易的Fabric通道。 通道是特定网络成员之间的专用通信层。通道只能由被邀请加入通道的组织使用,并且对网络的其他成员不可见。 每个通道都有一个单独的区块链账本。被邀请的组织“加入”他们的对等节点来存储其通道账本并验证交易。

使用 network.sh 脚本在Org1和Org2之间创建通道并加入他们的对等节点。运行以下命令以创建一个默认名称为“mychannel”的通道:

./network.sh createChannel

出现一下日志,说明我们 channel 创建成功了。

1
2
Anchor peer set for org 'Org2MSP' on channel 'mychannel'
Channel 'mychannel' joined

也可以使用channel标志创建具有自定义名称的通道。以下命令将创建一个名为channel1的通道:

./network.sh createChannel -c channel1

通道标志还允许创建多个不同名称的多个通道。 创建mychannel或channel1之后,可以使用下面的命令创建另一个名为channel2的通道:

./network.sh createChannel -c channel2

在通道启动一个链码

创建通道后,可以开始使用智能合约与通道账本交互。 智能合约包含管理区块链账本上资产的业务逻辑。 由成员运行的应用程序网络可以在账本上调用智能合约创建,更改和转让这些资产。 应用程序还通过智能合约查询,以在分类帐上读取数据。

为确保交易有效,使用智能合约创建的交易通常需要由多个组织签名才能提交到通道账本。 多个签名是Fabric信任模型不可或缺的一部分。 一项交易需要多次背书,以防止一个通道上的单一组织使用通道不同意的业务逻辑篡改其对等节点的分类账本。 要签署交易,每个组织都需要调用并在其对等节点上执行智能合约,然后签署交易的输出。 如果输出是一致的并且已经有足够的组织签名,则可以将交易提交到账本。 该政策被称为背书政策,指定需要执行智能交易的通道上的已设置组织合同,针对每个链码设置为链码定义的一部分。

在Fabric中,智能合约作为链码以软件包的形式部署在网络上。 链码安装在组织的对等节点上,然后部署到某个通道,然后可以在该通道中用于认可交易和区块链账本交互。 在将链码部署到通道前,该频道的成员需要就链码定义达成共识,建立链码治理。 何时达到要求数量的组织同意后,链码定义可以提交给通道,并且可以使用链码了。

使用 network.sh 创建频道后,可以使用以下命令在通道上启动链码:

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java -ccl java

eployCC子命令将在peer0.org1.example.compeer0.org2.example.com上安装 asset-transfer (basic) 链码。 然后在使用通道标志(或mychannel如果未指定通道)的通道上部署指定的通道的链码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Chaincode definition committed on channel 'mychannel'
Using organization 1
Querying chaincode definition on peer0.org1 on channel 'mychannel'...
Attempting to Query committed status on peer0.org1, Retry after 3 seconds.
+ peer lifecycle chaincode querycommitted --channelID mychannel --name basic
+ res=0
Committed chaincode definition for chaincode 'basic' on channel 'mychannel':
Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true]
Query chaincode definition successful on peer0.org1 on channel 'mychannel'
Using organization 2
Querying chaincode definition on peer0.org2 on channel 'mychannel'...
Attempting to Query committed status on peer0.org2, Retry after 3 seconds.
+ peer lifecycle chaincode querycommitted --channelID mychannel --name basic
+ res=0
Committed chaincode definition for chaincode 'basic' on channel 'mychannel':
Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true]
Query chaincode definition successful on peer0.org2 on channel 'mychannel'

出现以下日志说明链码已经部署成功