从零开始fabric联盟链环境搭建

237 阅读7分钟

参考学长的文章,重新把fabric和长安链过一遍
juejin.cn/user/104277…

fabric搭建

警告:建议Fabric所有实验过程皆在root权限下进行,否则在sudo权限切换的过程中会出现很多环境变量的问题。

0、重置服务器

(重置前先备份一个快照),方便从零开始

Untitled.png

1、通过vscode,密码登录(暂时没用ssh免密,这个好像不能让多个电脑免密)

Untitled 1.png

如果重置后无法登录,把之前的用户文件夹下的.ssh文件夹清空,在重新连接一次(window的)

2、完成基础配置

  • 更新软件源(阿里云自带阿里代理)
  • 更新github代理(github代理先放着,暂时没有一劳永逸的方法,暂时先手动更改)
  • 安装git、docker、curl、jq
apt install git curl jq -y

# docker安装可看上一篇
sudo apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-comm

apt update && apt-get install ca-certificates curl gnupg lsb-release apt-transport-https software-properties-common

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] http://mirrors.aliyun.com/docker-ce/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

chmod a+r /etc/apt/keyrings/docker.gpg && apt-get update

apt-cache madison docker-ce  #查询存储库中可用的版本

apt-get -y install docker-ce=5:23.0.3-1~debian.11~bullseye # Docker守护进程

docker -v #检查安装版本

docker info #基本信息

Untitled 2.png

Untitled 3.png

3、安装fabric工具

网络好的可以用官方版本、不太好的就通过下载包来手动安装

可参考以下文章

基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例 - 掘金

先尝试官方的一键安装,一般会要很一段时间

这一段可以尝试改一下github代理

Untitled 4.png

Untitled 5.png

4、拉取部分镜像

docker pull hyperledger/fabric-tools:latest
docker pull hyperledger/fabric-peer:latest
docker pull hyperledger/fabric-orderer:latest
docker pull hyperledger/fabric-ccenv:latest
docker pull hyperledger/fabric-baseos:latest
docker pull hyperledger/fabric-ca:latest
这些镜像都是 Hyperledger Fabric 区块链平台的组件,它们分别提供不同的功能和服务:

1. **hyperledger/fabric-tools:2.4**:
这个镜像包含了 Hyperledger Fabric 区块链平台的工具集,可以用于执行各种与区块链相关的操作,例如创建通道、安装链码、查询区块链状态等。

2. **hyperledger/fabric-peer:2.4**:
这个镜像是 Hyperledger Fabric 区块链节点的一个组件,它实现了区块链网络中的对等节点(peer)功能。对等节点负责存储和维护账本、执行智能合约、交换区块等。

3. **hyperledger/fabric-orderer:2.4**:
这个镜像是 Hyperledger Fabric 区块链网络中的排序节点(orderer)组件。排序节点负责接收交易并将其排序,以确保所有的节点都按照相同的顺序处理交易。

4. **hyperledger/fabric-ccenv:2.4**:
这个镜像包含了 Hyperledger Fabric 区块链平台的链码开发环境,可以用于编译和运行链码。

5. **hyperledger/fabric-baseos:2.4**:
这个镜像提供了 Hyperledger Fabric 区块链平台的基础操作系统环境,用于运行各种 Fabric 组件。

6. **hyperledger/fabric-ca:1.5**:
这个镜像包含了 Hyperledger Fabric 的证书颁发机构(Certificate Authority,CA)组件,用于管理和颁发区块链网络中的证书,提供身份验证和授权服务。

这些镜像是 Hyperledger Fabric 区块链平台的关键组件,用于构建、部署和管理区块链网络。通过使用这些镜像,开发者可以轻松地搭建和运行自己的区块链网络,并开发区块链应用程序。

Untitled 6.png

5、运行测试官方demo

1、启动fabric网络

cd fabric-samples/test-network

./network.sh up
###
运行后的信息显示,该demo'leveldb' 数据库,以及来自 'cryptogen' 工具的加密。

使用 Docker 和 Docker Compose 启动了 Hyperledger Fabric 区块链网络,其中包括对等节点、排序节点、CLI 容器等。

以下是输出中涉及的关键信息:

1. **Cryptogen 生成证书:**
   使用 Cryptogen 工具生成了组织(Org1 和 Org2)以及排序节点(Orderer)的身份证书。

2. **生成 CCP 文件:**
   为 Org1 和 Org2 生成了用于连接到网络的 Connection Profile (CCP) 文件。

