【Hyperledger Fabric 学习】安装和运行

HyperLedger Fabric官方文档

中文网址:https://hyperledger-fabric.readthedocs.io/zh_CN/latest
英文网址:https://hyperledger-fabric.readthedocs.io/en/latest
一般情况英文网址的内容更全面,版本也比中文新。

前置

环境:Linux
sudo apt-get install git安装git
sudo apt-get install curl安装curl
sudo apt-get -y install docker-compose安装docker
根据指引去安装Go和jq,Go足矣
Go安装

安装Fabric

创建一个文件夹xxx用于拉取文件
mkdir xxx
cd xxx
拉取相关文件
curl -sSLO https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh && chmod +x install-fabric.sh
安装
./install-fabric.sh docker samples
拉取二进制文件,版本2.2.1
./install-fabric.sh --fabric-version 2.2.1 binary

运行测试网络(test network)

进入文件夹
cd fabric-samples/test-network
下载二进制文件并添加到环境变量
curl -sSL https://bit.ly/2ysbOFE | bash -s
export PATH=$PWD/bin:$PATH
启动网络
./network.sh up
创建通道
./network.sh createChannel默认通道名为“mychannel”,可在后面加上自定义的通道名./network.sh createChannel -c 自定义通道名
部署智能合约
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
可以看出部署的是文件夹asset-transfer-basic/chaincode-go里的链码

与网络交互

当前目录为test-network
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/指向文件core.yaml

作为Org1的Peer CLI:
修改环境变量CORE_PEER_TLS_ROOTCERT_FILECORE_PEER_MSPCONFIGPATH指向Org1的加密材料(文件夹organizations)
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

调用智能合约初始化账本
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":[]}'

查询账本数据
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

更改账本
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"]}'

作为Org2的情况类似
更换为Org2的CLI
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051
查询
peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'

启动有证书颁发机构的网络

Fabric使用公钥基础设施(PKI)来验证所有网络参与者的操作。提交交易的每个节点、网络管理员和用户都需要有一个公共证书和私钥来验证他们的身份。这些身份需要有一个有效的信任根,确定证书是由网络成员组织颁发的。network.sh脚本在创建对等节点和排序节点之前创建部署和操作网络所需的所有加密材料。

creating Org1, Org2, and ordering service organization with crypto from 'cryptogen'

/Usr/fabric-samples/test-network/../bin/cryptogen

##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################

##########################################################
############ Create Org1 Identities ######################
##########################################################
+ cryptogen generate --config=./organizations/cryptogen/crypto-config-org1.yaml --output=organizations
org1.example.com
+ res=0
+ set +x
##########################################################
############ Create Org2 Identities ######################
##########################################################
+ cryptogen generate --config=./organizations/cryptogen/crypto-config-org2.yaml --output=organizations
org2.example.com
+ res=0
+ set +x
##########################################################
############ Create Orderer Org Identities ###############
##########################################################
+ cryptogen generate --config=./organizations/cryptogen/crypto-config-orderer.yaml --output=organizations
+ res=0
+ set +x

默认情况下,该脚本使用加密工具cryptogen创建证书和密钥。该工具用于开发和测试,可以快速为Fabric组织创建所需的加密材料,并具有有效的信任根。当您运行./network.sh时,您可以看到加密工具为Org1、Org2和Orderer Org创建证书和密钥。

但是,测试网络脚本还提供了使用证书颁发机构(Certificate authority, CAs)启动网络的选项。在生产网络中,每个组织运行一个CA(或多个中间CA),这些CA创建属于其组织的身份。由组织运行的CA创建的所有身份都共享相同的信任根。尽管这比使用cryptogen花费更多的时间,但是使用CAs生成测试网络可以介绍如何在生产中部署网络。部署CAs还允许您注册Fabric sdk的客户端身份,并为您的应用程序创建证书和私钥。
./network.sh up -ca

部署CA后,需要花时间检查。/network.sh脚本生成的日志。测试网络使用Fabric CA客户端向每个组织的CA注册节点和用户身份。脚本然后使用enroll命令为每个标识生成一个MSP文件夹。MSP文件夹包含每个身份的证书和私钥,并确定身份在操作CA的组织中的角色和成员资格。可以使用以下命令检查Org1 admin用户的MSP文件夹:
tree organizations/peerOrganizations/org1.example.com/users/[email protected]/

结果如下

organizations/peerOrganizations/org1.example.com/users/[email protected]/
└── msp
    ├── IssuerPublicKey
    ├── IssuerRevocationPublicKey
    ├── cacerts
    │   └── localhost-7054-ca-org1.pem
    ├── config.yaml
    ├── keystore
    │   └── 58e81e6f1ee8930df46841bf88c22a08ae53c1332319854608539ee78ed2fd65_sk
    ├── signcerts
    │   └── cert.pem
    └── user

您可以在signcerts文件夹中找到admin用户的证书cert.pem,在keystore文件夹中找到私钥。cryptogen和Fabric ca都在组织文件夹中为每个组织生成加密材料。在organizations/fabric-ca目录下的registerEnroll.sh脚本中可以找到用于设置网络的命令。要了解如何使用Fabric CA部署Fabric网络的更多信息,请访问Fabric CA操作指南
MSP

过程解析

  1. ./network.sh为两个peer组织和orderer组织创建证书和密钥。默认情况下,脚本使用位于organizations/cryptogen文件夹中的配置文件使用cryptogen工具。如果使用-ca标志创建证书颁发机构,脚本将使用Fabric CA服务器配置文件和位于organizations/ Fabric -ca文件夹中的registerEnroll.sh脚本。cryptogen和Fabric ca都在organizations文件夹中为所有三个组织创建加密材料和MSP文件夹。
  2. 一旦生成了组织加密材料,network.sh就可以启动网络的节点。该脚本使用docker- compose-test-net.yaml文件在docker文件夹中创建peer和排序节点。docker文件夹也包含docker- compose-e2e.yaml文件,它将网络的节点与三个Fabric ca放在一起。该文件用于Fabric SDK运行端到端测试。有关运行这些测试的详细信息,请参阅Node SDK repo。
  3. 如果使用了createchannel子命令,./network.sh运行scripts文件夹中的createchannel.sh脚本,使用提供的通道名称创建通道。该脚本使用configtxgen工具基于configtx/configtx.yaml文件中的TwoorgsApplicationGenesis通道配置文件创建通道生成块。创建通道之后,脚本使用peer命令行将peer.org1.example.compeer.org2.example.com加入到通道中,并使这两个Peer成为锚点Peer。
  4. 如果发出了deploycc命令,./network.sh运行deploycc.sh脚本在两个对等端安装asset-transfer-basic链码,然后在通道上定义链代码。一旦链码定义提交给通道,Peer命令行使用Init初始化链码,并调用链码来将初始数据放到分类账上。

猜你喜欢

转载自blog.csdn.net/qq_39681297/article/details/126012564