1

区块链之旅--搭建一个Hyperledger Fabric联盟区块链环境

 2 years ago
source link: http://blog.linrty.com/2022/03/25/%E5%8C%BA%E5%9D%97%E9%93%BE%E4%B9%8B%E6%97%85--%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AAHyperledgerFabric%E8%81%94%E7%9B%9F%E5%8C%BA%E5%9D%97%E9%93%BE%E7%8E%AF%E5%A2%83/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
  • Linux操作系统,我用的是Ubuntu20.04

  • Docker 20.10.14

  • Docker-compose 1.25.0

  • Python 2.7.18

  • Go 1.14.2

以上都是我自己的版本,具体可自己选择搭配,仅供参考,网上这些环境的配置很多,就不细讲了,记得要配置好Ubuntu下Go的环境环境变量,GOROOT和GOPATH,我的GOPATH是/opt/gopath/

准备一个存放代码的文件夹

sudo mkdir $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger

clone源码

尽量用http吧,我用https报错,不报错的时候也下得很慢,http反而挺快的,不知道为什么

sudo git clone http://github.com/hyperledger/fabric.git

进入目录我们可以看到如下的文件结构

进入/script打开bootstrap.sh

对于这两个文件,下载的速度会特别的慢,可以自己试试在执行脚本时看看这个下载链接,然后挂梯子自己下载

然后在这个目录下直接执行脚本文件,注意带sudo,因为需要创建文件夹

sudo ./bootstrap.sh 
echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
download "${BINARY_FILE}" "https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"
if [ $? -eq 22 ]; then
echo
echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
echo
exit
fi

对于我的这几行对应的下载链接是这个

https://github.com/hyperledger/fabric/releases/download/v2.4.2/hyperledger-fabric-linux-amd64-2.4.2.tar.gz

下面那几行对应的下载链接是这个

https://github.com/hyperledger/fabric-ca/releases/download/v1.5.2/hyperledger-fabric-ca-linux-amd64-1.5.2.tar.gzhttps://github.com/hyperledger/fabric-ca/releases/download/v1.5.2/hyperledger-fabric-ca-linux-amd64-1.5.2.tar.gz

建议根据自己的版本来进行注释看看具体的链接是啥,操作不难

然后再进入bootstrap.sh文件内

local BINARY_FILE=$1
local URL=$2
echo "===> Downloading: " "${URL}"
curl -L --retry 5 --retry-delay 3 "${URL}" | tar xz || rc=$?
if [ -n "$rc" ]; then
echo "==> There was an error downloading the binary file."
return 22
else
echo "==> Done."
fi

将这些改为

echo "==> Done."

然后再执行一次脚本就会跳过这两个文件的下载直接下载脚本了

镜像下载完成

可以看到文件夹下多出了fabric-samples这个文件夹

注意,这个文件夹的生成位置和你执行脚本的位置有关

使用这个命令将我们电脑上下载的那两个文件解压后生成的bin文件夹和config文件夹下的内容粘贴到虚拟机内

sudo nautilus

如果出现要替换的文件就进行替换,因为这可能是我们刚刚试下载链接的时候下载了一点

这样我们就安装完成了

运行官方给出的测试案例

test-network是官方给我们提供的测试样例,先进入该目录

然后执行脚本,注意携带sudo

sudo ./network.sh up

可以看到有两个peer节点,一个order节点,有两个组

通过docker可以查看运行的节点

接下来我们新创建一个通道channel

sudo ./network.sh createChannel

通道的默认名称是mychannel

我们将示例中的基础示例中的Java链码示例放入通道中

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

-ccn 是链码(智能合约)的别称

-ccp 是链码的地址

如果没有安装Java环境需要安装一下,因为需要JDK来编译

20220331000810.png

接下来我们与网络进行交互

先设定一些环境变量,最好实在root环境下,因为可能里面有文件访问权限的限制,或者你把文件权限全部修改也行

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
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

然后你需要注意的是,有一个错误,就是在启动docker之前有没有清除网络状态,如果没有,可能会出现以下错误

20220331093519.png

这就是网络没清的后果,所以在运行前(./network.sh up)最好清一下

docker rm $(docker ps -qa)
docker network prune

之后我们初始化一下账本

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

20220331093919.png

接下来尝试查看所有账户

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

20220331094053.png

到此,网络环境已经搭建好了

接下来编写一个简单的Java Demo来和联盟链进行交互

我们需要自定义一个智能合约,所以需要重新运行

先关闭网络环境

./network.sh down
docker rm $(docker ps -qa)
docker network prune
./network.sh up

创建一个通道

配置以下环境变量

加入以下内容

export FABRIC_PATH=/opt/gopath/src/github.com/hyperledger/fabric/scripts/fabric-samples
export FABRIC_CFG_PATH=${FABRIC_PATH}/config/
export MSP_PATH=${FABRIC_PATH}/test-network/organizations
export CORE_PEER_TLS_ENABLED=true
export PATH=${FABRIC_PATH}/bin:$PATH

source

本文作者: linrty
本文链接: http://blog.linrty.com/2022/03/25/%E5%8C%BA%E5%9D%97%E9%93%BE%E4%B9%8B%E6%97%85--%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AAHyperledgerFabric%E8%81%94%E7%9B%9F%E5%8C%BA%E5%9D%97%E9%93%BE%E7%8E%AF%E5%A2%83/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK