参考学长的文章,重新把fabric和长安链过一遍
juejin.cn/user/104277…
fabric搭建
警告:建议Fabric所有实验过程皆在root权限下进行,否则在sudo权限切换的过程中会出现很多环境变量的问题。
0、重置服务器
(重置前先备份一个快照),方便从零开始
1、通过vscode,密码登录(暂时没用ssh免密,这个好像不能让多个电脑免密)
如果重置后无法登录,把之前的用户文件夹下的.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 #基本信息
3、安装fabric工具
网络好的可以用官方版本、不太好的就通过下载包来手动安装
可参考以下文章
基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例 - 掘金
先尝试官方的一键安装,一般会要很一段时间
这一段可以尝试改一下github代理
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 区块链平台的关键组件,用于构建、部署和管理区块链网络。通过使用这些镜像,开发者可以轻松地搭建和运行自己的区块链网络,并开发区块链应用程序。
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环境变量设置;
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
链码部署成功,装载进两个对等节点中
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移除链码镜像。