3. **Docker 启动容器:**
   使用 Docker 启动了四个容器:CLI、排序节点 (orderer.example.com)、Org1 对等节点 (peer0.org1.example.com) 和 Org2 对等节点 (peer0.org2.example.com)。

每个容器都包含一个唯一的标识符(CONTAINER ID),以及它们对应的镜像和启动命令。容器状态显示为 "Up",表示它们已经成功启动,并且正在运行中。

###

2、创建channel(通道)

channel是特定网络成员之间的私有通道,只能被属于该通道的组织使用,并且对网络的其他成员是不可见的。

个channel都有一个单独的区块链账本,属于该通道的组织可以让其下peer加入该通道,以让peer能够存储channel上的帐本并验证账本上的交易。

./network.sh createChannel -c testchannel
运行后的输出是在使用 Docker 和 Docker Compose 部署 Hyperledger Fabric 区块链网络时生成的。

1. **创建通道 ('testchannel'):**
   这个过程中,首先检查网络是否已经启动。如果没有启动,则会启动节点。然后使用 'leveldb' 作为数据库,创建一个名为 'testchannel' 的通道。如果网络已经启动,将显示 "Network Running Already"。

2. **生成通道创世区块 ('testchannel.block'):**
   使用 'configtxgen' 工具生成了一个名为 'testchannel.block' 的通道创世区块。这个区块用于初始化通道 'testchannel',并包含了通道的初始配置信息。

3. **加入组织的对等节点到通道:**
   接下来,组织 1 的对等节点(peer0.org1.example.com)和组织 2 的对等节点(peer0.org2.example.com)被加入到通道 'testchannel' 中。这样,这些对等节点就可以参与到通道中的交易和状态更新中。

4. **设置锚节点:**
   首先,为组织 1 设置了一个锚节点(peer0.org1.example.com),然后为组织 2 设置了一个锚节点(peer0.org2.example.com)。锚节点用于在区块链网络中传播通道配置更新。

3、部署智能合约

3.1 配置go的开发环境

准备使用go语言的demo,所以要先部署go的开发环境

可参考之前的文章

wget [https://golang.google.cn/dl/go1.21.7.linux-amd64.tar.gz](https://golang.google.cn/dl/go1.18.1.linux-amd64.tar.gz)

tar zxf go1.21.7.linux-amd64.tar.gz

mv go go1.21.7 #改个名字,方便后续版本更新

vim ~/.bashrc  #配置环境变量

GOROOT=/root/env/go1.21.7
export GOROOT
export PATH=$PATH:$GOROOT/bin

source ~/.bashrc

go version # 查看go版本信息;
go env # 查看go环境变量设置;

Untitled 7.png

Untitled 8.png

3.2 命令部署chaincode

部署链码时的终端必须是在go环境完成后开启的,不然环境变量不对

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

go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn,direct

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

Untitled 9.png

链码部署成功,装载进两个对等节点中

Untitled 10.png

4、进行合约交互

4.1 初始化chaincode

1、设置FABRIC_CFG_PATH变量,其下需包含core.yaml文件

echo "开始修改变量"
export FABRIC_CFG_PATH=/root/fabricLearn/fabric-samples/config

2、设置其它Org1组织的变量依赖
# Environment variables for Org1
# CORE_PEER_TLS_ROOTCERT_FILE和CORE_PEER_MSPCONFIGPATH环境变量指向Org1的organizations文件夹中的身份证书。
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"

#配置一下实验项目的跟路径,方便看
TESTROOT=/root/fabricLearn/fabric-samples/test-network

export CORE_PEER_TLS_ROOTCERT_FILE=${TESTROOT}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${TESTROOT}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
echo "修改变量结束"

3、初始化chaincode
# fabric好像不在环境,先用绝对路径来使用peer命令吧
# /root/fabricLearn/fabric-samples/bin/peer

/root/fabricLearn/fabric-samples/bin/peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C testchannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'

4.2 进行基本交互

# 查询账本资产列表
/root/fabricLearn/fabric-samples/bin/peer chaincode query -C testchannel -n basic -c '{"Args":["GetAllAssets"]}'

# 修改账本资产
/root/fabricLearn/fabric-samples/bin/peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C testchannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'

# 关闭网络
./network.sh down

# ./network.sh down 命令将停止并删除节点和链码容器、组织加密材料、删除之前运行的通道项目和docker卷,并从Docker Registry移除链码镜像。