在windows上部署hyperledgerFabric超级账本(使用WSL而非虚拟机)

1. 前置软件下载

1.1 下载docker desktop

官网:Install Docker Desktop on Windows | Docker Docs

在这里插入图片描述

双击下载的.exe程序进行安装。

1.2 下载WSL2

在这里插入图片描述

管理员模式下打开 PowerShell 或 Windows 命令提示符,输入 wsl --install 命令。

wsl --install

此命令将启用运行 WSL 并安装 Linux 的 Ubuntu 发行版所需的功能。

在这里插入图片描述

设置Linux用户名和密码:安装好后会要求输入用户名与密码。然后重启计算机。

在这里插入图片描述

需要使用WSL时可以在开始菜单中打开:

在这里插入图片描述

建议使用发行版的首选包管理器定期更新和升级包。Windows 不会自动更新或升级 Linux 分发版。 大多数 Linux 用户往往倾向于自行控制此任务。

sudo apt update && sudo apt upgrade

将版本从WSL1升级到WSL2

查看 Linux 发行版是设置为 WSL 1 还是 WSL 2,使用命令 :

wsl -l -v

使用 wsl --install 命令安装的 Linux 默认设置为 WSL 2。

如果出现报错:‘‘wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。’’

在Windows中的C:Users<your_username>目录下创建一个.wslconfig文件,然后在文件中写入如下内容

[experimental]
autoMemoryReclaim=gradual  
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

然后在windows的命令行中用wsl --shutdown关闭WSL,之后再重新打开WSL,提示就消失了。

1.3 WSL相关介绍

在 17063 之前,WSL 只能访问 Windows 环境变量 PATH。 17063 之后,WSL 和 Windows 共享一个特殊环境变量 WSLENV(为了桥接 Windows 和 WSL 上运行的 Linux 分发版而创建),相关链接。

WSL 可以使用 [tool-name].exe 直接从 WSL 命令行运行 Windows 工具。Windows 工具必须包含文件扩展名,匹配文件大小写,并且可执行。比如你可以使用windows中的记事本来编辑WSL中的一个文本文件。

在这里插入图片描述

若要在 Windows 文件资源管理器中打开 WSL 项目,请输入:(注意末尾有句点)

explorer.exe .

或者直接打开文件浏览器,你会发现多了一个Linux选项,直接点击也行。

在这里插入图片描述

2. 配置Docker Desktop

打开Docker Desktop然后点击设置,选择 Resources 再选择 WSL Integration,确保 enable integration 选项被打开。然后选择你的WSL2 Linux 发行版。(如果你没看到的话,说明你的是WSL1,应该升级为WSL2),点击 Apply & Restart 。

在这里插入图片描述

3. 安装Fabric和Fabric Samples

(博主在这个过程中开启了加速器,设置了域名全代和全局代理。如果你再安装过程中出现error,可能是因为网络的原因,可以去查询配置镜像源的相关教程,或者你有加速器的话你也可以直接用加速器)

创建一个工作区。对于Go项目,推荐以下的工作路径。

mkdir -p $HOME/go/src/github.com/<your_github_userid>

进入该路径

cd $HOME/go/src/github.com/<your_github_userid>

获取安装脚本install-fabric.sh

curl -sSLO https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh && chmod +x install-fabric.sh

-h选项来运行刚刚下载的安装脚本,可以看到一些信息。比如fabric和fabric-ca的版本。

./install-fabric.sh -h

在这里插入图片描述

获取 Docker 容器并克隆Samples仓库(这个过程会比较久,要下载的东西有点多,期间会看到connection denied之类的,可以多试几次):

./install-fabric.sh docker samples binary

可以在工作目录下看到刚下好的文件。

在这里插入图片描述

4. 使用Fabric Sample中的测试网络

通过使用测试网络来验证是否安装成功:

4.1 启动网络

测试网络有两个联盟成员,Org1和Org2。 该网络还包括一个维护网络排序服务的排序组织。

网络所在路径为:/fabric-samples/test-network

为了确保测试网络正常运行,还需要安装一些必要的软件

安装jq:

sudo apt install jq

**安装go/java/javascript:**这取决于你想使用什么语言来进行开发。这里我们安装go。

sudo apt-get install golang

在这里插入图片描述

进入路径

cd fabric-samples/test-network

启动网络:

./network.sh up

在这里插入图片描述

测试组成部分:

docker ps -a

在这里插入图片描述

你也可以在docker desktop中看到所有的docker容器。

在这里插入图片描述

4.2 创建一个通道

创建用于在Org1和Org2之间进行交易的Fabric通道。

**创建一个默认名称为“ mychannel”的通道。**执行成功,会显示Channel 'mychannel' joined

./network.sh createChannel

在这里插入图片描述

4.3 在通道启用一个链码

创建通道后,可以开始使用智能合约与通道账本交互。

使用以下命令在通道上启动链码

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

如果第一次部署一套链码,脚本将安装链码的依赖项。使用语言便签 -ccl,用于指定安装go、 Java 或 javascript 版本的链码依赖,默认安装的是go的链码。

在这里插入图片描述

4.4 与网络交互

使用peer CLI与网络进行交互。 peer CLI允许调用已部署的智能合约,更新通道,或安装和部署新的智能合约。

将二进制文件添加环境变量:

export PATH=${PWD}/../bin:$PATH

fabric-samples代码库中的FABRIC_CFG_PATH设置为指向其中的core.yaml文件

export FABRIC_CFG_PATH=$PWD/../config/

设置环境变量,以允许作为Org1操作peer CLI:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

**初始化一些资产:**成功会输出:Chaincode invoke successful. result: status:200

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 mychannel -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":[]}'

在这里插入图片描述

现在可以用 CLI 工具来查询账本。以下指令获取添加到通道账本的资产列表:

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

在这里插入图片描述

**通过调用 asset-transfer (basic) 链码改变账本上的资产所有者:**需要使用 --peerAddresses 标签来指向 peer0.org1.example.compeer0.org2.example.com。因为网络的 TLS 被开启,指令也需要用 --tlsRootCertFiles 标签指向每个 peer 节点的 TLS 证书。

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 mychannel -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"]}'

在这里插入图片描述

4.5 关闭网络

关闭网路:

./network.sh down

在这里插入图片描述

上面的步骤都执行成功的话,说明Fabric使用起来大致没问题,安装成功了。